@hadoku/themes 0.0.0-stage → 5.12.16

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 (64) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSE-lucide +43 -0
  3. package/README.md +433 -2
  4. package/THEME_USAGE_GUIDE.md +308 -0
  5. package/dist/HadokuThemeRoot.d.ts +53 -0
  6. package/dist/HadokuThemeRoot.js +66 -0
  7. package/dist/ThemeIcons.d.ts +31 -0
  8. package/dist/ThemeIcons.js +91 -0
  9. package/dist/effects.d.ts +25 -0
  10. package/dist/effects.js +25 -0
  11. package/dist/icons/Icon.d.ts +36 -0
  12. package/dist/icons/Icon.js +89 -0
  13. package/dist/icons/index.d.ts +61 -0
  14. package/dist/icons/index.js +87 -0
  15. package/dist/icons/registry.generated.d.ts +158 -0
  16. package/dist/icons/registry.generated.js +446 -0
  17. package/dist/index.d.ts +82 -0
  18. package/dist/index.js +169 -0
  19. package/dist/metadata.d.ts +35 -0
  20. package/dist/metadata.js +108 -0
  21. package/dist/platform/index.d.ts +94 -0
  22. package/dist/platform/index.js +149 -0
  23. package/dist/platform/usePlatform.d.ts +29 -0
  24. package/dist/platform/usePlatform.js +65 -0
  25. package/dist/prefsApiBase.d.ts +37 -0
  26. package/dist/prefsApiBase.js +40 -0
  27. package/dist/theme-types.d.ts +34 -0
  28. package/dist/theme-types.js +1 -0
  29. package/dist/themeContext.d.ts +62 -0
  30. package/dist/themeContext.js +70 -0
  31. package/dist/themePrefs.d.ts +29 -0
  32. package/dist/themePrefs.js +48 -0
  33. package/dist/useRefElement.d.ts +19 -0
  34. package/dist/useRefElement.js +52 -0
  35. package/dist/useTheme.d.ts +46 -0
  36. package/dist/useTheme.js +216 -0
  37. package/package.json +83 -4
  38. package/scripts/audit-tokens.mjs +126 -0
  39. package/scripts/check-contrast.mjs +24 -0
  40. package/scripts/check-docs.mjs +53 -0
  41. package/scripts/check-icons.mjs +473 -0
  42. package/scripts/check-usage.mjs +297 -0
  43. package/scripts/codemod-icons.mjs +396 -0
  44. package/scripts/generate-icons.mjs +199 -0
  45. package/scripts/generate-preview.mjs +374 -0
  46. package/scripts/generate-tailwind-colors.mjs +109 -0
  47. package/scripts/lib/color.mjs +184 -0
  48. package/scripts/lib/contract.d.mts +58 -0
  49. package/scripts/lib/contract.mjs +348 -0
  50. package/scripts/lib/derive.mjs +324 -0
  51. package/scripts/lib/icon-registry.mjs +92 -0
  52. package/scripts/lib/parse-themes.mjs +19 -0
  53. package/scripts/lib/tokens.mjs +188 -0
  54. package/scripts/normalize-tokens.mjs +161 -0
  55. package/src/advanced.css +218 -0
  56. package/src/icons/Icon.tsx +151 -0
  57. package/src/icons/emoji-map.json +202 -0
  58. package/src/icons/index.ts +151 -0
  59. package/src/icons/registry.generated.ts +455 -0
  60. package/src/icons/sources.json +150 -0
  61. package/src/icons.css +145 -0
  62. package/src/style.css +1421 -0
  63. package/src/tailwind-colors.css +88 -0
  64. package/src/tailwind-integration.css +49 -0
package/src/style.css ADDED
@@ -0,0 +1,1421 @@
1
+ /**
2
+ * Hadoku Theme System
3
+ * Beautiful color themes using CSS custom properties
4
+ *
5
+ * Usage: Set data-theme attribute on html element or container
6
+ * Example: <html data-theme="dark">
7
+ *
8
+ * Themes: light (default), dark, strawberry-light, strawberry-dark,
9
+ * ocean-light, ocean-dark, cyberpunk-light, cyberpunk-dark,
10
+ * coffee-light, coffee-dark, lavender-light, lavender-dark,
11
+ * nature-light, nature-dark, pink-light, pink-dark,
12
+ * izakaya-light, izakaya-dark
13
+ *
14
+ * TAILWIND v4 COMPATIBILITY
15
+ * =========================
16
+ * Variables are namespaced with --hdk-* prefix to avoid collisions with
17
+ * Tailwind v4's internal CSS variables (--spacing-*, --radius-*, etc.).
18
+ *
19
+ * Variable Namespaces:
20
+ * --hdk-space-* : Spacing (xs, sm, md, lg, xl, 2xl, 3xl, 4xl, 5xl)
21
+ * --hdk-text-* : Font sizes (xs, sm, md, base, lg)
22
+ * --hdk-radius-* : Border radius (sm, [default], lg)
23
+ * --hdk-shadow-* : Shadows (sm, md, lg, focus, focus-sm, focus-alt)
24
+ * --color-* : Colors (no conflict with Tailwind, kept as-is)
25
+ *
26
+ * CONTRAST TEXT VARIABLES (--color-on-*)
27
+ * ======================================
28
+ * The --color-on-{role} variables define the text color for use ON TOP OF
29
+ * that role's background color (e.g., text on a primary-colored button).
30
+ *
31
+ * --color-on-primary : Text color on --color-primary surfaces
32
+ * --color-on-success : Text color on --color-success surfaces
33
+ * --color-on-warning : Text color on --color-warning surfaces
34
+ * --color-on-danger : Text color on --color-danger surfaces
35
+ * --color-on-neutral : Text color on --color-neutral surfaces
36
+ *
37
+ * IMPORTANT: These are computed from the LUMINANCE OF THE COLOR, not the
38
+ * theme mode. A bright yellow in dark mode still needs black text.
39
+ * Rule: if relative luminance > 0.179, use black; otherwise use white.
40
+ *
41
+ * SEMANTIC COLOR CONVENTION
42
+ * =========================
43
+ * The names "success", "danger", "warning" describe semantic ROLES in the
44
+ * UI — buttons, badges, feedback indicators. However, themes are free to
45
+ * assign ANY visually distinct colors to these roles. For example:
46
+ * - Ocean theme: success=orange, danger=pink
47
+ * - Coffee theme: success=gold, danger=brown
48
+ * - Cyberpunk: success=neon green, danger=magenta
49
+ *
50
+ * This is intentional — themes express personality through color choice.
51
+ * The names indicate WHERE colors are used (complete button, delete button,
52
+ * status badges), not what hue they must be. The only hard requirement is
53
+ * that success, danger, and primary are visually distinct from each other.
54
+ *
55
+ * For Tailwind integration, see tailwind-integration.css or docs.
56
+ */
57
+
58
+ /* --advanced-gradient is registered as non-inheriting so a parent matching
59
+ [data-theme='light'] (e.g. <html> set by the page-load init script) can't
60
+ bleed its gradient into a descendant on a different theme. Without this,
61
+ a container nested inside <html data-theme='light'> with its own
62
+ data-theme='coffee-light' inherits the light gradient via CSS variable
63
+ inheritance — which is what bit us in production. */
64
+ @property --advanced-gradient {
65
+ syntax: '*';
66
+ inherits: false;
67
+ }
68
+
69
+ /* Every theme block below declares `color-scheme`, so a consumer never has to
70
+ know which theme names are light and which are dark. Six child apps used to
71
+ each carry a hand-written list of theme names for exactly this, and every
72
+ one of them had gone stale — all six were missing izakaya, hadoku-task was
73
+ missing nature too, so those themes got no color-scheme at all and their
74
+ scrollbars and form controls rendered for the wrong mode. `dark only` on the
75
+ dark themes is the Dark Reader hint: it says the surface is already dark,
76
+ do not re-invert it. */
77
+
78
+ /* ===== LIGHT THEME (Default) ===== */
79
+ :root,
80
+ [data-theme='light'] {
81
+ color-scheme: light;
82
+ /* Primary */
83
+ --color-primary: #2563eb;
84
+ --color-primary-dark: #1d4ed8;
85
+ --color-primary-bg: #eff6ff;
86
+ --color-primary-hover: rgba(37, 99, 235, 0.06);
87
+ --color-on-primary: white;
88
+ --color-on-primary-bg: #2563eb;
89
+
90
+ /* Success */
91
+ --color-success: #0ea5e9;
92
+ --color-success-dark: #0284c7;
93
+ --color-success-bg: rgba(14, 165, 233, 0.1);
94
+ --color-success-hover: rgba(14, 165, 233, 0.06);
95
+ --color-on-success: black;
96
+ --color-on-success-bg: #0067a7;
97
+
98
+ /* Warning */
99
+ --color-warning: #f59e0b;
100
+ --color-warning-dark: #ce7a00;
101
+ --color-warning-bg: rgba(245, 158, 11, 0.1);
102
+ --color-warning-hover: rgba(245, 158, 11, 0.06);
103
+ --color-on-warning: black;
104
+ --color-on-warning-bg: #9e4d00;
105
+
106
+ /* Danger */
107
+ --color-danger: #f97316;
108
+ --color-danger-dark: #ea580c;
109
+ --color-danger-bg: #ffedd5;
110
+ --color-danger-hover: rgba(249, 115, 22, 0.06);
111
+ --color-on-danger: black;
112
+ --color-on-danger-bg: #c13e00;
113
+
114
+ /* Neutral */
115
+ --color-neutral: #637389;
116
+ --color-neutral-dark: #435267;
117
+ --color-neutral-bg: #e2e8f0;
118
+ --color-neutral-hover: rgba(100, 116, 139, 0.06);
119
+ --color-on-neutral: white;
120
+ --color-on-neutral-bg: #58677d;
121
+
122
+ /* Text */
123
+ --color-text: #0f172a;
124
+ --color-text-secondary: #475569;
125
+ --color-text-tertiary: #64748b;
126
+ --color-text-muted: #94a3b8;
127
+
128
+ /* Borders */
129
+ --color-border: #cdd4db;
130
+ --color-border-light: #dfe5ed;
131
+
132
+ /* Backgrounds */
133
+ --color-bg: #e7eef5;
134
+ --color-bg-card: #ffffff;
135
+ --color-bg-alt: #e7eef5;
136
+ --color-bg-hover: #e2e9f0;
137
+ --color-bg-overlay: rgba(15, 23, 42, 0.5);
138
+
139
+ /* Spacing (namespaced to avoid Tailwind v4 collision with max-w-*, etc.) */
140
+ --hdk-space-xs: 2px;
141
+ --hdk-space-sm: 4px;
142
+ --hdk-space-md: 8px;
143
+ --hdk-space-lg: 12px;
144
+ --hdk-space-xl: 16px;
145
+ --hdk-space-2xl: 20px;
146
+ --hdk-space-3xl: 24px;
147
+ --hdk-space-4xl: 40px;
148
+ --hdk-space-5xl: 60px;
149
+
150
+ /* Typography (namespaced for Tailwind v4 compatibility) */
151
+ --font-family:
152
+ -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
153
+ --hdk-text-xs: 12px;
154
+ --hdk-text-sm: 14px;
155
+ --hdk-text-md: 15px;
156
+ --hdk-text-base: 16px;
157
+ --hdk-text-lg: 24px;
158
+
159
+ --font-weight-normal: 400;
160
+ --font-weight-semibold: 500;
161
+ --font-weight-bold: 600;
162
+
163
+ --line-height-normal: 1.4;
164
+ --line-height-relaxed: 1.5;
165
+
166
+ /* Layout (namespaced for Tailwind v4 compatibility) */
167
+ --hdk-radius-sm: 4px;
168
+ --hdk-radius: 6px;
169
+ --hdk-radius-lg: 8px;
170
+
171
+ /* Shadows (namespaced for Tailwind v4 compatibility) */
172
+ --hdk-shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.04);
173
+ --hdk-shadow-md: 0 2px 4px rgba(15, 23, 42, 0.08);
174
+ --hdk-shadow-lg: 0 4px 12px rgba(15, 23, 42, 0.15);
175
+ --hdk-shadow-focus: 0 0 0 3px rgba(37, 99, 235, 0.2);
176
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(37, 99, 235, 0.2);
177
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(37, 99, 235, 0.1);
178
+
179
+ /* Transitions */
180
+ --transition-fast: 0.15s ease;
181
+ --transition-smooth: 0.2s ease;
182
+ }
183
+
184
+ /* ===== LIGHT THEME — advanced visual contract =====
185
+ Scoped to [data-theme='light'] only (NOT :root) so the gradient
186
+ doesn't leak into other themes that don't override it. Renders
187
+ only when data-theme-mode='advanced' (via @wolffm/themes/advanced.css). */
188
+ [data-theme='light'] {
189
+ --advanced-stop-1-l: 0.82;
190
+ --advanced-stop-1-c: 0.18;
191
+ --advanced-stop-1-h: 55;
192
+ --advanced-stop-2-l: 0.78;
193
+ --advanced-stop-2-c: 0.2;
194
+ --advanced-stop-2-h: 40;
195
+ --advanced-stop-3-l: 0.72;
196
+ --advanced-stop-3-c: 0.22;
197
+ --advanced-stop-3-h: 25;
198
+ --advanced-stop-4-l: 0.7;
199
+ --advanced-stop-4-c: 0.18;
200
+ --advanced-stop-4-h: 10;
201
+ --advanced-stop-5-l: 0.72;
202
+ --advanced-stop-5-c: 0.16;
203
+ --advanced-stop-5-h: 355;
204
+ --advanced-stop-6-l: 0.68;
205
+ --advanced-stop-6-c: 0.14;
206
+ --advanced-stop-6-h: 190;
207
+ --advanced-stop-7-l: 0.6;
208
+ --advanced-stop-7-c: 0.16;
209
+ --advanced-stop-7-h: 200;
210
+ --advanced-stop-8-l: 0.5;
211
+ --advanced-stop-8-c: 0.18;
212
+ --advanced-stop-8-h: 210;
213
+ --advanced-gradient: linear-gradient(
214
+ 135deg,
215
+ oklch(var(--advanced-stop-1-l) var(--advanced-stop-1-c) var(--advanced-stop-1-h)) 0%,
216
+ oklch(var(--advanced-stop-2-l) var(--advanced-stop-2-c) var(--advanced-stop-2-h)) 15%,
217
+ oklch(var(--advanced-stop-3-l) var(--advanced-stop-3-c) var(--advanced-stop-3-h)) 30%,
218
+ oklch(var(--advanced-stop-4-l) var(--advanced-stop-4-c) var(--advanced-stop-4-h)) 45%,
219
+ oklch(var(--advanced-stop-5-l) var(--advanced-stop-5-c) var(--advanced-stop-5-h)) 55%,
220
+ oklch(var(--advanced-stop-6-l) var(--advanced-stop-6-c) var(--advanced-stop-6-h)) 70%,
221
+ oklch(var(--advanced-stop-7-l) var(--advanced-stop-7-c) var(--advanced-stop-7-h)) 85%,
222
+ oklch(var(--advanced-stop-8-l) var(--advanced-stop-8-c) var(--advanced-stop-8-h)) 100%
223
+ );
224
+ }
225
+
226
+ /* ===== DARK THEME ===== */
227
+ [data-theme='dark'] {
228
+ color-scheme: dark only;
229
+ /* Primary */
230
+ --color-primary: #b793ff;
231
+ --color-primary-dark: #a17de7;
232
+ --color-primary-bg: rgba(183, 147, 255, 0.16);
233
+ --color-primary-hover: rgba(183, 147, 255, 0.12);
234
+ --color-on-primary: black;
235
+ --color-on-primary-bg: #b793ff;
236
+
237
+ /* Success */
238
+ --color-success: #fcde3d;
239
+ --color-success-dark: #e5c70e;
240
+ --color-success-bg: rgba(252, 222, 61, 0.15);
241
+ --color-success-hover: rgba(252, 222, 61, 0.1);
242
+ --color-on-success: black;
243
+ --color-on-success-bg: #fcde3d;
244
+
245
+ /* Warning */
246
+ --color-warning: #ffb848;
247
+ --color-warning-dark: #e7a22b;
248
+ --color-warning-bg: rgba(255, 184, 72, 0.15);
249
+ --color-warning-hover: rgba(255, 184, 72, 0.1);
250
+ --color-on-warning: black;
251
+ --color-on-warning-bg: #ffb848;
252
+
253
+ /* Danger */
254
+ --color-danger: #f46a82;
255
+ --color-danger-dark: #db536d;
256
+ --color-danger-bg: rgba(244, 106, 130, 0.15);
257
+ --color-danger-hover: rgba(244, 106, 130, 0.1);
258
+ --color-on-danger: black;
259
+ --color-on-danger-bg: #fb7088;
260
+
261
+ /* Neutral */
262
+ --color-neutral: #9d9ea6;
263
+ --color-neutral-dark: #888991;
264
+ --color-neutral-bg: #2f3038;
265
+ --color-neutral-hover: rgba(157, 158, 166, 0.1);
266
+ --color-on-neutral: black;
267
+ --color-on-neutral-bg: #9d9ea6;
268
+
269
+ /* Text */
270
+ --color-text: #f4f2f9;
271
+ --color-text-secondary: #dcd9e3;
272
+ --color-text-tertiary: #c0bbcb;
273
+ --color-text-muted: #948f9e;
274
+
275
+ /* Borders */
276
+ --color-border: #3c3d40;
277
+ --color-border-light: #525256;
278
+
279
+ /* Backgrounds */
280
+ --color-bg: #151618;
281
+ --color-bg-card: #222325;
282
+ --color-bg-alt: #101013;
283
+ --color-bg-hover: #2c2c30;
284
+ --color-bg-overlay: rgba(0, 0, 0, 0.72);
285
+
286
+ --hdk-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
287
+ --hdk-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.5);
288
+ --hdk-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.7);
289
+ --hdk-shadow-focus: 0 0 0 3px rgba(183, 147, 255, 0.3);
290
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(183, 147, 255, 0.3);
291
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(183, 147, 255, 0.2);
292
+ }
293
+
294
+ /* ===== STRAWBERRY LIGHT THEME ===== */
295
+ [data-theme='strawberry-light'] {
296
+ color-scheme: light;
297
+ /* Primary */
298
+ --color-primary: #ff6b9d;
299
+ --color-primary-dark: #ff477a;
300
+ --color-primary-bg: #fff5f8;
301
+ --color-primary-hover: rgba(255, 107, 157, 0.1);
302
+ --color-on-primary: black;
303
+ --color-on-primary-bg: #c6356d;
304
+
305
+ /* Success */
306
+ --color-success: #22c55e;
307
+ --color-success-dark: #16a34a;
308
+ --color-success-bg: rgba(34, 197, 94, 0.1);
309
+ --color-success-hover: rgba(34, 197, 94, 0.06);
310
+ --color-on-success: black;
311
+ --color-on-success-bg: #006d00;
312
+
313
+ /* Warning */
314
+ --color-warning: #f59e0b;
315
+ --color-warning-dark: #ce7a00;
316
+ --color-warning-bg: rgba(245, 158, 11, 0.1);
317
+ --color-warning-hover: rgba(245, 158, 11, 0.06);
318
+ --color-on-warning: black;
319
+ --color-on-warning-bg: #984700;
320
+
321
+ /* Danger */
322
+ --color-danger: #ec4899;
323
+ --color-danger-dark: #db2777;
324
+ --color-danger-bg: #ffe4e9;
325
+ --color-danger-hover: rgba(236, 72, 153, 0.06);
326
+ --color-on-danger: black;
327
+ --color-on-danger-bg: #c51a78;
328
+
329
+ /* Neutral */
330
+ --color-neutral: #94a3b8;
331
+ --color-neutral-dark: #728094;
332
+ --color-neutral-bg: #fdd5e0;
333
+ --color-neutral-hover: rgba(148, 163, 184, 0.06);
334
+ --color-on-neutral: black;
335
+ --color-on-neutral-bg: #546275;
336
+
337
+ /* Text */
338
+ --color-text: #1f1c1e;
339
+ --color-text-secondary: #6b5a5e;
340
+ --color-text-tertiary: #a78b92;
341
+ --color-text-muted: #c4a4ab;
342
+
343
+ /* Borders */
344
+ --color-border: #f3becf;
345
+ --color-border-light: #f6d7e0;
346
+
347
+ /* Backgrounds */
348
+ --color-bg: #f0e6e9;
349
+ --color-bg-card: #fff9fc;
350
+ --color-bg-alt: #ecdde1;
351
+ --color-bg-hover: #eccdd6;
352
+ --color-bg-overlay: rgba(255, 107, 157, 0.3);
353
+
354
+ --hdk-shadow-sm: 0 1px 2px rgba(255, 107, 157, 0.08);
355
+ --hdk-shadow-md: 0 2px 4px rgba(255, 107, 157, 0.12);
356
+ --hdk-shadow-lg: 0 8px 24px rgba(255, 107, 157, 0.2);
357
+ --hdk-shadow-focus: 0 0 0 3px rgba(255, 107, 157, 0.25);
358
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(255, 107, 157, 0.25);
359
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(255, 107, 157, 0.15);
360
+ }
361
+
362
+ /* ===== STRAWBERRY DARK THEME ===== */
363
+ [data-theme='strawberry-dark'] {
364
+ color-scheme: dark only;
365
+ /* Primary */
366
+ --color-primary: #f6526f;
367
+ --color-primary-dark: #dd395b;
368
+ --color-primary-bg: rgba(246, 82, 111, 0.16);
369
+ --color-primary-hover: rgba(246, 82, 111, 0.12);
370
+ --color-on-primary: black;
371
+ --color-on-primary-bg: #ff6781;
372
+
373
+ /* Success */
374
+ --color-success: #6fda75;
375
+ --color-success-dark: #57c35f;
376
+ --color-success-bg: rgba(111, 218, 117, 0.15);
377
+ --color-success-hover: rgba(111, 218, 117, 0.1);
378
+ --color-on-success: black;
379
+ --color-on-success-bg: #6fda75;
380
+
381
+ /* Warning */
382
+ --color-warning: #fdbe45;
383
+ --color-warning-dark: #e5a725;
384
+ --color-warning-bg: rgba(253, 190, 69, 0.15);
385
+ --color-warning-hover: rgba(253, 190, 69, 0.1);
386
+ --color-on-warning: black;
387
+ --color-on-warning-bg: #fdbe45;
388
+
389
+ /* Danger */
390
+ --color-danger: #f2823b;
391
+ --color-danger-dark: #da6c1f;
392
+ --color-danger-bg: rgba(242, 130, 59, 0.15);
393
+ --color-danger-hover: rgba(242, 130, 59, 0.1);
394
+ --color-on-danger: black;
395
+ --color-on-danger-bg: #f2823b;
396
+
397
+ /* Neutral */
398
+ --color-neutral: #889e94;
399
+ --color-neutral-dark: #73897f;
400
+ --color-neutral-bg: #20362c;
401
+ --color-neutral-hover: rgba(136, 158, 148, 0.1);
402
+ --color-on-neutral: black;
403
+ --color-on-neutral-bg: #8ba197;
404
+
405
+ /* Text */
406
+ --color-text: #ffefef;
407
+ --color-text-secondary: #edd4d6;
408
+ --color-text-tertiary: #dbb2b7;
409
+ --color-text-muted: #ab888c;
410
+
411
+ /* Borders */
412
+ --color-border: #2f5838;
413
+ --color-border-light: #3f704a;
414
+
415
+ /* Backgrounds */
416
+ --color-bg: #0a1a13;
417
+ --color-bg-card: #16271f;
418
+ --color-bg-alt: #05140e;
419
+ --color-bg-hover: #1e3129;
420
+ --color-bg-overlay: rgba(0, 0, 0, 0.72);
421
+
422
+ --hdk-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
423
+ --hdk-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.5);
424
+ --hdk-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.7);
425
+ --hdk-shadow-focus: 0 0 0 3px rgba(246, 82, 111, 0.3);
426
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(246, 82, 111, 0.3);
427
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(246, 82, 111, 0.2);
428
+ }
429
+
430
+ /* ===== OCEAN LIGHT THEME ===== */
431
+ [data-theme='ocean-light'] {
432
+ color-scheme: light;
433
+ /* Primary */
434
+ --color-primary: #06b6d4;
435
+ --color-primary-dark: #0891b2;
436
+ --color-primary-bg: #ecfeff;
437
+ --color-primary-hover: rgba(6, 182, 212, 0.08);
438
+ --color-on-primary: black;
439
+ --color-on-primary-bg: #007b97;
440
+
441
+ /* Success */
442
+ --color-success: #f97316;
443
+ --color-success-dark: #ea580c;
444
+ --color-success-bg: rgba(249, 115, 22, 0.1);
445
+ --color-success-hover: rgba(249, 115, 22, 0.06);
446
+ --color-on-success: black;
447
+ --color-on-success-bg: #af2c00;
448
+
449
+ /* Warning */
450
+ --color-warning: #eab308;
451
+ --color-warning-dark: #c48e00;
452
+ --color-warning-bg: rgba(234, 179, 8, 0.1);
453
+ --color-warning-hover: rgba(234, 179, 8, 0.06);
454
+ --color-on-warning: black;
455
+ --color-on-warning-bg: #8a5600;
456
+
457
+ /* Danger */
458
+ --color-danger: #ec4899;
459
+ --color-danger-dark: #db2777;
460
+ --color-danger-bg: #fce7f3;
461
+ --color-danger-hover: rgba(236, 72, 153, 0.06);
462
+ --color-on-danger: black;
463
+ --color-on-danger-bg: #c51a78;
464
+
465
+ /* Neutral */
466
+ --color-neutral: #637389;
467
+ --color-neutral-dark: #435267;
468
+ --color-neutral-bg: #e0f2fe;
469
+ --color-neutral-hover: rgba(100, 116, 139, 0.06);
470
+ --color-on-neutral: white;
471
+ --color-on-neutral-bg: #5b6a80;
472
+
473
+ /* Text */
474
+ --color-text: #0c4a6e;
475
+ --color-text-secondary: #075985;
476
+ --color-text-tertiary: #0ea5e9;
477
+ --color-text-muted: #38bdf8;
478
+
479
+ /* Borders */
480
+ --color-border: #95e2eb;
481
+ --color-border-light: #c4eef2;
482
+
483
+ /* Backgrounds */
484
+ --color-bg: #e6eff5;
485
+ --color-bg-card: #ffffff;
486
+ --color-bg-alt: #d6e8f4;
487
+ --color-bg-hover: #c5f0f4;
488
+ --color-bg-overlay: rgba(8, 47, 73, 0.3);
489
+
490
+ --hdk-shadow-sm: 0 1px 2px rgba(6, 182, 212, 0.08);
491
+ --hdk-shadow-md: 0 2px 4px rgba(6, 182, 212, 0.12);
492
+ --hdk-shadow-lg: 0 8px 24px rgba(6, 182, 212, 0.2);
493
+ --hdk-shadow-focus: 0 0 0 3px rgba(6, 182, 212, 0.25);
494
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(6, 182, 212, 0.25);
495
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(6, 182, 212, 0.15);
496
+ }
497
+
498
+ /* ===== OCEAN DARK THEME ===== */
499
+ [data-theme='ocean-dark'] {
500
+ color-scheme: dark only;
501
+ /* Primary */
502
+ --color-primary: #06b6d4;
503
+ --color-primary-dark: #0891b2;
504
+ --color-primary-bg: #0c4a6e;
505
+ --color-primary-hover: rgba(6, 182, 212, 0.15);
506
+ --color-on-primary: black;
507
+ --color-on-primary-bg: #30c6e5;
508
+
509
+ /* Success */
510
+ --color-success: #f97316;
511
+ --color-success-dark: #ea580c;
512
+ --color-success-bg: rgba(249, 115, 22, 0.15);
513
+ --color-success-hover: rgba(249, 115, 22, 0.1);
514
+ --color-on-success: black;
515
+ --color-on-success-bg: #ffb568;
516
+
517
+ /* Warning */
518
+ --color-warning: #fbbf24;
519
+ --color-warning-dark: #d59a00;
520
+ --color-warning-bg: rgba(251, 191, 36, 0.15);
521
+ --color-warning-hover: rgba(251, 191, 36, 0.1);
522
+ --color-on-warning: black;
523
+ --color-on-warning-bg: #ffc935;
524
+
525
+ /* Danger */
526
+ --color-danger: #ec4899;
527
+ --color-danger-dark: #db2777;
528
+ --color-danger-bg: #500724;
529
+ --color-danger-hover: rgba(236, 72, 153, 0.1);
530
+ --color-on-danger: black;
531
+ --color-on-danger-bg: #f34f9f;
532
+
533
+ /* Neutral */
534
+ --color-neutral: #637389;
535
+ --color-neutral-dark: #435267;
536
+ --color-neutral-bg: #1e3a52;
537
+ --color-neutral-hover: rgba(100, 116, 139, 0.1);
538
+ --color-on-neutral: white;
539
+ --color-on-neutral-bg: #95a6be;
540
+
541
+ /* Text */
542
+ --color-text: #e0f2fe;
543
+ --color-text-secondary: #bae6fd;
544
+ --color-text-tertiary: #7dd3fc;
545
+ --color-text-muted: #0ea5e9;
546
+
547
+ /* Borders */
548
+ --color-border: #34697f;
549
+ --color-border-light: #0e7490;
550
+
551
+ /* Backgrounds */
552
+ --color-bg: #082f49;
553
+ --color-bg-card: #0c4a6e;
554
+ --color-bg-alt: #164e63;
555
+ --color-bg-hover: #0e7490;
556
+ --color-bg-overlay: rgba(0, 0, 0, 0.7);
557
+
558
+ --hdk-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.5);
559
+ --hdk-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.6);
560
+ --hdk-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.7);
561
+ --hdk-shadow-focus: 0 0 0 3px rgba(6, 182, 212, 0.3);
562
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(6, 182, 212, 0.3);
563
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(6, 182, 212, 0.2);
564
+ }
565
+
566
+ /* ===== CYBERPUNK LIGHT THEME ===== */
567
+ [data-theme='cyberpunk-light'] {
568
+ color-scheme: light;
569
+ /* Primary */
570
+ --color-primary: #ff006e;
571
+ --color-primary-dark: #ea005e;
572
+ --color-primary-bg: #fff0f7;
573
+ --color-primary-hover: rgba(255, 0, 110, 0.08);
574
+ --color-on-primary: black;
575
+ --color-on-primary-bg: #d90052;
576
+
577
+ /* Success */
578
+ --color-success: #00f5d4;
579
+ --color-success-dark: #00d9c0;
580
+ --color-success-bg: rgba(0, 245, 212, 0.1);
581
+ --color-success-hover: rgba(0, 245, 212, 0.06);
582
+ --color-on-success: black;
583
+ --color-on-success-bg: #007158;
584
+
585
+ /* Warning */
586
+ --color-warning: #ff9f1c;
587
+ --color-warning-dark: #d77b00;
588
+ --color-warning-bg: rgba(255, 159, 28, 0.1);
589
+ --color-warning-hover: rgba(255, 159, 28, 0.06);
590
+ --color-on-warning: black;
591
+ --color-on-warning-bg: #a04800;
592
+
593
+ /* Danger */
594
+ --color-danger: #fb5607;
595
+ --color-danger-dark: #e04f06;
596
+ --color-danger-bg: #ffe8dc;
597
+ --color-danger-hover: rgba(251, 86, 7, 0.06);
598
+ --color-on-danger: black;
599
+ --color-on-danger-bg: #cc2200;
600
+
601
+ /* Neutral */
602
+ --color-neutral: #9849d8;
603
+ --color-neutral-dark: #761eb1;
604
+ --color-neutral-bg: #e9d5ff;
605
+ --color-neutral-hover: rgba(157, 78, 221, 0.06);
606
+ --color-on-neutral: white;
607
+ --color-on-neutral-bg: #8634c4;
608
+
609
+ /* Text */
610
+ --color-text: #1a1a2e;
611
+ --color-text-secondary: #3d3d5c;
612
+ --color-text-tertiary: #6b6b8a;
613
+ --color-text-muted: #9999b3;
614
+
615
+ /* Borders */
616
+ --color-border: #dacaf8;
617
+ --color-border-light: #eadff9;
618
+
619
+ /* Backgrounds */
620
+ --color-bg: #ececf5;
621
+ --color-bg-card: #ffffff;
622
+ --color-bg-alt: #e8e6f2;
623
+ --color-bg-hover: #e3d8f2;
624
+ --color-bg-overlay: rgba(26, 26, 46, 0.4);
625
+
626
+ --hdk-shadow-sm: 0 1px 3px rgba(255, 0, 110, 0.12);
627
+ --hdk-shadow-md: 0 2px 6px rgba(255, 0, 110, 0.18);
628
+ --hdk-shadow-lg: 0 8px 24px rgba(255, 0, 110, 0.25);
629
+ --hdk-shadow-focus: 0 0 0 3px rgba(255, 0, 110, 0.3);
630
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(255, 0, 110, 0.3);
631
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(255, 0, 110, 0.2);
632
+ }
633
+
634
+ /* ===== CYBERPUNK DARK THEME ===== */
635
+ [data-theme='cyberpunk-dark'] {
636
+ color-scheme: dark only;
637
+ /* Primary */
638
+ --color-primary: #22d3ee;
639
+ --color-primary-dark: #06b6d4;
640
+ --color-primary-bg: #0a1929;
641
+ --color-primary-hover: rgba(34, 211, 238, 0.15);
642
+ --color-on-primary: black;
643
+ --color-on-primary-bg: #22d3ee;
644
+
645
+ /* Success */
646
+ --color-success: #39ff14;
647
+ --color-success-dark: #00ff00;
648
+ --color-success-bg: rgba(57, 255, 20, 0.15);
649
+ --color-success-hover: rgba(57, 255, 20, 0.1);
650
+ --color-on-success: black;
651
+ --color-on-success-bg: #39ff14;
652
+
653
+ /* Warning */
654
+ --color-warning: #ffbe0b;
655
+ --color-warning-dark: #d89900;
656
+ --color-warning-bg: rgba(255, 190, 11, 0.15);
657
+ --color-warning-hover: rgba(255, 190, 11, 0.1);
658
+ --color-on-warning: black;
659
+ --color-on-warning-bg: #ffbe0b;
660
+
661
+ /* Danger */
662
+ --color-danger: #ff10f0;
663
+ --color-danger-dark: #ff00ff;
664
+ --color-danger-bg: #800080;
665
+ --color-danger-hover: rgba(255, 16, 240, 0.1);
666
+ --color-on-danger: black;
667
+ --color-on-danger-bg: #ff89ff;
668
+
669
+ /* Neutral */
670
+ --color-neutral: #637389;
671
+ --color-neutral-dark: #435267;
672
+ --color-neutral-bg: #1e293b;
673
+ --color-neutral-hover: rgba(100, 116, 139, 0.1);
674
+ --color-on-neutral: white;
675
+ --color-on-neutral-bg: #8394ab;
676
+
677
+ /* Text */
678
+ --color-text: #e0f2fe;
679
+ --color-text-secondary: #67e8f9;
680
+ --color-text-tertiary: #22d3ee;
681
+ --color-text-muted: #0891b2;
682
+
683
+ /* Borders */
684
+ --color-border: #164e63;
685
+ --color-border-light: #0e7490;
686
+
687
+ /* Backgrounds */
688
+ --color-bg: #020617;
689
+ --color-bg-card: #0c1929;
690
+ --color-bg-alt: #1e293b;
691
+ --color-bg-hover: #0f172a;
692
+ --color-bg-overlay: rgba(0, 0, 0, 0.8);
693
+
694
+ --hdk-shadow-sm: 0 1px 2px rgba(34, 211, 238, 0.2);
695
+ --hdk-shadow-md: 0 2px 4px rgba(34, 211, 238, 0.3);
696
+ --hdk-shadow-lg: 0 8px 24px rgba(34, 211, 238, 0.4);
697
+ --hdk-shadow-focus: 0 0 0 3px rgba(34, 211, 238, 0.4);
698
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(34, 211, 238, 0.4);
699
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(34, 211, 238, 0.3);
700
+
701
+ /* Advanced contract: neon-grid 8-stop gradient (cyan → magenta → violet).
702
+ Renders only when data-theme-mode='advanced' (via @wolffm/themes/advanced.css). */
703
+ --advanced-stop-1-l: 0.32;
704
+ --advanced-stop-1-c: 0.12;
705
+ --advanced-stop-1-h: 220;
706
+ --advanced-stop-2-l: 0.42;
707
+ --advanced-stop-2-c: 0.18;
708
+ --advanced-stop-2-h: 200;
709
+ --advanced-stop-3-l: 0.5;
710
+ --advanced-stop-3-c: 0.2;
711
+ --advanced-stop-3-h: 195;
712
+ --advanced-stop-4-l: 0.45;
713
+ --advanced-stop-4-c: 0.22;
714
+ --advanced-stop-4-h: 280;
715
+ --advanced-stop-5-l: 0.4;
716
+ --advanced-stop-5-c: 0.26;
717
+ --advanced-stop-5-h: 320;
718
+ --advanced-stop-6-l: 0.46;
719
+ --advanced-stop-6-c: 0.28;
720
+ --advanced-stop-6-h: 340;
721
+ --advanced-stop-7-l: 0.38;
722
+ --advanced-stop-7-c: 0.22;
723
+ --advanced-stop-7-h: 290;
724
+ --advanced-stop-8-l: 0.28;
725
+ --advanced-stop-8-c: 0.16;
726
+ --advanced-stop-8-h: 250;
727
+ --advanced-gradient: linear-gradient(
728
+ 135deg,
729
+ oklch(var(--advanced-stop-1-l) var(--advanced-stop-1-c) var(--advanced-stop-1-h)) 0%,
730
+ oklch(var(--advanced-stop-2-l) var(--advanced-stop-2-c) var(--advanced-stop-2-h)) 15%,
731
+ oklch(var(--advanced-stop-3-l) var(--advanced-stop-3-c) var(--advanced-stop-3-h)) 30%,
732
+ oklch(var(--advanced-stop-4-l) var(--advanced-stop-4-c) var(--advanced-stop-4-h)) 45%,
733
+ oklch(var(--advanced-stop-5-l) var(--advanced-stop-5-c) var(--advanced-stop-5-h)) 60%,
734
+ oklch(var(--advanced-stop-6-l) var(--advanced-stop-6-c) var(--advanced-stop-6-h)) 75%,
735
+ oklch(var(--advanced-stop-7-l) var(--advanced-stop-7-c) var(--advanced-stop-7-h)) 88%,
736
+ oklch(var(--advanced-stop-8-l) var(--advanced-stop-8-c) var(--advanced-stop-8-h)) 100%
737
+ );
738
+ }
739
+
740
+ /* ===== COFFEE LIGHT THEME ===== */
741
+ [data-theme='coffee-light'] {
742
+ color-scheme: light;
743
+ /* Primary */
744
+ --color-primary: #ea580c;
745
+ --color-primary-dark: #d54300;
746
+ --color-primary-bg: #fffbeb;
747
+ --color-primary-hover: rgba(234, 88, 12, 0.08);
748
+ --color-on-primary: black;
749
+ --color-on-primary-bg: #cd3c00;
750
+
751
+ /* Success */
752
+ --color-success: #eab308;
753
+ --color-success-dark: #ca8a04;
754
+ --color-success-bg: rgba(234, 179, 8, 0.1);
755
+ --color-success-hover: rgba(234, 179, 8, 0.06);
756
+ --color-on-success: black;
757
+ --color-on-success-bg: #8a5600;
758
+
759
+ /* Warning */
760
+ --color-warning: #d97706;
761
+ --color-warning-dark: #bb5b00;
762
+ --color-warning-bg: rgba(217, 119, 6, 0.1);
763
+ --color-warning-hover: rgba(217, 119, 6, 0.06);
764
+ --color-on-warning: black;
765
+ --color-on-warning-bg: #a04300;
766
+
767
+ /* Danger */
768
+ --color-danger: #78350f;
769
+ --color-danger-dark: #92400e;
770
+ --color-danger-bg: #fef3c7;
771
+ --color-danger-hover: rgba(120, 53, 15, 0.06);
772
+ --color-on-danger: white;
773
+ --color-on-danger-bg: #78350f;
774
+
775
+ /* Neutral */
776
+ --color-neutral: #77706b;
777
+ --color-neutral-dark: #56504b;
778
+ --color-neutral-bg: #fde68a;
779
+ --color-neutral-hover: rgba(120, 113, 108, 0.06);
780
+ --color-on-neutral: white;
781
+ --color-on-neutral-bg: #6b6560;
782
+
783
+ /* Text */
784
+ --color-text: #1c1917;
785
+ --color-text-secondary: #44403c;
786
+ --color-text-tertiary: #78716c;
787
+ --color-text-muted: #a8a29e;
788
+
789
+ /* Borders */
790
+ --color-border: #ead377;
791
+ --color-border-light: #f0e5ba;
792
+
793
+ /* Backgrounds */
794
+ --color-bg: #f1edde;
795
+ --color-bg-card: #ffffff;
796
+ --color-bg-alt: #f0e5ba;
797
+ --color-bg-hover: #f0ca9d;
798
+ --color-bg-overlay: rgba(28, 25, 23, 0.3);
799
+
800
+ --hdk-shadow-sm: 0 1px 2px rgba(234, 88, 12, 0.08);
801
+ --hdk-shadow-md: 0 2px 4px rgba(234, 88, 12, 0.12);
802
+ --hdk-shadow-lg: 0 8px 24px rgba(234, 88, 12, 0.2);
803
+ --hdk-shadow-focus: 0 0 0 3px rgba(234, 88, 12, 0.25);
804
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(234, 88, 12, 0.25);
805
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(234, 88, 12, 0.15);
806
+ }
807
+
808
+ /* ===== COFFEE DARK THEME ===== */
809
+ [data-theme='coffee-dark'] {
810
+ color-scheme: dark only;
811
+ /* Primary */
812
+ --color-primary: #ea580c;
813
+ --color-primary-dark: #d54300;
814
+ --color-primary-bg: #292524;
815
+ --color-primary-hover: rgba(234, 88, 12, 0.15);
816
+ --color-on-primary: black;
817
+ --color-on-primary-bg: #f15f1a;
818
+
819
+ /* Success */
820
+ --color-success: #facc15;
821
+ --color-success-dark: #eab308;
822
+ --color-success-bg: rgba(250, 204, 21, 0.15);
823
+ --color-success-hover: rgba(250, 204, 21, 0.1);
824
+ --color-on-success: black;
825
+ --color-on-success-bg: #facc15;
826
+
827
+ /* Warning */
828
+ --color-warning: #f59e0b;
829
+ --color-warning-dark: #ce7a00;
830
+ --color-warning-bg: rgba(245, 158, 11, 0.15);
831
+ --color-warning-hover: rgba(245, 158, 11, 0.1);
832
+ --color-on-warning: black;
833
+ --color-on-warning-bg: #ffab29;
834
+
835
+ /* Danger */
836
+ --color-danger: #57534e;
837
+ --color-danger-dark: #44403c;
838
+ --color-danger-bg: #1c1917;
839
+ --color-danger-hover: rgba(87, 83, 78, 0.1);
840
+ --color-on-danger: white;
841
+ --color-on-danger-bg: #88847e;
842
+
843
+ /* Neutral */
844
+ --color-neutral: #77706b;
845
+ --color-neutral-dark: #56504b;
846
+ --color-neutral-bg: #3e3933;
847
+ --color-neutral-hover: rgba(120, 113, 108, 0.1);
848
+ --color-on-neutral: white;
849
+ --color-on-neutral-bg: #aea6a1;
850
+
851
+ /* Text */
852
+ --color-text: #fef3c7;
853
+ --color-text-secondary: #fde68a;
854
+ --color-text-tertiary: #fbbf24;
855
+ --color-text-muted: #d97706;
856
+
857
+ /* Borders */
858
+ --color-border: #44403c;
859
+ --color-border-light: #57534e;
860
+
861
+ /* Backgrounds */
862
+ --color-bg: #1c1917;
863
+ --color-bg-card: #292524;
864
+ --color-bg-alt: #3e3933;
865
+ --color-bg-hover: #44403c;
866
+ --color-bg-overlay: rgba(0, 0, 0, 0.75);
867
+
868
+ --hdk-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.6);
869
+ --hdk-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.7);
870
+ --hdk-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.8);
871
+ --hdk-shadow-focus: 0 0 0 3px rgba(234, 88, 12, 0.3);
872
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(234, 88, 12, 0.3);
873
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(234, 88, 12, 0.2);
874
+ }
875
+
876
+ /* ===== LAVENDER LIGHT THEME ===== */
877
+ [data-theme='lavender-light'] {
878
+ color-scheme: light;
879
+ /* Primary */
880
+ --color-primary: #c084fc;
881
+ --color-primary-dark: #a855f7;
882
+ --color-primary-bg: #faf5ff;
883
+ --color-primary-hover: rgba(192, 132, 252, 0.08);
884
+ --color-on-primary: black;
885
+ --color-on-primary-bg: #8e52c6;
886
+
887
+ /* Success */
888
+ --color-success: #84cc16;
889
+ --color-success-dark: #65a30d;
890
+ --color-success-bg: rgba(132, 204, 22, 0.1);
891
+ --color-success-hover: rgba(132, 204, 22, 0.06);
892
+ --color-on-success: black;
893
+ --color-on-success-bg: #256700;
894
+
895
+ /* Warning */
896
+ --color-warning: #f59e0b;
897
+ --color-warning-dark: #ce7a00;
898
+ --color-warning-bg: rgba(245, 158, 11, 0.1);
899
+ --color-warning-hover: rgba(245, 158, 11, 0.06);
900
+ --color-on-warning: black;
901
+ --color-on-warning-bg: #914100;
902
+
903
+ /* Danger */
904
+ --color-danger: #5e60ea;
905
+ --color-danger-dark: #4f46e5;
906
+ --color-danger-bg: #e0e7ff;
907
+ --color-danger-hover: rgba(99, 102, 241, 0.06);
908
+ --color-on-danger: white;
909
+ --color-on-danger-bg: #5453dc;
910
+
911
+ /* Neutral */
912
+ --color-neutral: #71717a;
913
+ --color-neutral-dark: #515159;
914
+ --color-neutral-bg: #e4e4e7;
915
+ --color-neutral-hover: rgba(113, 113, 122, 0.06);
916
+ --color-on-neutral: white;
917
+ --color-on-neutral-bg: #63636b;
918
+
919
+ /* Text */
920
+ --color-text: #1f1f29;
921
+ --color-text-secondary: #52525b;
922
+ --color-text-tertiary: #71717a;
923
+ --color-text-muted: #a1a1aa;
924
+
925
+ /* Borders */
926
+ --color-border: #d8c4ee;
927
+ --color-border-light: #e6dbf1;
928
+
929
+ /* Backgrounds */
930
+ --color-bg: #eae6ef;
931
+ --color-bg-card: #fdf8ff;
932
+ --color-bg-alt: #e1d6ed;
933
+ --color-bg-hover: #d7c3ed;
934
+ --color-bg-overlay: rgba(192, 132, 252, 0.25);
935
+
936
+ --hdk-shadow-sm: 0 1px 2px rgba(192, 132, 252, 0.06);
937
+ --hdk-shadow-md: 0 2px 4px rgba(192, 132, 252, 0.1);
938
+ --hdk-shadow-lg: 0 8px 24px rgba(192, 132, 252, 0.15);
939
+ --hdk-shadow-focus: 0 0 0 3px rgba(192, 132, 252, 0.2);
940
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(192, 132, 252, 0.2);
941
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(192, 132, 252, 0.15);
942
+ }
943
+
944
+ /* ===== LAVENDER DARK THEME ===== */
945
+ [data-theme='lavender-dark'] {
946
+ color-scheme: dark only;
947
+ /* Primary */
948
+ --color-primary: #cba1fa;
949
+ --color-primary-dark: #b58be2;
950
+ --color-primary-bg: rgba(203, 161, 250, 0.16);
951
+ --color-primary-hover: rgba(203, 161, 250, 0.12);
952
+ --color-on-primary: black;
953
+ --color-on-primary-bg: #d1a7ff;
954
+
955
+ /* Success */
956
+ --color-success: #b3e14d;
957
+ --color-success-dark: #9dca30;
958
+ --color-success-bg: rgba(179, 225, 77, 0.15);
959
+ --color-success-hover: rgba(179, 225, 77, 0.1);
960
+ --color-on-success: black;
961
+ --color-on-success-bg: #b3e14d;
962
+
963
+ /* Warning */
964
+ --color-warning: #fdbe45;
965
+ --color-warning-dark: #e5a725;
966
+ --color-warning-bg: rgba(253, 190, 69, 0.15);
967
+ --color-warning-hover: rgba(253, 190, 69, 0.1);
968
+ --color-on-warning: black;
969
+ --color-on-warning-bg: #fdbe45;
970
+
971
+ /* Danger */
972
+ --color-danger: #f06f84;
973
+ --color-danger-dark: #d7596f;
974
+ --color-danger-bg: rgba(240, 111, 132, 0.15);
975
+ --color-danger-hover: rgba(240, 111, 132, 0.1);
976
+ --color-on-danger: black;
977
+ --color-on-danger-bg: #ff8c9f;
978
+
979
+ /* Neutral */
980
+ --color-neutral: #9098ab;
981
+ --color-neutral-dark: #7b8395;
982
+ --color-neutral-bg: #253154;
983
+ --color-neutral-hover: rgba(144, 152, 171, 0.1);
984
+ --color-on-neutral: black;
985
+ --color-on-neutral-bg: #969eb1;
986
+
987
+ /* Text */
988
+ --color-text: #f3f2fd;
989
+ --color-text-secondary: #dad9e8;
990
+ --color-text-tertiary: #bdbad4;
991
+ --color-text-muted: #918fa6;
992
+
993
+ /* Borders */
994
+ --color-border: #333e5b;
995
+ --color-border-light: #3b496e;
996
+
997
+ /* Backgrounds */
998
+ --color-bg: #0e172f;
999
+ --color-bg-card: #192341;
1000
+ --color-bg-alt: #27324e;
1001
+ --color-bg-hover: #222d4d;
1002
+ --color-bg-overlay: rgba(0, 0, 0, 0.72);
1003
+
1004
+ --hdk-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
1005
+ --hdk-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.5);
1006
+ --hdk-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.7);
1007
+ --hdk-shadow-focus: 0 0 0 3px rgba(203, 161, 250, 0.3);
1008
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(203, 161, 250, 0.3);
1009
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(203, 161, 250, 0.2);
1010
+ }
1011
+
1012
+ /* ===== PINK LIGHT THEME ===== */
1013
+ [data-theme='pink-light'] {
1014
+ color-scheme: light;
1015
+ /* Primary */
1016
+ --color-primary: #ff69b4;
1017
+ --color-primary-dark: #ff1493;
1018
+ --color-primary-bg: #fff0f5;
1019
+ --color-primary-hover: rgba(255, 105, 180, 0.08);
1020
+ --color-on-primary: black;
1021
+ --color-on-primary-bg: #c32e80;
1022
+
1023
+ /* Success */
1024
+ --color-success: #ffb3d9;
1025
+ --color-success-dark: #ff8fcc;
1026
+ --color-success-bg: rgba(255, 179, 217, 0.15);
1027
+ --color-success-hover: rgba(255, 179, 217, 0.06);
1028
+ --color-on-success: black;
1029
+ --color-on-success-bg: #8f4c70;
1030
+
1031
+ /* Warning */
1032
+ --color-warning: #fbbf24;
1033
+ --color-warning-dark: #d59a00;
1034
+ --color-warning-bg: rgba(251, 191, 36, 0.1);
1035
+ --color-warning-hover: rgba(251, 191, 36, 0.06);
1036
+ --color-on-warning: black;
1037
+ --color-on-warning-bg: #8d5500;
1038
+
1039
+ /* Danger */
1040
+ --color-danger: #9856b3;
1041
+ --color-danger-dark: #8e44ad;
1042
+ --color-danger-bg: #e8daef;
1043
+ --color-danger-hover: rgba(155, 89, 182, 0.06);
1044
+ --color-on-danger: white;
1045
+ --color-on-danger-bg: #8644a0;
1046
+
1047
+ /* Neutral */
1048
+ --color-neutral: #d4a5a5;
1049
+ --color-neutral-dark: #af8282;
1050
+ --color-neutral-bg: #ffd9e0;
1051
+ --color-neutral-hover: rgba(212, 165, 165, 0.06);
1052
+ --color-on-neutral: black;
1053
+ --color-on-neutral-bg: #825858;
1054
+
1055
+ /* Text */
1056
+ --color-text: #4a2a3a;
1057
+ --color-text-secondary: #88576c;
1058
+ --color-text-tertiary: #c48ca0;
1059
+ --color-text-muted: #e5b3c8;
1060
+
1061
+ /* Borders */
1062
+ --color-border: #ffc0cb;
1063
+ --color-border-light: #ffd9e0;
1064
+
1065
+ /* Backgrounds */
1066
+ --color-bg: #f4eaee;
1067
+ --color-bg-card: #ffffff;
1068
+ --color-bg-alt: #f0e2e7;
1069
+ --color-bg-hover: #f0cbd2;
1070
+ --color-bg-overlay: rgba(255, 105, 180, 0.2);
1071
+
1072
+ --hdk-shadow-sm: 0 1px 2px rgba(255, 105, 180, 0.08);
1073
+ --hdk-shadow-md: 0 2px 4px rgba(255, 105, 180, 0.12);
1074
+ --hdk-shadow-lg: 0 8px 24px rgba(255, 105, 180, 0.15);
1075
+ --hdk-shadow-focus: 0 0 0 3px rgba(255, 105, 180, 0.25);
1076
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(255, 105, 180, 0.25);
1077
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(255, 105, 180, 0.15);
1078
+ }
1079
+
1080
+ /* ===== PINK DARK THEME ===== */
1081
+ [data-theme='pink-dark'] {
1082
+ color-scheme: dark only;
1083
+ /* Primary */
1084
+ --color-primary: #f799be;
1085
+ --color-primary-dark: #df83a8;
1086
+ --color-primary-bg: rgba(247, 153, 190, 0.16);
1087
+ --color-primary-hover: rgba(247, 153, 190, 0.12);
1088
+ --color-on-primary: black;
1089
+ --color-on-primary-bg: #f799be;
1090
+
1091
+ /* Success */
1092
+ --color-success: #63e6be;
1093
+ --color-success-dark: #48cfa8;
1094
+ --color-success-bg: rgba(99, 230, 190, 0.15);
1095
+ --color-success-hover: rgba(99, 230, 190, 0.1);
1096
+ --color-on-success: black;
1097
+ --color-on-success-bg: #63e6be;
1098
+
1099
+ /* Warning */
1100
+ --color-warning: #fdbe45;
1101
+ --color-warning-dark: #e5a725;
1102
+ --color-warning-bg: rgba(253, 190, 69, 0.15);
1103
+ --color-warning-hover: rgba(253, 190, 69, 0.1);
1104
+ --color-on-warning: black;
1105
+ --color-on-warning-bg: #fdbe45;
1106
+
1107
+ /* Danger */
1108
+ --color-danger: #ae7ee2;
1109
+ --color-danger-dark: #9869cb;
1110
+ --color-danger-bg: rgba(174, 126, 226, 0.15);
1111
+ --color-danger-hover: rgba(174, 126, 226, 0.1);
1112
+ --color-on-danger: black;
1113
+ --color-on-danger-bg: #b787ec;
1114
+
1115
+ /* Neutral */
1116
+ --color-neutral: #a5929a;
1117
+ --color-neutral-dark: #907d85;
1118
+ --color-neutral-bg: #3b2b32;
1119
+ --color-neutral-hover: rgba(165, 146, 154, 0.1);
1120
+ --color-on-neutral: black;
1121
+ --color-on-neutral-bg: #a8959d;
1122
+
1123
+ /* Text */
1124
+ --color-text: #ffeef5;
1125
+ --color-text-secondary: #ead4dd;
1126
+ --color-text-tertiary: #d7b2c2;
1127
+ --color-text-muted: #a88896;
1128
+
1129
+ /* Borders */
1130
+ --color-border: #4a373f;
1131
+ --color-border-light: #624b55;
1132
+
1133
+ /* Backgrounds */
1134
+ --color-bg: #1d1217;
1135
+ --color-bg-card: #2c1e24;
1136
+ --color-bg-alt: #170d12;
1137
+ --color-bg-hover: #36282e;
1138
+ --color-bg-overlay: rgba(0, 0, 0, 0.72);
1139
+
1140
+ --hdk-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
1141
+ --hdk-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.5);
1142
+ --hdk-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.7);
1143
+ --hdk-shadow-focus: 0 0 0 3px rgba(247, 153, 190, 0.4);
1144
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(247, 153, 190, 0.4);
1145
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(247, 153, 190, 0.3);
1146
+ }
1147
+
1148
+ /* ===== NATURE LIGHT THEME ===== */
1149
+ [data-theme='nature-light'] {
1150
+ color-scheme: light;
1151
+ /* Primary */
1152
+ --color-primary: #6bbe4e;
1153
+ --color-primary-dark: #5aa942;
1154
+ --color-primary-bg: #f4faf1;
1155
+ --color-primary-hover: rgba(107, 190, 78, 0.08);
1156
+ --color-on-primary: black;
1157
+ --color-on-primary-bg: #2c7f00;
1158
+
1159
+ /* Success */
1160
+ --color-success: #a7d88f;
1161
+ --color-success-dark: #8dc473;
1162
+ --color-success-bg: rgba(167, 216, 143, 0.15);
1163
+ --color-success-hover: rgba(167, 216, 143, 0.06);
1164
+ --color-on-success: black;
1165
+ --color-on-success-bg: #426e29;
1166
+
1167
+ /* Warning */
1168
+ --color-warning: #ca8a04;
1169
+ --color-warning-dark: #a66800;
1170
+ --color-warning-bg: rgba(202, 138, 4, 0.1);
1171
+ --color-warning-hover: rgba(202, 138, 4, 0.06);
1172
+ --color-on-warning: black;
1173
+ --color-on-warning-bg: #8d5100;
1174
+
1175
+ /* Danger */
1176
+ --color-danger: #c8643b;
1177
+ --color-danger-dark: #bc5930;
1178
+ --color-danger-bg: #f9e8e1;
1179
+ --color-danger-hover: rgba(200, 100, 59, 0.06);
1180
+ --color-on-danger: black;
1181
+ --color-on-danger-bg: #ad4c21;
1182
+
1183
+ /* Neutral */
1184
+ --color-neutral: #cfc6b0;
1185
+ --color-neutral-dark: #aaa28c;
1186
+ --color-neutral-bg: #ebe7dc;
1187
+ --color-neutral-hover: rgba(207, 198, 176, 0.06);
1188
+ --color-on-neutral: black;
1189
+ --color-on-neutral-bg: #6d6551;
1190
+
1191
+ /* Text */
1192
+ --color-text: #2c2c2c;
1193
+ --color-text-secondary: #5a5a5a;
1194
+ --color-text-tertiary: #8a8a8a;
1195
+ --color-text-muted: #acacac;
1196
+
1197
+ /* Borders */
1198
+ --color-border: #dad3bf;
1199
+ --color-border-light: #e9e5da;
1200
+
1201
+ /* Backgrounds */
1202
+ --color-bg: #efede4;
1203
+ --color-bg-card: #ffffff;
1204
+ --color-bg-alt: #ebe8de;
1205
+ --color-bg-hover: #e1ddd2;
1206
+ --color-bg-overlay: rgba(44, 44, 44, 0.5);
1207
+
1208
+ --hdk-shadow-sm: 0 1px 2px rgba(107, 190, 78, 0.08);
1209
+ --hdk-shadow-md: 0 2px 4px rgba(107, 190, 78, 0.12);
1210
+ --hdk-shadow-lg: 0 8px 24px rgba(107, 190, 78, 0.2);
1211
+ --hdk-shadow-focus: 0 0 0 3px rgba(107, 190, 78, 0.25);
1212
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(107, 190, 78, 0.25);
1213
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(107, 190, 78, 0.15);
1214
+ }
1215
+
1216
+ /* ===== NATURE DARK THEME ===== */
1217
+ [data-theme='nature-dark'] {
1218
+ color-scheme: dark only;
1219
+ /* Primary */
1220
+ --color-primary: #5ac041;
1221
+ --color-primary-dark: #42a926;
1222
+ --color-primary-bg: rgba(90, 192, 65, 0.16);
1223
+ --color-primary-hover: rgba(90, 192, 65, 0.12);
1224
+ --color-on-primary: black;
1225
+ --color-on-primary-bg: #5ac041;
1226
+
1227
+ /* Success */
1228
+ --color-success: #52db9c;
1229
+ --color-success-dark: #34c487;
1230
+ --color-success-bg: rgba(82, 219, 156, 0.15);
1231
+ --color-success-hover: rgba(82, 219, 156, 0.1);
1232
+ --color-on-success: black;
1233
+ --color-on-success-bg: #52db9c;
1234
+
1235
+ /* Warning */
1236
+ --color-warning: #f7c243;
1237
+ --color-warning-dark: #e0ab22;
1238
+ --color-warning-bg: rgba(247, 194, 67, 0.15);
1239
+ --color-warning-hover: rgba(247, 194, 67, 0.1);
1240
+ --color-on-warning: black;
1241
+ --color-on-warning-bg: #f7c243;
1242
+
1243
+ /* Danger */
1244
+ --color-danger: #bc4f2b;
1245
+ --color-danger-dark: #a63b14;
1246
+ --color-danger-bg: rgba(190, 81, 45, 0.15);
1247
+ --color-danger-hover: rgba(190, 81, 45, 0.1);
1248
+ --color-on-danger: white;
1249
+ --color-on-danger-bg: #ec7b56;
1250
+
1251
+ /* Neutral */
1252
+ --color-neutral: #8f8476;
1253
+ --color-neutral-dark: #807568;
1254
+ --color-neutral-bg: #3b3229;
1255
+ --color-neutral-hover: rgba(143, 132, 118, 0.1);
1256
+ --color-on-neutral: black;
1257
+ --color-on-neutral-bg: #a89c8e;
1258
+
1259
+ /* Text */
1260
+ --color-text: #f8f4e1;
1261
+ --color-text-secondary: #e2dbc1;
1262
+ --color-text-tertiary: #cabe92;
1263
+ --color-text-muted: #9d926c;
1264
+
1265
+ /* Borders */
1266
+ --color-border: #604734;
1267
+ --color-border-light: #795c45;
1268
+
1269
+ /* Backgrounds */
1270
+ --color-bg: #1e1811;
1271
+ --color-bg-card: #2c251d;
1272
+ --color-bg-alt: #18130c;
1273
+ --color-bg-hover: #372f26;
1274
+ --color-bg-overlay: rgba(0, 0, 0, 0.72);
1275
+
1276
+ --hdk-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.5);
1277
+ --hdk-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.6);
1278
+ --hdk-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.8);
1279
+ --hdk-shadow-focus: 0 0 0 3px rgba(90, 192, 65, 0.35);
1280
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(90, 192, 65, 0.35);
1281
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(90, 192, 65, 0.25);
1282
+ }
1283
+
1284
+ /* Izakaya Theme - Winner of Kitsune Theme Contest */
1285
+ /* See THEME_GRAVEYARD.md for the eliminated Kitsune Springs A/B/C themes */
1286
+
1287
+ [data-theme='izakaya-light'] {
1288
+ color-scheme: light;
1289
+ /* Primary */
1290
+ --color-primary: #41baae;
1291
+ --color-primary-dark: #369c92;
1292
+ --color-primary-bg: rgba(65, 186, 174, 0.05);
1293
+ --color-primary-hover: rgba(65, 186, 174, 0.08);
1294
+ --color-on-primary: black;
1295
+ --color-on-primary-bg: #00534a;
1296
+
1297
+ /* Success */
1298
+ --color-success: #a6d8ad;
1299
+ --color-success-dark: #8ccb94;
1300
+ --color-success-bg: rgba(166, 216, 173, 0.15);
1301
+ --color-success-hover: rgba(166, 216, 173, 0.06);
1302
+ --color-on-success: black;
1303
+ --color-on-success-bg: #275530;
1304
+
1305
+ /* Warning */
1306
+ --color-warning: #d4a574;
1307
+ --color-warning-dark: #af8252;
1308
+ --color-warning-bg: rgba(212, 165, 116, 0.15);
1309
+ --color-warning-hover: rgba(212, 165, 116, 0.06);
1310
+ --color-on-warning: black;
1311
+ --color-on-warning-bg: #673e07;
1312
+
1313
+ /* Danger */
1314
+ --color-danger: #c04731;
1315
+ --color-danger-dark: #a23b29;
1316
+ --color-danger-bg: #f97a6f;
1317
+ --color-danger-hover: rgba(192, 71, 49, 0.06);
1318
+ --color-on-danger: white;
1319
+ --color-on-danger-bg: #720000;
1320
+
1321
+ /* Neutral */
1322
+ --color-neutral: #a8999e;
1323
+ --color-neutral-dark: #85777b;
1324
+ --color-neutral-bg: #d8c8b0;
1325
+ --color-neutral-hover: rgba(168, 153, 158, 0.06);
1326
+ --color-on-neutral: black;
1327
+ --color-on-neutral-bg: #5e5055;
1328
+
1329
+ /* Text */
1330
+ --color-text: #2a2a2a;
1331
+ --color-text-secondary: rgba(42, 42, 42, 0.8);
1332
+ --color-text-tertiary: rgba(42, 42, 42, 0.6);
1333
+ --color-text-muted: rgba(42, 42, 42, 0.4);
1334
+
1335
+ /* Borders */
1336
+ --color-border: #bfa1a0;
1337
+ --color-border-light: #ceaecb;
1338
+
1339
+ /* Backgrounds */
1340
+ --color-bg: #f2e6cd;
1341
+ --color-bg-card: #f1c8c8;
1342
+ --color-bg-alt: #d8b888;
1343
+ --color-bg-hover: #d1b1ce;
1344
+ --color-bg-overlay: rgba(42, 42, 42, 0.45);
1345
+
1346
+ --hdk-shadow-sm: 0 1px 2px rgba(65, 186, 174, 0.08);
1347
+ --hdk-shadow-md: 0 2px 4px rgba(65, 186, 174, 0.12);
1348
+ --hdk-shadow-lg: 0 8px 24px rgba(65, 186, 174, 0.2);
1349
+ --hdk-shadow-focus: 0 0 0 3px rgba(65, 186, 174, 0.25);
1350
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(65, 186, 174, 0.25);
1351
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(65, 186, 174, 0.15);
1352
+ }
1353
+
1354
+ /* See THEME_GRAVEYARD.md for the eliminated Kitsune Springs A/B/C dark themes */
1355
+
1356
+ [data-theme='izakaya-dark'] {
1357
+ color-scheme: dark only;
1358
+ /* Primary */
1359
+ --color-primary: #04c5b5;
1360
+ --color-primary-dark: #00ac9e;
1361
+ --color-primary-bg: rgba(4, 197, 181, 0.16);
1362
+ --color-primary-hover: rgba(4, 197, 181, 0.12);
1363
+ --color-on-primary: black;
1364
+ --color-on-primary-bg: #04c5b5;
1365
+
1366
+ /* Success */
1367
+ --color-success: #61d19a;
1368
+ --color-success-dark: #48ba85;
1369
+ --color-success-bg: rgba(97, 209, 154, 0.15);
1370
+ --color-success-hover: rgba(97, 209, 154, 0.1);
1371
+ --color-on-success: black;
1372
+ --color-on-success-bg: #61d19a;
1373
+
1374
+ /* Warning */
1375
+ --color-warning: #fdbe45;
1376
+ --color-warning-dark: #e5a725;
1377
+ --color-warning-bg: rgba(253, 190, 69, 0.15);
1378
+ --color-warning-hover: rgba(253, 190, 69, 0.1);
1379
+ --color-on-warning: black;
1380
+ --color-on-warning-bg: #fdbe45;
1381
+
1382
+ /* Danger */
1383
+ --color-danger: #c13e2e;
1384
+ --color-danger-dark: #a92517;
1385
+ --color-danger-bg: rgba(193, 62, 46, 0.15);
1386
+ --color-danger-hover: rgba(193, 62, 46, 0.1);
1387
+ --color-on-danger: white;
1388
+ --color-on-danger-bg: #f66f5b;
1389
+
1390
+ /* Neutral */
1391
+ --color-neutral: #7f7f87;
1392
+ --color-neutral-dark: #76767e;
1393
+ --color-neutral-bg: #2d343b;
1394
+ --color-neutral-hover: rgba(127, 127, 135, 0.1);
1395
+ --color-on-neutral: black;
1396
+ --color-on-neutral-bg: #9d9da5;
1397
+
1398
+ /* Text */
1399
+ --color-text: #f5f2f5;
1400
+ --color-text-secondary: #ddd9dd;
1401
+ --color-text-tertiary: #c1bcc1;
1402
+ --color-text-muted: #959095;
1403
+
1404
+ /* Borders */
1405
+ --color-border: #71574b;
1406
+ --color-border-light: #8c6c5e;
1407
+
1408
+ /* Backgrounds */
1409
+ --color-bg: #14191e;
1410
+ --color-bg-card: #20262c;
1411
+ --color-bg-alt: #0f1318;
1412
+ --color-bg-hover: #2a3036;
1413
+ --color-bg-overlay: rgba(0, 0, 0, 0.72);
1414
+
1415
+ --hdk-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
1416
+ --hdk-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.55);
1417
+ --hdk-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.7);
1418
+ --hdk-shadow-focus: 0 0 0 3px rgba(4, 197, 181, 0.32);
1419
+ --hdk-shadow-focus-sm: 0 0 0 2px rgba(4, 197, 181, 0.32);
1420
+ --hdk-shadow-focus-alt: 0 0 0 2px rgba(4, 197, 181, 0.18);
1421
+ }