@clanwolf/ui-kit 1.0.2 → 2.0.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.
@@ -0,0 +1,331 @@
1
+ @use "./colors" as colors;
2
+ @use "./typography" as typography;
3
+ @forward "./colors";
4
+ @forward "./typography";
5
+ @forward "./scrollbar";
6
+ @forward "./loading";
7
+
8
+ // --------------------------------------
9
+ // 🧩 Mixins
10
+ // --------------------------------------
11
+
12
+ /* hervorgehobene Textfelder / panel look */
13
+ @mixin panel {
14
+ background-color: colors.$bg-secondary;
15
+ border: 1px solid colors.$border;
16
+ box-shadow: colors.$shadow;
17
+ color: colors.$text-primary;
18
+ }
19
+
20
+ @mixin text-glow {
21
+ color: colors.$accent;
22
+ text-shadow: 0 0 6px rgba(colors.$accent, 0.7);
23
+ }
24
+
25
+ @mixin svg-fill-accent {
26
+ filter: brightness(0) saturate(100%) invert(64%) sepia(89%) saturate(1613%)
27
+ hue-rotate(117deg) brightness(107%) contrast(101%);
28
+ }
29
+
30
+ @mixin theme-line {
31
+ border-color: colors.$divider;
32
+ }
33
+
34
+ @mixin border-highlight {
35
+ border: 1px solid rgba(colors.$accent, 0.5);
36
+ }
37
+
38
+ @mixin btn-primary {
39
+ background-color: transparent;
40
+ border: 1px solid colors.$accent;
41
+ color: colors.$accent;
42
+ text-transform: uppercase;
43
+ letter-spacing: 0.05em;
44
+ transition: all 0.2s ease-in-out;
45
+
46
+ &:hover {
47
+ background-color: colors.$accent-soft;
48
+ box-shadow: 0 0 10px rgba(colors.$accent, 0.5);
49
+ color: colors.$accent-strong;
50
+ }
51
+ }
52
+
53
+ @mixin btn-secondary {
54
+ background-color: transparent;
55
+ border: 1px solid colors.$text-dim;
56
+ color: colors.$text-secondary;
57
+ transition: all 0.2s ease-in-out;
58
+
59
+ &:hover {
60
+ border-color: colors.$accent;
61
+ color: colors.$accent;
62
+ }
63
+ }
64
+
65
+ @mixin theme-grid {
66
+ background-image:
67
+ linear-gradient(to right, rgba(colors.$accent, 0.05) 1px, transparent 1px),
68
+ linear-gradient(to bottom, rgba(colors.$accent, 0.05) 1px, transparent 1px);
69
+ background-size: 40px 40px;
70
+ }
71
+
72
+ // 🌫️ Overlay / Focus / Scanner Effects
73
+ @mixin overlay {
74
+ background-color: colors.$overlay;
75
+ backdrop-filter: blur(4px);
76
+ border: 1px solid colors.$border;
77
+ box-shadow: inset 0 0 30px rgba(colors.$accent, 0.1);
78
+ color: colors.$text-primary;
79
+ }
80
+
81
+ @mixin overlay-focus {
82
+ @include overlay;
83
+ box-shadow:
84
+ 0 0 25px rgba(colors.$accent, 0.25),
85
+ inset 0 0 20px rgba(colors.$accent, 0.15);
86
+ border-color: rgba(colors.$accent, 0.4);
87
+ }
88
+
89
+ @mixin overlay-highlight {
90
+ background-color: rgba(10, 20, 20, 0.65);
91
+ backdrop-filter: blur(3px);
92
+ border: 1px solid rgba(colors.$accent, 0.5);
93
+ box-shadow:
94
+ 0 0 25px rgba(colors.$accent, 0.3),
95
+ inset 0 0 25px rgba(colors.$accent, 0.15),
96
+ 0 0 40px rgba(0, 255, 200, 0.1);
97
+ color: colors.$text-primary;
98
+ transition: all 0.3s ease-in-out;
99
+
100
+ // leichtes Pulsieren für Live-Effekt
101
+ animation: themePulse 4s ease-in-out infinite;
102
+ }
103
+
104
+ @keyframes themePulse {
105
+ 0%,
106
+ 100% {
107
+ box-shadow:
108
+ 0 0 25px rgba(colors.$accent, 0.25),
109
+ inset 0 0 25px rgba(colors.$accent, 0.1);
110
+ }
111
+ 50% {
112
+ box-shadow:
113
+ 0 0 40px rgba(colors.$accent, 0.45),
114
+ inset 0 0 35px rgba(colors.$accent, 0.2);
115
+ }
116
+ }
117
+
118
+ @mixin scanner-effect {
119
+ background: linear-gradient(
120
+ rgba(0, 255, 200, 0.05) 0%,
121
+ rgba(0, 255, 200, 0.2) 50%,
122
+ rgba(0, 255, 200, 0.05) 100%
123
+ );
124
+ background-size: 100% 200%;
125
+ animation: scan 3s linear infinite;
126
+ }
127
+
128
+ @keyframes scan {
129
+ 0% {
130
+ background-position-y: 100%;
131
+ }
132
+ 100% {
133
+ background-position-y: 0%;
134
+ }
135
+ }
136
+
137
+ @mixin distortion-enter {
138
+ animation: distortion 400ms cubic-bezier(0.25, 1, 0.5, 1);
139
+ }
140
+
141
+ @keyframes distortion {
142
+ 0% {
143
+ filter: blur(10px) brightness(2);
144
+ transform: scale(1.05);
145
+ opacity: 0;
146
+ }
147
+ 60% {
148
+ filter: blur(2px) brightness(1.2);
149
+ transform: scale(1.02);
150
+ opacity: 0.8;
151
+ }
152
+ 100% {
153
+ filter: blur(0);
154
+ transform: scale(1);
155
+ opacity: 1;
156
+ }
157
+ }
158
+
159
+ // --------------------------------------
160
+ // 🎞️ CRT-Style Distortion Effect
161
+ // --------------------------------------
162
+
163
+ @mixin crt-distortion-enter {
164
+ position: relative;
165
+ overflow: hidden;
166
+ animation: crtPowerOn 650ms cubic-bezier(0.19, 1, 0.22, 1);
167
+
168
+ // grüner Overlay Scan / CRT-Look
169
+ &::before {
170
+ content: "";
171
+ position: absolute;
172
+ inset: 0;
173
+ background: linear-gradient(
174
+ rgba(0, 255, 150, 0.05) 50%,
175
+ rgba(0, 255, 150, 0.1) 51%
176
+ );
177
+ background-size: 100% 3px;
178
+ mix-blend-mode: overlay;
179
+ animation: crtScan 4s linear infinite;
180
+ pointer-events: none;
181
+ }
182
+
183
+ // leichtes Noise-Flimmern
184
+ &::after {
185
+ content: "";
186
+ position: absolute;
187
+ inset: 0;
188
+ background: repeating-linear-gradient(
189
+ 0deg,
190
+ rgba(0, 255, 200, 0.02),
191
+ rgba(0, 255, 200, 0.02) 1px,
192
+ rgba(0, 255, 200, 0.05) 2px
193
+ );
194
+ mix-blend-mode: soft-light;
195
+ animation: flicker 0.2s infinite;
196
+ pointer-events: none;
197
+ }
198
+ }
199
+
200
+ @keyframes crtPowerOn {
201
+ 0% {
202
+ opacity: 0;
203
+ transform: scale(1.05) skewX(5deg);
204
+ filter: brightness(2) contrast(1.5) blur(8px);
205
+ }
206
+ 30% {
207
+ opacity: 0.7;
208
+ transform: scale(1.02) skewX(-3deg);
209
+ filter: brightness(1.6) contrast(1.3) blur(3px);
210
+ }
211
+ 70% {
212
+ opacity: 0.9;
213
+ transform: scale(1.01);
214
+ filter: brightness(1.2) contrast(1.1) blur(1px);
215
+ }
216
+ 100% {
217
+ opacity: 1;
218
+ transform: none;
219
+ filter: none;
220
+ }
221
+ }
222
+
223
+ @keyframes crtScan {
224
+ 0% {
225
+ background-position-y: 100%;
226
+ }
227
+ 100% {
228
+ background-position-y: 0%;
229
+ }
230
+ }
231
+
232
+ @keyframes flicker {
233
+ 0%,
234
+ 100% {
235
+ opacity: 1;
236
+ }
237
+ 50% {
238
+ opacity: 0.95;
239
+ }
240
+ }
241
+
242
+ // --------------------------------------
243
+ // 🧱 Utility Classes
244
+ // --------------------------------------
245
+
246
+ // Base/Heading font-family, respects overrides of
247
+ // typography.$font-family-base / $font-family-heading
248
+ .theme-font-base {
249
+ @include typography.base-font;
250
+ }
251
+ .theme-font-heading {
252
+ @include typography.heading-font;
253
+ }
254
+
255
+ // Nicht-transparenter Hintergrund im Theme-Look
256
+ .theme-bg {
257
+ @include colors.theme-bg;
258
+ }
259
+
260
+ // Container für Inhalt ohne Transparenz
261
+ .theme-panel {
262
+ @include panel;
263
+ }
264
+
265
+ // leuchtender Text
266
+ .text-glow {
267
+ @include text-glow;
268
+ }
269
+
270
+ // buttons
271
+ .btn-theme-primary {
272
+ @include btn-primary;
273
+ }
274
+ .btn-theme-secondary {
275
+ @include btn-secondary;
276
+ }
277
+
278
+ .svg-fill-accent {
279
+ @include svg-fill-accent;
280
+ }
281
+
282
+ // erstellt ein Grid für das passende div
283
+ .theme-grid {
284
+ @include theme-grid;
285
+ }
286
+
287
+ .border-highlight {
288
+ @include border-highlight;
289
+ }
290
+
291
+ .theme-line {
292
+ @include theme-line;
293
+ }
294
+
295
+ // halbtransparente Box mit Leuchten nach innen
296
+ .overlay {
297
+ @include overlay;
298
+ }
299
+ // Das gleiche nur intensiver
300
+ .overlay-focus {
301
+ @include overlay-focus;
302
+ }
303
+ // Rand stärker hervorgehoben mit Puls
304
+ .overlay-highlight {
305
+ @include overlay-highlight;
306
+ }
307
+
308
+ // scan effect
309
+ .scanner-effect {
310
+ @include scanner-effect;
311
+ }
312
+
313
+ // distortion effect
314
+ .distortion-enter {
315
+ @include distortion-enter;
316
+ }
317
+ .crt-distortion-enter {
318
+ @include crt-distortion-enter;
319
+ @include overlay-focus;
320
+ }
321
+
322
+ .list-btn-primary {
323
+ @include btn-primary;
324
+ width: 30vw;
325
+ height: 4rem;
326
+ list-style: none;
327
+ text-align: center;
328
+ align-content: center;
329
+ font-size: 1.25rem;
330
+ }
331
+
@@ -0,0 +1,26 @@
1
+ // --------------------------------------
2
+ // 🔤 ui-kit Typography
3
+ // --------------------------------------
4
+ //
5
+ // Override these in the consuming app via Sass module configuration:
6
+ //
7
+ // @use "@clanwolf/ui-kit/styles" as theme with (
8
+ // $font-family-base: "'Roboto', sans-serif",
9
+ // $font-family-heading: "'Roboto', sans-serif"
10
+ // );
11
+ //
12
+ // No need to re-import the font files if you override with a font
13
+ // that is already available in your app (e.g. a system font or one
14
+ // loaded via Google Fonts).
15
+
16
+ $font-family-base: "Quantico", sans-serif !default;
17
+ $font-family-heading: "Anta", sans-serif !default;
18
+
19
+ @mixin base-font {
20
+ font-family: $font-family-base;
21
+ }
22
+
23
+ @mixin heading-font {
24
+ font-family: $font-family-heading;
25
+ }
26
+