@flikk/ui 1.0.0-beta.3 → 1.0.0-beta.5
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/components/ai/PromptInput/PromptInput.js +4 -123
- package/dist/components/charts/DonutChart/DonutChart.types.d.ts +1 -2
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.types.d.ts +1 -2
- package/dist/components/core/Badge/Badge.d.ts +1 -1
- package/dist/components/core/Badge/Badge.types.d.ts +2 -3
- package/dist/components/core/Button/Button.d.ts +1 -1
- package/dist/components/core/Button/Button.types.d.ts +1 -2
- package/dist/components/core/Link/Link.d.ts +1 -1
- package/dist/components/core/Link/Link.types.d.ts +2 -2
- package/dist/components/effects/3d/index.d.ts +6 -0
- package/dist/components/effects/3d/index.js +3 -0
- package/dist/components/effects/CustomCursor/CustomCursor.d.ts +2 -2
- package/dist/components/effects/CustomCursor/CustomCursor.types.d.ts +3 -3
- package/dist/components/effects/index.d.ts +0 -6
- package/dist/components/effects/index.js +0 -3
- package/dist/components/forms/FileUpload/FileUpload.js +0 -78
- package/dist/components/forms/InputCounter/InputCounter.d.ts +1 -1
- package/dist/components/forms/InputCounter/InputCounter.types.d.ts +3 -2
- package/dist/components/forms/SelectableCard/SelectableCard.d.ts +1 -1
- package/dist/components/forms/SelectableCard/SelectableCard.types.d.ts +1 -2
- package/dist/components/forms/TimePicker/TimePickerContent.js +1 -78
- package/dist/components/forms/index.js +0 -78
- package/dist/components/layout/FormLayout/FormLayoutBody.js +1 -79
- package/dist/index.js +191 -200
- package/package.json +32 -27
- package/src/global.scss +674 -0
- package/src/styles/theme.css +366 -0
- package/src/theme-plugin.css +2 -0
package/src/global.scss
ADDED
|
@@ -0,0 +1,674 @@
|
|
|
1
|
+
/* src/global.css */
|
|
2
|
+
/* NOTE: Tailwind imports are in tailwind-config.css to prevent Sass mangling */
|
|
3
|
+
|
|
4
|
+
@import url("https://fonts.googleapis.com/css2?family=Geist:wght@100..900&display=swap");
|
|
5
|
+
@import url("https://fonts.googleapis.com/css2?family=Birthstone&display=swap");
|
|
6
|
+
@import "./styles/theme.css";
|
|
7
|
+
|
|
8
|
+
/* Glass effect */
|
|
9
|
+
.glass-effect {
|
|
10
|
+
@apply overflow-hidden backdrop-blur-lg;
|
|
11
|
+
background-image: var(--glass-gradient-outer);
|
|
12
|
+
|
|
13
|
+
/* Multi-layer borders - light highlight on top/left edges */
|
|
14
|
+
border-top: 1px solid
|
|
15
|
+
color-mix(in srgb, var(--color-background) 90%, transparent);
|
|
16
|
+
border-left: 1px solid
|
|
17
|
+
color-mix(in srgb, var(--color-background) 70%, transparent);
|
|
18
|
+
border-right: 1px solid
|
|
19
|
+
color-mix(in srgb, var(--color-border) 50%, transparent);
|
|
20
|
+
border-bottom: 1px solid
|
|
21
|
+
color-mix(in srgb, var(--color-border) 60%, transparent);
|
|
22
|
+
|
|
23
|
+
/* Layered shadows for depth + subtle outer glow */
|
|
24
|
+
box-shadow:
|
|
25
|
+
inset 0 1px 4px 2px color-mix(in srgb, white 30%, transparent),
|
|
26
|
+
inset 0 -1px 2px 0 color-mix(in srgb, var(--color-border) 30%, transparent),
|
|
27
|
+
0 0 0 1px color-mix(in srgb, var(--color-border) 80%, transparent),
|
|
28
|
+
0 4px 16px -4px color-mix(in srgb, var(--color-border) 40%, transparent),
|
|
29
|
+
0 24px 44px -12px rgb(0 0 0 / 0.1);
|
|
30
|
+
&:before {
|
|
31
|
+
content: "";
|
|
32
|
+
@apply absolute inset-0 m-[0.5px] opacity-70;
|
|
33
|
+
z-index: -1;
|
|
34
|
+
border-radius: inherit;
|
|
35
|
+
background-image: var(--glass-gradient-inner);
|
|
36
|
+
}
|
|
37
|
+
&:after {
|
|
38
|
+
content: "";
|
|
39
|
+
@apply absolute inset-0 m-[1px] opacity-90 border-2 border-neutral-500 blur-lg;
|
|
40
|
+
border-radius: inherit;
|
|
41
|
+
z-index: -1;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
Glass Effect Opus - Gradient border that glows from top-left
|
|
47
|
+
Designed to match the "music card" aesthetic with directional light:
|
|
48
|
+
- Gradient border: bright at top-left, fading toward bottom-right
|
|
49
|
+
- High backdrop blur for frosted glass look
|
|
50
|
+
- Subtle inner glow
|
|
51
|
+
- Works on any background color
|
|
52
|
+
*/
|
|
53
|
+
.glass-effect-2 {
|
|
54
|
+
position: relative;
|
|
55
|
+
overflow: hidden;
|
|
56
|
+
@apply backdrop-blur-2xl;
|
|
57
|
+
|
|
58
|
+
/* Semi-transparent dark background for the glass */
|
|
59
|
+
background: linear-gradient(
|
|
60
|
+
145deg,
|
|
61
|
+
rgba(255, 255, 255, 0.08) 0%,
|
|
62
|
+
rgba(255, 255, 255, 0.02) 100%
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
/* Subtle inner shadow for depth */
|
|
66
|
+
box-shadow:
|
|
67
|
+
inset 0 1px 1px 0 rgba(255, 255, 255, 0.1),
|
|
68
|
+
0 8px 32px 0 rgba(0, 0, 0, 0.2);
|
|
69
|
+
|
|
70
|
+
/* Gradient border using ::before pseudo-element */
|
|
71
|
+
&::before {
|
|
72
|
+
content: "";
|
|
73
|
+
position: absolute;
|
|
74
|
+
inset: 0;
|
|
75
|
+
border-radius: inherit;
|
|
76
|
+
padding: 1px; /* Border thickness */
|
|
77
|
+
|
|
78
|
+
/* Gradient from top-left (bright) to bottom-right (dim) */
|
|
79
|
+
background: linear-gradient(
|
|
80
|
+
135deg,
|
|
81
|
+
rgba(255, 255, 255, 0.15) 0%,
|
|
82
|
+
rgba(255, 255, 255, 0.15) 25%,
|
|
83
|
+
rgba(255, 255, 255, 0) 50%,
|
|
84
|
+
rgba(255, 255, 255, 0.05) 75%,
|
|
85
|
+
rgba(255, 255, 255, 0.02) 100%
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
/* Mask to show only the border (hollow out the center) */
|
|
89
|
+
-webkit-mask:
|
|
90
|
+
linear-gradient(#fff 0 0) content-box,
|
|
91
|
+
linear-gradient(#fff 0 0);
|
|
92
|
+
mask:
|
|
93
|
+
linear-gradient(#fff 0 0) content-box,
|
|
94
|
+
linear-gradient(#fff 0 0);
|
|
95
|
+
-webkit-mask-composite: xor;
|
|
96
|
+
mask-composite: exclude;
|
|
97
|
+
|
|
98
|
+
pointer-events: none;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
Glass Effect Opus 2 - Multi-point gradient border with rim lighting
|
|
104
|
+
More sophisticated version with "shine" at multiple points:
|
|
105
|
+
- Strong brightness at top-left corner
|
|
106
|
+
- Glow continues along top and left edges
|
|
107
|
+
- Subtle rim light on other edges
|
|
108
|
+
- Creates a 3D lit glass effect
|
|
109
|
+
*/
|
|
110
|
+
.glass-effect-3 {
|
|
111
|
+
position: relative;
|
|
112
|
+
overflow: hidden;
|
|
113
|
+
@apply backdrop-blur-2xl;
|
|
114
|
+
|
|
115
|
+
/* Semi-transparent background for the glass */
|
|
116
|
+
background: linear-gradient(
|
|
117
|
+
145deg,
|
|
118
|
+
rgba(255, 255, 255, 0.08) 0%,
|
|
119
|
+
rgba(255, 255, 255, 0.02) 100%
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
/* Subtle inner shadow for depth */
|
|
123
|
+
box-shadow:
|
|
124
|
+
inset 0 1px 1px 0 rgba(255, 255, 255, 0.1),
|
|
125
|
+
0 8px 32px 0 rgba(0, 0, 0, 0.2);
|
|
126
|
+
|
|
127
|
+
/* Multi-layer gradient border using ::before */
|
|
128
|
+
&::before {
|
|
129
|
+
content: "";
|
|
130
|
+
@apply absolute inset-0 blur-lg;
|
|
131
|
+
border-radius: inherit;
|
|
132
|
+
padding: 0.5px; /* Border thickness */
|
|
133
|
+
|
|
134
|
+
/* Layered gradients for multi-point shine effect */
|
|
135
|
+
background:
|
|
136
|
+
/* Top-left corner highlight - strong radial glow */
|
|
137
|
+
radial-gradient(
|
|
138
|
+
ellipse 60% 40% at 5% 5%,
|
|
139
|
+
rgba(255, 255, 255, 0.7) 0%,
|
|
140
|
+
transparent 50%
|
|
141
|
+
),
|
|
142
|
+
/* Top edge glow spreading right */
|
|
143
|
+
linear-gradient(
|
|
144
|
+
90deg,
|
|
145
|
+
rgba(255, 255, 255, 0.5) 0%,
|
|
146
|
+
rgba(255, 255, 255, 0.25) 20%,
|
|
147
|
+
rgba(255, 255, 255, 0.1) 50%,
|
|
148
|
+
rgba(255, 255, 255, 0.03) 80%,
|
|
149
|
+
transparent 100%
|
|
150
|
+
),
|
|
151
|
+
/* Left edge glow spreading down */
|
|
152
|
+
linear-gradient(
|
|
153
|
+
180deg,
|
|
154
|
+
rgba(255, 255, 255, 0.4) 0%,
|
|
155
|
+
rgba(255, 255, 255, 0.15) 30%,
|
|
156
|
+
rgba(255, 255, 255, 0.05) 60%,
|
|
157
|
+
transparent 100%
|
|
158
|
+
),
|
|
159
|
+
/* Bottom-right subtle highlight for rim effect */
|
|
160
|
+
radial-gradient(
|
|
161
|
+
ellipse 40% 30% at 95% 95%,
|
|
162
|
+
rgba(255, 255, 255, 0.08) 0%,
|
|
163
|
+
transparent 50%
|
|
164
|
+
),
|
|
165
|
+
/* Very subtle base border for continuity */
|
|
166
|
+
linear-gradient(
|
|
167
|
+
135deg,
|
|
168
|
+
rgba(255, 255, 255, 0.1) 0%,
|
|
169
|
+
rgba(255, 255, 255, 0.04) 50%,
|
|
170
|
+
rgba(255, 255, 255, 0.02) 100%
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
/* Mask to show only the border */
|
|
174
|
+
-webkit-mask:
|
|
175
|
+
linear-gradient(#fff 0 0) content-box,
|
|
176
|
+
linear-gradient(#fff 0 0);
|
|
177
|
+
mask:
|
|
178
|
+
linear-gradient(#fff 0 0) content-box,
|
|
179
|
+
linear-gradient(#fff 0 0);
|
|
180
|
+
-webkit-mask-composite: xor;
|
|
181
|
+
mask-composite: exclude;
|
|
182
|
+
|
|
183
|
+
pointer-events: none;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/*
|
|
188
|
+
Glass Effect Opus 3 - Copy of glass-effect with gradient border
|
|
189
|
+
Same as .glass-effect but with gradient border instead of solid borders
|
|
190
|
+
*/
|
|
191
|
+
.glass-effect-4 {
|
|
192
|
+
@apply overflow-hidden backdrop-blur-lg;
|
|
193
|
+
background-image: var(--glass-gradient-outer);
|
|
194
|
+
|
|
195
|
+
/* Layered shadows for depth + subtle outer glow (same as glass-effect) */
|
|
196
|
+
box-shadow:
|
|
197
|
+
inset 0 1px 4px 2px color-mix(in srgb, white 30%, transparent),
|
|
198
|
+
inset 0 -1px 2px 0 color-mix(in srgb, var(--color-border) 30%, transparent),
|
|
199
|
+
0 0 0 1px color-mix(in srgb, var(--color-border) 80%, transparent),
|
|
200
|
+
0 4px 16px -4px color-mix(in srgb, var(--color-border) 40%, transparent),
|
|
201
|
+
0 24px 44px -12px rgb(0 0 0 / 0.1);
|
|
202
|
+
|
|
203
|
+
/* Gradient border using ::before */
|
|
204
|
+
&::before {
|
|
205
|
+
content: "";
|
|
206
|
+
position: absolute;
|
|
207
|
+
inset: 0;
|
|
208
|
+
border-radius: inherit;
|
|
209
|
+
padding: 0.5px; /* Border thickness */
|
|
210
|
+
|
|
211
|
+
/* Gradient from top-left (bright) to bottom-right (dim) */
|
|
212
|
+
background: linear-gradient(
|
|
213
|
+
135deg,
|
|
214
|
+
rgba(255, 255, 255, 0.2) 0%,
|
|
215
|
+
rgba(255, 255, 255, 0.2) 25%,
|
|
216
|
+
rgba(255, 255, 255, 0.2) 50%,
|
|
217
|
+
rgba(255, 255, 255, 0.2) 75%,
|
|
218
|
+
rgba(255, 255, 255, 0.1) 100%
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
/* Mask to show only the border (hollow out the center) */
|
|
222
|
+
-webkit-mask:
|
|
223
|
+
linear-gradient(#fff 0 0) content-box,
|
|
224
|
+
linear-gradient(#fff 0 0);
|
|
225
|
+
mask:
|
|
226
|
+
linear-gradient(#fff 0 0) content-box,
|
|
227
|
+
linear-gradient(#fff 0 0);
|
|
228
|
+
-webkit-mask-composite: xor;
|
|
229
|
+
mask-composite: exclude;
|
|
230
|
+
|
|
231
|
+
pointer-events: none;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/* Inner glow/halo effect - same as glass-effect ::after */
|
|
235
|
+
&::after {
|
|
236
|
+
content: "";
|
|
237
|
+
@apply absolute inset-0 m-[1px] opacity-20 border-2 border-neutral-500 blur-lg;
|
|
238
|
+
border-radius: inherit;
|
|
239
|
+
z-index: -1;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/*
|
|
244
|
+
Glass Effect 2 - Ultra-premium frosted glass
|
|
245
|
+
Designed to match the "music card" aesthetic:
|
|
246
|
+
- High blur
|
|
247
|
+
- Clean, thin white border
|
|
248
|
+
- Subtle inner glow
|
|
249
|
+
- Deep drop shadow
|
|
250
|
+
*/
|
|
251
|
+
.glass-effect-5 {
|
|
252
|
+
@apply overflow-hidden backdrop-blur-2xl;
|
|
253
|
+
|
|
254
|
+
/* Subtle gradient background - mostly transparent */
|
|
255
|
+
background: linear-gradient(
|
|
256
|
+
180deg,
|
|
257
|
+
rgba(255, 255, 255, 0.12) 0%,
|
|
258
|
+
rgba(255, 255, 255, 0.04) 100%
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
/* Distinct, thin semi-transparent light border */
|
|
262
|
+
border: 1px solid rgba(255, 255, 255, 0.18);
|
|
263
|
+
|
|
264
|
+
/* Shadows:
|
|
265
|
+
1. Inner white highlight to accentuate the edge (bevel effect)
|
|
266
|
+
2. Deep, soft drop shadow for elevation
|
|
267
|
+
*/
|
|
268
|
+
box-shadow:
|
|
269
|
+
inset 0 1px 0 0 rgba(255, 255, 255, 0.1),
|
|
270
|
+
0 8px 32px 0 rgba(31, 38, 135, 0.15);
|
|
271
|
+
|
|
272
|
+
/* Ensure it works on dark mode too with slightly different values if needed,
|
|
273
|
+
but for now, the "white glass" look is often universal. */
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* Global overlay scrollbar styling */
|
|
277
|
+
@layer base {
|
|
278
|
+
:root {
|
|
279
|
+
/* Scrollbar styling */
|
|
280
|
+
--ui-scrollbar-size: 4px;
|
|
281
|
+
--ui-scrollbar-thumb-rest: rgba(209, 213, 219, 0.3);
|
|
282
|
+
--ui-scrollbar-thumb-active: rgb(209 213 219);
|
|
283
|
+
--ui-scrollbar-track-rest: transparent;
|
|
284
|
+
--ui-scrollbar-track-active: rgba(209, 213, 219, 0.1);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
* {
|
|
288
|
+
/* Firefox - use thin scrollbar with custom colors */
|
|
289
|
+
scrollbar-width: thin;
|
|
290
|
+
scrollbar-color: var(--ui-scrollbar-thumb-rest)
|
|
291
|
+
var(--ui-scrollbar-track-rest);
|
|
292
|
+
-ms-overflow-style: none; /* IE/Edge */
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/* Show more prominent scrollbars on hover/focus */
|
|
296
|
+
*:hover,
|
|
297
|
+
*:focus,
|
|
298
|
+
*:active {
|
|
299
|
+
scrollbar-color: var(--ui-scrollbar-thumb-active)
|
|
300
|
+
var(--ui-scrollbar-track-active);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/* Webkit overlay scrollbars */
|
|
304
|
+
*::-webkit-scrollbar {
|
|
305
|
+
width: var(--ui-scrollbar-size);
|
|
306
|
+
height: var(--ui-scrollbar-size);
|
|
307
|
+
/* Make scrollbar overlay instead of taking up space */
|
|
308
|
+
position: absolute;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
*::-webkit-scrollbar-track {
|
|
312
|
+
background: var(--ui-scrollbar-track-rest);
|
|
313
|
+
transition: background-color 0.3s ease;
|
|
314
|
+
/* Position track to overlay on right edge */
|
|
315
|
+
position: absolute;
|
|
316
|
+
right: 0;
|
|
317
|
+
border-radius: calc(var(--ui-scrollbar-size) / 2);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
*::-webkit-scrollbar-thumb {
|
|
321
|
+
background: var(--ui-scrollbar-thumb-rest);
|
|
322
|
+
border-radius: calc(var(--ui-scrollbar-size) / 2);
|
|
323
|
+
transition: background-color 0.3s ease;
|
|
324
|
+
/* Ensure thumb overlays properly */
|
|
325
|
+
position: relative;
|
|
326
|
+
z-index: 1;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/* Show scrollbar on hover/focus/active states */
|
|
330
|
+
*:hover::-webkit-scrollbar-thumb,
|
|
331
|
+
*:focus::-webkit-scrollbar-thumb,
|
|
332
|
+
*:active::-webkit-scrollbar-thumb {
|
|
333
|
+
background: var(--ui-scrollbar-thumb-active);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
*:hover::-webkit-scrollbar-track,
|
|
337
|
+
*:focus::-webkit-scrollbar-track,
|
|
338
|
+
*:active::-webkit-scrollbar-track {
|
|
339
|
+
background: var(--ui-scrollbar-track-active);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
*::-webkit-scrollbar-corner {
|
|
343
|
+
background: transparent;
|
|
344
|
+
position: absolute;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
@layer utilities {
|
|
349
|
+
/* Shadow elevation utilities */
|
|
350
|
+
.shadow-real-sm {
|
|
351
|
+
box-shadow:
|
|
352
|
+
0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
|
|
353
|
+
0.1px 3.6px 3.2px -4.1px rgba(0, 0, 0, 0.08);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.shadow-real-md {
|
|
357
|
+
box-shadow:
|
|
358
|
+
0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
|
|
359
|
+
0.1px 3.7px 3.3px -2px rgba(0, 0, 0, 0.09),
|
|
360
|
+
0.4px 18.2px 16.2px -4.1px rgba(0, 0, 0, 0.06);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.shadow-real-lg {
|
|
364
|
+
box-shadow:
|
|
365
|
+
0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
|
|
366
|
+
0.1px 3.6px 3.2px -0.8px rgba(0, 0, 0, 0.06),
|
|
367
|
+
0.2px 9.5px 8.5px -1.6px rgba(0, 0, 0, 0.06),
|
|
368
|
+
0.5px 22.6px 20.2px -2.4px rgba(0, 0, 0, 0.05),
|
|
369
|
+
1.1px 47.3px 42.2px -3.2px rgba(0, 0, 0, 0.04),
|
|
370
|
+
2.1px 87.7px 78.3px -4.1px rgba(0, 0, 0, 0.03) !important;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.shadow-real-xl {
|
|
374
|
+
box-shadow:
|
|
375
|
+
0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
|
|
376
|
+
0.2px 4.8px 4.3px -0.5px rgba(0, 0, 0, 0.06),
|
|
377
|
+
0.4px 11.2px 10px -1px rgba(0, 0, 0, 0.06),
|
|
378
|
+
0.7px 21.3px 19px -1.5px rgba(0, 0, 0, 0.05),
|
|
379
|
+
1.2px 38.4px 34.3px -2px rgba(0, 0, 0, 0.05),
|
|
380
|
+
2px 64.6px 57.7px -2.5px rgba(0, 0, 0, 0.04),
|
|
381
|
+
3.1px 102.1px 91.2px -3px rgba(0, 0, 0, 0.03),
|
|
382
|
+
4.7px 154.3px 137.8px -3.5px rgba(0, 0, 0, 0.03),
|
|
383
|
+
6.8px 222.5px 198.7px -4.1px rgba(0, 0, 0, 0.02);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.shadow-real-2xl {
|
|
387
|
+
box-shadow:
|
|
388
|
+
0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
|
|
389
|
+
0.3px 6.2px 5.5px -0.3px rgba(0, 0, 0, 0.06),
|
|
390
|
+
0.6px 14.8px 13.2px -0.6px rgba(0, 0, 0, 0.06),
|
|
391
|
+
1px 27.1px 24.2px -0.9px rgba(0, 0, 0, 0.06),
|
|
392
|
+
1.6px 45.2px 40.4px -1.2px rgba(0, 0, 0, 0.05),
|
|
393
|
+
2.5px 70.3px 62.8px -1.5px rgba(0, 0, 0, 0.05),
|
|
394
|
+
3.7px 104.2px 93.1px -1.8px rgba(0, 0, 0, 0.04),
|
|
395
|
+
5.4px 148.9px 133px -2.1px rgba(0, 0, 0, 0.04),
|
|
396
|
+
7.6px 207.4px 185.3px -2.4px rgba(0, 0, 0, 0.03),
|
|
397
|
+
10.4px 283.8px 253.5px -2.7px rgba(0, 0, 0, 0.03),
|
|
398
|
+
14px 381.6px 340.9px -3px rgba(0, 0, 0, 0.02),
|
|
399
|
+
18.4px 503.7px 450px -3.3px rgba(0, 0, 0, 0.02);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.shadow-real-3xl {
|
|
403
|
+
box-shadow:
|
|
404
|
+
0px 0.9px 0.8px rgba(0, 0, 0, 0.04),
|
|
405
|
+
0.4px 8.1px 7.2px -0.2px rgba(0, 0, 0, 0.06),
|
|
406
|
+
0.8px 19.3px 17.2px -0.4px rgba(0, 0, 0, 0.06),
|
|
407
|
+
1.3px 34.8px 31.1px -0.6px rgba(0, 0, 0, 0.06),
|
|
408
|
+
2px 55.2px 49.3px -0.8px rgba(0, 0, 0, 0.06),
|
|
409
|
+
3px 81.7px 73px -1px rgba(0, 0, 0, 0.05),
|
|
410
|
+
4.3px 115.8px 103.4px -1.2px rgba(0, 0, 0, 0.05),
|
|
411
|
+
6px 158.9px 142px -1.4px rgba(0, 0, 0, 0.05),
|
|
412
|
+
8.2px 212.4px 189.7px -1.6px rgba(0, 0, 0, 0.04),
|
|
413
|
+
10.9px 278.8px 249.1px -1.8px rgba(0, 0, 0, 0.04),
|
|
414
|
+
14.2px 360.5px 322.1px -2px rgba(0, 0, 0, 0.03),
|
|
415
|
+
18.2px 460.1px 411px -2.2px rgba(0, 0, 0, 0.03),
|
|
416
|
+
23px 579.9px 518px -2.4px rgba(0, 0, 0, 0.02),
|
|
417
|
+
28.7px 722.4px 645.3px -2.6px rgba(0, 0, 0, 0.02),
|
|
418
|
+
35.3px 890.8px 796px -2.8px rgba(0, 0, 0, 0.02);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
@layer utilities {
|
|
423
|
+
/* Overlay scrollbar utility classes */
|
|
424
|
+
.scrollbar-thin {
|
|
425
|
+
--ui-scrollbar-size: 6px;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
.scrollbar-thick {
|
|
429
|
+
--ui-scrollbar-size: 8px;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
.scrollbar-thumb-gray-300 {
|
|
433
|
+
--ui-scrollbar-thumb-active: rgb(209 213 219);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
.scrollbar-thumb-\[var\(--color-neutral-300\)\] {
|
|
437
|
+
--ui-scrollbar-thumb-active: var(--color-neutral-300);
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
.scrollbar-track-\[var\(--color-neutral-100\)\] {
|
|
441
|
+
--ui-scrollbar-track-active: var(--color-neutral-100);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.scrollbar-track-transparent {
|
|
445
|
+
--ui-scrollbar-track-active: transparent;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/* Auto-show scrollbars (default behavior) - visible when scrollable, prominent on hover */
|
|
449
|
+
.scrollbar-auto-show {
|
|
450
|
+
--ui-scrollbar-thumb-rest: rgba(209, 213, 219, 0.3);
|
|
451
|
+
--ui-scrollbar-thumb-active: rgb(209 213 219);
|
|
452
|
+
--ui-scrollbar-track-rest: transparent;
|
|
453
|
+
--ui-scrollbar-track-active: rgba(209, 213, 219, 0.1);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/* Hide scrollbars until hover (minimal UI approach) */
|
|
457
|
+
.scrollbar-auto-hide {
|
|
458
|
+
--ui-scrollbar-thumb-rest: transparent;
|
|
459
|
+
--ui-scrollbar-track-rest: transparent;
|
|
460
|
+
scrollbar-color: transparent transparent;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
.scrollbar-auto-hide:hover,
|
|
464
|
+
.scrollbar-auto-hide:focus,
|
|
465
|
+
.scrollbar-auto-hide.scrolling {
|
|
466
|
+
--ui-scrollbar-thumb-rest: rgba(209, 213, 219, 0.7);
|
|
467
|
+
--ui-scrollbar-thumb-active: rgb(209 213 219);
|
|
468
|
+
--ui-scrollbar-track-rest: transparent;
|
|
469
|
+
--ui-scrollbar-track-active: rgba(209, 213, 219, 0.1);
|
|
470
|
+
scrollbar-color: var(--ui-scrollbar-thumb-rest)
|
|
471
|
+
var(--ui-scrollbar-track-rest);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/* Always visible scrollbars with full opacity */
|
|
475
|
+
.scrollbar-always-visible {
|
|
476
|
+
--ui-scrollbar-thumb-rest: rgb(209 213 219);
|
|
477
|
+
--ui-scrollbar-thumb-active: rgb(156 163 175);
|
|
478
|
+
--ui-scrollbar-track-rest: rgba(229, 231, 235, 0.5);
|
|
479
|
+
--ui-scrollbar-track-active: rgb(229 231 235);
|
|
480
|
+
scrollbar-color: var(--ui-scrollbar-thumb-rest)
|
|
481
|
+
var(--ui-scrollbar-track-rest);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/* Completely hide scrollbars */
|
|
485
|
+
.scrollbar-hide {
|
|
486
|
+
scrollbar-width: none;
|
|
487
|
+
-ms-overflow-style: none;
|
|
488
|
+
scrollbar-color: transparent transparent;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
.scrollbar-hide::-webkit-scrollbar {
|
|
492
|
+
display: none;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
/* Hover-only visibility for minimal interfaces */
|
|
496
|
+
.scrollbar-hover-only {
|
|
497
|
+
--ui-scrollbar-thumb-rest: transparent;
|
|
498
|
+
--ui-scrollbar-track-rest: transparent;
|
|
499
|
+
scrollbar-color: transparent transparent;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
.scrollbar-hover-only:hover {
|
|
503
|
+
--ui-scrollbar-thumb-rest: rgba(209, 213, 219, 0.6);
|
|
504
|
+
--ui-scrollbar-thumb-active: rgb(209 213 219);
|
|
505
|
+
scrollbar-color: var(--ui-scrollbar-thumb-rest)
|
|
506
|
+
var(--ui-scrollbar-track-rest);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/* Background image utility system
|
|
511
|
+
Usage: <div className="background-1 background-blur-2xl background-scale-125">
|
|
512
|
+
Uses ::before pseudo-element — content needs "relative z-10" to appear above.
|
|
513
|
+
Base class auto-applies position:relative and overflow:hidden.
|
|
514
|
+
*/
|
|
515
|
+
@layer utilities {
|
|
516
|
+
/* Shared base setup for all bg-image classes */
|
|
517
|
+
.bg-image-1,
|
|
518
|
+
.bg-image-2,
|
|
519
|
+
.bg-image-3,
|
|
520
|
+
.bg-image-4,
|
|
521
|
+
.bg-image-5,
|
|
522
|
+
.bg-image {
|
|
523
|
+
--bg-image-blur: 0px;
|
|
524
|
+
--bg-image-scale: 1;
|
|
525
|
+
--bg-image-opacity: 0.5;
|
|
526
|
+
--bg-image-blend: multiply;
|
|
527
|
+
position: relative;
|
|
528
|
+
overflow: hidden;
|
|
529
|
+
|
|
530
|
+
&::before {
|
|
531
|
+
content: "";
|
|
532
|
+
position: absolute;
|
|
533
|
+
inset: 0;
|
|
534
|
+
z-index: 0;
|
|
535
|
+
background-image: var(--bg-image);
|
|
536
|
+
background-size: cover;
|
|
537
|
+
background-position: center;
|
|
538
|
+
filter: blur(var(--bg-image-blur));
|
|
539
|
+
transform: scale(var(--bg-image-scale));
|
|
540
|
+
opacity: var(--bg-image-opacity);
|
|
541
|
+
mix-blend-mode: var(--bg-image-blend);
|
|
542
|
+
pointer-events: none;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
/* Image presets */
|
|
547
|
+
.bg-image-1 { --bg-image: url("/bg/1.jpg"); }
|
|
548
|
+
.bg-image-2 { --bg-image: url("/bg/2.jpg"); }
|
|
549
|
+
.bg-image-3 { --bg-image: url("/bg/3.jpg"); }
|
|
550
|
+
.bg-image-4 { --bg-image: url("/bg/4.jpg"); }
|
|
551
|
+
.bg-image-5 { --bg-image: url("/bg/5.jpg"); }
|
|
552
|
+
|
|
553
|
+
/* Blur modifiers */
|
|
554
|
+
.bg-image-blur-sm { --bg-image-blur: 4px; }
|
|
555
|
+
.bg-image-blur-md { --bg-image-blur: 8px; }
|
|
556
|
+
.bg-image-blur-lg { --bg-image-blur: 16px; }
|
|
557
|
+
.bg-image-blur-xl { --bg-image-blur: 24px; }
|
|
558
|
+
.bg-image-blur-2xl { --bg-image-blur: 40px; }
|
|
559
|
+
.bg-image-blur-3xl { --bg-image-blur: 64px; }
|
|
560
|
+
|
|
561
|
+
/* Scale modifiers */
|
|
562
|
+
.bg-image-scale-105 { --bg-image-scale: 1.05; }
|
|
563
|
+
.bg-image-scale-110 { --bg-image-scale: 1.1; }
|
|
564
|
+
.bg-image-scale-125 { --bg-image-scale: 1.25; }
|
|
565
|
+
.bg-image-scale-150 { --bg-image-scale: 1.5; }
|
|
566
|
+
|
|
567
|
+
/* Opacity modifiers */
|
|
568
|
+
.bg-image-opacity-25 { --bg-image-opacity: 0.25; }
|
|
569
|
+
.bg-image-opacity-50 { --bg-image-opacity: 0.5; }
|
|
570
|
+
.bg-image-opacity-75 { --bg-image-opacity: 0.75; }
|
|
571
|
+
|
|
572
|
+
/* Blend mode modifiers */
|
|
573
|
+
.bg-image-blend-multiply { --bg-image-blend: multiply; }
|
|
574
|
+
.bg-image-blend-overlay { --bg-image-blend: overlay; }
|
|
575
|
+
.bg-image-blend-soft-light { --bg-image-blend: soft-light; }
|
|
576
|
+
.bg-image-blend-normal { --bg-image-blend: normal; }
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/* Apply fonts globally */
|
|
580
|
+
html,
|
|
581
|
+
body {
|
|
582
|
+
font-family: var(--font-family-base);
|
|
583
|
+
-webkit-font-smoothing: antialiased;
|
|
584
|
+
-moz-osx-font-smoothing: grayscale;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/* Auto-fill input styling resets - fixes border-radius issues with auto-populated inputs */
|
|
588
|
+
@layer base {
|
|
589
|
+
/* Webkit browsers (Chrome, Safari, Edge) */
|
|
590
|
+
input:-webkit-autofill,
|
|
591
|
+
input:-webkit-autofill:hover,
|
|
592
|
+
input:-webkit-autofill:focus,
|
|
593
|
+
input:-webkit-autofill:active {
|
|
594
|
+
border-radius: var(--form-radius) !important;
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
/* Firefox - handle auto-fill styling */
|
|
598
|
+
input:-moz-autofill {
|
|
599
|
+
border-radius: var(--form-radius) !important;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/* Ensure form controls maintain their styling when auto-filled */
|
|
603
|
+
input[type="text"]:-webkit-autofill,
|
|
604
|
+
input[type="email"]:-webkit-autofill,
|
|
605
|
+
input[type="password"]:-webkit-autofill,
|
|
606
|
+
input[type="tel"]:-webkit-autofill,
|
|
607
|
+
input[type="url"]:-webkit-autofill,
|
|
608
|
+
input[type="search"]:-webkit-autofill {
|
|
609
|
+
border-radius: var(--form-radius) !important;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
/* Hide native number input spinners */
|
|
613
|
+
input[type="number"]::-webkit-inner-spin-button,
|
|
614
|
+
input[type="number"]::-webkit-outer-spin-button {
|
|
615
|
+
-webkit-appearance: none;
|
|
616
|
+
margin: 0;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
input[type="number"] {
|
|
620
|
+
-moz-appearance: textfield;
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/* Heatmap flicker animation */
|
|
625
|
+
@keyframes flicker {
|
|
626
|
+
0% {
|
|
627
|
+
opacity: 0;
|
|
628
|
+
transform: scale(1.05);
|
|
629
|
+
}
|
|
630
|
+
20% {
|
|
631
|
+
opacity: 0.3;
|
|
632
|
+
transform: scale(1.02);
|
|
633
|
+
}
|
|
634
|
+
40% {
|
|
635
|
+
opacity: 0.1;
|
|
636
|
+
transform: scale(1.03);
|
|
637
|
+
}
|
|
638
|
+
60% {
|
|
639
|
+
opacity: 0.7;
|
|
640
|
+
transform: scale(1.01);
|
|
641
|
+
}
|
|
642
|
+
80% {
|
|
643
|
+
opacity: 0.4;
|
|
644
|
+
transform: scale(1.02);
|
|
645
|
+
}
|
|
646
|
+
100% {
|
|
647
|
+
transform: scale(1);
|
|
648
|
+
/* No opacity at 100% - let inline styles control final opacity */
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
/* Loader shimmer animation for indeterminate linear progress */
|
|
653
|
+
@keyframes shimmer {
|
|
654
|
+
0% {
|
|
655
|
+
transform: translateX(-100%);
|
|
656
|
+
}
|
|
657
|
+
100% {
|
|
658
|
+
transform: translateX(300%);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
/* Progress bar indeterminate animation */
|
|
663
|
+
@keyframes progress-indeterminate {
|
|
664
|
+
0% {
|
|
665
|
+
transform: translateX(-100%);
|
|
666
|
+
}
|
|
667
|
+
50% {
|
|
668
|
+
transform: translateX(200%);
|
|
669
|
+
}
|
|
670
|
+
100% {
|
|
671
|
+
transform: translateX(-100%);
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
|