@nukleas/cyberdesign 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 (208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/build.ts +286 -0
  4. package/dist/cyberdesign-vars-only.css +116 -0
  5. package/dist/cyberdesign.css +8377 -0
  6. package/dist/fonts/JetBrainsMono-Variable.woff2 +0 -0
  7. package/dist/fonts/OFL.txt +93 -0
  8. package/dist/react/Accordion.d.ts +34 -0
  9. package/dist/react/Accordion.js +13 -0
  10. package/dist/react/Alert.d.ts +19 -0
  11. package/dist/react/Alert.js +6 -0
  12. package/dist/react/AugButton.d.ts +12 -0
  13. package/dist/react/AugButton.js +6 -0
  14. package/dist/react/AugPanel.d.ts +10 -0
  15. package/dist/react/AugPanel.js +6 -0
  16. package/dist/react/Avatar.d.ts +28 -0
  17. package/dist/react/Avatar.js +11 -0
  18. package/dist/react/Badge.d.ts +10 -0
  19. package/dist/react/Badge.js +6 -0
  20. package/dist/react/Breadcrumb.d.ts +19 -0
  21. package/dist/react/Breadcrumb.js +10 -0
  22. package/dist/react/Button.d.ts +12 -0
  23. package/dist/react/Button.js +6 -0
  24. package/dist/react/Checkbox.d.ts +9 -0
  25. package/dist/react/Checkbox.js +9 -0
  26. package/dist/react/Dropdown.d.ts +35 -0
  27. package/dist/react/Dropdown.js +20 -0
  28. package/dist/react/Field.d.ts +13 -0
  29. package/dist/react/Field.js +6 -0
  30. package/dist/react/Gauge.d.ts +19 -0
  31. package/dist/react/Gauge.js +6 -0
  32. package/dist/react/GlowCard.d.ts +12 -0
  33. package/dist/react/GlowCard.js +4 -0
  34. package/dist/react/HudBar.d.ts +34 -0
  35. package/dist/react/HudBar.js +10 -0
  36. package/dist/react/HudFrame.d.ts +19 -0
  37. package/dist/react/HudFrame.js +6 -0
  38. package/dist/react/Input.d.ts +11 -0
  39. package/dist/react/Input.js +6 -0
  40. package/dist/react/Interference.d.ts +18 -0
  41. package/dist/react/Interference.js +6 -0
  42. package/dist/react/Kbd.d.ts +18 -0
  43. package/dist/react/Kbd.js +11 -0
  44. package/dist/react/Label.d.ts +8 -0
  45. package/dist/react/Label.js +6 -0
  46. package/dist/react/Modal.d.ts +19 -0
  47. package/dist/react/Modal.js +9 -0
  48. package/dist/react/Pagination.d.ts +23 -0
  49. package/dist/react/Pagination.js +28 -0
  50. package/dist/react/PanelHeader.d.ts +9 -0
  51. package/dist/react/PanelHeader.js +6 -0
  52. package/dist/react/Progress.d.ts +13 -0
  53. package/dist/react/Progress.js +6 -0
  54. package/dist/react/Radio.d.ts +9 -0
  55. package/dist/react/Radio.js +9 -0
  56. package/dist/react/Scanner.d.ts +11 -0
  57. package/dist/react/Scanner.js +6 -0
  58. package/dist/react/Select.d.ts +13 -0
  59. package/dist/react/Select.js +6 -0
  60. package/dist/react/Separator.d.ts +11 -0
  61. package/dist/react/Separator.js +7 -0
  62. package/dist/react/Skeleton.d.ts +11 -0
  63. package/dist/react/Skeleton.js +13 -0
  64. package/dist/react/Slider.d.ts +9 -0
  65. package/dist/react/Slider.js +9 -0
  66. package/dist/react/Spinner.d.ts +11 -0
  67. package/dist/react/Spinner.js +6 -0
  68. package/dist/react/Stat.d.ts +20 -0
  69. package/dist/react/Stat.js +11 -0
  70. package/dist/react/Switch.d.ts +9 -0
  71. package/dist/react/Switch.js +6 -0
  72. package/dist/react/Table.d.ts +55 -0
  73. package/dist/react/Table.js +36 -0
  74. package/dist/react/Tabs.d.ts +28 -0
  75. package/dist/react/Tabs.js +16 -0
  76. package/dist/react/Terminal.d.ts +33 -0
  77. package/dist/react/Terminal.js +6 -0
  78. package/dist/react/Textarea.d.ts +7 -0
  79. package/dist/react/Textarea.js +6 -0
  80. package/dist/react/Ticker.d.ts +13 -0
  81. package/dist/react/Ticker.js +7 -0
  82. package/dist/react/Toast.d.ts +15 -0
  83. package/dist/react/Toast.js +6 -0
  84. package/dist/react/Tooltip.d.ts +11 -0
  85. package/dist/react/Tooltip.js +6 -0
  86. package/dist/react/index.d.ts +39 -0
  87. package/dist/react/index.js +46 -0
  88. package/dist/tailwind-theme.css +171 -0
  89. package/dist/tokens/base.d.ts +33 -0
  90. package/dist/tokens/base.js +41 -0
  91. package/dist/tokens/index.d.ts +7 -0
  92. package/dist/tokens/index.js +7 -0
  93. package/dist/tokens/semantic.d.ts +1 -0
  94. package/dist/tokens/semantic.js +54 -0
  95. package/dist/tokens/themes/cyan.d.ts +1 -0
  96. package/dist/tokens/themes/cyan.js +15 -0
  97. package/dist/tokens/themes/green.d.ts +1 -0
  98. package/dist/tokens/themes/green.js +15 -0
  99. package/dist/tokens/themes/orange.d.ts +1 -0
  100. package/dist/tokens/themes/orange.js +15 -0
  101. package/dist/tokens/themes/red.d.ts +1 -0
  102. package/dist/tokens/themes/red.js +15 -0
  103. package/dist/tokens/themes/steel.d.ts +1 -0
  104. package/dist/tokens/themes/steel.js +15 -0
  105. package/package.json +73 -0
  106. package/src/css/a11y.css +67 -0
  107. package/src/css/animations.css +111 -0
  108. package/src/css/base.css +34 -0
  109. package/src/css/components/accordion.css +148 -0
  110. package/src/css/components/alert.css +116 -0
  111. package/src/css/components/app-patterns.css +894 -0
  112. package/src/css/components/augmented.css +474 -0
  113. package/src/css/components/avatar.css +105 -0
  114. package/src/css/components/badge.css +46 -0
  115. package/src/css/components/breadcrumb.css +75 -0
  116. package/src/css/components/button.css +130 -0
  117. package/src/css/components/calendar.css +135 -0
  118. package/src/css/components/card.css +68 -0
  119. package/src/css/components/carousel.css +69 -0
  120. package/src/css/components/charts.css +464 -0
  121. package/src/css/components/checkbox.css +136 -0
  122. package/src/css/components/command.css +162 -0
  123. package/src/css/components/dropdown.css +187 -0
  124. package/src/css/components/form.css +280 -0
  125. package/src/css/components/gauge.css +156 -0
  126. package/src/css/components/glow-card.css +32 -0
  127. package/src/css/components/hud.css +165 -0
  128. package/src/css/components/image.css +164 -0
  129. package/src/css/components/input-otp.css +53 -0
  130. package/src/css/components/input.css +182 -0
  131. package/src/css/components/interference.css +217 -0
  132. package/src/css/components/kbd.css +54 -0
  133. package/src/css/components/layout-extras.css +256 -0
  134. package/src/css/components/modal.css +146 -0
  135. package/src/css/components/navigation-extras.css +280 -0
  136. package/src/css/components/pagination.css +122 -0
  137. package/src/css/components/panel-header.css +55 -0
  138. package/src/css/components/popover.css +112 -0
  139. package/src/css/components/scanner.css +125 -0
  140. package/src/css/components/select.css +99 -0
  141. package/src/css/components/sheet.css +149 -0
  142. package/src/css/components/skeleton.css +77 -0
  143. package/src/css/components/slider.css +116 -0
  144. package/src/css/components/spinner.css +101 -0
  145. package/src/css/components/spreadsheet.css +314 -0
  146. package/src/css/components/svg.css +104 -0
  147. package/src/css/components/switch.css +114 -0
  148. package/src/css/components/table.css +115 -0
  149. package/src/css/components/tabs.css +159 -0
  150. package/src/css/components/terminal.css +259 -0
  151. package/src/css/components/ticker.css +100 -0
  152. package/src/css/components/toast.css +137 -0
  153. package/src/css/components/toaster.css +48 -0
  154. package/src/css/components/toggle.css +99 -0
  155. package/src/css/components/typography.css +122 -0
  156. package/src/css/components/vectorbg.css +57 -0
  157. package/src/css/utilities.css +165 -0
  158. package/src/fonts/JetBrainsMono-Variable.woff2 +0 -0
  159. package/src/fonts/OFL.txt +93 -0
  160. package/src/js/charts.js +533 -0
  161. package/src/react/Accordion.tsx +85 -0
  162. package/src/react/Alert.tsx +58 -0
  163. package/src/react/AugButton.tsx +40 -0
  164. package/src/react/AugPanel.tsx +36 -0
  165. package/src/react/Avatar.tsx +69 -0
  166. package/src/react/Badge.tsx +28 -0
  167. package/src/react/Breadcrumb.tsx +63 -0
  168. package/src/react/Button.tsx +39 -0
  169. package/src/react/Checkbox.tsx +31 -0
  170. package/src/react/Dropdown.tsx +104 -0
  171. package/src/react/Field.tsx +36 -0
  172. package/src/react/Gauge.tsx +57 -0
  173. package/src/react/GlowCard.tsx +25 -0
  174. package/src/react/HudBar.tsx +86 -0
  175. package/src/react/HudFrame.tsx +52 -0
  176. package/src/react/Input.tsx +38 -0
  177. package/src/react/Interference.tsx +53 -0
  178. package/src/react/Kbd.tsx +62 -0
  179. package/src/react/Label.tsx +31 -0
  180. package/src/react/Modal.tsx +63 -0
  181. package/src/react/Pagination.tsx +113 -0
  182. package/src/react/PanelHeader.tsx +28 -0
  183. package/src/react/Progress.tsx +47 -0
  184. package/src/react/Radio.tsx +31 -0
  185. package/src/react/Scanner.tsx +37 -0
  186. package/src/react/Select.tsx +43 -0
  187. package/src/react/Separator.tsx +40 -0
  188. package/src/react/Skeleton.tsx +50 -0
  189. package/src/react/Slider.tsx +28 -0
  190. package/src/react/Spinner.tsx +39 -0
  191. package/src/react/Stat.tsx +52 -0
  192. package/src/react/Switch.tsx +25 -0
  193. package/src/react/Table.tsx +144 -0
  194. package/src/react/Tabs.tsx +97 -0
  195. package/src/react/Terminal.tsx +95 -0
  196. package/src/react/Textarea.tsx +20 -0
  197. package/src/react/Ticker.tsx +46 -0
  198. package/src/react/Toast.tsx +43 -0
  199. package/src/react/Tooltip.tsx +32 -0
  200. package/src/react/index.ts +52 -0
  201. package/src/tokens/base.ts +48 -0
  202. package/src/tokens/index.ts +7 -0
  203. package/src/tokens/semantic.ts +63 -0
  204. package/src/tokens/themes/cyan.ts +16 -0
  205. package/src/tokens/themes/green.ts +16 -0
  206. package/src/tokens/themes/orange.ts +16 -0
  207. package/src/tokens/themes/red.ts +16 -0
  208. package/src/tokens/themes/steel.ts +16 -0
@@ -0,0 +1,464 @@
1
+ /* ── Stat card ──────────────────────────────────────────── */
2
+ /*
3
+ Usage:
4
+ <div class="cd-stat cd-stat--accent">
5
+ <span class="cd-stat__label">Active Incidents</span>
6
+ <span class="cd-stat__value">142</span>
7
+ <span class="cd-stat__delta cd-stat__delta--up">+12 today</span>
8
+ </div>
9
+ */
10
+
11
+ .cd-stat {
12
+ background: rgba(5, 6, 10, 0.72);
13
+ border: 1px solid var(--cd-border);
14
+ box-shadow: inset 0 -2px 0 color-mix(in srgb, var(--cd-accent) 8%, transparent);
15
+ padding: 8px 10px;
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: 4px;
19
+ transition: border-color 150ms ease, box-shadow 150ms ease;
20
+ }
21
+
22
+ .cd-stat:hover {
23
+ border-color: color-mix(in srgb, var(--cd-accent) 30%, transparent);
24
+ }
25
+
26
+ .cd-stat__label {
27
+ font-family: var(--cd-font-mono);
28
+ font-size: var(--cd-text-xs);
29
+ font-weight: 700;
30
+ text-transform: uppercase;
31
+ letter-spacing: 0.2em;
32
+ color: var(--cd-text-muted);
33
+ }
34
+
35
+ .cd-stat__value {
36
+ font-family: var(--cd-font-mono);
37
+ font-size: 22px;
38
+ font-weight: 700;
39
+ color: var(--cd-neon-green);
40
+ text-shadow:
41
+ 2px 0 0 rgba(255, 43, 214, 0.35),
42
+ 0 0 6px rgba(82, 255, 159, 0.35);
43
+ line-height: 1;
44
+ font-variant-numeric: tabular-nums;
45
+ }
46
+
47
+ .cd-stat__delta {
48
+ font-family: var(--cd-font-mono);
49
+ font-size: var(--cd-text-xs);
50
+ font-weight: 700;
51
+ letter-spacing: 0.06em;
52
+ color: var(--cd-text-muted);
53
+ }
54
+
55
+ .cd-stat__delta--up { color: var(--cd-neon-green); }
56
+ .cd-stat__delta--down { color: var(--cd-neon-red); }
57
+
58
+ /* Color variants override the value color */
59
+ .cd-stat--accent .cd-stat__value {
60
+ color: var(--cd-accent);
61
+ text-shadow: 0 0 8px color-mix(in srgb, var(--cd-accent) 50%, transparent);
62
+ }
63
+ .cd-stat--red .cd-stat__value {
64
+ color: var(--cd-neon-red);
65
+ text-shadow: 0 0 8px rgba(255, 69, 108, 0.5);
66
+ }
67
+ .cd-stat--yellow .cd-stat__value {
68
+ color: var(--cd-neon-yellow);
69
+ text-shadow: 0 0 8px rgba(247, 255, 90, 0.5);
70
+ }
71
+ .cd-stat--blue .cd-stat__value {
72
+ color: var(--cd-neon-blue);
73
+ text-shadow: 0 0 8px rgba(106, 168, 255, 0.5);
74
+ }
75
+ .cd-stat--magenta .cd-stat__value {
76
+ color: var(--cd-accent-secondary);
77
+ text-shadow: 0 0 8px rgba(255, 43, 214, 0.5);
78
+ }
79
+
80
+ /* ── Stats grid ─────────────────────────────────────────── */
81
+ /* Grid of cd-stat cards separated by 1px border lines */
82
+
83
+ .cd-stats {
84
+ display: grid;
85
+ grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
86
+ gap: 1px;
87
+ background: var(--cd-border-dim);
88
+ border: 1px solid var(--cd-border-dim);
89
+ }
90
+
91
+ .cd-stats .cd-stat {
92
+ border: none;
93
+ box-shadow: none;
94
+ }
95
+
96
+ /* ── Horizontal bar chart ───────────────────────────────── */
97
+ /*
98
+ Set per-bar color+width via CSS custom properties:
99
+ <div class="cd-hbar" style="--bar-color: #52ff9f; --bar-w: 72%">
100
+ */
101
+
102
+ .cd-hbar-chart {
103
+ display: flex;
104
+ flex-direction: column;
105
+ gap: 7px;
106
+ width: 100%;
107
+ }
108
+
109
+ .cd-hbar {
110
+ display: flex;
111
+ align-items: center;
112
+ gap: 8px;
113
+ font-family: var(--cd-font-mono);
114
+ }
115
+
116
+ .cd-hbar__dot {
117
+ width: 5px;
118
+ height: 5px;
119
+ flex-shrink: 0;
120
+ background: var(--bar-color, var(--cd-accent));
121
+ box-shadow: 0 0 4px var(--bar-color, var(--cd-accent));
122
+ }
123
+
124
+ .cd-hbar__label {
125
+ font-size: var(--cd-text-xs);
126
+ font-weight: 700;
127
+ text-transform: uppercase;
128
+ letter-spacing: 0.08em;
129
+ color: var(--cd-text-muted);
130
+ width: 80px;
131
+ flex-shrink: 0;
132
+ overflow: hidden;
133
+ text-overflow: ellipsis;
134
+ white-space: nowrap;
135
+ }
136
+
137
+ .cd-hbar__track {
138
+ flex: 1;
139
+ height: 4px;
140
+ background: var(--cd-bg-panel-hover);
141
+ border: 1px solid var(--cd-border-dim);
142
+ overflow: hidden;
143
+ position: relative;
144
+ }
145
+
146
+ .cd-hbar__fill {
147
+ height: 100%;
148
+ width: var(--bar-w, 50%);
149
+ background: var(--bar-color, var(--cd-accent));
150
+ transition: width 600ms cubic-bezier(0.16, 1, 0.3, 1);
151
+ position: relative;
152
+ }
153
+
154
+ /* Glowing tip at the right edge of the fill */
155
+ .cd-hbar__fill::after {
156
+ content: '';
157
+ position: absolute;
158
+ right: 0;
159
+ top: 0;
160
+ bottom: 0;
161
+ width: 6px;
162
+ background: color-mix(in srgb, var(--bar-color, var(--cd-accent)) 80%, white);
163
+ filter: blur(2px);
164
+ }
165
+
166
+ .cd-hbar__value {
167
+ font-size: var(--cd-text-xs);
168
+ font-weight: 700;
169
+ font-variant-numeric: tabular-nums;
170
+ color: var(--cd-text-muted);
171
+ width: 28px;
172
+ text-align: right;
173
+ flex-shrink: 0;
174
+ }
175
+
176
+ /* Thick variant */
177
+ .cd-hbar-chart--thick .cd-hbar__track { height: 8px; }
178
+ .cd-hbar-chart--thick .cd-hbar__dot { width: 8px; height: 8px; }
179
+
180
+ /* ── Histogram (vertical bars) ──────────────────────────── */
181
+ /*
182
+ Set per-bar height via CSS custom property:
183
+ <div class="cd-histogram__bar" style="--bar-h: 65%; --bar-color: #47f6ff">
184
+ */
185
+
186
+ .cd-histogram {
187
+ display: flex;
188
+ align-items: flex-end;
189
+ gap: 2px;
190
+ width: 100%;
191
+ height: 80px;
192
+ position: relative;
193
+ }
194
+
195
+ /* Horizontal grid lines */
196
+ .cd-histogram__grid {
197
+ position: absolute;
198
+ inset: 0;
199
+ pointer-events: none;
200
+ display: flex;
201
+ flex-direction: column;
202
+ justify-content: space-between;
203
+ }
204
+
205
+ .cd-histogram__grid-line {
206
+ width: 100%;
207
+ height: 1px;
208
+ background: var(--cd-border-dim);
209
+ }
210
+
211
+ .cd-histogram__bar {
212
+ flex: 1;
213
+ height: var(--bar-h, 50%);
214
+ background: var(--bar-color, var(--cd-accent));
215
+ opacity: 0.75;
216
+ min-height: 2px;
217
+ transition: height 400ms cubic-bezier(0.16, 1, 0.3, 1), opacity 120ms ease;
218
+ cursor: pointer;
219
+ position: relative;
220
+ }
221
+
222
+ .cd-histogram__bar:hover {
223
+ opacity: 1;
224
+ box-shadow: 0 0 6px var(--bar-color, var(--cd-accent));
225
+ }
226
+
227
+ /* Stacked bar: flex children */
228
+ .cd-histogram__bar--stack {
229
+ display: flex;
230
+ flex-direction: column-reverse;
231
+ background: none;
232
+ opacity: 1;
233
+ }
234
+
235
+ .cd-histogram__segment {
236
+ width: 100%;
237
+ height: var(--seg-h, 50%);
238
+ background: var(--seg-color, var(--cd-accent));
239
+ opacity: 0.78;
240
+ min-height: 1px;
241
+ }
242
+
243
+ /* ── Sparkline ──────────────────────────────────────────── */
244
+ /*
245
+ Tiny inline bar series. Use --bar-h per bar.
246
+ <div class="cd-sparkline">
247
+ <div class="cd-sparkline__bar" style="--bar-h: 80%"></div>
248
+ ...
249
+ </div>
250
+ */
251
+
252
+ .cd-sparkline {
253
+ display: flex;
254
+ align-items: flex-end;
255
+ gap: 1px;
256
+ height: 24px;
257
+ }
258
+
259
+ .cd-sparkline__bar {
260
+ flex: 1;
261
+ height: var(--bar-h, 50%);
262
+ background: var(--bar-color, var(--cd-accent));
263
+ min-height: 2px;
264
+ opacity: 0.65;
265
+ transition: opacity 120ms ease;
266
+ }
267
+
268
+ .cd-sparkline__bar:hover {
269
+ opacity: 1;
270
+ }
271
+
272
+ /* Fixed-width bars (less elastic) */
273
+ .cd-sparkline--fixed .cd-sparkline__bar {
274
+ flex: none;
275
+ width: 3px;
276
+ }
277
+
278
+ /* Activity grid (like GitHub contributions) */
279
+ .cd-activity-grid {
280
+ display: grid;
281
+ grid-auto-flow: column;
282
+ grid-template-rows: repeat(7, 1fr);
283
+ gap: 2px;
284
+ }
285
+
286
+ .cd-activity-cell {
287
+ width: 10px;
288
+ height: 10px;
289
+ background: var(--cell-color, var(--cd-bg-panel-hover));
290
+ opacity: var(--cell-opacity, 0.15);
291
+ transition: opacity 120ms ease;
292
+ cursor: default;
293
+ }
294
+
295
+ .cd-activity-cell:hover {
296
+ outline: 1px solid var(--cd-accent);
297
+ opacity: 1;
298
+ }
299
+
300
+ /* ── Event timeline ─────────────────────────────────────── */
301
+ /*
302
+ <div class="cd-timeline">
303
+ <div class="cd-timeline__item">
304
+ <div class="cd-timeline__spine">
305
+ <div class="cd-timeline__dot" style="--dot-color: #ff456c"></div>
306
+ <div class="cd-timeline__connector"></div>
307
+ </div>
308
+ <div class="cd-timeline__body">
309
+ <div class="cd-timeline__time">14:32</div>
310
+ <div class="cd-timeline__title">Event title</div>
311
+ <div class="cd-timeline__desc">Optional description</div>
312
+ </div>
313
+ </div>
314
+ </div>
315
+ */
316
+
317
+ .cd-timeline {
318
+ display: flex;
319
+ flex-direction: column;
320
+ }
321
+
322
+ .cd-timeline__item {
323
+ display: flex;
324
+ gap: 12px;
325
+ }
326
+
327
+ .cd-timeline__spine {
328
+ display: flex;
329
+ flex-direction: column;
330
+ align-items: center;
331
+ flex-shrink: 0;
332
+ width: 8px;
333
+ }
334
+
335
+ .cd-timeline__dot {
336
+ width: 8px;
337
+ height: 8px;
338
+ border-radius: 50%;
339
+ flex-shrink: 0;
340
+ margin-top: 2px;
341
+ background: var(--dot-color, var(--cd-accent));
342
+ box-shadow: 0 0 6px var(--dot-color, var(--cd-accent));
343
+ }
344
+
345
+ .cd-timeline__connector {
346
+ flex: 1;
347
+ width: 1px;
348
+ background: var(--cd-border-dim);
349
+ margin-top: 4px;
350
+ min-height: 8px;
351
+ }
352
+
353
+ /* Last item: hide connector */
354
+ .cd-timeline__item:last-child .cd-timeline__connector {
355
+ display: none;
356
+ }
357
+
358
+ .cd-timeline__body {
359
+ flex: 1;
360
+ padding-bottom: 16px;
361
+ }
362
+
363
+ .cd-timeline__time {
364
+ font-family: var(--cd-font-mono);
365
+ font-size: var(--cd-text-xs);
366
+ font-weight: 700;
367
+ letter-spacing: 0.25em;
368
+ color: var(--cd-accent);
369
+ text-transform: uppercase;
370
+ margin-bottom: 3px;
371
+ font-variant-numeric: tabular-nums;
372
+ }
373
+
374
+ .cd-timeline__title {
375
+ font-family: var(--cd-font-mono);
376
+ font-size: var(--cd-text-base);
377
+ color: var(--cd-text);
378
+ line-height: 1.4;
379
+ margin-bottom: 4px;
380
+ }
381
+
382
+ .cd-timeline__desc {
383
+ font-family: var(--cd-font-mono);
384
+ font-size: var(--cd-text-sm);
385
+ color: var(--cd-text-muted);
386
+ line-height: 1.5;
387
+ }
388
+
389
+ /* ── Canvas chart containers ────────────────────────────── */
390
+ /* Shell that canvas-based charts (from charts.js) render into */
391
+
392
+ .cd-chart {
393
+ position: relative;
394
+ width: 100%;
395
+ background: var(--cd-bg-panel);
396
+ border: 1px solid var(--cd-border-glow);
397
+ box-shadow: var(--cd-panel-shadow);
398
+ overflow: hidden;
399
+ }
400
+
401
+ .cd-chart canvas {
402
+ display: block;
403
+ width: 100%;
404
+ height: 100%;
405
+ }
406
+
407
+ /* Inset top + bottom neon gradient accent lines (AI-shell visualizer pattern) */
408
+ .cd-chart::before {
409
+ content: '';
410
+ position: absolute;
411
+ top: 0;
412
+ left: 0;
413
+ right: 0;
414
+ height: 1px;
415
+ background: linear-gradient(
416
+ 90deg,
417
+ transparent 0%,
418
+ color-mix(in srgb, var(--cd-accent) 55%, transparent) 40%,
419
+ color-mix(in srgb, var(--cd-accent-secondary) 40%, transparent) 60%,
420
+ transparent 100%
421
+ );
422
+ pointer-events: none;
423
+ z-index: 1;
424
+ }
425
+
426
+ /* Chart header inside the container */
427
+ .cd-chart__header {
428
+ display: flex;
429
+ align-items: center;
430
+ justify-content: space-between;
431
+ padding: 6px 10px;
432
+ border-bottom: 1px solid var(--cd-border-dim);
433
+ flex-shrink: 0;
434
+ }
435
+
436
+ .cd-chart__title {
437
+ font-family: var(--cd-font-mono);
438
+ font-size: var(--cd-text-xs);
439
+ font-weight: 700;
440
+ text-transform: uppercase;
441
+ letter-spacing: 0.18em;
442
+ color: var(--cd-accent);
443
+ }
444
+
445
+ .cd-chart__meta {
446
+ font-family: var(--cd-font-mono);
447
+ font-size: var(--cd-text-xs);
448
+ color: var(--cd-text-muted);
449
+ letter-spacing: 0.06em;
450
+ }
451
+
452
+ /* Scope variant: shorter, scope-specific accent */
453
+ .cd-chart--scope {
454
+ height: 60px;
455
+ }
456
+
457
+ .cd-chart--scope::before {
458
+ background: linear-gradient(
459
+ 90deg,
460
+ transparent 0%,
461
+ color-mix(in srgb, var(--cd-neon-yellow) 55%, transparent) 50%,
462
+ transparent 100%
463
+ );
464
+ }
@@ -0,0 +1,136 @@
1
+ /* ── Shared control base ────────────────────────────────── */
2
+
3
+ .cd-checkbox,
4
+ .cd-radio {
5
+ appearance: none;
6
+ -webkit-appearance: none;
7
+ width: 16px;
8
+ height: 16px;
9
+ flex-shrink: 0; /* enlarged for target size (was 14px) */
10
+ background: rgba(5, 6, 10, 0.82);
11
+ border: 1px solid var(--cd-border);
12
+ cursor: pointer;
13
+ position: relative;
14
+ transition: border-color 150ms ease, background 150ms ease, box-shadow 150ms ease;
15
+ vertical-align: middle;
16
+ margin: 0;
17
+ }
18
+
19
+ .cd-checkbox:hover:not(:disabled),
20
+ .cd-radio:hover:not(:disabled) {
21
+ border-color: color-mix(in srgb, var(--cd-accent) 55%, transparent);
22
+ }
23
+
24
+ .cd-checkbox:focus-visible,
25
+ .cd-radio:focus-visible {
26
+ outline: 1px solid var(--cd-accent);
27
+ outline-offset: 2px;
28
+ }
29
+
30
+ .cd-checkbox:disabled,
31
+ .cd-radio:disabled {
32
+ opacity: 0.3;
33
+ cursor: not-allowed;
34
+ }
35
+
36
+ /* ── Checkbox ───────────────────────────────────────────── */
37
+
38
+ .cd-checkbox {
39
+ border-radius: 0;
40
+ }
41
+
42
+ /* Checked state: neon fill + checkmark */
43
+ .cd-checkbox:checked {
44
+ background: color-mix(in srgb, var(--cd-accent) 20%, transparent);
45
+ border-color: var(--cd-accent);
46
+ box-shadow: 0 0 6px color-mix(in srgb, var(--cd-accent) 30%, transparent);
47
+ }
48
+
49
+ /* Checkmark via clip-path on a pseudo-element */
50
+ .cd-checkbox:checked::after {
51
+ content: '';
52
+ position: absolute;
53
+ left: 3px;
54
+ top: 6px;
55
+ width: 8px;
56
+ height: 4px;
57
+ border-left: 1.5px solid var(--cd-accent);
58
+ border-bottom: 1.5px solid var(--cd-accent);
59
+ transform: rotate(-45deg) translateY(-2px);
60
+ }
61
+
62
+ /* Indeterminate state */
63
+ .cd-checkbox:indeterminate {
64
+ background: color-mix(in srgb, var(--cd-accent) 15%, transparent);
65
+ border-color: color-mix(in srgb, var(--cd-accent) 60%, transparent);
66
+ }
67
+
68
+ .cd-checkbox:indeterminate::after {
69
+ content: '';
70
+ position: absolute;
71
+ left: 3px;
72
+ top: 50%;
73
+ width: 9px;
74
+ height: 1.5px;
75
+ background: var(--cd-accent);
76
+ transform: translateY(-50%);
77
+ }
78
+
79
+ /* ── Radio ──────────────────────────────────────────────── */
80
+
81
+ .cd-radio {
82
+ border-radius: 50%;
83
+ }
84
+
85
+ /* Checked: filled dot */
86
+ .cd-radio:checked {
87
+ border-color: var(--cd-accent);
88
+ box-shadow: 0 0 6px color-mix(in srgb, var(--cd-accent) 30%, transparent);
89
+ }
90
+
91
+ .cd-radio:checked::after {
92
+ content: '';
93
+ position: absolute;
94
+ left: 50%;
95
+ top: 50%;
96
+ width: 8px;
97
+ height: 8px;
98
+ background: var(--cd-accent);
99
+ border-radius: 50%;
100
+ transform: translate(-50%, -50%);
101
+ box-shadow: 0 0 4px color-mix(in srgb, var(--cd-accent) 60%, transparent);
102
+ }
103
+
104
+ /* ── Control label (checkbox/radio + text wrapper) ──────── */
105
+
106
+ .cd-control {
107
+ display: inline-flex;
108
+ align-items: center;
109
+ gap: 8px;
110
+ cursor: pointer;
111
+ font-family: var(--cd-font-mono);
112
+ font-size: var(--cd-text-base);
113
+ color: var(--cd-text-secondary);
114
+ user-select: none;
115
+ transition: color 120ms ease;
116
+ }
117
+
118
+ .cd-control:hover {
119
+ color: var(--cd-text);
120
+ }
121
+
122
+ .cd-control input:disabled ~ .cd-control__label {
123
+ opacity: 0.3;
124
+ }
125
+
126
+ .cd-control__label {
127
+ line-height: 1;
128
+ }
129
+
130
+ .cd-control__desc {
131
+ display: block;
132
+ font-size: var(--cd-text-xs);
133
+ color: var(--cd-text-muted);
134
+ margin-top: 2px;
135
+ letter-spacing: 0.04em;
136
+ }