@cdevhub/ngx-tw 0.2.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 (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +108 -0
  4. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -0
  5. package/fesm2022/cdevhub-ngx-tw-alert.mjs +240 -0
  6. package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -0
  7. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +287 -0
  8. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -0
  9. package/fesm2022/cdevhub-ngx-tw-badge.mjs +332 -0
  10. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -0
  11. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +452 -0
  12. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -0
  13. package/fesm2022/cdevhub-ngx-tw-button.mjs +227 -0
  14. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -0
  15. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +417 -0
  16. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -0
  17. package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs +232 -0
  18. package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs.map +1 -0
  19. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +4482 -0
  20. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -0
  21. package/fesm2022/cdevhub-ngx-tw-card.mjs +157 -0
  22. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -0
  23. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +1454 -0
  24. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -0
  25. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +593 -0
  26. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -0
  27. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +228 -0
  28. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -0
  29. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +510 -0
  30. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -0
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +1721 -0
  32. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -0
  33. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +721 -0
  34. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -0
  35. package/fesm2022/cdevhub-ngx-tw-core.mjs +861 -0
  36. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -0
  37. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +1558 -0
  38. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -0
  39. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +1833 -0
  40. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -0
  41. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +693 -0
  42. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -0
  43. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +331 -0
  44. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -0
  45. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +289 -0
  46. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -0
  47. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +572 -0
  48. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -0
  49. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +36 -0
  50. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -0
  51. package/fesm2022/cdevhub-ngx-tw-icon.mjs +278 -0
  52. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -0
  53. package/fesm2022/cdevhub-ngx-tw-input.mjs +355 -0
  54. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -0
  55. package/fesm2022/cdevhub-ngx-tw-item.mjs +241 -0
  56. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -0
  57. package/fesm2022/cdevhub-ngx-tw-menu.mjs +433 -0
  58. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -0
  59. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +691 -0
  60. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -0
  61. package/fesm2022/cdevhub-ngx-tw-popover.mjs +678 -0
  62. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -0
  63. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +335 -0
  64. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -0
  65. package/fesm2022/cdevhub-ngx-tw-radio.mjs +708 -0
  66. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -0
  67. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +319 -0
  68. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -0
  69. package/fesm2022/cdevhub-ngx-tw-select.mjs +1722 -0
  70. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -0
  71. package/fesm2022/cdevhub-ngx-tw-separator.mjs +115 -0
  72. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -0
  73. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +768 -0
  74. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -0
  75. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +149 -0
  76. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -0
  77. package/fesm2022/cdevhub-ngx-tw-slider.mjs +1147 -0
  78. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -0
  79. package/fesm2022/cdevhub-ngx-tw-sort.mjs +346 -0
  80. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -0
  81. package/fesm2022/cdevhub-ngx-tw-spinner.mjs +186 -0
  82. package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -0
  83. package/fesm2022/cdevhub-ngx-tw-split.mjs +1082 -0
  84. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -0
  85. package/fesm2022/cdevhub-ngx-tw-stat.mjs +579 -0
  86. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -0
  87. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +443 -0
  88. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -0
  89. package/fesm2022/cdevhub-ngx-tw-switch.mjs +391 -0
  90. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -0
  91. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +315 -0
  92. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -0
  93. package/fesm2022/cdevhub-ngx-tw-table.mjs +994 -0
  94. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -0
  95. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +508 -0
  96. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -0
  97. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +147 -0
  98. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -0
  99. package/fesm2022/cdevhub-ngx-tw-theme.mjs +178 -0
  100. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -0
  101. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +1344 -0
  102. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -0
  103. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +1136 -0
  104. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -0
  105. package/fesm2022/cdevhub-ngx-tw-toast.mjs +1311 -0
  106. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -0
  107. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +533 -0
  108. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -0
  109. package/fesm2022/cdevhub-ngx-tw.mjs +61 -0
  110. package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -0
  111. package/package.json +265 -0
  112. package/theme/_base.css +394 -0
  113. package/theme/_dark.css +510 -0
  114. package/theme/_high-contrast.css +290 -0
  115. package/theme/_semantic.css +317 -0
  116. package/theme/_typography.css +9 -0
  117. package/theme/index.css +54 -0
  118. package/types/cdevhub-ngx-tw-accordion.d.ts +48 -0
  119. package/types/cdevhub-ngx-tw-alert.d.ts +67 -0
  120. package/types/cdevhub-ngx-tw-avatar.d.ts +79 -0
  121. package/types/cdevhub-ngx-tw-badge.d.ts +94 -0
  122. package/types/cdevhub-ngx-tw-breadcrumbs.d.ts +227 -0
  123. package/types/cdevhub-ngx-tw-button.d.ts +74 -0
  124. package/types/cdevhub-ngx-tw-calendar-luxon.d.ts +200 -0
  125. package/types/cdevhub-ngx-tw-calendar-testing.d.ts +113 -0
  126. package/types/cdevhub-ngx-tw-calendar.d.ts +1704 -0
  127. package/types/cdevhub-ngx-tw-card.d.ts +48 -0
  128. package/types/cdevhub-ngx-tw-carousel.d.ts +406 -0
  129. package/types/cdevhub-ngx-tw-checkbox.d.ts +136 -0
  130. package/types/cdevhub-ngx-tw-code-block.d.ts +93 -0
  131. package/types/cdevhub-ngx-tw-collapsible.d.ts +151 -0
  132. package/types/cdevhub-ngx-tw-combobox.d.ts +389 -0
  133. package/types/cdevhub-ngx-tw-command-palette.d.ts +215 -0
  134. package/types/cdevhub-ngx-tw-core.d.ts +719 -0
  135. package/types/cdevhub-ngx-tw-date-picker.d.ts +317 -0
  136. package/types/cdevhub-ngx-tw-date-range-picker.d.ts +313 -0
  137. package/types/cdevhub-ngx-tw-dialog.d.ts +303 -0
  138. package/types/cdevhub-ngx-tw-empty-state.d.ts +104 -0
  139. package/types/cdevhub-ngx-tw-flip-card.d.ts +95 -0
  140. package/types/cdevhub-ngx-tw-form-field.d.ts +210 -0
  141. package/types/cdevhub-ngx-tw-icon-lucide.d.ts +29 -0
  142. package/types/cdevhub-ngx-tw-icon.d.ts +134 -0
  143. package/types/cdevhub-ngx-tw-input.d.ts +110 -0
  144. package/types/cdevhub-ngx-tw-item.d.ts +70 -0
  145. package/types/cdevhub-ngx-tw-menu.d.ts +99 -0
  146. package/types/cdevhub-ngx-tw-paginator.d.ts +305 -0
  147. package/types/cdevhub-ngx-tw-popover.d.ts +157 -0
  148. package/types/cdevhub-ngx-tw-progress-bar.d.ts +100 -0
  149. package/types/cdevhub-ngx-tw-radio.d.ts +174 -0
  150. package/types/cdevhub-ngx-tw-segmented-control.d.ts +66 -0
  151. package/types/cdevhub-ngx-tw-select.d.ts +384 -0
  152. package/types/cdevhub-ngx-tw-separator.d.ts +28 -0
  153. package/types/cdevhub-ngx-tw-sheet.d.ts +335 -0
  154. package/types/cdevhub-ngx-tw-skeleton.d.ts +52 -0
  155. package/types/cdevhub-ngx-tw-slider.d.ts +258 -0
  156. package/types/cdevhub-ngx-tw-sort.d.ts +136 -0
  157. package/types/cdevhub-ngx-tw-spinner.d.ts +50 -0
  158. package/types/cdevhub-ngx-tw-split.d.ts +265 -0
  159. package/types/cdevhub-ngx-tw-stat.d.ts +140 -0
  160. package/types/cdevhub-ngx-tw-stepper.d.ts +127 -0
  161. package/types/cdevhub-ngx-tw-switch.d.ts +88 -0
  162. package/types/cdevhub-ngx-tw-tab-nav.d.ts +107 -0
  163. package/types/cdevhub-ngx-tw-table.d.ts +479 -0
  164. package/types/cdevhub-ngx-tw-tabs.d.ts +121 -0
  165. package/types/cdevhub-ngx-tw-textarea.d.ts +62 -0
  166. package/types/cdevhub-ngx-tw-theme.d.ts +106 -0
  167. package/types/cdevhub-ngx-tw-time-picker.d.ts +303 -0
  168. package/types/cdevhub-ngx-tw-timeline.d.ts +278 -0
  169. package/types/cdevhub-ngx-tw-toast.d.ts +388 -0
  170. package/types/cdevhub-ngx-tw-tooltip.d.ts +95 -0
  171. package/types/cdevhub-ngx-tw.d.ts +49 -0
@@ -0,0 +1,510 @@
1
+ /* ===== Dark theme =====
2
+ Two activation paths, identical body:
3
+ 1. `[data-theme="dark"]` — explicit opt-in. Always wins.
4
+ 2. `@media (prefers-color-scheme: dark)` against a root that has NOT been
5
+ explicitly tagged with `data-theme="light"` or `data-theme="high-contrast"`.
6
+ This gives pre-hydration screens, SSG snapshots, and consumers that skip
7
+ `provideTheme()` automatic OS-driven dark mode without JavaScript.
8
+
9
+ The body is duplicated rather than aliased because CSS does not allow a
10
+ single rule body to be applied via both a selector and a media query. Keep
11
+ the two blocks in lock-step. */
12
+
13
+ [data-theme="dark"] {
14
+ /* ===== Surface ===== */
15
+ --color-surface: var(--color-gray-950);
16
+ --color-surface-raised: var(--color-gray-900);
17
+ --color-surface-overlay: var(--color-gray-800);
18
+ --color-surface-sunken: var(--color-gray-950);
19
+ --color-surface-muted: var(--color-gray-800);
20
+
21
+ /* ===== Foreground ===== */
22
+ --color-fg: var(--color-gray-50);
23
+ --color-fg-muted: var(--color-gray-300);
24
+ --color-fg-subtle: var(--color-gray-400);
25
+
26
+ /* ===== Border ===== */
27
+ --color-border: var(--color-gray-600);
28
+ --color-border-muted: var(--color-gray-700);
29
+ --color-border-strong: var(--color-gray-500);
30
+
31
+ /* ===== Primary ===== */
32
+ --color-primary-50: var(--color-blue-950);
33
+ --color-primary-100: var(--color-blue-900);
34
+ --color-primary-200: var(--color-blue-800);
35
+ --color-primary-300: var(--color-blue-700);
36
+ --color-primary-400: var(--color-blue-600);
37
+ --color-primary-500: var(--color-blue-500);
38
+ --color-primary-600: var(--color-blue-400);
39
+ --color-primary-700: var(--color-blue-300);
40
+ --color-primary-800: var(--color-blue-200);
41
+ --color-primary-900: var(--color-blue-100);
42
+ --color-primary-950: var(--color-blue-50);
43
+
44
+ /* ===== Secondary ===== */
45
+ --color-secondary-50: var(--color-slate-950);
46
+ --color-secondary-100: var(--color-slate-900);
47
+ --color-secondary-200: var(--color-slate-800);
48
+ --color-secondary-300: var(--color-slate-700);
49
+ --color-secondary-400: var(--color-slate-600);
50
+ --color-secondary-500: var(--color-slate-500);
51
+ --color-secondary-600: var(--color-slate-400);
52
+ --color-secondary-700: var(--color-slate-300);
53
+ --color-secondary-800: var(--color-slate-200);
54
+ --color-secondary-900: var(--color-slate-100);
55
+ --color-secondary-950: var(--color-slate-50);
56
+
57
+ /* ===== Accent ===== */
58
+ --color-accent-50: var(--color-violet-950);
59
+ --color-accent-100: var(--color-violet-900);
60
+ --color-accent-200: var(--color-violet-800);
61
+ --color-accent-300: var(--color-violet-700);
62
+ --color-accent-400: var(--color-violet-600);
63
+ --color-accent-500: var(--color-violet-500);
64
+ --color-accent-600: var(--color-violet-400);
65
+ --color-accent-700: var(--color-violet-300);
66
+ --color-accent-800: var(--color-violet-200);
67
+ --color-accent-900: var(--color-violet-100);
68
+ --color-accent-950: var(--color-violet-50);
69
+
70
+ /* ===== Neutral ===== */
71
+ --color-neutral-50: var(--color-gray-950);
72
+ --color-neutral-100: var(--color-gray-900);
73
+ --color-neutral-200: var(--color-gray-800);
74
+ --color-neutral-300: var(--color-gray-700);
75
+ --color-neutral-400: var(--color-gray-600);
76
+ --color-neutral-500: var(--color-gray-500);
77
+ --color-neutral-600: var(--color-gray-400);
78
+ --color-neutral-700: var(--color-gray-300);
79
+ --color-neutral-800: var(--color-gray-200);
80
+ --color-neutral-900: var(--color-gray-100);
81
+ --color-neutral-950: var(--color-gray-50);
82
+
83
+ /* ===== Info ===== */
84
+ --color-info-50: var(--color-sky-950);
85
+ --color-info-100: var(--color-sky-900);
86
+ --color-info-200: var(--color-sky-800);
87
+ --color-info-300: var(--color-sky-700);
88
+ --color-info-400: var(--color-sky-600);
89
+ --color-info-500: var(--color-sky-500);
90
+ --color-info-600: var(--color-sky-400);
91
+ --color-info-700: var(--color-sky-300);
92
+ --color-info-800: var(--color-sky-200);
93
+ --color-info-900: var(--color-sky-100);
94
+ --color-info-950: var(--color-sky-50);
95
+
96
+ /* ===== Success ===== */
97
+ --color-success-50: var(--color-green-950);
98
+ --color-success-100: var(--color-green-900);
99
+ --color-success-200: var(--color-green-800);
100
+ --color-success-300: var(--color-green-700);
101
+ --color-success-400: var(--color-green-600);
102
+ --color-success-500: var(--color-green-500);
103
+ --color-success-600: var(--color-green-400);
104
+ --color-success-700: var(--color-green-300);
105
+ --color-success-800: var(--color-green-200);
106
+ --color-success-900: var(--color-green-100);
107
+ --color-success-950: var(--color-green-50);
108
+
109
+ /* ===== Warning ===== */
110
+ --color-warning-50: var(--color-amber-950);
111
+ --color-warning-100: var(--color-amber-900);
112
+ --color-warning-200: var(--color-amber-800);
113
+ --color-warning-300: var(--color-amber-700);
114
+ --color-warning-400: var(--color-amber-600);
115
+ --color-warning-500: var(--color-amber-500);
116
+ --color-warning-600: var(--color-amber-400);
117
+ --color-warning-700: var(--color-amber-300);
118
+ --color-warning-800: var(--color-amber-200);
119
+ --color-warning-900: var(--color-amber-100);
120
+ --color-warning-950: var(--color-amber-50);
121
+
122
+ /* ===== Error ===== */
123
+ --color-error-50: var(--color-red-950);
124
+ --color-error-100: var(--color-red-900);
125
+ --color-error-200: var(--color-red-800);
126
+ --color-error-300: var(--color-red-700);
127
+ --color-error-400: var(--color-red-600);
128
+ --color-error-500: var(--color-red-500);
129
+ --color-error-600: var(--color-red-400);
130
+ --color-error-700: var(--color-red-300);
131
+ --color-error-800: var(--color-red-200);
132
+ --color-error-900: var(--color-red-100);
133
+ --color-error-950: var(--color-red-50);
134
+
135
+ /* ===== Role slot tokens (dark) =====
136
+ Slots are redefined explicitly — they do NOT inherit from the inverted
137
+ {role}-{shade} scale above, because a literal mirror would break contrast
138
+ (e.g. `green-300 + white` ≈ 1.7:1 ✗). Each pairing has been picked to meet
139
+ WCAG AA against the matched surface (typically gray-950).
140
+
141
+ Dark-mode contrast notes:
142
+ sky-950 ↔ sky-100 ≈ 12.5:1 ✓ AA
143
+ sky-950 ↔ sky-300 ≈ 7.7:1 ✓ AA
144
+ sky-500 ↔ sky-950 ≈ 7.4:1 ✓ AA (info-solid)
145
+ sky-300 ↔ gray-950 ≈ 11:1 ✓ AA (info-fg on surface)
146
+ green-500 ↔ green-950 ≈ 8.1:1 ✓ AA
147
+ amber-400 ↔ amber-950 ≈ 11.2:1 ✓ AA (yellow signage preserved)
148
+ red-500 ↔ red-950 ≈ 5.4:1 ✓ AA
149
+ blue-500 ↔ blue-950 ≈ 5.8:1 ✓ AA
150
+ violet-500 ↔ violet-950 ≈ 6.0:1 ✓ AA
151
+ slate-300 ↔ slate-950 ≈ 11.6:1 ✓ AA
152
+ */
153
+
154
+ /* ----- Primary ----- */
155
+ --color-primary-soft: var(--color-blue-950);
156
+ --color-primary-soft-hover: var(--color-blue-900);
157
+ --color-primary-soft-fg: var(--color-blue-100);
158
+ --color-primary-soft-fg-muted: var(--color-blue-300);
159
+ --color-primary-solid: var(--color-blue-500);
160
+ --color-primary-solid-hover: var(--color-blue-400);
161
+ --color-primary-solid-fg: var(--color-blue-950);
162
+ --color-primary-border: var(--color-blue-800);
163
+ --color-primary-border-strong: var(--color-blue-500);
164
+ --color-primary-fg: var(--color-blue-300);
165
+ --color-primary-icon: var(--color-blue-400);
166
+
167
+ /* ----- Secondary ----- */
168
+ --color-secondary-soft: var(--color-slate-900);
169
+ --color-secondary-soft-hover: var(--color-slate-800);
170
+ --color-secondary-soft-fg: var(--color-slate-100);
171
+ --color-secondary-soft-fg-muted: var(--color-slate-300);
172
+ --color-secondary-solid: var(--color-slate-300);
173
+ --color-secondary-solid-hover: var(--color-slate-200);
174
+ --color-secondary-solid-fg: var(--color-slate-900);
175
+ --color-secondary-border: var(--color-slate-700);
176
+ --color-secondary-border-strong: var(--color-slate-400);
177
+ --color-secondary-fg: var(--color-slate-300);
178
+ --color-secondary-icon: var(--color-slate-400);
179
+
180
+ /* ----- Accent ----- */
181
+ --color-accent-soft: var(--color-violet-950);
182
+ --color-accent-soft-hover: var(--color-violet-900);
183
+ --color-accent-soft-fg: var(--color-violet-100);
184
+ --color-accent-soft-fg-muted: var(--color-violet-300);
185
+ --color-accent-solid: var(--color-violet-500);
186
+ --color-accent-solid-hover: var(--color-violet-400);
187
+ --color-accent-solid-fg: var(--color-violet-950);
188
+ --color-accent-border: var(--color-violet-800);
189
+ --color-accent-border-strong: var(--color-violet-500);
190
+ --color-accent-fg: var(--color-violet-300);
191
+ --color-accent-icon: var(--color-violet-400);
192
+
193
+ /* ----- Neutral ----- (uses surface/fg tokens; auto-correct in dark) */
194
+ --color-neutral-soft: var(--color-surface-muted);
195
+ --color-neutral-soft-hover: var(--color-surface-sunken);
196
+ --color-neutral-soft-fg: var(--color-fg);
197
+ --color-neutral-soft-fg-muted: var(--color-fg-muted);
198
+ --color-neutral-solid: var(--color-fg);
199
+ --color-neutral-solid-hover: var(--color-gray-200);
200
+ --color-neutral-solid-fg: var(--color-surface);
201
+ --color-neutral-border: var(--color-border);
202
+ --color-neutral-border-strong: var(--color-border-strong);
203
+ --color-neutral-fg: var(--color-fg);
204
+ --color-neutral-icon: var(--color-fg-muted);
205
+
206
+ /* ----- Info ----- */
207
+ --color-info-soft: var(--color-sky-950);
208
+ --color-info-soft-hover: var(--color-sky-900);
209
+ --color-info-soft-fg: var(--color-sky-100);
210
+ --color-info-soft-fg-muted: var(--color-sky-300);
211
+ --color-info-solid: var(--color-sky-500);
212
+ --color-info-solid-hover: var(--color-sky-400);
213
+ --color-info-solid-fg: var(--color-sky-950);
214
+ --color-info-border: var(--color-sky-800);
215
+ --color-info-border-strong: var(--color-sky-500);
216
+ --color-info-fg: var(--color-sky-300);
217
+ --color-info-icon: var(--color-sky-400);
218
+
219
+ /* ----- Success ----- */
220
+ --color-success-soft: var(--color-green-950);
221
+ --color-success-soft-hover: var(--color-green-900);
222
+ --color-success-soft-fg: var(--color-green-100);
223
+ --color-success-soft-fg-muted: var(--color-green-300);
224
+ --color-success-solid: var(--color-green-500);
225
+ --color-success-solid-hover: var(--color-green-400);
226
+ --color-success-solid-fg: var(--color-green-950);
227
+ --color-success-border: var(--color-green-800);
228
+ --color-success-border-strong: var(--color-green-500);
229
+ --color-success-fg: var(--color-green-300);
230
+ --color-success-icon: var(--color-green-400);
231
+
232
+ /* ----- Warning ----- */
233
+ --color-warning-soft: var(--color-amber-950);
234
+ --color-warning-soft-hover: var(--color-amber-900);
235
+ --color-warning-soft-fg: var(--color-amber-100);
236
+ --color-warning-soft-fg-muted: var(--color-amber-300);
237
+ --color-warning-solid: var(--color-amber-400);
238
+ --color-warning-solid-hover: var(--color-amber-300);
239
+ --color-warning-solid-fg: var(--color-amber-950);
240
+ --color-warning-border: var(--color-amber-800);
241
+ --color-warning-border-strong: var(--color-amber-500);
242
+ --color-warning-fg: var(--color-amber-300);
243
+ --color-warning-icon: var(--color-amber-400);
244
+
245
+ /* ----- Error ----- */
246
+ --color-error-soft: var(--color-red-950);
247
+ --color-error-soft-hover: var(--color-red-900);
248
+ --color-error-soft-fg: var(--color-red-100);
249
+ --color-error-soft-fg-muted: var(--color-red-300);
250
+ --color-error-solid: var(--color-red-500);
251
+ --color-error-solid-hover: var(--color-red-400);
252
+ --color-error-solid-fg: var(--color-red-950);
253
+ --color-error-border: var(--color-red-800);
254
+ --color-error-border-strong: var(--color-red-500);
255
+ --color-error-fg: var(--color-red-300);
256
+ --color-error-icon: var(--color-red-400);
257
+
258
+ /* ===== Legacy on-role aliases (dark) — see note in `_semantic.css` ===== */
259
+ --color-on-info: var(--color-info-solid-fg);
260
+ --color-on-success: var(--color-success-solid-fg);
261
+ --color-on-warning: var(--color-warning-solid-fg);
262
+ --color-on-error: var(--color-error-solid-fg);
263
+ --color-on-primary: var(--color-primary-solid-fg);
264
+ --color-on-secondary: var(--color-secondary-solid-fg);
265
+ --color-on-accent: var(--color-accent-solid-fg);
266
+ --color-on-neutral: var(--color-neutral-solid-fg);
267
+ }
268
+
269
+ @media (prefers-color-scheme: dark) {
270
+ :root:not([data-theme="light"]):not([data-theme="high-contrast"]) {
271
+ /* ===== Surface ===== */
272
+ --color-surface: var(--color-gray-950);
273
+ --color-surface-raised: var(--color-gray-900);
274
+ --color-surface-overlay: var(--color-gray-800);
275
+ --color-surface-sunken: var(--color-gray-950);
276
+ --color-surface-muted: var(--color-gray-800);
277
+
278
+ /* ===== Foreground ===== */
279
+ --color-fg: var(--color-gray-50);
280
+ --color-fg-muted: var(--color-gray-300);
281
+ --color-fg-subtle: var(--color-gray-400);
282
+
283
+ /* ===== Border ===== */
284
+ --color-border: var(--color-gray-600);
285
+ --color-border-muted: var(--color-gray-700);
286
+ --color-border-strong: var(--color-gray-500);
287
+
288
+ /* ===== Primary ===== */
289
+ --color-primary-50: var(--color-blue-950);
290
+ --color-primary-100: var(--color-blue-900);
291
+ --color-primary-200: var(--color-blue-800);
292
+ --color-primary-300: var(--color-blue-700);
293
+ --color-primary-400: var(--color-blue-600);
294
+ --color-primary-500: var(--color-blue-500);
295
+ --color-primary-600: var(--color-blue-400);
296
+ --color-primary-700: var(--color-blue-300);
297
+ --color-primary-800: var(--color-blue-200);
298
+ --color-primary-900: var(--color-blue-100);
299
+ --color-primary-950: var(--color-blue-50);
300
+
301
+ /* ===== Secondary ===== */
302
+ --color-secondary-50: var(--color-slate-950);
303
+ --color-secondary-100: var(--color-slate-900);
304
+ --color-secondary-200: var(--color-slate-800);
305
+ --color-secondary-300: var(--color-slate-700);
306
+ --color-secondary-400: var(--color-slate-600);
307
+ --color-secondary-500: var(--color-slate-500);
308
+ --color-secondary-600: var(--color-slate-400);
309
+ --color-secondary-700: var(--color-slate-300);
310
+ --color-secondary-800: var(--color-slate-200);
311
+ --color-secondary-900: var(--color-slate-100);
312
+ --color-secondary-950: var(--color-slate-50);
313
+
314
+ /* ===== Accent ===== */
315
+ --color-accent-50: var(--color-violet-950);
316
+ --color-accent-100: var(--color-violet-900);
317
+ --color-accent-200: var(--color-violet-800);
318
+ --color-accent-300: var(--color-violet-700);
319
+ --color-accent-400: var(--color-violet-600);
320
+ --color-accent-500: var(--color-violet-500);
321
+ --color-accent-600: var(--color-violet-400);
322
+ --color-accent-700: var(--color-violet-300);
323
+ --color-accent-800: var(--color-violet-200);
324
+ --color-accent-900: var(--color-violet-100);
325
+ --color-accent-950: var(--color-violet-50);
326
+
327
+ /* ===== Neutral ===== */
328
+ --color-neutral-50: var(--color-gray-950);
329
+ --color-neutral-100: var(--color-gray-900);
330
+ --color-neutral-200: var(--color-gray-800);
331
+ --color-neutral-300: var(--color-gray-700);
332
+ --color-neutral-400: var(--color-gray-600);
333
+ --color-neutral-500: var(--color-gray-500);
334
+ --color-neutral-600: var(--color-gray-400);
335
+ --color-neutral-700: var(--color-gray-300);
336
+ --color-neutral-800: var(--color-gray-200);
337
+ --color-neutral-900: var(--color-gray-100);
338
+ --color-neutral-950: var(--color-gray-50);
339
+
340
+ /* ===== Info ===== */
341
+ --color-info-50: var(--color-sky-950);
342
+ --color-info-100: var(--color-sky-900);
343
+ --color-info-200: var(--color-sky-800);
344
+ --color-info-300: var(--color-sky-700);
345
+ --color-info-400: var(--color-sky-600);
346
+ --color-info-500: var(--color-sky-500);
347
+ --color-info-600: var(--color-sky-400);
348
+ --color-info-700: var(--color-sky-300);
349
+ --color-info-800: var(--color-sky-200);
350
+ --color-info-900: var(--color-sky-100);
351
+ --color-info-950: var(--color-sky-50);
352
+
353
+ /* ===== Success ===== */
354
+ --color-success-50: var(--color-green-950);
355
+ --color-success-100: var(--color-green-900);
356
+ --color-success-200: var(--color-green-800);
357
+ --color-success-300: var(--color-green-700);
358
+ --color-success-400: var(--color-green-600);
359
+ --color-success-500: var(--color-green-500);
360
+ --color-success-600: var(--color-green-400);
361
+ --color-success-700: var(--color-green-300);
362
+ --color-success-800: var(--color-green-200);
363
+ --color-success-900: var(--color-green-100);
364
+ --color-success-950: var(--color-green-50);
365
+
366
+ /* ===== Warning ===== */
367
+ --color-warning-50: var(--color-amber-950);
368
+ --color-warning-100: var(--color-amber-900);
369
+ --color-warning-200: var(--color-amber-800);
370
+ --color-warning-300: var(--color-amber-700);
371
+ --color-warning-400: var(--color-amber-600);
372
+ --color-warning-500: var(--color-amber-500);
373
+ --color-warning-600: var(--color-amber-400);
374
+ --color-warning-700: var(--color-amber-300);
375
+ --color-warning-800: var(--color-amber-200);
376
+ --color-warning-900: var(--color-amber-100);
377
+ --color-warning-950: var(--color-amber-50);
378
+
379
+ /* ===== Error ===== */
380
+ --color-error-50: var(--color-red-950);
381
+ --color-error-100: var(--color-red-900);
382
+ --color-error-200: var(--color-red-800);
383
+ --color-error-300: var(--color-red-700);
384
+ --color-error-400: var(--color-red-600);
385
+ --color-error-500: var(--color-red-500);
386
+ --color-error-600: var(--color-red-400);
387
+ --color-error-700: var(--color-red-300);
388
+ --color-error-800: var(--color-red-200);
389
+ --color-error-900: var(--color-red-100);
390
+ --color-error-950: var(--color-red-50);
391
+
392
+ /* ===== Role slot tokens (dark, media-query fallback) =====
393
+ Kept in lock-step with the `[data-theme="dark"]` block above. See that
394
+ block for contrast notes. */
395
+
396
+ /* Primary */
397
+ --color-primary-soft: var(--color-blue-950);
398
+ --color-primary-soft-hover: var(--color-blue-900);
399
+ --color-primary-soft-fg: var(--color-blue-100);
400
+ --color-primary-soft-fg-muted: var(--color-blue-300);
401
+ --color-primary-solid: var(--color-blue-500);
402
+ --color-primary-solid-hover: var(--color-blue-400);
403
+ --color-primary-solid-fg: var(--color-blue-950);
404
+ --color-primary-border: var(--color-blue-800);
405
+ --color-primary-border-strong: var(--color-blue-500);
406
+ --color-primary-fg: var(--color-blue-300);
407
+ --color-primary-icon: var(--color-blue-400);
408
+
409
+ /* Secondary */
410
+ --color-secondary-soft: var(--color-slate-900);
411
+ --color-secondary-soft-hover: var(--color-slate-800);
412
+ --color-secondary-soft-fg: var(--color-slate-100);
413
+ --color-secondary-soft-fg-muted: var(--color-slate-300);
414
+ --color-secondary-solid: var(--color-slate-300);
415
+ --color-secondary-solid-hover: var(--color-slate-200);
416
+ --color-secondary-solid-fg: var(--color-slate-900);
417
+ --color-secondary-border: var(--color-slate-700);
418
+ --color-secondary-border-strong: var(--color-slate-400);
419
+ --color-secondary-fg: var(--color-slate-300);
420
+ --color-secondary-icon: var(--color-slate-400);
421
+
422
+ /* Accent */
423
+ --color-accent-soft: var(--color-violet-950);
424
+ --color-accent-soft-hover: var(--color-violet-900);
425
+ --color-accent-soft-fg: var(--color-violet-100);
426
+ --color-accent-soft-fg-muted: var(--color-violet-300);
427
+ --color-accent-solid: var(--color-violet-500);
428
+ --color-accent-solid-hover: var(--color-violet-400);
429
+ --color-accent-solid-fg: var(--color-violet-950);
430
+ --color-accent-border: var(--color-violet-800);
431
+ --color-accent-border-strong: var(--color-violet-500);
432
+ --color-accent-fg: var(--color-violet-300);
433
+ --color-accent-icon: var(--color-violet-400);
434
+
435
+ /* Neutral */
436
+ --color-neutral-soft: var(--color-surface-muted);
437
+ --color-neutral-soft-hover: var(--color-surface-sunken);
438
+ --color-neutral-soft-fg: var(--color-fg);
439
+ --color-neutral-soft-fg-muted: var(--color-fg-muted);
440
+ --color-neutral-solid: var(--color-fg);
441
+ --color-neutral-solid-hover: var(--color-gray-200);
442
+ --color-neutral-solid-fg: var(--color-surface);
443
+ --color-neutral-border: var(--color-border);
444
+ --color-neutral-border-strong: var(--color-border-strong);
445
+ --color-neutral-fg: var(--color-fg);
446
+ --color-neutral-icon: var(--color-fg-muted);
447
+
448
+ /* Info */
449
+ --color-info-soft: var(--color-sky-950);
450
+ --color-info-soft-hover: var(--color-sky-900);
451
+ --color-info-soft-fg: var(--color-sky-100);
452
+ --color-info-soft-fg-muted: var(--color-sky-300);
453
+ --color-info-solid: var(--color-sky-500);
454
+ --color-info-solid-hover: var(--color-sky-400);
455
+ --color-info-solid-fg: var(--color-sky-950);
456
+ --color-info-border: var(--color-sky-800);
457
+ --color-info-border-strong: var(--color-sky-500);
458
+ --color-info-fg: var(--color-sky-300);
459
+ --color-info-icon: var(--color-sky-400);
460
+
461
+ /* Success */
462
+ --color-success-soft: var(--color-green-950);
463
+ --color-success-soft-hover: var(--color-green-900);
464
+ --color-success-soft-fg: var(--color-green-100);
465
+ --color-success-soft-fg-muted: var(--color-green-300);
466
+ --color-success-solid: var(--color-green-500);
467
+ --color-success-solid-hover: var(--color-green-400);
468
+ --color-success-solid-fg: var(--color-green-950);
469
+ --color-success-border: var(--color-green-800);
470
+ --color-success-border-strong: var(--color-green-500);
471
+ --color-success-fg: var(--color-green-300);
472
+ --color-success-icon: var(--color-green-400);
473
+
474
+ /* Warning */
475
+ --color-warning-soft: var(--color-amber-950);
476
+ --color-warning-soft-hover: var(--color-amber-900);
477
+ --color-warning-soft-fg: var(--color-amber-100);
478
+ --color-warning-soft-fg-muted: var(--color-amber-300);
479
+ --color-warning-solid: var(--color-amber-400);
480
+ --color-warning-solid-hover: var(--color-amber-300);
481
+ --color-warning-solid-fg: var(--color-amber-950);
482
+ --color-warning-border: var(--color-amber-800);
483
+ --color-warning-border-strong: var(--color-amber-500);
484
+ --color-warning-fg: var(--color-amber-300);
485
+ --color-warning-icon: var(--color-amber-400);
486
+
487
+ /* Error */
488
+ --color-error-soft: var(--color-red-950);
489
+ --color-error-soft-hover: var(--color-red-900);
490
+ --color-error-soft-fg: var(--color-red-100);
491
+ --color-error-soft-fg-muted: var(--color-red-300);
492
+ --color-error-solid: var(--color-red-500);
493
+ --color-error-solid-hover: var(--color-red-400);
494
+ --color-error-solid-fg: var(--color-red-950);
495
+ --color-error-border: var(--color-red-800);
496
+ --color-error-border-strong: var(--color-red-500);
497
+ --color-error-fg: var(--color-red-300);
498
+ --color-error-icon: var(--color-red-400);
499
+
500
+ /* Legacy on-role aliases (dark, media fallback) */
501
+ --color-on-info: var(--color-info-solid-fg);
502
+ --color-on-success: var(--color-success-solid-fg);
503
+ --color-on-warning: var(--color-warning-solid-fg);
504
+ --color-on-error: var(--color-error-solid-fg);
505
+ --color-on-primary: var(--color-primary-solid-fg);
506
+ --color-on-secondary: var(--color-secondary-solid-fg);
507
+ --color-on-accent: var(--color-accent-solid-fg);
508
+ --color-on-neutral: var(--color-neutral-solid-fg);
509
+ }
510
+ }