@sdvf23rvfa43f/stealth-glass 1.3.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/dist/chunk-5IRVGRFN.js +237 -0
- package/dist/chunk-5IRVGRFN.js.map +1 -0
- package/dist/chunk-62HIMTUS.js +10343 -0
- package/dist/chunk-62HIMTUS.js.map +1 -0
- package/dist/components/index.d.ts +2032 -0
- package/dist/components/index.js +4 -0
- package/dist/components/index.js.map +1 -0
- package/dist/design-tokens.d.ts +215 -0
- package/dist/design-tokens.js +3 -0
- package/dist/design-tokens.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/stealth-glass-theme.css +494 -0
- package/package.json +132 -0
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
2
|
+
STEALTH GLASS DESIGN SYSTEM — Portable Theme
|
|
3
|
+
═══════════════════════════════════════════════════════════════
|
|
4
|
+
|
|
5
|
+
HOW TO USE:
|
|
6
|
+
1. Copy this file into your new project's /styles/ directory
|
|
7
|
+
2. Import it in your globals.css AFTER @import "tailwindcss":
|
|
8
|
+
|
|
9
|
+
@import "tailwindcss";
|
|
10
|
+
@import "./stealth-glass-theme.css";
|
|
11
|
+
|
|
12
|
+
3. Done! All tokens, utilities, and animations are now available.
|
|
13
|
+
|
|
14
|
+
Compatible with: Tailwind CSS v4 + React + any framework
|
|
15
|
+
═══════════════════════════════════════════════════════════════ */
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
/* ─────────────────────────────────────────────────────────
|
|
19
|
+
LAYER 1: DESIGN TOKENS (CSS Custom Properties)
|
|
20
|
+
───────────────────────────────────────────────────────── */
|
|
21
|
+
|
|
22
|
+
:root {
|
|
23
|
+
/* === Core Palette === */
|
|
24
|
+
--sg-void: #0B0E14; /* Deepest background (the "void") */
|
|
25
|
+
--sg-subtle: #0D0F13; /* Subtle background variation */
|
|
26
|
+
--sg-surface: #0E1119; /* Card/tile surface */
|
|
27
|
+
--sg-elevated: #12151B; /* Elevated surfaces (hover, popover) */
|
|
28
|
+
--sg-highlight: #1A1E26; /* Highlighted/active surfaces */
|
|
29
|
+
|
|
30
|
+
/* === Text Hierarchy === */
|
|
31
|
+
--sg-text-primary: #EDEDEF; /* Headlines, values, primary content */
|
|
32
|
+
--sg-text-secondary: #9A92B1; /* Descriptions, secondary info */
|
|
33
|
+
--sg-text-muted: #535C6B; /* Labels, timestamps, tertiary */
|
|
34
|
+
|
|
35
|
+
/* === Borders === */
|
|
36
|
+
--sg-border-default: #252C41; /* Default border (visible) */
|
|
37
|
+
--sg-border-subtle: rgba(255, 255, 255, 0.05); /* Glass edge */
|
|
38
|
+
--sg-border-hover: rgba(255, 255, 255, 0.10); /* Hover state */
|
|
39
|
+
--sg-border-active: rgba(255, 255, 255, 0.15); /* Active/focus */
|
|
40
|
+
|
|
41
|
+
/* === Brand Colors === */
|
|
42
|
+
--sg-brand-blue: #3B82F6;
|
|
43
|
+
--sg-brand-indigo: #6366F1;
|
|
44
|
+
--sg-brand-purple: #8B5CF6;
|
|
45
|
+
|
|
46
|
+
/* === Semantic Status Colors === */
|
|
47
|
+
--sg-success: #10B981; /* Emerald — Active/Online/Success */
|
|
48
|
+
--sg-warning: #F59E0B; /* Amber — Warning/Pending */
|
|
49
|
+
--sg-danger: #EF4444; /* Red — Error/Danger/Offline */
|
|
50
|
+
--sg-info: #3B82F6; /* Blue — Info/Processing */
|
|
51
|
+
|
|
52
|
+
/* === Form Control Surfaces === */
|
|
53
|
+
--sg-input-background: var(--sg-elevated); /* Dark input bg */
|
|
54
|
+
--sg-switch-track: var(--sg-highlight); /* Unchecked switch track */
|
|
55
|
+
|
|
56
|
+
/* === Shadows & Glows === */
|
|
57
|
+
--sg-glow-blue: rgba(59, 130, 246, 0.3);
|
|
58
|
+
--sg-glow-indigo: rgba(99, 102, 241, 0.3);
|
|
59
|
+
--sg-glow-success: rgba(16, 185, 129, 0.3);
|
|
60
|
+
--sg-glow-danger: rgba(239, 68, 68, 0.3);
|
|
61
|
+
--sg-glow-warning: rgba(245, 158, 11, 0.3);
|
|
62
|
+
|
|
63
|
+
/* === Shared Shadows === */
|
|
64
|
+
--sg-shadow-dropdown: 0 16px 48px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05);
|
|
65
|
+
--sg-shadow-tile-inset: inset 0 0 0 1px rgba(255, 255, 255, 0.02);
|
|
66
|
+
--sg-shadow-tile-inset-hover:inset 0 0 0 1px rgba(255, 255, 255, 0.05);
|
|
67
|
+
--sg-shadow-cta: 0 4px 20px rgba(37, 99, 235, 0.3);
|
|
68
|
+
--sg-shadow-cta-hover: 0 6px 25px rgba(37, 99, 235, 0.4);
|
|
69
|
+
--sg-glow-blue-md: 0 0 10px rgba(59, 130, 246, 0.5);
|
|
70
|
+
--sg-glow-success-md: 0 0 10px rgba(16, 185, 129, 0.5);
|
|
71
|
+
|
|
72
|
+
/* === Geometry === */
|
|
73
|
+
--sg-radius-tile: 2rem; /* 32px — Bento tile corners */
|
|
74
|
+
--sg-radius-inner: 1rem; /* 16px — Inner elements */
|
|
75
|
+
--sg-radius-button: 9999px; /* Pill buttons */
|
|
76
|
+
--sg-radius-input: 0.75rem; /* 12px — Inputs */
|
|
77
|
+
|
|
78
|
+
/* === Spacing === */
|
|
79
|
+
--sg-gap-mobile: 1rem; /* gap-4 */
|
|
80
|
+
--sg-gap-desktop: 1.5rem; /* gap-6 */
|
|
81
|
+
--sg-container-max: 1600px;
|
|
82
|
+
|
|
83
|
+
/* === Motion === */
|
|
84
|
+
--sg-duration-fast: 150ms;
|
|
85
|
+
--sg-duration-normal: 300ms;
|
|
86
|
+
--sg-duration-slow: 500ms;
|
|
87
|
+
--sg-duration-cinematic: 700ms;
|
|
88
|
+
--sg-ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
|
|
89
|
+
|
|
90
|
+
/* === Input === */
|
|
91
|
+
--sg-input-height: 3.5rem; /* 56px — h-14 */
|
|
92
|
+
--sg-input-bg: var(--sg-surface);
|
|
93
|
+
--sg-input-bg-focus: var(--sg-elevated);
|
|
94
|
+
|
|
95
|
+
/* === Focus === */
|
|
96
|
+
--sg-focus-shadow: 0 0 0 4px rgba(59, 130, 246, 0.15);
|
|
97
|
+
|
|
98
|
+
/* === Font Weights === */
|
|
99
|
+
--font-weight-medium: 500;
|
|
100
|
+
--font-weight-normal: 400;
|
|
101
|
+
|
|
102
|
+
/* ──────────────────────────────────────────────────
|
|
103
|
+
ShadCN / Radix Mappings
|
|
104
|
+
Map our tokens to the ShadCN variable contract
|
|
105
|
+
so all shadcn/ui components inherit our theme.
|
|
106
|
+
────────────────────────────────────────────────── */
|
|
107
|
+
--background: var(--sg-void);
|
|
108
|
+
--foreground: var(--sg-text-primary);
|
|
109
|
+
--card: var(--sg-surface);
|
|
110
|
+
--card-foreground: var(--sg-text-primary);
|
|
111
|
+
--popover: var(--sg-elevated);
|
|
112
|
+
--popover-foreground: var(--sg-text-primary);
|
|
113
|
+
--primary: var(--sg-brand-blue);
|
|
114
|
+
--primary-foreground: #FFFFFF;
|
|
115
|
+
--secondary: var(--sg-elevated);
|
|
116
|
+
--secondary-foreground:var(--sg-text-primary);
|
|
117
|
+
--muted: var(--sg-subtle);
|
|
118
|
+
--muted-foreground: var(--sg-text-secondary);
|
|
119
|
+
--accent: var(--sg-elevated);
|
|
120
|
+
--accent-foreground: var(--sg-text-primary);
|
|
121
|
+
--destructive: var(--sg-danger);
|
|
122
|
+
--destructive-foreground: #FFFFFF;
|
|
123
|
+
--border: var(--sg-border-default);
|
|
124
|
+
--input: var(--sg-elevated);
|
|
125
|
+
--ring: var(--sg-brand-blue);
|
|
126
|
+
--radius: var(--sg-radius-input);
|
|
127
|
+
|
|
128
|
+
/* Form control surfaces */
|
|
129
|
+
--input-background: var(--sg-input-background);
|
|
130
|
+
--switch-background: var(--sg-switch-track);
|
|
131
|
+
|
|
132
|
+
/* Chart colors (dark-optimised) */
|
|
133
|
+
--chart-1: oklch(0.488 0.243 264.376);
|
|
134
|
+
--chart-2: oklch(0.696 0.17 162.48);
|
|
135
|
+
--chart-3: oklch(0.769 0.188 70.08);
|
|
136
|
+
--chart-4: oklch(0.627 0.265 303.9);
|
|
137
|
+
--chart-5: oklch(0.645 0.246 16.439);
|
|
138
|
+
|
|
139
|
+
/* Sidebar */
|
|
140
|
+
--sidebar: var(--sg-surface);
|
|
141
|
+
--sidebar-foreground: var(--sg-text-primary);
|
|
142
|
+
--sidebar-primary: var(--sg-brand-blue);
|
|
143
|
+
--sidebar-primary-foreground: #FFFFFF;
|
|
144
|
+
--sidebar-accent: var(--sg-elevated);
|
|
145
|
+
--sidebar-accent-foreground:var(--sg-text-primary);
|
|
146
|
+
--sidebar-border: var(--sg-border-default);
|
|
147
|
+
--sidebar-ring: var(--sg-brand-blue);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
/* ─────────────────────────────────────────────────────────
|
|
152
|
+
LAYER 2: TAILWIND v4 THEME INTEGRATION
|
|
153
|
+
Maps CSS tokens into Tailwind's theme system so you can
|
|
154
|
+
use classes like `bg-card`, `text-muted-foreground`, etc.
|
|
155
|
+
───────────────────────────────────────────────────────── */
|
|
156
|
+
|
|
157
|
+
@theme inline {
|
|
158
|
+
--color-background: var(--background);
|
|
159
|
+
--color-foreground: var(--foreground);
|
|
160
|
+
--color-card: var(--card);
|
|
161
|
+
--color-card-foreground: var(--card-foreground);
|
|
162
|
+
--color-popover: var(--popover);
|
|
163
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
164
|
+
--color-primary: var(--primary);
|
|
165
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
166
|
+
--color-secondary: var(--secondary);
|
|
167
|
+
--color-secondary-foreground:var(--secondary-foreground);
|
|
168
|
+
--color-muted: var(--muted);
|
|
169
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
170
|
+
--color-accent: var(--accent);
|
|
171
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
172
|
+
--color-destructive: var(--destructive);
|
|
173
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
174
|
+
--color-border: var(--border);
|
|
175
|
+
--color-input: var(--input);
|
|
176
|
+
--color-ring: var(--ring);
|
|
177
|
+
|
|
178
|
+
/* Form control surfaces */
|
|
179
|
+
--color-input-background: var(--input-background);
|
|
180
|
+
--color-switch-background: var(--switch-background);
|
|
181
|
+
|
|
182
|
+
/* Chart colors */
|
|
183
|
+
--color-chart-1: var(--chart-1);
|
|
184
|
+
--color-chart-2: var(--chart-2);
|
|
185
|
+
--color-chart-3: var(--chart-3);
|
|
186
|
+
--color-chart-4: var(--chart-4);
|
|
187
|
+
--color-chart-5: var(--chart-5);
|
|
188
|
+
|
|
189
|
+
/* Sidebar */
|
|
190
|
+
--color-sidebar: var(--sidebar);
|
|
191
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
192
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
193
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
194
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
195
|
+
--color-sidebar-accent-foreground:var(--sidebar-accent-foreground);
|
|
196
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
197
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
198
|
+
|
|
199
|
+
/* Extended palette for direct use */
|
|
200
|
+
--color-sg-void: var(--sg-void);
|
|
201
|
+
--color-sg-subtle: var(--sg-subtle);
|
|
202
|
+
--color-sg-surface: var(--sg-surface);
|
|
203
|
+
--color-sg-elevated: var(--sg-elevated);
|
|
204
|
+
--color-sg-highlight: var(--sg-highlight);
|
|
205
|
+
|
|
206
|
+
/* Text hierarchy — full coverage */
|
|
207
|
+
--color-sg-text-primary: var(--sg-text-primary);
|
|
208
|
+
--color-sg-text-secondary: var(--sg-text-secondary);
|
|
209
|
+
--color-sg-text-muted: var(--sg-text-muted);
|
|
210
|
+
|
|
211
|
+
/* Status colors — direct Tailwind access */
|
|
212
|
+
--color-sg-success: var(--sg-success);
|
|
213
|
+
--color-sg-warning: var(--sg-warning);
|
|
214
|
+
--color-sg-danger: var(--sg-danger);
|
|
215
|
+
--color-sg-info: var(--sg-info);
|
|
216
|
+
|
|
217
|
+
/* Brand colors — direct Tailwind access */
|
|
218
|
+
--color-sg-brand-blue: var(--sg-brand-blue);
|
|
219
|
+
--color-sg-brand-indigo: var(--sg-brand-indigo);
|
|
220
|
+
--color-sg-brand-purple: var(--sg-brand-purple);
|
|
221
|
+
|
|
222
|
+
/* Shared shadows — Tailwind shadow-* classes */
|
|
223
|
+
--shadow-sg-dropdown: var(--sg-shadow-dropdown);
|
|
224
|
+
--shadow-sg-tile-inset: var(--sg-shadow-tile-inset);
|
|
225
|
+
--shadow-sg-tile-inset-hover:var(--sg-shadow-tile-inset-hover);
|
|
226
|
+
--shadow-sg-cta: var(--sg-shadow-cta);
|
|
227
|
+
--shadow-sg-cta-hover: var(--sg-shadow-cta-hover);
|
|
228
|
+
--shadow-sg-glow-blue: var(--sg-glow-blue-md);
|
|
229
|
+
--shadow-sg-glow-success: var(--sg-glow-success-md);
|
|
230
|
+
|
|
231
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
232
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
233
|
+
--radius-lg: var(--radius);
|
|
234
|
+
--radius-xl: calc(var(--radius) + 4px);
|
|
235
|
+
--radius-2xl: 1rem;
|
|
236
|
+
|
|
237
|
+
/* Accordion animations */
|
|
238
|
+
--animate-accordion-down: accordion-down 200ms ease-out;
|
|
239
|
+
--animate-accordion-up: accordion-up 200ms ease-out;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
/* ─────────────────────────────────────────────────────────
|
|
244
|
+
LAYER 3: BASE STYLES
|
|
245
|
+
───────────────────────────────────────────────────────── */
|
|
246
|
+
|
|
247
|
+
@layer base {
|
|
248
|
+
* {
|
|
249
|
+
@apply border-border outline-ring/50;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
body {
|
|
253
|
+
@apply bg-background text-foreground antialiased;
|
|
254
|
+
font-family: 'Inter', 'Geist', system-ui, -apple-system, sans-serif;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/* ── Focus Indicators (WCAG AA) ── */
|
|
258
|
+
*:focus-visible {
|
|
259
|
+
outline: 2px solid rgba(59, 130, 246, 0.6);
|
|
260
|
+
outline-offset: 2px;
|
|
261
|
+
border-radius: 4px;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* ── Selection ── */
|
|
265
|
+
::selection {
|
|
266
|
+
background-color: rgba(99, 102, 241, 0.25);
|
|
267
|
+
color: #EDEDEF;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
/* ─────────────────────────────────────────────────────────
|
|
273
|
+
LAYER 4: UTILITY CLASSES & ANIMATIONS
|
|
274
|
+
───────────────────────────────────────────────────────── */
|
|
275
|
+
|
|
276
|
+
@layer utilities {
|
|
277
|
+
|
|
278
|
+
/* ── Pulse-subtle — used by StatusDot ── */
|
|
279
|
+
|
|
280
|
+
@keyframes pulse-subtle {
|
|
281
|
+
0%, 100% { opacity: 1; }
|
|
282
|
+
50% { opacity: 0.5; }
|
|
283
|
+
}
|
|
284
|
+
.animate-pulse-subtle {
|
|
285
|
+
animation: pulse-subtle 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/* ── Shimmer — used by Progress bar ── */
|
|
289
|
+
|
|
290
|
+
@keyframes shimmer {
|
|
291
|
+
0% { transform: translateX(-200%); }
|
|
292
|
+
100% { transform: translateX(200%); }
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/* ── Ambient Background float ── */
|
|
296
|
+
|
|
297
|
+
@keyframes float-slow {
|
|
298
|
+
0%, 100% { transform: translate(0, 0) scale(1); }
|
|
299
|
+
25% { transform: translate(5%, 10%) scale(1.05); }
|
|
300
|
+
50% { transform: translate(-3%, 5%) scale(0.95); }
|
|
301
|
+
75% { transform: translate(-8%, -5%) scale(1.02); }
|
|
302
|
+
}
|
|
303
|
+
.animate-float-slow {
|
|
304
|
+
animation: float-slow 20s ease-in-out infinite;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
@keyframes float-slower {
|
|
308
|
+
0%, 100% { transform: translate(0, 0) scale(1); }
|
|
309
|
+
33% { transform: translate(-5%, 8%) scale(1.03); }
|
|
310
|
+
66% { transform: translate(8%, -3%) scale(0.97); }
|
|
311
|
+
}
|
|
312
|
+
.animate-float-slower {
|
|
313
|
+
animation: float-slower 30s ease-in-out infinite;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
@keyframes float-slowest {
|
|
317
|
+
0%, 100% { transform: translate(0, 0) scale(1); }
|
|
318
|
+
50% { transform: translate(3%, -5%) scale(1.04); }
|
|
319
|
+
}
|
|
320
|
+
.animate-float-slowest {
|
|
321
|
+
animation: float-slowest 40s ease-in-out infinite;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* ── CTA shimmer effect ── */
|
|
325
|
+
|
|
326
|
+
.cta-shimmer {
|
|
327
|
+
position: relative;
|
|
328
|
+
overflow: hidden;
|
|
329
|
+
}
|
|
330
|
+
.cta-shimmer::after {
|
|
331
|
+
content: '';
|
|
332
|
+
position: absolute;
|
|
333
|
+
inset: 0;
|
|
334
|
+
background: linear-gradient(
|
|
335
|
+
105deg,
|
|
336
|
+
transparent 40%,
|
|
337
|
+
rgba(255,255,255,0.15) 50%,
|
|
338
|
+
transparent 60%
|
|
339
|
+
);
|
|
340
|
+
transform: translateX(-200%);
|
|
341
|
+
transition: transform 700ms;
|
|
342
|
+
}
|
|
343
|
+
.cta-shimmer:hover::after {
|
|
344
|
+
transform: translateX(200%);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/* ── Scrollbar utilities ── */
|
|
348
|
+
|
|
349
|
+
.scrollbar-none {
|
|
350
|
+
-ms-overflow-style: none;
|
|
351
|
+
scrollbar-width: none;
|
|
352
|
+
}
|
|
353
|
+
.scrollbar-none::-webkit-scrollbar {
|
|
354
|
+
display: none;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/* ── Glass input — shared base for form inputs ── */
|
|
358
|
+
.glass-input {
|
|
359
|
+
background-color: rgba(255, 255, 255, 0.03);
|
|
360
|
+
border: 1px solid var(--sg-border-subtle);
|
|
361
|
+
color: var(--sg-text-primary);
|
|
362
|
+
transition: all var(--sg-duration-fast) ease;
|
|
363
|
+
}
|
|
364
|
+
.glass-input:focus {
|
|
365
|
+
border-color: rgba(59, 130, 246, 0.5);
|
|
366
|
+
background-color: rgba(255, 255, 255, 0.05);
|
|
367
|
+
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
|
|
368
|
+
outline: none;
|
|
369
|
+
}
|
|
370
|
+
.glass-input::placeholder {
|
|
371
|
+
color: rgba(83, 92, 107, 0.6);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/* ── Stealth Glass Focus Ring ── */
|
|
375
|
+
.sg-focus-ring {
|
|
376
|
+
&:focus-visible {
|
|
377
|
+
outline: none;
|
|
378
|
+
box-shadow:
|
|
379
|
+
0 0 0 2px var(--sg-void),
|
|
380
|
+
0 0 0 4px rgba(59, 130, 246, 0.5),
|
|
381
|
+
var(--sg-focus-shadow);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
/* ─────────────────────────────────────────────────────────
|
|
388
|
+
ACCORDION ANIMATIONS
|
|
389
|
+
───────────────────────────────────────────────────────── */
|
|
390
|
+
|
|
391
|
+
@keyframes accordion-down {
|
|
392
|
+
from { height: 0; opacity: 0; }
|
|
393
|
+
to { height: var(--radix-accordion-content-height); opacity: 1; }
|
|
394
|
+
}
|
|
395
|
+
@keyframes accordion-up {
|
|
396
|
+
from { height: var(--radix-accordion-content-height); opacity: 1; }
|
|
397
|
+
to { height: 0; opacity: 0; }
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.animate-accordion-down {
|
|
401
|
+
animation: accordion-down 200ms ease-out;
|
|
402
|
+
}
|
|
403
|
+
.animate-accordion-up {
|
|
404
|
+
animation: accordion-up 200ms ease-out;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
/* ─────────────────────────────────────────────────────────
|
|
409
|
+
LAYER 5: MOBILE PERFORMANCE
|
|
410
|
+
Disable backdrop-blur, cap animation/transition durations,
|
|
411
|
+
force GPU compositing, and simplify shadows on mobile for
|
|
412
|
+
60 FPS performance.
|
|
413
|
+
───────────────────────────────────────────────────────── */
|
|
414
|
+
|
|
415
|
+
@media (max-width: 768px) {
|
|
416
|
+
/* Disable backdrop-blur for 60fps on mobile */
|
|
417
|
+
.backdrop-blur-xl,
|
|
418
|
+
.backdrop-blur-2xl,
|
|
419
|
+
.backdrop-blur-md,
|
|
420
|
+
.backdrop-blur-sm,
|
|
421
|
+
[class*="backdrop-blur"] {
|
|
422
|
+
-webkit-backdrop-filter: none !important;
|
|
423
|
+
backdrop-filter: none !important;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/* Cap transition/animation durations */
|
|
427
|
+
*,
|
|
428
|
+
*::before,
|
|
429
|
+
*::after {
|
|
430
|
+
transition-duration: 0.15s !important;
|
|
431
|
+
animation-duration: 0.05s !important;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/* Force GPU compositing on animated elements */
|
|
435
|
+
.transition-all,
|
|
436
|
+
.transition-transform,
|
|
437
|
+
.transition-opacity,
|
|
438
|
+
.transition-colors,
|
|
439
|
+
[class*="animate-"] {
|
|
440
|
+
transform: translateZ(0);
|
|
441
|
+
backface-visibility: hidden;
|
|
442
|
+
-webkit-backface-visibility: hidden;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/* Simplified shadows for mobile */
|
|
446
|
+
.shadow-2xl,
|
|
447
|
+
.shadow-xl,
|
|
448
|
+
.shadow-lg {
|
|
449
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15) !important;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
/* ─────────────────────────────────────────────────────────
|
|
455
|
+
LAYER 6: REDUCED MOTION
|
|
456
|
+
Full prefers-reduced-motion: reduce support — all
|
|
457
|
+
animations/transitions set to 0.01ms instant.
|
|
458
|
+
───────────────────────────────────────────────────────── */
|
|
459
|
+
|
|
460
|
+
@media (prefers-reduced-motion: reduce) {
|
|
461
|
+
*,
|
|
462
|
+
*::before,
|
|
463
|
+
*::after {
|
|
464
|
+
animation-duration: 0.01ms !important;
|
|
465
|
+
animation-iteration-count: 1 !important;
|
|
466
|
+
transition-duration: 0.01ms !important;
|
|
467
|
+
scroll-behavior: auto !important;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
.animate-pulse-subtle,
|
|
471
|
+
.animate-float-slow,
|
|
472
|
+
.animate-float-slower,
|
|
473
|
+
.animate-float-slowest,
|
|
474
|
+
.animate-pulse,
|
|
475
|
+
.animate-spin,
|
|
476
|
+
[class*="animate-"] {
|
|
477
|
+
animation: none !important;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
/* ─────────────────────────────────────────────────────────
|
|
483
|
+
LAYER 7: TOUCH DEVICE OVERRIDES
|
|
484
|
+
On touch devices (hover: none), reveal hidden actions
|
|
485
|
+
since there is no hover trigger available.
|
|
486
|
+
───────────────────────────────────────────────────────── */
|
|
487
|
+
|
|
488
|
+
@media (hover: none) {
|
|
489
|
+
/* Reveal hidden actions on touch devices */
|
|
490
|
+
.reveal-touch-visible {
|
|
491
|
+
opacity: 1 !important;
|
|
492
|
+
transform: none !important;
|
|
493
|
+
}
|
|
494
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sdvf23rvfa43f/stealth-glass",
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"description": "Stealth Glass Design System - Dark dashboard theme for Caasify PaaS platform",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
},
|
|
14
|
+
"./components": {
|
|
15
|
+
"import": "./dist/components/index.js",
|
|
16
|
+
"types": "./dist/components/index.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./design-tokens": {
|
|
19
|
+
"import": "./dist/design-tokens.js",
|
|
20
|
+
"types": "./dist/design-tokens.d.ts"
|
|
21
|
+
},
|
|
22
|
+
"./stealth-glass-theme.css": "./dist/stealth-glass-theme.css"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist/**/*"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "npx tsup",
|
|
29
|
+
"dev": "npx tsup --watch",
|
|
30
|
+
"clean": "rm -rf dist",
|
|
31
|
+
"typecheck": "npx tsc --noEmit",
|
|
32
|
+
"verify": "node -e \"const p=require('./package.json'); if(p.name!=='@sdvf23rvfa43f/stealth-glass'){console.error('WRONG PACKAGE: '+p.name);process.exit(1)} console.log('OK: '+p.name+'@'+p.version)\"",
|
|
33
|
+
"prepublishOnly": "npm run verify && npm run clean && npm run build"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"caasify",
|
|
37
|
+
"design-system",
|
|
38
|
+
"stealth-glass",
|
|
39
|
+
"dark-theme",
|
|
40
|
+
"dashboard",
|
|
41
|
+
"react",
|
|
42
|
+
"tailwindcss",
|
|
43
|
+
"paas"
|
|
44
|
+
],
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/caasify/stealth-glass-theme.git",
|
|
48
|
+
"directory": "theme"
|
|
49
|
+
},
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public",
|
|
52
|
+
"registry": "https://registry.npmjs.org/"
|
|
53
|
+
},
|
|
54
|
+
"license": "MIT",
|
|
55
|
+
"sideEffects": [
|
|
56
|
+
"*.css"
|
|
57
|
+
],
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
60
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
61
|
+
"lucide-react": ">=0.300.0",
|
|
62
|
+
"tailwind-merge": ">=2.0.0",
|
|
63
|
+
"class-variance-authority": ">=0.7.0",
|
|
64
|
+
"tailwindcss": ">=4.0.0",
|
|
65
|
+
"@radix-ui/react-accordion": ">=1.0.0",
|
|
66
|
+
"@radix-ui/react-avatar": ">=1.0.0",
|
|
67
|
+
"@radix-ui/react-checkbox": ">=1.0.0",
|
|
68
|
+
"@radix-ui/react-context-menu": ">=2.0.0",
|
|
69
|
+
"@radix-ui/react-dialog": ">=1.0.0",
|
|
70
|
+
"@radix-ui/react-dropdown-menu": ">=2.0.0",
|
|
71
|
+
"@radix-ui/react-popover": ">=1.0.0",
|
|
72
|
+
"@radix-ui/react-progress": ">=1.0.0",
|
|
73
|
+
"@radix-ui/react-radio-group": ">=1.0.0",
|
|
74
|
+
"@radix-ui/react-scroll-area": ">=1.0.0",
|
|
75
|
+
"@radix-ui/react-select": ">=2.0.0",
|
|
76
|
+
"@radix-ui/react-slider": ">=1.0.0",
|
|
77
|
+
"@radix-ui/react-slot": ">=1.0.0",
|
|
78
|
+
"@radix-ui/react-switch": ">=1.0.0",
|
|
79
|
+
"@radix-ui/react-tabs": ">=1.0.0",
|
|
80
|
+
"@radix-ui/react-toggle": ">=1.0.0",
|
|
81
|
+
"@radix-ui/react-toggle-group": ">=1.0.0",
|
|
82
|
+
"@radix-ui/react-tooltip": ">=1.0.0",
|
|
83
|
+
"cmdk": ">=1.0.0",
|
|
84
|
+
"motion": ">=12.0.0",
|
|
85
|
+
"recharts": ">=2.0.0",
|
|
86
|
+
"sonner": ">=2.0.0",
|
|
87
|
+
"vaul": ">=1.0.0",
|
|
88
|
+
"date-fns": ">=3.0.0"
|
|
89
|
+
},
|
|
90
|
+
"peerDependenciesMeta": {
|
|
91
|
+
"recharts": { "optional": true },
|
|
92
|
+
"cmdk": { "optional": true },
|
|
93
|
+
"motion": { "optional": true },
|
|
94
|
+
"vaul": { "optional": true },
|
|
95
|
+
"date-fns": { "optional": true }
|
|
96
|
+
},
|
|
97
|
+
"devDependencies": {
|
|
98
|
+
"tsup": "^8.0.0",
|
|
99
|
+
"typescript": "^5.0.0",
|
|
100
|
+
"react": "^18.0.0",
|
|
101
|
+
"react-dom": "^18.0.0",
|
|
102
|
+
"@types/react": "^18.0.0",
|
|
103
|
+
"@types/react-dom": "^18.0.0",
|
|
104
|
+
"motion": "^12.0.0",
|
|
105
|
+
"recharts": "^2.0.0",
|
|
106
|
+
"sonner": "^2.0.0",
|
|
107
|
+
"vaul": "^1.0.0",
|
|
108
|
+
"cmdk": "^1.0.0",
|
|
109
|
+
"date-fns": "^3.0.0",
|
|
110
|
+
"lucide-react": ">=0.300.0",
|
|
111
|
+
"tailwind-merge": ">=2.0.0",
|
|
112
|
+
"class-variance-authority": ">=0.7.0",
|
|
113
|
+
"@radix-ui/react-accordion": ">=1.0.0",
|
|
114
|
+
"@radix-ui/react-avatar": ">=1.0.0",
|
|
115
|
+
"@radix-ui/react-checkbox": ">=1.0.0",
|
|
116
|
+
"@radix-ui/react-context-menu": ">=2.0.0",
|
|
117
|
+
"@radix-ui/react-dialog": ">=1.0.0",
|
|
118
|
+
"@radix-ui/react-dropdown-menu": ">=2.0.0",
|
|
119
|
+
"@radix-ui/react-popover": ">=1.0.0",
|
|
120
|
+
"@radix-ui/react-progress": ">=1.0.0",
|
|
121
|
+
"@radix-ui/react-radio-group": ">=1.0.0",
|
|
122
|
+
"@radix-ui/react-scroll-area": ">=1.0.0",
|
|
123
|
+
"@radix-ui/react-select": ">=2.0.0",
|
|
124
|
+
"@radix-ui/react-slider": ">=1.0.0",
|
|
125
|
+
"@radix-ui/react-slot": ">=1.0.0",
|
|
126
|
+
"@radix-ui/react-switch": ">=1.0.0",
|
|
127
|
+
"@radix-ui/react-tabs": ">=1.0.0",
|
|
128
|
+
"@radix-ui/react-toggle": ">=1.0.0",
|
|
129
|
+
"@radix-ui/react-toggle-group": ">=1.0.0",
|
|
130
|
+
"@radix-ui/react-tooltip": ">=1.0.0"
|
|
131
|
+
}
|
|
132
|
+
}
|