organify-ui 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.
@@ -0,0 +1,396 @@
1
+ /**
2
+ * @organify/ui — Global CSS
3
+ *
4
+ * Geometric utilities, glass effects, clip-paths,
5
+ * custom scrollbars and animation layers.
6
+ *
7
+ * Import in consuming app: import '@organify/ui/globals.css';
8
+ */
9
+
10
+ @import 'tailwindcss';
11
+
12
+ /* ─── CSS Custom Properties (Dark Theme) ──────────────── */
13
+ :root {
14
+ --org-primary: #241979;
15
+ --org-primary-light: #4F39F6;
16
+ --org-primary-glow: #4C35DE;
17
+ --org-bg-void: #191919;
18
+ --org-bg-surface: #1F1F21;
19
+ --org-bg-elevated: #2A2A2E;
20
+ --org-cream-base: #F9F9F7;
21
+ --org-success: #10B981;
22
+ --org-warning: #F59E0B;
23
+ --org-error: #E0115F;
24
+ --org-info: #3B82F6;
25
+ }
26
+
27
+ /* ─── Light Theme (cream / white mode) ────────────────── */
28
+ .theme-cream,
29
+ [data-theme='light'] {
30
+ --org-bg-void: #F9F9F7;
31
+ --org-bg-surface: rgba(255, 255, 255, 0.7);
32
+ --org-bg-elevated: rgba(255, 255, 255, 0.9);
33
+ --org-text: #191919;
34
+ --org-text-secondary: #4b5563;
35
+ --org-text-muted: #9ca3af;
36
+ --org-border: rgba(0, 0, 0, 0.08);
37
+ --org-glass-bg: rgba(255, 255, 255, 0.65);
38
+ --org-glass-border: rgba(0, 0, 0, 0.04);
39
+ color-scheme: light;
40
+ color: #191919;
41
+ }
42
+
43
+ /* Dark theme (default / explicit) */
44
+ [data-theme='dark'] {
45
+ --org-bg-void: #191919;
46
+ --org-bg-surface: #1F1F21;
47
+ --org-bg-elevated: #2A2A2E;
48
+ --org-text: #f3f4f6;
49
+ --org-text-secondary: #d1d5db;
50
+ --org-text-muted: #6b7280;
51
+ --org-border: rgba(255, 255, 255, 0.08);
52
+ --org-glass-bg: rgba(31, 31, 33, 0.6);
53
+ --org-glass-border: rgba(255, 255, 255, 0.08);
54
+ color-scheme: dark;
55
+ color: #f3f4f6;
56
+ }
57
+
58
+ /* System preference fallback (when no data-theme) */
59
+ @media (prefers-color-scheme: light) {
60
+ :root:not([data-theme]) {
61
+ --org-bg-void: #F9F9F7;
62
+ --org-bg-surface: rgba(255, 255, 255, 0.7);
63
+ --org-bg-elevated: rgba(255, 255, 255, 0.9);
64
+ --org-text: #191919;
65
+ --org-text-secondary: #4b5563;
66
+ --org-text-muted: #9ca3af;
67
+ --org-border: rgba(0, 0, 0, 0.08);
68
+ --org-glass-bg: rgba(255, 255, 255, 0.65);
69
+ --org-glass-border: rgba(0, 0, 0, 0.04);
70
+ color-scheme: light;
71
+ }
72
+ }
73
+
74
+ /* ─── Glass Panel Variants ────────────────────────────── */
75
+ @layer components {
76
+ .glass-panel {
77
+ background: rgba(31, 31, 33, 0.6);
78
+ backdrop-filter: blur(40px);
79
+ -webkit-backdrop-filter: blur(40px);
80
+ border: 1px solid rgba(255, 255, 255, 0.08);
81
+ box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.25);
82
+ }
83
+
84
+ .glass-panel-highlight {
85
+ background: rgba(36, 25, 121, 0.1);
86
+ backdrop-filter: blur(40px);
87
+ -webkit-backdrop-filter: blur(40px);
88
+ border-left: 1px solid rgba(255, 255, 255, 0.1);
89
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
90
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
91
+ border-right: 1px solid rgba(0, 0, 0, 0.2);
92
+ box-shadow: 20px 20px 60px rgba(0, 0, 0, 0.5);
93
+ }
94
+
95
+ .glass-panel-alt {
96
+ background: rgba(31, 31, 33, 0.8);
97
+ backdrop-filter: blur(40px);
98
+ -webkit-backdrop-filter: blur(40px);
99
+ border: 1px solid rgba(255, 255, 255, 0.05);
100
+ box-shadow: 0 4px 24px -1px rgba(0, 0, 0, 0.3);
101
+ }
102
+
103
+ /* Cream theme glass */
104
+ .glass-panel-cream {
105
+ background: rgba(255, 255, 255, 0.65);
106
+ backdrop-filter: blur(16px);
107
+ -webkit-backdrop-filter: blur(16px);
108
+ border: 1px solid rgba(0, 0, 0, 0.04);
109
+ box-shadow: 0 4px 24px -1px rgba(0, 0, 0, 0.02);
110
+ }
111
+ }
112
+
113
+ /* ─── Geometric Clip-Paths ────────────────────────────── */
114
+ @layer utilities {
115
+ .clip-geo {
116
+ clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
117
+ }
118
+
119
+ .clip-geo-inv {
120
+ clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 10px 100%, 0 calc(100% - 10px));
121
+ }
122
+
123
+ .clip-geo-alt {
124
+ clip-path: polygon(20px 0, 100% 0, 100% 100%, 0 100%, 0 20px);
125
+ }
126
+
127
+ .clip-geo-br {
128
+ clip-path: polygon(0 0, 100% 0, 100% calc(100% - 20px), calc(100% - 20px) 100%, 0 100%);
129
+ }
130
+
131
+ .clip-logo {
132
+ clip-path: polygon(20% 0%, 100% 0, 100% 80%, 80% 100%, 0 100%, 0% 20%);
133
+ }
134
+ }
135
+
136
+ /* ─── Geometric Corner Accents ────────────────────────── */
137
+ @layer components {
138
+ .geometric-corner {
139
+ position: relative;
140
+ }
141
+
142
+ .geometric-corner::before {
143
+ content: '';
144
+ position: absolute;
145
+ width: 1rem;
146
+ height: 1rem;
147
+ border-top: 1px solid rgba(255, 255, 255, 0.3);
148
+ border-left: 1px solid rgba(255, 255, 255, 0.3);
149
+ top: -1px;
150
+ left: -1px;
151
+ pointer-events: none;
152
+ }
153
+
154
+ .geometric-corner-br {
155
+ position: relative;
156
+ }
157
+
158
+ .geometric-corner-br::after {
159
+ content: '';
160
+ position: absolute;
161
+ width: 1rem;
162
+ height: 1rem;
163
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3);
164
+ border-right: 1px solid rgba(255, 255, 255, 0.3);
165
+ bottom: -1px;
166
+ right: -1px;
167
+ pointer-events: none;
168
+ }
169
+
170
+ .geometric-corner-both {
171
+ position: relative;
172
+ }
173
+
174
+ .geometric-corner-both::before {
175
+ content: '';
176
+ position: absolute;
177
+ width: 1rem;
178
+ height: 1rem;
179
+ border-top: 1px solid rgba(255, 255, 255, 0.3);
180
+ border-left: 1px solid rgba(255, 255, 255, 0.3);
181
+ top: -1px;
182
+ left: -1px;
183
+ pointer-events: none;
184
+ }
185
+
186
+ .geometric-corner-both::after {
187
+ content: '';
188
+ position: absolute;
189
+ width: 1rem;
190
+ height: 1rem;
191
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3);
192
+ border-right: 1px solid rgba(255, 255, 255, 0.3);
193
+ bottom: -1px;
194
+ right: -1px;
195
+ pointer-events: none;
196
+ }
197
+ }
198
+
199
+ /* ─── Skeleton Shimmer ────────────────────────────────── */
200
+ @layer components {
201
+ .skeleton-shimmer {
202
+ position: relative;
203
+ overflow: hidden;
204
+ background: rgba(255, 255, 255, 0.1);
205
+ }
206
+
207
+ .skeleton-shimmer::after {
208
+ content: '';
209
+ position: absolute;
210
+ inset: 0;
211
+ transform: translateX(-100%);
212
+ background: linear-gradient(
213
+ 90deg,
214
+ transparent,
215
+ rgba(255, 255, 255, 0.1),
216
+ transparent
217
+ );
218
+ animation: shimmer 2s infinite;
219
+ }
220
+ }
221
+
222
+ @keyframes shimmer {
223
+ 100% {
224
+ transform: translateX(100%);
225
+ }
226
+ }
227
+
228
+ /* ─── Custom Scrollbar ────────────────────────────────── */
229
+ @layer utilities {
230
+ .scrollbar-thin::-webkit-scrollbar {
231
+ width: 4px;
232
+ }
233
+
234
+ .scrollbar-thin::-webkit-scrollbar-track {
235
+ background: transparent;
236
+ }
237
+
238
+ .scrollbar-thin::-webkit-scrollbar-thumb {
239
+ background: rgba(255, 255, 255, 0.1);
240
+ border-radius: 9999px;
241
+ }
242
+
243
+ .scrollbar-thin::-webkit-scrollbar-thumb:hover {
244
+ background: rgba(255, 255, 255, 0.2);
245
+ }
246
+ }
247
+
248
+ /* ─── Background Grid Sizes ───────────────────────────── */
249
+ @layer utilities {
250
+ .bg-grid-sm { background-size: 32px 32px; }
251
+ .bg-grid-md { background-size: 40px 40px; }
252
+ .bg-grid-lg { background-size: 64px 64px; }
253
+ }
254
+
255
+ /* ─── Text Glow ───────────────────────────────────────── */
256
+ @layer utilities {
257
+ .text-glow {
258
+ text-shadow: 0 0 15px rgba(79, 57, 246, 0.6);
259
+ }
260
+
261
+ .text-glow-sm {
262
+ text-shadow: 0 0 8px rgba(79, 57, 246, 0.4);
263
+ }
264
+ }
265
+
266
+ /* ─── Material Symbols thin variant ───────────────────── */
267
+ .icon-thin {
268
+ font-variation-settings: 'FILL' 0, 'wght' 200, 'GRAD' 0, 'opsz' 24;
269
+ }
270
+
271
+ .icon-filled {
272
+ font-variation-settings: 'FILL' 1, 'wght' 200, 'GRAD' 0, 'opsz' 24;
273
+ }
274
+
275
+ /* ─── In-Flow Indicator Dot ───────────────────────────── */
276
+ @layer components {
277
+ .in-flow-indicator {
278
+ position: absolute;
279
+ right: -4px;
280
+ top: -4px;
281
+ width: 8px;
282
+ height: 8px;
283
+ border-radius: 9999px;
284
+ background: var(--org-primary-light);
285
+ box-shadow: 0 0 10px rgba(79, 57, 246, 0.4), 0 0 20px rgba(79, 57, 246, 0.2);
286
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
287
+ }
288
+ }
289
+
290
+ /* ─── Watermark ───────────────────────────────────────── */
291
+ @layer utilities {
292
+ .watermark {
293
+ position: fixed;
294
+ right: -10%;
295
+ bottom: -20%;
296
+ font-size: 80vh;
297
+ font-weight: 100;
298
+ color: rgba(255, 255, 255, 0.015);
299
+ font-family: 'Inter', sans-serif;
300
+ z-index: 0;
301
+ pointer-events: none;
302
+ line-height: 1;
303
+ }
304
+ }
305
+
306
+ /* ─── OrgLoader Keyframes ─────────────────────────────── */
307
+ @keyframes org-loader-spin {
308
+ 0% { transform: rotate(0deg); }
309
+ 100% { transform: rotate(360deg); }
310
+ }
311
+
312
+ @keyframes org-loader-orbit {
313
+ 0% { transform: rotate(0deg); }
314
+ 100% { transform: rotate(360deg); }
315
+ }
316
+
317
+ @keyframes org-loader-pulse {
318
+ 0%, 100% { opacity: 0.15; transform: scale(1); }
319
+ 50% { opacity: 0.4; transform: scale(1.3); }
320
+ }
321
+
322
+ /* ─── Light mode overrides for glass panels ───────────── */
323
+ [data-theme='light'] .glass-panel,
324
+ .theme-cream .glass-panel {
325
+ background: var(--org-glass-bg);
326
+ border-color: var(--org-glass-border);
327
+ box-shadow: 0 4px 24px -1px rgba(0, 0, 0, 0.04);
328
+ }
329
+
330
+ [data-theme='light'] .glass-panel-highlight,
331
+ .theme-cream .glass-panel-highlight {
332
+ background: rgba(36, 25, 121, 0.04);
333
+ border-color: rgba(0, 0, 0, 0.06);
334
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.06);
335
+ }
336
+
337
+ [data-theme='light'] .glass-panel-alt,
338
+ .theme-cream .glass-panel-alt {
339
+ background: rgba(255, 255, 255, 0.8);
340
+ border-color: rgba(0, 0, 0, 0.04);
341
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.03);
342
+ }
343
+
344
+ [data-theme='light'] .geometric-corner::before,
345
+ [data-theme='light'] .geometric-corner-both::before,
346
+ .theme-cream .geometric-corner::before,
347
+ .theme-cream .geometric-corner-both::before {
348
+ border-color: rgba(0, 0, 0, 0.12);
349
+ }
350
+
351
+ [data-theme='light'] .geometric-corner-br::after,
352
+ [data-theme='light'] .geometric-corner-both::after,
353
+ .theme-cream .geometric-corner-br::after,
354
+ .theme-cream .geometric-corner-both::after {
355
+ border-color: rgba(0, 0, 0, 0.12);
356
+ }
357
+
358
+ [data-theme='light'] .skeleton-shimmer,
359
+ .theme-cream .skeleton-shimmer {
360
+ background: rgba(0, 0, 0, 0.06);
361
+ }
362
+
363
+ [data-theme='light'] .skeleton-shimmer::after,
364
+ .theme-cream .skeleton-shimmer::after {
365
+ background: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.04), transparent);
366
+ }
367
+
368
+ [data-theme='light'] .scrollbar-thin::-webkit-scrollbar-thumb,
369
+ .theme-cream .scrollbar-thin::-webkit-scrollbar-thumb {
370
+ background: rgba(0, 0, 0, 0.1);
371
+ }
372
+
373
+ [data-theme='light'] .scrollbar-thin::-webkit-scrollbar-thumb:hover,
374
+ .theme-cream .scrollbar-thin::-webkit-scrollbar-thumb:hover {
375
+ background: rgba(0, 0, 0, 0.18);
376
+ }
377
+
378
+ [data-theme='light'] .in-flow-indicator,
379
+ .theme-cream .in-flow-indicator {
380
+ box-shadow: 0 0 10px rgba(79, 57, 246, 0.3), 0 0 20px rgba(79, 57, 246, 0.15);
381
+ }
382
+
383
+ [data-theme='light'] .text-glow,
384
+ .theme-cream .text-glow {
385
+ text-shadow: 0 0 15px rgba(79, 57, 246, 0.3);
386
+ }
387
+
388
+ [data-theme='light'] .text-glow-sm,
389
+ .theme-cream .text-glow-sm {
390
+ text-shadow: 0 0 8px rgba(79, 57, 246, 0.2);
391
+ }
392
+
393
+ [data-theme='light'] .watermark,
394
+ .theme-cream .watermark {
395
+ color: rgba(0, 0, 0, 0.02);
396
+ }