@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,156 @@
1
+ /* ── Gauge / Radial Meter ──────────────────────────────────────────────────── */
2
+ /*
3
+ Circular/radial progress gauges with neon cyberpunk styling.
4
+
5
+ Usage:
6
+ <div class="cd-gauge" style="--value: 78;">
7
+ <div class="cd-gauge__track"></div>
8
+ <div class="cd-gauge__fill"></div>
9
+ <div class="cd-gauge__center">
10
+ <div class="cd-gauge__value">78</div>
11
+ <div class="cd-gauge__label">INTEGRITY</div>
12
+ </div>
13
+ <!-- optional ticks via CSS or children -->
14
+ </div>
15
+
16
+ The --value (0-100) drives the conic fill. Color via current --cd-accent (or override).
17
+
18
+ Modifiers / variants:
19
+ .cd-gauge--small
20
+ .cd-gauge--danger / --success (changes accent locally)
21
+ .cd-gauge--radar (concentric rings + sweep)
22
+
23
+ Works great inside .cd-hud-frame or .cd-glow-card.
24
+ */
25
+
26
+ .cd-gauge {
27
+ --size: 128px;
28
+ --thickness: 12px;
29
+ position: relative;
30
+ width: var(--size);
31
+ height: var(--size);
32
+ display: inline-flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ }
36
+
37
+ .cd-gauge__track,
38
+ .cd-gauge__fill {
39
+ position: absolute;
40
+ inset: 0;
41
+ border-radius: 50%;
42
+ }
43
+
44
+ .cd-gauge__track {
45
+ background: conic-gradient(
46
+ var(--cd-border) 0deg 360deg
47
+ );
48
+ border: 1px solid var(--cd-border-dim);
49
+ }
50
+
51
+ .cd-gauge__fill {
52
+ background: conic-gradient(
53
+ var(--cd-accent) 0deg calc(var(--value, 0) * 3.6deg),
54
+ transparent calc(var(--value, 0) * 3.6deg) 360deg
55
+ );
56
+ transition: background 300ms ease;
57
+ box-shadow: 0 0 8px var(--cd-accent-glow);
58
+ }
59
+
60
+ /* Center content */
61
+ .cd-gauge__center {
62
+ position: relative;
63
+ z-index: 2;
64
+ display: flex;
65
+ flex-direction: column;
66
+ align-items: center;
67
+ justify-content: center;
68
+ width: calc(100% - var(--thickness) * 2 - 8px);
69
+ height: calc(100% - var(--thickness) * 2 - 8px);
70
+ background: var(--cd-bg-panel);
71
+ border-radius: 50%;
72
+ border: 1px solid var(--cd-border-dim);
73
+ text-align: center;
74
+ }
75
+
76
+ .cd-gauge__value {
77
+ font-size: 28px;
78
+ font-weight: 700;
79
+ line-height: 1;
80
+ color: var(--cd-accent);
81
+ text-shadow: 0 0 6px var(--cd-accent-glow);
82
+ font-variant-numeric: tabular-nums;
83
+ }
84
+
85
+ .cd-gauge__label {
86
+ font-size: 8px;
87
+ font-weight: 700;
88
+ text-transform: uppercase;
89
+ letter-spacing: 0.15em;
90
+ color: var(--cd-text-muted);
91
+ margin-top: 2px;
92
+ }
93
+
94
+ /* Size variants */
95
+ .cd-gauge--small {
96
+ --size: 92px;
97
+ --thickness: 9px;
98
+ }
99
+
100
+ .cd-gauge--small .cd-gauge__value {
101
+ font-size: 20px;
102
+ }
103
+
104
+ .cd-gauge--small .cd-gauge__label {
105
+ font-size: 7px;
106
+ }
107
+
108
+ /* Color variants (override accent locally) */
109
+ .cd-gauge--danger { --cd-accent: var(--cd-neon-red); }
110
+ .cd-gauge--success { --cd-accent: var(--cd-neon-green); }
111
+ .cd-gauge--warn { --cd-accent: var(--cd-amber); }
112
+
113
+ /* Radar / sweep style */
114
+ .cd-gauge--radar .cd-gauge__track {
115
+ background:
116
+ radial-gradient(circle at 50% 50%,
117
+ transparent 48%,
118
+ var(--cd-border-dim) 48%,
119
+ var(--cd-border-dim) 50%,
120
+ transparent 50%
121
+ ),
122
+ conic-gradient(var(--cd-border) 0deg 360deg);
123
+ }
124
+
125
+ .cd-gauge--radar .cd-gauge__fill {
126
+ background: conic-gradient(
127
+ color-mix(in srgb, var(--cd-accent) 85%, transparent) 0deg calc(var(--value, 0) * 3.6deg),
128
+ transparent calc(var(--value, 0) * 3.6deg) 360deg
129
+ );
130
+ box-shadow: 0 0 12px var(--cd-accent-glow);
131
+ }
132
+
133
+ /* Optional tick marks (add as children or via ::before multiple) */
134
+ .cd-gauge__ticks {
135
+ position: absolute;
136
+ inset: 0;
137
+ pointer-events: none;
138
+ }
139
+
140
+ .cd-gauge__tick {
141
+ position: absolute;
142
+ left: 50%;
143
+ top: 4px;
144
+ width: 1px;
145
+ height: 6px;
146
+ background: var(--cd-accent);
147
+ transform-origin: 50% calc(var(--size) / 2 - 4px);
148
+ box-shadow: 0 0 2px var(--cd-accent-glow);
149
+ }
150
+
151
+ /* Reduced motion */
152
+ @media (prefers-reduced-motion: reduce) {
153
+ .cd-gauge__fill {
154
+ transition: none;
155
+ }
156
+ }
@@ -0,0 +1,32 @@
1
+ .cd-glow-card {
2
+ background: color-mix(in srgb, var(--cd-bg-panel) 80%, transparent);
3
+ border: 1px solid color-mix(in srgb, var(--cd-accent) 30%, transparent);
4
+ backdrop-filter: blur(var(--cd-card-blur, 4px));
5
+ -webkit-backdrop-filter: blur(var(--cd-card-blur, 4px));
6
+ transition: border-color 150ms ease, box-shadow 150ms ease, background 150ms ease;
7
+ }
8
+
9
+ .cd-glow-card:hover {
10
+ border-color: color-mix(in srgb, var(--cd-accent) 55%, transparent);
11
+ background: color-mix(in srgb, var(--cd-bg-panel-hover) 80%, transparent);
12
+ }
13
+
14
+ .cd-glow-card[data-active="true"],
15
+ .cd-glow-card.is-active {
16
+ border-color: color-mix(in srgb, var(--cd-accent) 60%, transparent);
17
+ box-shadow:
18
+ 0 0 8px color-mix(in srgb, var(--cd-accent) 25%, transparent),
19
+ 0 0 20px color-mix(in srgb, var(--cd-accent) 12%, transparent),
20
+ inset 0 0 8px color-mix(in srgb, var(--cd-accent) 6%, transparent);
21
+ }
22
+
23
+ /* Color variant modifiers — override --cd-accent locally for the card */
24
+ .cd-glow-card--orange { --cd-accent: #ff8800; }
25
+ .cd-glow-card--amber { --cd-accent: #ffaa00; }
26
+ .cd-glow-card--gold { --cd-accent: #ffcc00; }
27
+ .cd-glow-card--cyan { --cd-accent: #47f6ff; }
28
+ .cd-glow-card--magenta { --cd-accent: #ff2bd6; }
29
+ .cd-glow-card--green { --cd-accent: #52ff9f; }
30
+ .cd-glow-card--red { --cd-accent: #ff456c; }
31
+ .cd-glow-card--blue { --cd-accent: #6aa8ff; }
32
+ .cd-glow-card--purple { --cd-accent: #9d7cff; }
@@ -0,0 +1,165 @@
1
+ /* ── HUD Frames, Bars & Segments ──────────────────────────────────────────── */
2
+ /*
3
+ Heads-up display elements for cyberpunk / neo-futuristic interfaces.
4
+
5
+ Usage examples:
6
+ <!-- Floating frame / panel wrapper -->
7
+ <div class="cd-hud-frame">
8
+ <div class="cd-hud__label">THREAT LEVEL</div>
9
+ <div class="cd-hud__value cd-hud__value--warn">HIGH</div>
10
+ </div>
11
+
12
+ <!-- Top / bottom status bar -->
13
+ <div class="cd-hud-bar cd-hud-bar--top">
14
+ <div class="cd-hud-segment">
15
+ <span class="cd-hud-segment__label">LOC</span>
16
+ <span class="cd-hud-segment__value">SECTOR-7</span>
17
+ </div>
18
+ ...
19
+ </div>
20
+
21
+ Compose with: .cd-corners, .cd-glow, .cd-scanline (as child), existing badges/stats.
22
+
23
+ Modifiers: --top, --bottom, --side, --floating, --compact
24
+ */
25
+
26
+ .cd-hud-frame,
27
+ .cd-hud {
28
+ position: relative;
29
+ background: color-mix(in srgb, var(--cd-bg-panel) 94%, transparent);
30
+ border: 1px solid var(--cd-border-glow);
31
+ padding: 14px 16px;
32
+ color: var(--cd-text);
33
+ box-shadow:
34
+ inset 0 0 0 1px color-mix(in srgb, var(--cd-accent) 6%, transparent),
35
+ 0 0 12px color-mix(in srgb, var(--cd-accent) 10%, transparent);
36
+ }
37
+
38
+ .cd-hud-frame::before {
39
+ content: '';
40
+ position: absolute;
41
+ inset: -1px;
42
+ border: 1px solid color-mix(in srgb, var(--cd-accent) 25%, transparent);
43
+ pointer-events: none;
44
+ opacity: 0.5;
45
+ }
46
+
47
+ /* Inner label / readout */
48
+ .cd-hud__label {
49
+ font-size: var(--cd-text-xs);
50
+ font-weight: 700;
51
+ text-transform: uppercase;
52
+ letter-spacing: 0.18em;
53
+ color: var(--cd-text-muted);
54
+ margin-bottom: 4px;
55
+ }
56
+
57
+ .cd-hud__value {
58
+ font-size: var(--cd-text-base);
59
+ font-weight: 700;
60
+ color: var(--cd-accent);
61
+ letter-spacing: 0.05em;
62
+ text-shadow: 0 0 6px var(--cd-accent-glow);
63
+ }
64
+
65
+ .cd-hud__value--ok { color: var(--cd-neon-green); }
66
+ .cd-hud__value--warn { color: var(--cd-amber); }
67
+ .cd-hud__value--err { color: var(--cd-neon-red); }
68
+ .cd-hud__value--dim { color: var(--cd-text-secondary); font-weight: 400; }
69
+
70
+ /* Status / data bar (top or bottom of screen or panels) */
71
+ .cd-hud-bar {
72
+ display: flex;
73
+ align-items: stretch;
74
+ gap: 0;
75
+ background: color-mix(in srgb, var(--cd-bg) 92%, var(--cd-accent) 2%);
76
+ border: 1px solid var(--cd-border-dim);
77
+ font-size: var(--cd-text-xs);
78
+ font-weight: 700;
79
+ text-transform: uppercase;
80
+ letter-spacing: 0.1em;
81
+ color: var(--cd-text-muted);
82
+ user-select: none;
83
+ overflow: hidden;
84
+ }
85
+
86
+ .cd-hud-bar--top {
87
+ border-bottom-color: var(--cd-accent);
88
+ box-shadow: 0 0 8px var(--cd-accent-glow);
89
+ }
90
+
91
+ .cd-hud-bar--bottom {
92
+ border-top-color: var(--cd-accent);
93
+ box-shadow: 0 0 8px var(--cd-accent-glow);
94
+ }
95
+
96
+ .cd-hud-bar--side {
97
+ flex-direction: column;
98
+ writing-mode: vertical-rl;
99
+ text-orientation: mixed;
100
+ padding: 8px 4px;
101
+ }
102
+
103
+ /* Individual data segment inside bar or frame */
104
+ .cd-hud-segment {
105
+ display: flex;
106
+ align-items: center;
107
+ gap: 6px;
108
+ padding: 0 14px;
109
+ border-right: 1px solid var(--cd-border-dim);
110
+ white-space: nowrap;
111
+ height: 100%;
112
+ }
113
+
114
+ .cd-hud-bar--side .cd-hud-segment {
115
+ border-right: none;
116
+ border-bottom: 1px solid var(--cd-border-dim);
117
+ padding: 8px 4px;
118
+ height: auto;
119
+ }
120
+
121
+ .cd-hud-segment:last-child {
122
+ border-right: none;
123
+ border-bottom: none;
124
+ }
125
+
126
+ .cd-hud-segment__label {
127
+ color: var(--cd-text-dim);
128
+ letter-spacing: 0.2em;
129
+ font-size: 8px;
130
+ }
131
+
132
+ .cd-hud-segment__value {
133
+ color: var(--cd-accent);
134
+ font-weight: 700;
135
+ letter-spacing: 0.05em;
136
+ }
137
+
138
+ .cd-hud-segment__value--ok { color: var(--cd-neon-green); }
139
+ .cd-hud-segment__value--warn { color: var(--cd-amber); }
140
+ .cd-hud-segment__value--err { color: var(--cd-neon-red); }
141
+
142
+ /* Compact variant for dense UIs */
143
+ .cd-hud-bar--compact .cd-hud-segment {
144
+ padding: 0 8px;
145
+ font-size: 8px;
146
+ }
147
+
148
+ .cd-hud-frame.cd-hud--compact {
149
+ padding: 8px 10px;
150
+ }
151
+
152
+ /* Floating / AR style */
153
+ .cd-hud--floating {
154
+ backdrop-filter: blur(4px);
155
+ -webkit-backdrop-filter: blur(4px);
156
+ background: color-mix(in srgb, var(--cd-bg-surface) 70%, transparent);
157
+ }
158
+
159
+ /* Reduced motion (no extra pulses etc.) */
160
+ @media (prefers-reduced-motion: reduce) {
161
+ .cd-hud-frame,
162
+ .cd-hud-bar {
163
+ box-shadow: none;
164
+ }
165
+ }
@@ -0,0 +1,164 @@
1
+ /* ── Images & Media Frames ─────────────────────────────────────────────────── */
2
+ /*
3
+ Cyberpunk-styled image treatments and containers.
4
+ Use on <img> or <picture> elements, or wrap for frames.
5
+
6
+ Base:
7
+ <img class="cd-img" src="..." alt="...">
8
+
9
+ Framed / bordered:
10
+ <div class="cd-img-frame">
11
+ <img class="cd-img" src="..." />
12
+ </div>
13
+
14
+ Effects (apply to the img or wrapper):
15
+ .cd-img-glitch
16
+ .cd-img-scan (adds CRT scan overlay)
17
+ .cd-img-crt (scan + subtle flicker feel)
18
+ .cd-img-holo (holographic glow + slight perspective on hover)
19
+
20
+ Compose with existing:
21
+ - .cd-glow, .cd-glow-card
22
+ - .cd-corners or .cd-aug-panel for clipped frames
23
+ - .cd-interference for noise over images
24
+ - .cd-vectorbg for SVG illustrations instead of photos
25
+
26
+ All respect --cd-* tokens and reduced-motion.
27
+ */
28
+
29
+ .cd-img {
30
+ display: block;
31
+ max-width: 100%;
32
+ height: auto;
33
+ border: 1px solid var(--cd-border);
34
+ background: var(--cd-bg-panel);
35
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--cd-accent) 6%, transparent);
36
+ object-fit: cover;
37
+ image-rendering: auto;
38
+ }
39
+
40
+ /* Neon / accent border variant */
41
+ .cd-img--neon {
42
+ border-color: color-mix(in srgb, var(--cd-accent) 55%, transparent);
43
+ box-shadow:
44
+ 0 0 0 1px color-mix(in srgb, var(--cd-accent) 20%, transparent),
45
+ 0 0 12px color-mix(in srgb, var(--cd-accent) 18%, transparent);
46
+ }
47
+
48
+ /* Frame wrapper — adds outer structure, glow, and optional corners */
49
+ .cd-img-frame {
50
+ position: relative;
51
+ display: inline-block;
52
+ padding: 3px;
53
+ background: var(--cd-bg);
54
+ border: 1px solid var(--cd-border-glow);
55
+ box-shadow:
56
+ inset 0 0 0 1px color-mix(in srgb, var(--cd-accent) 8%, transparent),
57
+ 0 0 0 1px color-mix(in srgb, var(--cd-accent) 12%, transparent),
58
+ 0 0 16px color-mix(in srgb, var(--cd-accent) 10%, transparent);
59
+ }
60
+
61
+ .cd-img-frame .cd-img {
62
+ border: 1px solid var(--cd-border-dim);
63
+ box-shadow: none;
64
+ width: 100%;
65
+ height: 100%;
66
+ }
67
+
68
+ .cd-img-frame--glow {
69
+ box-shadow:
70
+ inset 0 0 0 1px color-mix(in srgb, var(--cd-accent) 12%, transparent),
71
+ 0 0 0 1px color-mix(in srgb, var(--cd-accent) 25%, transparent),
72
+ 0 0 24px var(--cd-accent-glow);
73
+ }
74
+
75
+ /* Glitch effect — digital distortion / signal noise on the image */
76
+ .cd-img-glitch {
77
+ position: relative;
78
+ overflow: hidden;
79
+ }
80
+
81
+ .cd-img-glitch img {
82
+ animation: cd-img-glitch-jitter 0.4s linear infinite alternate;
83
+ filter: contrast(1.1) saturate(1.05);
84
+ }
85
+
86
+ @keyframes cd-img-glitch-jitter {
87
+ 0% { transform: translate(0, 0); filter: hue-rotate(0deg) contrast(1.05); }
88
+ 20% { transform: translate(-1px, 1px); filter: hue-rotate(-8deg) contrast(1.15); }
89
+ 40% { transform: translate(1px, -1px); filter: hue-rotate(6deg) contrast(1.1); }
90
+ 60% { transform: translate(-2px, 0); filter: hue-rotate(4deg) contrast(1.2); }
91
+ 80% { transform: translate(1px, 1px); filter: hue-rotate(-5deg) contrast(1.08); }
92
+ 100% { transform: translate(0, -1px); filter: hue-rotate(0deg) contrast(1.05); }
93
+ }
94
+
95
+ /* Scan / CRT overlay effect */
96
+ .cd-img-scan,
97
+ .cd-img-crt {
98
+ position: relative;
99
+ }
100
+
101
+ .cd-img-scan::after,
102
+ .cd-img-crt::after {
103
+ content: '';
104
+ position: absolute;
105
+ inset: 0;
106
+ pointer-events: none;
107
+ background: repeating-linear-gradient(
108
+ 0deg,
109
+ transparent,
110
+ transparent 2px,
111
+ var(--cd-scanline-color) 2px,
112
+ var(--cd-scanline-color) 4px
113
+ );
114
+ mix-blend-mode: multiply;
115
+ z-index: 2;
116
+ }
117
+
118
+ .cd-img-crt::after {
119
+ opacity: 0.65;
120
+ }
121
+
122
+ /* Holographic / projection style */
123
+ .cd-img-holo {
124
+ position: relative;
125
+ transition: transform 180ms ease, box-shadow 180ms ease;
126
+ }
127
+
128
+ .cd-img-holo:hover {
129
+ transform: perspective(600px) rotateX(3deg) rotateY(-4deg) translateY(-1px);
130
+ box-shadow:
131
+ 0 10px 20px color-mix(in srgb, var(--cd-accent) 12%, transparent),
132
+ 0 0 0 1px color-mix(in srgb, var(--cd-accent) 30%, transparent),
133
+ 0 0 18px var(--cd-accent-glow);
134
+ }
135
+
136
+ .cd-img-holo::before {
137
+ content: '';
138
+ position: absolute;
139
+ inset: 0;
140
+ background: linear-gradient(
141
+ 135deg,
142
+ transparent 20%,
143
+ color-mix(in srgb, var(--cd-accent) 8%, transparent) 40%,
144
+ transparent 70%
145
+ );
146
+ mix-blend-mode: screen;
147
+ pointer-events: none;
148
+ z-index: 1;
149
+ opacity: 0.6;
150
+ }
151
+
152
+ /* Size helpers for frames */
153
+ .cd-img-frame--sm .cd-img { max-height: 120px; }
154
+ .cd-img-frame--lg .cd-img { max-height: 420px; }
155
+
156
+ /* Reduced motion */
157
+ @media (prefers-reduced-motion: reduce) {
158
+ .cd-img-glitch img {
159
+ animation: none;
160
+ }
161
+ .cd-img-holo:hover {
162
+ transform: none;
163
+ }
164
+ }
@@ -0,0 +1,53 @@
1
+ /* ── Input OTP ─────────────────────────────────────────────────────────────── */
2
+
3
+ .cd-input-otp {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ gap: 8px;
7
+ font-family: var(--cd-font-mono);
8
+ }
9
+
10
+ .cd-input-otp__slot {
11
+ width: 36px;
12
+ height: 40px;
13
+ display: inline-flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ border: 1px solid var(--cd-border);
17
+ background: rgba(5, 6, 10, 0.82);
18
+ color: var(--cd-text);
19
+ font-size: var(--cd-text-lg);
20
+ font-weight: 700;
21
+ letter-spacing: 0;
22
+ text-align: center;
23
+ transition: border-color 0.12s ease, box-shadow 0.12s ease;
24
+ caret-color: var(--cd-accent);
25
+ }
26
+
27
+ .cd-input-otp__slot:focus {
28
+ outline: 2px solid var(--cd-accent);
29
+ outline-offset: 2px;
30
+ border-color: color-mix(in srgb, var(--cd-accent) 55%, transparent);
31
+ box-shadow: 0 0 8px color-mix(in srgb, var(--cd-accent) 20%, transparent);
32
+ }
33
+
34
+ .cd-input-otp__slot.is-filled {
35
+ border-color: color-mix(in srgb, var(--cd-accent) 40%, transparent);
36
+ color: var(--cd-accent);
37
+ }
38
+
39
+ .cd-input-otp__slot:disabled {
40
+ opacity: 0.35;
41
+ cursor: not-allowed;
42
+ }
43
+
44
+ .cd-input-otp__sep {
45
+ color: var(--cd-text-dim);
46
+ font-weight: 700;
47
+ }
48
+
49
+ .cd-input-otp--sm .cd-input-otp__slot {
50
+ width: 28px;
51
+ height: 32px;
52
+ font-size: var(--cd-text-base);
53
+ }