@a2zb/styles 1.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.
package/animations.css ADDED
@@ -0,0 +1,77 @@
1
+ @keyframes fadeUp {
2
+ from {
3
+ opacity: 0;
4
+ transform: translateY(12px);
5
+ }
6
+ to {
7
+ opacity: 1;
8
+ transform: translateY(0);
9
+ }
10
+ }
11
+
12
+ .fade-in {
13
+ animation: fadeIn 0.28s ease-out;
14
+ }
15
+
16
+ @keyframes fadeIn {
17
+ from {
18
+ opacity: 0;
19
+ transform: translateY(4px);
20
+ }
21
+ to {
22
+ opacity: 1;
23
+ transform: translateY(0);
24
+ }
25
+ }
26
+
27
+ .log-line {
28
+ animation: slideIn 0.3s ease-out;
29
+ }
30
+
31
+ @keyframes slideIn {
32
+ from {
33
+ opacity: 0;
34
+ transform: translateX(12px);
35
+ }
36
+ to {
37
+ opacity: 1;
38
+ transform: translateX(0);
39
+ }
40
+ }
41
+
42
+ .fresh {
43
+ animation: freshPulse 1s ease-out forwards;
44
+ }
45
+
46
+ @keyframes freshPulse {
47
+ from {
48
+ background-color: color-mix(in oklab, var(--accent) 35%, var(--bg-surface));
49
+ }
50
+
51
+ to {
52
+ background-color: var(--bg-surface);
53
+ }
54
+ }
55
+
56
+ .border-highlight {
57
+ animation: borderHighlight 1.2s ease-in-out forwards 2;
58
+ }
59
+
60
+ @keyframes borderHighlight {
61
+ 0% {
62
+ outline: 2.5px solid transparent;
63
+ outline-offset: -1px;
64
+ }
65
+ 25% {
66
+ outline: 2.5px solid var(--accent-strong);
67
+ outline-offset: -1px;
68
+ }
69
+ 65% {
70
+ outline: 2.5px solid var(--accent-strong);
71
+ outline-offset: -1px;
72
+ }
73
+ 100% {
74
+ outline: 2.5px solid transparent;
75
+ outline-offset: -1px;
76
+ }
77
+ }
package/base.css ADDED
@@ -0,0 +1,36 @@
1
+ *,
2
+ *::before,
3
+ *::after {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ html,
8
+ body,
9
+ #root {
10
+ margin: 0;
11
+ text-align: center;
12
+ font-family: var(--font-mono, ui-monospace);
13
+ }
14
+
15
+ body {
16
+ margin: 0;
17
+ height: 100%;
18
+ overflow: hidden;
19
+ background: var(--bg-primary);
20
+ color: var(--text-primary);
21
+ -webkit-font-smoothing: antialiased;
22
+ }
23
+
24
+ :focus-visible {
25
+ outline: none;
26
+ box-shadow:
27
+ 0 0 0 2px var(--bg-primary),
28
+ 0 0 0 4px color-mix(in oklab, var(--accent) 80%, white);
29
+ }
30
+
31
+ input:focus {
32
+ outline: none;
33
+ border-color: color-mix(in oklab, var(--accent) 35%, var(--border-default));
34
+ box-shadow: 0 0 0 1px color-mix(in oklab, var(--accent) 5%, transparent);
35
+ background: color-mix(in oklab, var(--bg-surface) 8%, var(--accent) 5%);
36
+ }
package/components.css ADDED
@@ -0,0 +1,343 @@
1
+ .hero-title {
2
+ font-size: var(--text-hero);
3
+ line-height: 1.05;
4
+ letter-spacing: -0.02em;
5
+ font-weight: 800;
6
+ }
7
+
8
+ .hero-kicker {
9
+ color: var(--text-muted);
10
+ }
11
+
12
+ .btn {
13
+ cursor: pointer;
14
+ display: inline-flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ gap: 0.4rem;
18
+
19
+ padding: 0.58rem 0.92rem;
20
+ font-weight: 500;
21
+ letter-spacing: 0.01em;
22
+ border-radius: 0.7rem;
23
+ border: 1px solid transparent;
24
+
25
+ transition:
26
+ transform 120ms ease,
27
+ border-color 180ms ease,
28
+ background 180ms ease,
29
+ color 180ms ease,
30
+ box-shadow 180ms ease;
31
+ }
32
+
33
+ .btn-rounded {
34
+ border-radius: 1.2rem;
35
+ border: 1px solid transparent;
36
+
37
+ background: transparent;
38
+ color: var(--text-muted);
39
+
40
+ transition:
41
+ border-color 140ms ease,
42
+ background 140ms ease,
43
+ color 140ms ease,
44
+ box-shadow 140ms ease;
45
+ }
46
+
47
+ /* hover (subtle hint) */
48
+ .btn-rounded:hover {
49
+ border-color: var(--border-default);
50
+ color: var(--text-primary);
51
+ }
52
+
53
+ /* selected */
54
+ .btn-rounded[data-active='true'] {
55
+ border-color: var(--accent-weak);
56
+ color: var(--accent-weak);
57
+
58
+ background: color-mix(in oklab, var(--accent) 9%, transparent);
59
+ }
60
+
61
+ .btn:focus-visible {
62
+ outline: none;
63
+ border-color: color-mix(in oklab, var(--accent) 70%, var(--border-default));
64
+ box-shadow:
65
+ 0 0 0 2px var(--bg-primary),
66
+ 0 0 0 5px color-mix(in oklab, var(--accent) 42%, transparent),
67
+ 0 0 14px color-mix(in oklab, var(--accent) 28%, transparent);
68
+ }
69
+
70
+ .btn:disabled {
71
+ opacity: 0.35;
72
+ cursor: not-allowed;
73
+ border-color: var(--border-soft);
74
+ background: var(--bg-surface);
75
+ box-shadow: none;
76
+ }
77
+
78
+ /* 🚫 disable hover effects */
79
+ .btn:disabled:hover {
80
+ transform: none;
81
+ background: var(--bg-surface);
82
+ border-color: var(--border-soft);
83
+ box-shadow: none;
84
+ }
85
+
86
+ .btn:active {
87
+ transform: translateY(0.5px) scale(0.995);
88
+ }
89
+
90
+ .btn-primary {
91
+ color: var(--text-primary);
92
+ font-weight: 600;
93
+
94
+ border-color: color-mix(in oklab, var(--accent) 32%, transparent);
95
+
96
+ background: color-mix(in oklab, var(--accent) 33%, black);
97
+
98
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.09);
99
+ }
100
+
101
+ .btn-primary:hover {
102
+ color: var(--text-primary);
103
+
104
+ border-color: color-mix(in oklab, var(--accent) 40%, transparent);
105
+
106
+ background: color-mix(in oklab, var(--accent) 40%, black);
107
+
108
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.11);
109
+ }
110
+
111
+ .btn-primary:active {
112
+ background: linear-gradient(
113
+ 160deg,
114
+ color-mix(in oklab, var(--accent) 44%, black),
115
+ color-mix(in oklab, var(--accent) 34%, black)
116
+ );
117
+ border-color: color-mix(in oklab, var(--accent) 55%, transparent);
118
+ box-shadow:
119
+ inset 0 1px 0 rgba(255, 255, 255, 0.1),
120
+ inset 0 -1px 0 rgba(0, 0, 0, 0.36),
121
+ 0 2px 6px color-mix(in oklab, var(--accent) 16%, black);
122
+ }
123
+
124
+ .btn-primary:active:focus-visible {
125
+ border-color: color-mix(in oklab, var(--accent) 70%, transparent);
126
+ box-shadow:
127
+ inset 0 1px 0 rgba(255, 255, 255, 0.1),
128
+ inset 0 -1px 0 rgba(0, 0, 0, 0.36),
129
+ 0 2px 6px color-mix(in oklab, var(--accent) 16%, black),
130
+ 0 0 0 2px var(--bg-primary),
131
+ 0 0 0 5px color-mix(in oklab, var(--accent) 46%, transparent),
132
+ 0 0 16px color-mix(in oklab, var(--accent) 30%, transparent);
133
+ }
134
+
135
+ /* === Danger Button (Cancel Order vibe) === */
136
+
137
+ .btn-danger {
138
+ color: color-mix(in oklab, var(--text-primary) 92%, white 8%);
139
+ font-weight: 600;
140
+
141
+ border-color: color-mix(in oklch, var(--failure) 40%, transparent);
142
+
143
+ background: linear-gradient(
144
+ 160deg,
145
+ color-mix(in oklch, var(--failure) 30%, black 70%),
146
+ color-mix(in oklch, var(--failure) 22%, black 78%)
147
+ );
148
+
149
+ box-shadow:
150
+ inset 0 1px 0 rgba(255, 255, 255, 0.14),
151
+ inset 0 -1px 0 rgba(0, 0, 0, 0.35),
152
+ 0 2px 6px color-mix(in oklch, var(--failure) 22%, black 78%);
153
+ }
154
+
155
+ /* hover */
156
+ .btn-danger:hover {
157
+ border-color: color-mix(in oklch, var(--failure) 70%, transparent);
158
+
159
+ background: linear-gradient(
160
+ 160deg,
161
+ color-mix(in oklch, var(--failure) 38%, black 62%),
162
+ color-mix(in oklch, var(--failure) 30%, black 70%)
163
+ );
164
+
165
+ box-shadow:
166
+ inset 0 1px 0 rgba(255, 255, 255, 0.18),
167
+ inset 0 -1px 0 rgba(0, 0, 0, 0.3),
168
+ 0 4px 12px color-mix(in oklch, var(--failure) 30%, black 70%);
169
+ }
170
+
171
+ /* active */
172
+ .btn-danger:active {
173
+ transform: translateY(0.5px) scale(0.995);
174
+
175
+ background: linear-gradient(
176
+ 160deg,
177
+ color-mix(in oklch, var(--failure) 32%, black 68%),
178
+ color-mix(in oklch, var(--failure) 25%, black 75%)
179
+ );
180
+
181
+ border-color: color-mix(in oklch, var(--failure) 60%, transparent);
182
+
183
+ box-shadow:
184
+ inset 0 1px 0 rgba(255, 255, 255, 0.12),
185
+ inset 0 -1px 0 rgba(0, 0, 0, 0.32),
186
+ 0 2px 6px color-mix(in oklch, var(--failure) 26%, black 74%);
187
+ }
188
+
189
+ /* focus */
190
+ .btn-danger:focus-visible {
191
+ outline: none;
192
+ border-color: color-mix(in oklch, var(--failure) 70%, transparent);
193
+
194
+ box-shadow:
195
+ 0 0 0 2px var(--bg-primary),
196
+ 0 0 0 5px color-mix(in oklch, var(--failure) 30%, transparent),
197
+ 0 0 14px color-mix(in oklch, var(--failure) 20%, transparent);
198
+ }
199
+
200
+ .btn-secondary {
201
+ color: var(--text-primary);
202
+ border-color: var(--border-default);
203
+ background: color-mix(in oklab, var(--accent) 5%, transparent);
204
+ }
205
+
206
+ .btn-secondary:hover {
207
+ border-color: color-mix(in oklab, var(--accent) 40%, var(--border-default) 60%);
208
+ background: color-mix(in oklab, var(--accent) 9%, transparent);
209
+ box-shadow: 0 0 8px color-mix(in oklab, var(--accent) 8%, transparent);
210
+ }
211
+
212
+ .btn-secondary:active {
213
+ background: color-mix(in oklab, var(--accent) 12%, transparent);
214
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.25);
215
+ }
216
+
217
+ .btn-secondary:active:focus-visible {
218
+ border-color: color-mix(in oklab, var(--accent) 62%, var(--border-default));
219
+ box-shadow:
220
+ inset 0 1px 3px rgba(0, 0, 0, 0.25),
221
+ 0 0 0 2px var(--bg-primary),
222
+ 0 0 0 5px color-mix(in oklab, var(--accent) 40%, transparent),
223
+ 0 0 14px color-mix(in oklab, var(--accent) 24%, transparent);
224
+ }
225
+
226
+ .btn-ghost {
227
+ background: transparent;
228
+ border: 1px solid var(--border-default);
229
+ color: var(--text-muted);
230
+
231
+ transition:
232
+ border-color 160ms ease,
233
+ background 160ms ease,
234
+ color 160ms ease,
235
+ box-shadow 160ms ease;
236
+ }
237
+
238
+ .btn-ghost:hover {
239
+ background: color-mix(in oklab, var(--bg-surface) 40%, transparent);
240
+ border-color: color-mix(in oklab, var(--accent) 25%, var(--border-default) 75%);
241
+ color: var(--text-primary);
242
+ box-shadow: 0 0 6px color-mix(in oklab, var(--accent) 8%, transparent);
243
+ }
244
+
245
+ .btn-ghost:active {
246
+ transform: translateY(0.5px) scale(0.995);
247
+ background: color-mix(in oklab, var(--bg-surface) 48%, transparent);
248
+ }
249
+
250
+ .btn-menu {
251
+ height: 24px;
252
+ background: transparent;
253
+ color: var(--accent);
254
+ font-size: 0.8575rem;
255
+ letter-spacing: 1.6px;
256
+ border-radius: 0.5rem;
257
+ border: 1px solid var(--border-soft);
258
+ transition:
259
+ border-color 160ms ease,
260
+ color 160ms ease,
261
+ box-shadow 160ms ease;
262
+ }
263
+
264
+ .btn-menu:hover {
265
+ border-color: var(--accent);
266
+ color: var(--accent-strong);
267
+ box-shadow: 0 0 6px color-mix(in oklab, var(--accent) 18%, transparent);
268
+ }
269
+
270
+ @keyframes pulseGlow {
271
+ 0%,
272
+ 100% {
273
+ opacity: 0.4;
274
+ text-shadow: 0 0 4px var(--accent);
275
+ }
276
+ 50% {
277
+ opacity: 1;
278
+ text-shadow: 0 0 12px var(--accent);
279
+ }
280
+ }
281
+
282
+ .token-action {
283
+ color: var(--accent);
284
+ cursor: pointer;
285
+ font-weight: 500;
286
+ transition:
287
+ color 200ms ease,
288
+ text-shadow 200ms ease;
289
+ }
290
+
291
+ .token-action:hover {
292
+ text-shadow: 0 0 6px currentColor;
293
+ }
294
+
295
+ .hover-lift {
296
+ transition:
297
+ border-color 160ms ease,
298
+ background 160ms ease,
299
+ box-shadow 160ms ease;
300
+ }
301
+
302
+ .hover-lift:hover {
303
+ border-color: var(--accent);
304
+ background: color-mix(in oklab, var(--bg-surface) 40%, transparent);
305
+ }
306
+
307
+ .rounded-border {
308
+ border: 1px solid;
309
+ border-color: var(--border-default);
310
+ border-radius: 0.5rem;
311
+ }
312
+
313
+ .card {
314
+ border: 1px solid;
315
+ border-color: var(--border-default);
316
+ background-color: var(--bg-surface);
317
+ border-radius: 0.5rem;
318
+ overflow: hidden;
319
+ }
320
+
321
+ .base-row {
322
+ cursor: pointer;
323
+ text-align: start;
324
+ display: flex;
325
+ align-items: center;
326
+ transition:
327
+ background 0.2s ease,
328
+ border-color 0.2s ease,
329
+ box-shadow 0.2s ease;
330
+ }
331
+
332
+ .base-row:hover {
333
+ background: linear-gradient(
334
+ 135deg,
335
+ color-mix(in oklab, var(--accent) 10%, transparent) 0%,
336
+ color-mix(in oklab, var(--accent) 5%, transparent) 100%
337
+ );
338
+ }
339
+
340
+ .filter-row[data-active='true'] {
341
+ border-left: 2px solid var(--accent);
342
+ background: color-mix(in oklab, var(--accent) 12%, transparent);
343
+ }
package/index.css ADDED
@@ -0,0 +1,9 @@
1
+ @import "tailwindcss";
2
+
3
+ @import "./theme.css";
4
+ @import "./base.css";
5
+ @import "./visuals.css";
6
+ @import "./components.css";
7
+ @import "./animations.css";
8
+ @import "./utilities.css";
9
+ @import "./scrollbar.css";
package/package.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "@a2zb/styles",
3
+ "version": "1.0.0",
4
+ "exports": {
5
+ ".": "./index.css",
6
+ "./*.css": "./*.css"
7
+ }
8
+ }
package/scrollbar.css ADDED
@@ -0,0 +1,53 @@
1
+ ::-webkit-scrollbar {
2
+ width: 12px;
3
+ height: 12px;
4
+ }
5
+
6
+ ::-webkit-scrollbar-track {
7
+ background: transparent;
8
+ margin: 2px 4px;
9
+ }
10
+
11
+ ::-webkit-scrollbar-thumb {
12
+ background: color-mix(in oklab, var(--accent) 50%, transparent);
13
+ box-shadow: 0 0 8px color-mix(in oklab, var(--accent) 25%, transparent);
14
+ border-radius: 6px;
15
+ border: 2px solid var(--bg-primary);
16
+ min-height: 24px;
17
+ }
18
+
19
+ ::-webkit-scrollbar-thumb:hover {
20
+ background: linear-gradient(
21
+ 135deg,
22
+ color-mix(in oklab, var(--accent) 65%, transparent),
23
+ color-mix(in oklab, var(--accent) 45%, transparent)
24
+ );
25
+ }
26
+
27
+ .scrollbar-hide::-webkit-scrollbar {
28
+ display: none;
29
+ }
30
+
31
+ .scrollbar-hide {
32
+ -ms-overflow-style: none;
33
+ scrollbar-width: none;
34
+ }
35
+
36
+ input[type='checkbox'],
37
+ input[type='radio'],
38
+ input[type='range'] {
39
+ accent-color: var(--accent);
40
+ }
41
+
42
+ ::-webkit-scrollbar-corner {
43
+ background: var(--bg-primary);
44
+ }
45
+
46
+ .no-scrollbar::-webkit-scrollbar {
47
+ display: none;
48
+ }
49
+
50
+ .no-scrollbar {
51
+ -ms-overflow-style: none;
52
+ scrollbar-width: none;
53
+ }
package/theme.css ADDED
@@ -0,0 +1,114 @@
1
+ @theme {
2
+ /* --- backgrounds --- */
3
+ /* use as: bg-primary, bg-secondary, bg-surface */
4
+ --color-primary: var(--bg-primary);
5
+ --color-secondary: var(--bg-secondary);
6
+ --color-surface: var(--bg-surface);
7
+
8
+ /* --- text --- */
9
+ /* use as: text-fg (full), text-subtle (secondary), text-muted (dim/disabled) */
10
+ --color-fg: var(--text-primary);
11
+ --color-subtle: var(--text-subtle);
12
+ --color-muted: var(--text-muted);
13
+
14
+ /* --- borders --- */
15
+ /* use as: border-default, border-soft */
16
+ --color-default: var(--border-default);
17
+ --color-soft: var(--border-soft);
18
+
19
+ /* --- accent --- */
20
+ /* use as: text-accent, bg-accent, border-accent (+ /opacity works) */
21
+ --color-accent: var(--accent);
22
+ --color-accent-strong: var(--accent-strong);
23
+ --color-accent-weak: var(--accent-weak);
24
+
25
+ /* --- status --- */
26
+ /* use as: text-success, text-warning, text-failure (+ -weak variants) */
27
+ --color-success: var(--success);
28
+ --color-success-weak: var(--success-weak);
29
+ --color-warning: var(--warning);
30
+ --color-warning-weak: var(--warning-weak);
31
+ --color-failure: var(--failure);
32
+ --color-failure-weak: var(--failure-weak);
33
+
34
+ /* --- typography --- */
35
+ --font-sans:
36
+ ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Inter, Helvetica,
37
+ Arial, "Apple Color Emoji", "Segoe UI Emoji";
38
+ --font-mono:
39
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
40
+ "Courier New", monospace;
41
+
42
+ --text-hero: clamp(1.75rem, 1.4rem + 1.6vw, 3.1rem);
43
+ --text-h2: clamp(1.25rem, 1.1rem + 0.8vw, 1.875rem);
44
+ }
45
+
46
+ :root[data-theme="runtime"] {
47
+ color-scheme: dark;
48
+
49
+ --bg-primary: #0b0b0e;
50
+ --bg-secondary: #1a1a20;
51
+ --bg-surface: #131316;
52
+ --bg-muted: rgba(120, 255, 180, 0.05);
53
+
54
+ --text-primary: rgba(230, 235, 240, 0.94);
55
+ --text-subtle: rgba(195, 205, 215, 0.75);
56
+ --text-muted: rgba(165, 175, 185, 0.6);
57
+
58
+ --border-default: rgba(120, 255, 180, 0.35);
59
+ --border-soft: rgba(120, 255, 180, 0.15);
60
+
61
+ --accent-strong: #66ffb2; /* rare, special */
62
+ --accent: #49ca8a; /* normal primary */
63
+ --accent-weak: rgba(94, 230, 163, 0.65); /* default usage */
64
+
65
+ --accent-neutral: #5ee7ff;
66
+
67
+ --success: #4cff9a;
68
+ --success-weak: rgba(76, 255, 154, 0.65);
69
+
70
+ --warning: #ffc12f;
71
+ --warning-weak: #ffc12fb9;
72
+
73
+ --failure: #ff2d55;
74
+ --failure-weak: rgba(255, 45, 85, 0.65);
75
+
76
+ --panel-shadow:
77
+ 0 0 10px rgba(102, 255, 178, 0.25), 0 0 40px rgba(102, 255, 178, 0.1);
78
+ }
79
+
80
+ :root[data-theme="void"] {
81
+ color-scheme: dark;
82
+
83
+ --bg-primary: #010208;
84
+ --bg-secondary: #060826; /* more blue */
85
+ --bg-surface: #0b0f29; /* noticeably lifted */
86
+ --bg-muted: rgba(120, 140, 255, 0.12);
87
+
88
+ --text-primary: rgba(220, 222, 235, 0.95);
89
+ --text-subtle: rgba(190, 195, 225, 0.78);
90
+ --text-muted: rgba(170, 180, 220, 0.65);
91
+
92
+ --border-default: rgba(120, 140, 255, 0.45);
93
+ --border-soft: rgba(120, 140, 255, 0.22);
94
+
95
+ --accent: #7c84ff;
96
+ --accent-weak: rgba(124, 132, 255, 0.7);
97
+ --accent-strong: #a5abff;
98
+
99
+ --accent-neutral: #d6ff6b;
100
+ --accent-neutral-weak: rgba(214, 255, 107, 0.55);
101
+
102
+ --success: #7cf7d4;
103
+ --success-weak: rgba(124, 247, 212, 0.6);
104
+
105
+ --warning: #d6ff6b;
106
+ --warning-weak: rgba(214, 255, 107, 0.5);
107
+
108
+ --failure: #f0356a;
109
+ --failure-weak: rgba(240, 53, 106, 0.75);
110
+
111
+ --panel-shadow:
112
+ 0 0 24px rgba(124, 132, 255, 0.22), 0 0 80px rgba(124, 132, 255, 0.14),
113
+ 0 0 160px rgba(58, 209, 255, 0.1);
114
+ }
package/utilities.css ADDED
@@ -0,0 +1,19 @@
1
+ .text-muted {
2
+ color: var(--text-muted);
3
+ }
4
+
5
+ .border-default {
6
+ border-color: var(--border-default);
7
+ }
8
+
9
+ .border-soft {
10
+ border-color: var(--border-soft);
11
+ }
12
+
13
+ .bg-muted {
14
+ background: var(--bg-muted);
15
+ }
16
+
17
+ .pixelated {
18
+ image-rendering: pixelated;
19
+ }
package/visuals.css ADDED
@@ -0,0 +1,189 @@
1
+ .bg-hero {
2
+ background-image: var(--bg-hero);
3
+ background-size: cover;
4
+ background-position: center;
5
+ }
6
+
7
+ .glow {
8
+ text-shadow:
9
+ 0 0 0.25rem color-mix(in oklab, var(--accent) 15%, transparent),
10
+ 0 0 0.6rem color-mix(in oklab, var(--accent) 10%, transparent);
11
+ }
12
+
13
+ .svg-neon img,
14
+ .svg-neon svg {
15
+ filter: drop-shadow(0 0 6px color-mix(in oklab, var(--accent) 40%, transparent))
16
+ drop-shadow(0 0 16px color-mix(in oklab, var(--accent) 35%, transparent));
17
+ }
18
+
19
+ /* -------------------------------------------------
20
+ RPG ITEM / RARITY STYLES
21
+ for loot-like UI elements
22
+ ---------------------------------------------------*/
23
+
24
+ /* item container */
25
+ .item-card {
26
+ position: relative;
27
+ border-radius: 0.6rem;
28
+ border: 1px solid var(--border-soft);
29
+ background: var(--bg-surface);
30
+ transition: all 180ms ease;
31
+ }
32
+
33
+ .item-card:hover {
34
+ transform: translateY(-2px);
35
+ border-color: var(--accent);
36
+ box-shadow: var(--panel-shadow);
37
+ }
38
+
39
+ /* -------------------------------------------------
40
+ RARITY COLORS
41
+ ---------------------------------------------------*/
42
+
43
+ .rarity-common {
44
+ color: #a1a1aa;
45
+ }
46
+
47
+ .rarity-uncommon {
48
+ color: #4ade80;
49
+ }
50
+
51
+ .rarity-rare {
52
+ color: #60a5fa;
53
+ }
54
+
55
+ .rarity-epic {
56
+ color: #c084fc;
57
+ }
58
+
59
+ .rarity-legendary {
60
+ color: #fbbf24;
61
+ }
62
+
63
+ /* -------------------------------------------------
64
+ RARITY GLOW
65
+ ---------------------------------------------------*/
66
+
67
+ .rarity-common .item-icon {
68
+ filter: none;
69
+ }
70
+
71
+ .rarity-uncommon .item-icon {
72
+ filter: drop-shadow(0 0 6px rgba(74, 222, 128, 0.6))
73
+ drop-shadow(0 0 16px rgba(74, 222, 128, 0.25));
74
+ }
75
+
76
+ .rarity-rare .item-icon {
77
+ filter: drop-shadow(0 0 6px rgba(96, 165, 250, 0.7))
78
+ drop-shadow(0 0 18px rgba(96, 165, 250, 0.35));
79
+ }
80
+
81
+ .rarity-epic .item-icon {
82
+ filter: drop-shadow(0 0 6px rgba(192, 132, 252, 0.7))
83
+ drop-shadow(0 0 22px rgba(192, 132, 252, 0.4));
84
+ }
85
+
86
+ .rarity-legendary .item-icon {
87
+ filter: drop-shadow(0 0 8px rgba(251, 191, 36, 0.9)) drop-shadow(0 0 28px rgba(251, 191, 36, 0.5))
88
+ drop-shadow(0 0 60px rgba(251, 191, 36, 0.3));
89
+ }
90
+
91
+ /* -------------------------------------------------
92
+ RARITY BORDER
93
+ ---------------------------------------------------*/
94
+
95
+ .rarity-common.item-card {
96
+ border-color: rgba(161, 161, 170, 0.2);
97
+ }
98
+
99
+ .rarity-uncommon.item-card {
100
+ border-color: rgba(74, 222, 128, 0.5);
101
+ }
102
+
103
+ .rarity-rare.item-card {
104
+ border-color: rgba(96, 165, 250, 0.5);
105
+ }
106
+
107
+ .rarity-epic.item-card {
108
+ border-color: rgba(192, 132, 252, 0.5);
109
+ }
110
+
111
+ .rarity-legendary.item-card {
112
+ border-color: rgba(251, 191, 36, 0.7);
113
+ }
114
+
115
+ /* -------------------------------------------------
116
+ ITEM LABEL
117
+ ---------------------------------------------------*/
118
+
119
+ .item-name {
120
+ font-weight: 600;
121
+ letter-spacing: 0.02em;
122
+ }
123
+
124
+ .item-type {
125
+ font-size: 0.75rem;
126
+ color: var(--text-muted);
127
+ text-transform: uppercase;
128
+ letter-spacing: 0.08em;
129
+ }
130
+
131
+ /* -------------------------------------------------
132
+ ELEMENT EFFECTS
133
+ ---------------------------------------------------*/
134
+
135
+ .element-fire .item-icon {
136
+ filter: drop-shadow(0 0 6px rgba(255, 90, 0, 0.8)) drop-shadow(0 0 18px rgba(255, 120, 0, 0.35));
137
+ }
138
+
139
+ .element-thunder .item-icon {
140
+ filter: drop-shadow(0 0 6px rgba(255, 255, 100, 0.8))
141
+ drop-shadow(0 0 20px rgba(255, 255, 150, 0.4));
142
+ }
143
+
144
+ .element-toxic .item-icon {
145
+ filter: drop-shadow(0 0 6px rgba(100, 255, 120, 0.8))
146
+ drop-shadow(0 0 18px rgba(100, 255, 120, 0.35));
147
+ }
148
+
149
+ .element-arcane .item-icon {
150
+ filter: drop-shadow(0 0 6px rgba(200, 120, 255, 0.8))
151
+ drop-shadow(0 0 20px rgba(200, 120, 255, 0.4));
152
+ }
153
+
154
+ /* -------------------------------------------------
155
+ INVENTORY SLOT STYLE
156
+ ---------------------------------------------------*/
157
+
158
+ .inventory-slot {
159
+ background: radial-gradient(circle at 50% 40%, rgba(255, 255, 255, 0.04), transparent 70%);
160
+
161
+ border-radius: 0.6rem;
162
+ border: 1px solid var(--border-soft);
163
+
164
+ padding: 0.6rem;
165
+
166
+ display: flex;
167
+ align-items: center;
168
+ justify-content: center;
169
+ }
170
+
171
+ .inventory-slot:hover {
172
+ border-color: var(--accent);
173
+ box-shadow: var(--panel-shadow);
174
+ }
175
+
176
+ /* -------------------------------------------------
177
+ ITEM ICON
178
+ ---------------------------------------------------*/
179
+
180
+ .item-icon {
181
+ width: 64px;
182
+ height: 64px;
183
+ image-rendering: pixelated;
184
+ transition: transform 160ms ease;
185
+ }
186
+
187
+ .item-card:hover .item-icon {
188
+ transform: scale(1.08);
189
+ }