@iota-uz/sdk 0.6.1 → 0.8.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.
Files changed (45) hide show
  1. package/README.md +4 -1
  2. package/dist/client-host/bootstrap.d.ts +41 -0
  3. package/dist/client-host/bootstrap.d.ts.map +1 -0
  4. package/dist/client-host/bootstrap.js +63 -0
  5. package/dist/client-host/draft.d.ts +22 -0
  6. package/dist/client-host/draft.d.ts.map +1 -0
  7. package/dist/client-host/draft.js +73 -0
  8. package/dist/client-host/errors.d.ts.map +1 -1
  9. package/dist/client-host/errors.js +10 -6
  10. package/dist/client-host/identity.d.ts +4 -4
  11. package/dist/client-host/identity.js +2 -2
  12. package/dist/client-host/index.d.ts +3 -0
  13. package/dist/client-host/index.d.ts.map +1 -1
  14. package/dist/client-host/index.js +3 -0
  15. package/dist/client-host/navigation.d.ts +16 -0
  16. package/dist/client-host/navigation.d.ts.map +1 -0
  17. package/dist/client-host/navigation.js +41 -0
  18. package/dist/client-host/route.d.ts +2 -14
  19. package/dist/client-host/route.d.ts.map +1 -1
  20. package/dist/client-host/route.js +11 -24
  21. package/dist/client-host/rpc-core.d.ts +37 -0
  22. package/dist/client-host/rpc-core.d.ts.map +1 -0
  23. package/dist/client-host/rpc-core.js +79 -0
  24. package/dist/client-host/rpc.d.ts +3 -34
  25. package/dist/client-host/rpc.d.ts.map +1 -1
  26. package/dist/client-host/rpc.js +3 -65
  27. package/dist/client-host/services.d.ts +23 -0
  28. package/dist/client-host/services.d.ts.map +1 -0
  29. package/dist/client-host/services.js +57 -0
  30. package/dist/client-host/solid-index.d.ts +13 -0
  31. package/dist/client-host/solid-index.d.ts.map +1 -0
  32. package/dist/client-host/solid-index.js +12 -0
  33. package/dist/client-host/solid-rpc.d.ts +25 -0
  34. package/dist/client-host/solid-rpc.d.ts.map +1 -0
  35. package/dist/client-host/solid-rpc.js +52 -0
  36. package/dist/client-host/solid.d.ts +17 -0
  37. package/dist/client-host/solid.d.ts.map +1 -0
  38. package/dist/client-host/solid.js +77 -0
  39. package/dist/client-host/transport.d.ts +2 -1
  40. package/dist/client-host/transport.d.ts.map +1 -1
  41. package/dist/sdk-identity.cjs +3 -3
  42. package/dist/sdk-identity.js +3 -3
  43. package/dist/sdk-identity.json +2 -2
  44. package/dist/styles.css +1436 -0
  45. package/package.json +19 -2
@@ -0,0 +1,1436 @@
1
+ @font-face {
2
+ font-family: "Inter";
3
+ font-style: normal;
4
+ font-display: swap;
5
+ src: url(/assets/fonts/Inter.var.woff2) format('woff2-variations');
6
+ font-weight: 1 1000;
7
+ }
8
+
9
+ @font-face {
10
+ font-family: "Gilroy";
11
+ font-style: normal;
12
+ font-display: swap;
13
+ src: url(/assets/fonts/Gilroy/Gilroy-Regular.woff2) format('woff2');
14
+ font-weight: 400;
15
+ }
16
+
17
+ @font-face {
18
+ font-family: "Gilroy";
19
+ font-style: normal;
20
+ font-display: swap;
21
+ src: url(/assets/fonts/Gilroy/Gilroy-Medium.woff2) format('woff2');
22
+ font-weight: 500;
23
+ }
24
+
25
+ @font-face {
26
+ font-family: "Gilroy";
27
+ font-style: normal;
28
+ font-display: swap;
29
+ src: url(/assets/fonts/Gilroy/Gilroy-Semibold.woff2) format('woff2');
30
+ font-weight: 600;
31
+ }
32
+
33
+ @layer base {
34
+ :root {
35
+ /* Base */
36
+ --white: 100% 0 0;
37
+ --black-800: 26% 0 0;
38
+ /* #242424 */
39
+ --black: 18.67% 0 0;
40
+ /* #131313 */
41
+ --black-950: 16.84% 0 0;
42
+ /* #151515 */
43
+ --transparent: 0 0 0 / 0;
44
+
45
+ /* Primary */
46
+ --primary-50: 96% 0.02 280;
47
+ /* very light primary tint */
48
+ --primary-400: 62.51% 0.172 283.89;
49
+ /* #8f87ff */
50
+ --primary-500: 58.73% 0.23 279.66;
51
+ /* #695EFF */
52
+ --primary-600: 50% 0.192 279.97;
53
+ /* #544BCC */
54
+ --primary-650: 52.52% 0.272 280.57;
55
+ /* #5C33FF */
56
+ --primary-700: 45.57% 0.171 280.34;
57
+ /* #4A42B2 */
58
+
59
+ /* Gray - Tailwind CSS v4 OKLCH palette */
60
+ --gray-50: 98.5% 0.002 247.839;
61
+ --gray-100: 96.7% 0.003 264.542;
62
+ --gray-200: 92.8% 0.006 264.531;
63
+ --gray-300: 87.2% 0.01 258.338;
64
+ --gray-400: 70.7% 0.022 261.325;
65
+ --gray-500: 55.1% 0.027 264.364;
66
+ --gray-600: 44.6% 0.03 256.802;
67
+ --gray-700: 37.3% 0.034 259.733;
68
+ --gray-800: 27.8% 0.033 256.848;
69
+ --gray-900: 21% 0.034 264.665;
70
+ --gray-950: 13% 0.028 261.692;
71
+
72
+ /* Red */
73
+ --red-500: 59.16% 0.218 0.58;
74
+ --red-100: var(--red-500) / 10%;
75
+ --red-200: var(--red-500) / 20%;
76
+ --red-300: var(--red-500) / 30%;
77
+
78
+ /* Green */
79
+ --green-50: 96.3% 0.0173 168.27;
80
+ --green-100: 92.4% 0.0346 168.27;
81
+ --green-200: 84.9% 0.0692 168.27;
82
+ --green-500: 78.02% 0.1534 168.27;
83
+ --green-600: 64.33% 0.1128 171.09;
84
+
85
+ /* Pink */
86
+ --pink-500: 59.16% 0.218 0.58;
87
+ --pink-600: 58.93% 0.2129 359.93;
88
+
89
+ /* Yellow */
90
+ --yellow-500: 80.13% 0.1458 73.41;
91
+
92
+ /* Blue */
93
+ --blue-500: 82.1% 0.099263 240.9782;
94
+ --blue-600: 64.12% 0.0638 240.72;
95
+
96
+ /* Purple */
97
+ --purple-500: 52.06% 0.2042 305.37;
98
+
99
+ /* Sizes */
100
+ --size-00: 0.25rem;
101
+ --size-0: 0.4rem;
102
+ --size-1: 0.5rem;
103
+ --size-2: 0.75rem;
104
+ --size-3: 1rem;
105
+ --size-4: 1.25rem;
106
+ --size-5: 1.5rem;
107
+
108
+ --size-content-1: 20ch;
109
+ --size-content-2: 45ch;
110
+ --size-content-3: 60ch;
111
+
112
+ /* Border */
113
+ --border-size-1: 1px;
114
+
115
+ /* Default btn */
116
+ --clr-btn-bg: var(--transparent);
117
+ --clr-btn-bg-active: var(--gray-200);
118
+ --clr-btn-bg-hover: var(--gray-100);
119
+ --clr-btn-text: var(--black);
120
+ --crl-btn-text-hover: var(--black);
121
+ --clr-btn-border: var(--transaprent);
122
+ --clr-btn-border-hover: var(--transaprent);
123
+
124
+ /* Primary btn */
125
+ --clr-primary-btn-bg: var(--primary-500);
126
+ --clr-primary-btn-bg-active: var(--primary-700);
127
+ --clr-primary-btn-bg-hover: var(--primary-600);
128
+ --clr-primary-btn-text: var(--white);
129
+ --clr-primary-btn-text-hover: var(--white);
130
+ --clr-primary-btn-border: var(--primary-600);
131
+ --clr-primary-btn-border-hover: var(--primary-600);
132
+
133
+ /* Secondary btn */
134
+ --clr-secondary-btn-bg: var(--white);
135
+ --clr-secondary-btn-bg-active: var(--gray-300);
136
+ --clr-secondary-btn-bg-hover: var(--gray-200);
137
+ --clr-secondary-btn-text: var(--black);
138
+ --clr-secondary-btn-text-hover: var(--black);
139
+ --clr-secondary-btn-border: var(--gray-300);
140
+ --clr-secondary-btn-border-hover: var(--gray-300);
141
+
142
+ /* Danger btn */
143
+ --clr-danger-btn-bg: var(--red-500) / 10%;
144
+ --clr-danger-btn-bg-active: var(--red-500) / 30%;
145
+ --clr-danger-btn-bg-hover: var(--red-500) / 20%;
146
+ --clr-danger-btn-text: var(--red-500);
147
+ --clr-danger-btn-text-hover: var(--red-500);
148
+ --clr-danger-btn-border: var(--clr-danger-btn-bg);
149
+ --clr-danger-btn-border-hover: var(--clr-danger-btn-bg);
150
+
151
+ /* Primary outline btn */
152
+ --clr-primary-outline-btn-text: var(--primary-500);
153
+ --clr-primary-outline-btn-text-hover: var(--primary-500);
154
+ --clr-primary-outline-btn-border: var(--primary-500);
155
+ --clr-primary-outline-btn-border-hover: var(--primary-500);
156
+ --clr-primary-outline-btn-bg-hover: var(--primary-500) / 5%;
157
+
158
+ /* Sidebar btn */
159
+ --clr-sidebar-btn-bg: var(--transparent);
160
+ --clr-sidebar-btn-bg-active: var(--primary-500);
161
+ --clr-sidebar-btn-bg-hover: var(--primary-500);
162
+ --clr-sidebar-btn-text: var(--gray-400);
163
+ --clr-sidebar-btn-text-hover: var(--white);
164
+ --clr-sidebar-btn-border: var(--transparent);
165
+ --clr-sidebar-btn-border-hover: var(--primary-500);
166
+
167
+ /* Form control */
168
+ --clr-form-control-bg: var(--transparent);
169
+ --clr-form-control-bg-active: var(--transparent);
170
+ --clr-form-control-placeholder: var(--gray-400);
171
+ --clr-form-control-border: var(--clr-border-default);
172
+ --clr-form-control-border-hover: var(--primary-500);
173
+ --clr-form-control-text: var(--black);
174
+ --clr-form-control-ring: var(--primary-650) / 20%;
175
+ --clr-form-control-label: var(--gray-400);
176
+ --form-control-border-size: var(--border-size-1);
177
+ --form-control-size-x: calc(var(--size-2) - var(--form-control-border-size) * 2);
178
+ --form-control-size-y: calc(var(--size-2) - var(--form-control-border-size) * 2);
179
+
180
+ /* Surface */
181
+ --clr-surface-50: var(--gray-50);
182
+ --clr-surface-100: var(--gray-100);
183
+ --clr-surface-200: var(--black);
184
+ --clr-surface-300: var(--white);
185
+ --clr-surface-400: var(--gray-200);
186
+ --clr-surface-500: var(--gray-100);
187
+ --clr-surface-600: var(--white);
188
+
189
+ /* Text */
190
+ --clr-text-100: var(--black);
191
+ --clr-text-200: var(--gray-600);
192
+ --clr-text-300: var(--gray-400);
193
+ --clr-text-green: var(--green-500);
194
+ --clr-text-pink: var(--pink-500);
195
+ --clr-text-yellow: var(--yellow-500);
196
+ --clr-text-blue: var(--blue-500);
197
+ --clr-text-purple: var(--purple-500);
198
+
199
+ /* Avatar */
200
+ --clr-avatar-bg: var(--primary-500) / 15%;
201
+ --clr-avatar-text: var(--primary-500);
202
+
203
+ /* Border */
204
+ --clr-border-subtle: var(--gray-200);
205
+ --clr-border-default: var(--gray-300);
206
+ --clr-border-strong: var(--gray-500);
207
+ --clr-border-brand: var(--primary-500);
208
+ --clr-border-danger: var(--red-500);
209
+ --clr-border-warning: var(--yellow-500);
210
+ --clr-border-success: var(--green-500);
211
+ --clr-border-disabled: var(--gray-200);
212
+ /* Deprecated compatibility alias. */
213
+ --clr-border-primary: var(--clr-border-default);
214
+ --clr-border-secondary: var(--gray-100);
215
+ --clr-border-green: var(--green-500);
216
+ --clr-border-pink: var(--pink-500);
217
+ --clr-border-yellow: var(--yellow-500);
218
+ --clr-border-blue: var(--blue-500);
219
+ --clr-border-purple: var(--purple-500);
220
+
221
+ /* Table */
222
+ --table-radius: 0.5rem;
223
+
224
+ /* Shadows */
225
+ --shadow-100: 0px 4px 8px 0px rgba(0, 0, 0, 0.16);
226
+ --shadow-200: 0px 8px 8px 0px rgba(0, 0, 0, 0.08);
227
+
228
+ /* Theme switcher */
229
+ --clr-theme-switcher-bg: var(--gray-100);
230
+ --clr-theme-switcher-text: var(--black);
231
+
232
+ --clr-success: var(--green-500);
233
+ --clr-on-sucess: var(--white);
234
+
235
+ /* Badges */
236
+ --clr-badge-pink: var(--pink-500) / 8%;
237
+ --clr-badge-yellow: var(--yellow-500) / 8%;
238
+ --clr-badge-green: var(--green-500) / 8%;
239
+ --clr-badge-blue: var(--blue-500) / 8%;
240
+ --clr-badge-purple: var(--purple-500) / 8%;
241
+ --clr-badge-gray: var(--gray-100);
242
+
243
+ /* Easing */
244
+ --ease-1: cubic-bezier(.25, 0, .5, 1);
245
+ --ease-2: cubic-bezier(.25, 0, .4, 1);
246
+ --ease-3: cubic-bezier(.25, 0, .3, 1);
247
+ --ease-elastic-in-out-2: cubic-bezier(.5, -.3, .1, 1.5);
248
+ --ease-elastic-in-out-3: cubic-bezier(.5, -.5, .1, 1.5);
249
+ --ease-squish-2: var(--ease-elastic-in-out-2);
250
+ --ease-squish-3: var(--ease-elastic-in-out-3);
251
+
252
+ /* Animation */
253
+ --animation-slide-in-up: slide-in-up 500ms var(--ease-3);
254
+ --animation-slide-in-right: slide-in-right 500ms var(--ease-3);
255
+ --animation-slide-in-left: slide-in-left 500ms var(--ease-3);
256
+ --animation-slide-in-down: slide-in-down 500ms var(--ease-3);
257
+ --animation-scale-down: scale-down 500ms var(--ease-3);
258
+ --animation-slide-out-down: slide-out-down 500ms var(--ease-3);
259
+ --animation-slide-out-right: slide-out-right 500ms var(--ease-3);
260
+ --animation-slide-out-left: slide-out-left 500ms var(--ease-3);
261
+ }
262
+
263
+ *,
264
+ ::before,
265
+ ::after,
266
+ ::backdrop {
267
+ /* Compatibility fallback only. Visible component borders use semantic tokens. */
268
+ border-color: oklch(var(--clr-border-subtle));
269
+ }
270
+
271
+ ::selection {
272
+ background-color: oklch(var(--primary-600));
273
+ color: oklch(var(--white));
274
+ }
275
+
276
+ html.dark {
277
+ color-scheme: dark;
278
+ /* Surface */
279
+ --clr-surface-50: var(--black-950);
280
+ --clr-surface-100: var(--black-950);
281
+ --clr-surface-300: var(--black);
282
+ --clr-surface-400: var(--black-950);
283
+ --clr-surface-500: var(--black);
284
+ --clr-surface-600: var(--black-950);
285
+
286
+ /* Badges */
287
+ --clr-badge-pink: var(--pink-600) / 8%;
288
+ --clr-badge-green: var(--green-600) / 8%;
289
+ --clr-badge-blue: var(--blue-600) / 8%;
290
+ --clr-badge-gray: var(--gray-700);
291
+
292
+ /* Text */
293
+ --clr-text-100: var(--white);
294
+ --clr-text-200: var(--gray-100);
295
+ --clr-text-300: var(--gray-300);
296
+ --clr-text-green: var(--green-600);
297
+ --clr-text-pink: var(--pink-600);
298
+ --clr-text-blue: var(--blue-600);
299
+
300
+ /* Avatar */
301
+ --clr-avatar-text: var(--primary-400);
302
+
303
+ /* Border */
304
+ --clr-border-subtle: var(--gray-800);
305
+ --clr-border-default: var(--gray-700);
306
+ --clr-border-strong: var(--gray-500);
307
+ --clr-border-brand: var(--primary-400);
308
+ --clr-border-danger: var(--red-500);
309
+ --clr-border-warning: var(--yellow-500);
310
+ --clr-border-success: var(--green-600);
311
+ --clr-border-disabled: var(--gray-800);
312
+ --clr-border-primary: var(--clr-border-default);
313
+ --clr-border-secondary: var(--black-950);
314
+ --clr-border-green: var(--green-600);
315
+ --clr-border-pink: var(--pink-600);
316
+ --clr-border-blue: var(--blue-600);
317
+
318
+ /* Secondary btn */
319
+ --clr-secondary-btn-bg: var(--black-950);
320
+ --clr-secondary-btn-bg-active: var(--black);
321
+ --clr-secondary-btn-bg-hover: var(--black);
322
+ --clr-secondary-btn-text: var(--gray-100);
323
+ --clr-secondary-btn-text-hover: var(--white);
324
+ --clr-secondary-btn-border: var(--black-800);
325
+ --clr-secondary-btn-border-hover: var(--black-950);
326
+
327
+ /* Form control */
328
+ --clr-form-control-bg: var(--black);
329
+ --clr-form-control-bg-active: var(--black);
330
+ --clr-form-control-placeholder: var(--gray-100);
331
+ --clr-form-control-border: var(--clr-border-default);
332
+ --clr-form-control-border-hover: var(--primary-500);
333
+ --clr-form-control-text: var(--white);
334
+ --clr-form-control-ring: var(--primary-650);
335
+ --clr-form-control-label: var(--white);
336
+ }
337
+
338
+ button {
339
+ cursor: default;
340
+ }
341
+
342
+ button:disabled {
343
+ opacity: 0.7;
344
+ pointer-events: none;
345
+ }
346
+
347
+ details>summary {
348
+ list-style: none;
349
+ }
350
+
351
+ details summary::-webkit-details-marker {
352
+ display: none;
353
+ }
354
+
355
+ details summary::marker {
356
+ display: none;
357
+ }
358
+
359
+ input::-webkit-outer-spin-button,
360
+ input::-webkit-inner-spin-button {
361
+ -webkit-appearance: none;
362
+ margin: 0;
363
+ }
364
+
365
+ input[type="number"] {
366
+ -moz-appearance: textfield;
367
+ }
368
+
369
+ form:invalid .btn:not(.btn-enabled) {
370
+ --events: none;
371
+ --opacity: 0.7;
372
+ }
373
+ }
374
+
375
+ [x-cloak] {
376
+ display: none !important;
377
+ }
378
+
379
+ @layer components {
380
+ .form-control {
381
+ --bg-color: var(--clr-form-control-bg);
382
+ --bg-active: var(--clr-form-control-bg-active);
383
+ --placeholder: var(--clr-form-control-placeholder);
384
+ --text-color: var(--clr-form-control-text);
385
+ --border-color: var(--clr-form-control-border);
386
+ --border-hover: var(--clr-form-control-border-hover);
387
+ --border-size: var(--form-control-border-size);
388
+ --ring-color: var(--transparent);
389
+ --ring-color-active: var(--clr-form-control-ring);
390
+ --size-x: var(--form-control-size-x);
391
+ --size-y: var(--form-control-size-y);
392
+ --font-size: 0.875rem;
393
+ --radius: 0.5rem;
394
+ --opacity: 1;
395
+ --events: all;
396
+ pointer-events: var(--events);
397
+ outline: none;
398
+ background-color: oklch(var(--bg-color));
399
+ box-shadow: 0 0 0 2px oklch(var(--ring-color));
400
+ color: oklch(var(--text-color));
401
+ font-size: var(--font-size);
402
+ border-radius: var(--radius);
403
+ opacity: var(--opacity);
404
+ border: var(--border-size) solid oklch(var(--border-color));
405
+ transition-duration: 200ms;
406
+ font-weight: 500;
407
+ }
408
+
409
+ .form-control-input {
410
+ padding: var(--size-y) var(--size-x);
411
+ border-radius: var(--radius);
412
+ background-color: oklch(var(--bg-color));
413
+ }
414
+
415
+ .form-control-input:disabled {
416
+ cursor: not-allowed;
417
+ opacity: 0.5;
418
+ }
419
+
420
+ .form-control-label {
421
+ color: var(--clr-form-control-label);
422
+ font-size: 0.875rem;
423
+ }
424
+
425
+ .form-control-input::placeholder {
426
+ color: oklch(var(--placeholder));
427
+ }
428
+
429
+ .form-control:hover {
430
+ --border-color: var(--border-hover);
431
+ }
432
+
433
+ .form-control:focus-within {
434
+ --border-color: var(--border-hover);
435
+ --ring-color: var(--ring-color-active);
436
+ }
437
+
438
+ .btn {
439
+ --text-color: var(--clr-btn-text);
440
+ --loading-indicator-color: var(--clr-btn-text);
441
+ --text-hover: var(--crl-btn-text-hover);
442
+ --bg-color: var(--crl-btn-bg);
443
+ --bg-active: var(--clr-btn-bg-active);
444
+ --bg-hover: var(--clr-btn-bg-hover);
445
+ --border-color: var(--clr-btn-border);
446
+ --border-hover: var(--crl-btn-border-hover);
447
+ --border-size: 1px;
448
+ --size-x: calc(1rem - var(--border-size) * 2);
449
+ --size-y: calc(0.75rem - var(--border-size) * 2);
450
+ --font-size: 0.875rem;
451
+ --radius: 0.5rem;
452
+ --opacity: 1;
453
+ --events: all;
454
+ --user-select: auto;
455
+ --height: 2.625rem;
456
+ --width: auto;
457
+ background-color: oklch(var(--bg-color));
458
+ color: oklch(var(--text-color));
459
+ padding: var(--size-y) var(--size-x);
460
+ font-size: var(--font-size);
461
+ border-radius: var(--radius);
462
+ opacity: var(--opacity);
463
+ border: var(--border-size) solid oklch(var(--border-color));
464
+ transition-duration: 200ms;
465
+ font-weight: 500;
466
+ position: relative;
467
+ display: inline-flex;
468
+ align-items: center;
469
+ outline-color: oklch(var(--bg-active));
470
+ user-select: var(--user-select);
471
+ height: var(--height);
472
+ width: var(--width);
473
+ cursor: pointer;
474
+ }
475
+
476
+ .btn:not(.btn-loading):not(.htmx-request):active,
477
+ .btn:not(.btn-loading):not(.htmx-request).active {
478
+ --bg-color: var(--bg-active);
479
+ --text-color: var(--text-hover);
480
+ }
481
+
482
+ .btn:not(.btn-loading):not(.htmx-request):hover {
483
+ --bg-color: var(--bg-hover);
484
+ --text-color: var(--text-hover);
485
+ --border-hover: var(--border-hover);
486
+ }
487
+
488
+ .btn-primary {
489
+ --bg-color: var(--clr-primary-btn-bg);
490
+ --bg-active: var(--clr-primary-btn-bg-active);
491
+ --text-color: var(--clr-primary-btn-text);
492
+ --border-color: var(--clr-primary-btn-border);
493
+ --bg-hover: var(--clr-primary-btn-bg-hover);
494
+ --text-hover: var(--clr-primary-btn-text-hover);
495
+ --loading-indicator-color: var(--clr-primary-btn-text);
496
+ --border-hover: var(--clr-primary-btn-border-hover);
497
+ }
498
+
499
+ .btn-secondary {
500
+ --bg-color: var(--clr-secondary-btn-bg);
501
+ --bg-active: var(--clr-secondary-btn-bg-active);
502
+ --text-color: var(--clr-secondary-btn-text);
503
+ --border-color: var(--clr-secondary-btn-border);
504
+ --bg-hover: var(--clr-secondary-btn-bg-hover);
505
+ --text-hover: var(--clr-secondary-btn-text-hover);
506
+ --border-hover: var(--clr-secondary-btn-border-hover);
507
+ }
508
+
509
+ .btn-danger {
510
+ --bg-color: var(--clr-danger-btn-bg);
511
+ --bg-active: var(--clr-danger-btn-bg-active);
512
+ --text-color: var(--clr-danger-btn-text);
513
+ --loading-indicator-color: var(--clr-danger-btn-text);
514
+ --border-color: var(--clr-danger-btn-border);
515
+ --bg-hover: var(--clr-danger-btn-bg-hover);
516
+ --text-hover: var(--clr-danger-btn-text-hover);
517
+ --border-hover: var(--clr-danger-btn-border-hover);
518
+ }
519
+
520
+ .btn-primary-outline {
521
+ --text-color: var(--clr-primary-outline-btn-text);
522
+ --loading-indicator-color: var(--clr-primary-outline-btn-text);
523
+ --border-color: var(--clr-primary-outline-btn-border);
524
+ --text-hover: var(--clr-primary-outline-btn-text-hover);
525
+ --border-hover: var(--clr-primary-outline-btn-border-hover);
526
+ --bg-hover: var(--clr-primary-outline-btn-bg-hover);
527
+ }
528
+
529
+ .btn-sidebar {
530
+ --bg-color: var(--clr-sidebar-btn-bg);
531
+ --bg-active: var(--clr-sidebar-btn-bg-active);
532
+ --text-color: var(--clr-sidebar-btn-text);
533
+ --loading-indicator-color: var(--clr-sidebar-btn-text);
534
+ --border-color: var(--clr-sidebar-btn-border);
535
+ --bg-hover: var(--clr-sidebar-btn-bg-hover);
536
+ --text-hover: var(--clr-sidebar-btn-text-hover);
537
+ --border-hover: var(--clr-sidebar-btn-border-hover);
538
+ }
539
+
540
+ .btn-md {
541
+ --height: 3rem;
542
+ --size-x: 1rem;
543
+ --size-y: calc(1rem - 3.5px);
544
+ }
545
+
546
+ .btn-sm {
547
+ --height: 2.5rem;
548
+ --size-x: 0.75rem;
549
+ --size-y: calc(0.75rem - 3.5px);
550
+ }
551
+
552
+ .btn-xs {
553
+ --height: 1.65rem;
554
+ --size-x: 0.25rem;
555
+ --size-y: 0.1rem;
556
+ }
557
+
558
+ .btn-fixed {
559
+ --size-y: var(--size-x);
560
+ --width: var(--height);
561
+ }
562
+
563
+ .btn-with-icon {
564
+ gap: 0.5rem;
565
+ }
566
+
567
+ .btn-rounded {
568
+ --radius: 9999px;
569
+ }
570
+
571
+ .btn-loading {
572
+ --text-color: var(--transparent);
573
+ }
574
+
575
+ .btn-disabled {
576
+ opacity: 0.7;
577
+ pointer-events: none;
578
+ }
579
+
580
+ .htmx-request .btn,
581
+ .htmx-request.btn {
582
+ --text-color: var(--transparent);
583
+ --user-select: none;
584
+ }
585
+
586
+ .btn-loading-indicator {
587
+ --size: var(--size-0);
588
+ --radius: 9999px;
589
+ --display: none;
590
+ --color: var(--loading-indicator-color);
591
+ width: var(--size);
592
+ height: var(--size);
593
+ border-radius: var(--radius);
594
+ background-color: oklch(var(--color));
595
+ color: oklch(var(--color));
596
+ animation: dot-flashing 1s infinite linear alternate;
597
+ animation-delay: 0.5s;
598
+ display: var(--display);
599
+ position: absolute;
600
+ opacity: 1;
601
+ left: 50%;
602
+ transform: translateX(-50%);
603
+ }
604
+
605
+ .btn-loading-indicator::before,
606
+ .btn-loading-indicator::after {
607
+ content: "";
608
+ display: inline-block;
609
+ position: absolute;
610
+ top: 0;
611
+ }
612
+
613
+ .btn-loading-indicator::before {
614
+ left: calc(-1 * var(--size) * 1.5);
615
+ width: var(--size);
616
+ height: var(--size);
617
+ border-radius: var(--radius);
618
+ background-color: oklch(var(--color));
619
+ color: oklch(var(--color));
620
+ animation: dot-flashing 1s infinite linear alternate;
621
+ animation-delay: 0s;
622
+ }
623
+
624
+ .btn-loading-indicator::after {
625
+ left: calc(var(--size) * 1.5);
626
+ width: var(--size);
627
+ height: var(--size);
628
+ border-radius: var(--radius);
629
+ background-color: oklch(var(--color));
630
+ color: oklch(var(--color));
631
+ animation: dot-flashing 1s infinite linear alternate;
632
+ animation-delay: 1s;
633
+ }
634
+
635
+ .btn-loading .btn-loading-indicator,
636
+ .htmx-request .btn-loading-indicator,
637
+ .htmx-request.btn-loading-indicator {
638
+ --display: block;
639
+ }
640
+
641
+ /*
642
+ * Loading state (stale-while-revalidate): while an HTMX row/content swap is
643
+ * in flight, dim the previous rows in place and show a centered spinner via
644
+ * .table-loading-overlay, instead of hiding the rows and blanking the table
645
+ * body. Custom class names are used deliberately: `.hidden` collides with
646
+ * Tailwind's utility (which lives in @layer utilities and wins on layer
647
+ * order regardless of specificity), so a `.htmx-request .hidden` reveal can
648
+ * never take effect — see the dead rules below.
649
+ */
650
+ .htmx-request .hide-on-load {
651
+ opacity: 0.5;
652
+ pointer-events: none;
653
+ transition: opacity 0.15s ease;
654
+ }
655
+
656
+ /* Fully self-contained styling (no utility classes) so the overlay renders
657
+ correctly regardless of which template roots a consumer's Tailwind build
658
+ scans for class generation. */
659
+ .table-loading-overlay {
660
+ display: none;
661
+ position: absolute;
662
+ inset: 0;
663
+ z-index: 20;
664
+ align-items: center;
665
+ justify-content: center;
666
+ pointer-events: none;
667
+ }
668
+
669
+ .htmx-request .table-loading-overlay {
670
+ display: flex;
671
+ }
672
+
673
+ .table-loading-overlay__card {
674
+ display: flex;
675
+ align-items: center;
676
+ justify-content: center;
677
+ padding: 0.875rem;
678
+ border-radius: 9999px;
679
+ background-color: #fff;
680
+ box-shadow:
681
+ 0 6px 18px rgba(2, 6, 23, 0.14),
682
+ 0 1px 3px rgba(2, 6, 23, 0.1);
683
+ }
684
+
685
+ .htmx-request.hide-on-load {
686
+ display: revert;
687
+ }
688
+
689
+ .htmx-request .hidden {
690
+ display: revert;
691
+ }
692
+
693
+ .htmx-request.hidden {
694
+ display: revert;
695
+ }
696
+
697
+ .table {
698
+ --radius: var(--table-radius);
699
+ border-collapse: separate;
700
+ border-spacing: 0;
701
+ }
702
+
703
+ .table tr:first-child th:first-child {
704
+ border-top-left-radius: var(--radius);
705
+ }
706
+
707
+ .table tr:first-child th:last-child {
708
+ border-top-right-radius: var(--radius);
709
+ }
710
+
711
+ .table tr:last-child td:first-child {
712
+ border-bottom-left-radius: var(--radius);
713
+ }
714
+
715
+ .table tr:last-child td:last-child {
716
+ border-bottom-right-radius: var(--radius);
717
+ }
718
+
719
+ .dialog {
720
+ --bg-color: var(--clr-surface-300);
721
+ --text-color: var(--clr-text-100);
722
+ --radius: 0.5rem;
723
+ display: grid;
724
+ align-content: start;
725
+ background-color: oklch(var(--bg-color));
726
+ border: 1px solid oklch(var(--clr-border-subtle));
727
+ color: oklch(var(--text-color));
728
+ max-inline-size: min(90vw, var(--size-content-3));
729
+ margin: auto;
730
+ padding: 0;
731
+ position: fixed;
732
+ inset: 0;
733
+ overflow: clip;
734
+ /* `display`/`overlay` are transitioned with allow-discrete so the closed
735
+ `display: none` (below) is deferred for the 500ms slide-out animation
736
+ instead of collapsing the box mid-exit. */
737
+ transition:
738
+ opacity 500ms var(--ease-3),
739
+ display 500ms allow-discrete,
740
+ overlay 500ms allow-discrete;
741
+ }
742
+
743
+ /* Start the open transition from the closed (opacity 0) state so the dialog
744
+ fades/slides in when it enters the top layer from `display: none`. */
745
+ @starting-style {
746
+ .dialog[open] {
747
+ opacity: 0;
748
+ }
749
+ }
750
+
751
+ .dialog-rounded {
752
+ border-radius: var(--radius);
753
+ }
754
+
755
+ .dialog-btt {
756
+ animation: var(--animation-slide-out-down) forwards;
757
+ animation-timing-function: var(--ease-squish-2);
758
+ }
759
+
760
+ .dialog-rtl {
761
+ animation: var(--animation-slide-out-right) forwards;
762
+ animation-timing-function: var(--ease-squish-2);
763
+ }
764
+
765
+ .dialog-ltr {
766
+ animation: var(--animation-slide-out-left) forwards;
767
+ animation-timing-function: var(--ease-squish-2);
768
+ }
769
+
770
+ .dialog-tbd {
771
+ animation: var(--animation-slide-out-up) forwards;
772
+ animation-timing-function: var(--ease-squish-2);
773
+ }
774
+
775
+ .dialog:not([open]) {
776
+ /* Remove the closed dialog from layout + the a11y tree. `display` is
777
+ transitioned with allow-discrete (see `.dialog`) so the slide-out
778
+ animation still plays before the box collapses. */
779
+ display: none;
780
+ pointer-events: none;
781
+ opacity: 0;
782
+ }
783
+
784
+ .dialog-btt[open] {
785
+ animation: var(--animation-slide-in-up);
786
+ }
787
+
788
+ .dialog-rtl[open] {
789
+ animation: var(--animation-slide-in-right);
790
+ }
791
+
792
+ .dialog-ltr[open] {
793
+ animation: var(--animation-slide-in-left);
794
+ }
795
+
796
+ .dialog-tbd[open] {
797
+ animation: var(--animation-slide-in-down);
798
+ }
799
+
800
+ .dialog::backdrop {
801
+ backdrop-filter: blur(8px);
802
+ transition: backdrop-filter 500ms ease;
803
+ }
804
+
805
+ .tab-slider {
806
+ @apply relative;
807
+ }
808
+
809
+ .tab-slider-inner {
810
+ @apply mb-6 flex;
811
+ }
812
+
813
+ .tab-slider-track {
814
+ @apply relative flex w-full items-center font-sans bg-slate-100 dark:bg-slate-700;
815
+ }
816
+
817
+ .tab-slider-item {
818
+ @apply relative z-20 h-full flex flex-1 items-center justify-center text-sm font-sans;
819
+ }
820
+
821
+ .tab-slider-item:not(.tab-active) {
822
+ @apply text-slate-400 dark:text-slate-400;
823
+ }
824
+
825
+ .tab-slider-item.tab-active {
826
+ @apply text-white dark:text-white;
827
+ }
828
+
829
+ .tab-slider-naver {
830
+ @apply absolute start-0 top-0 z-10 h-full bg-brand-500 dark:bg-brand-500 transition-all duration-300;
831
+ }
832
+
833
+ .tab-content {
834
+ @apply relative block;
835
+ }
836
+
837
+ /* Alignment classes */
838
+ .tabs-centered .tab-slider-inner {
839
+ @apply justify-center;
840
+ }
841
+
842
+ .tabs-end .tab-slider-inner {
843
+ @apply justify-end;
844
+ }
845
+
846
+ /* Rounded variants */
847
+ .tabs-rounded .tab-slider-track,
848
+ .tabs-rounded .tab-slider-naver {
849
+ @apply rounded-md;
850
+ }
851
+
852
+ .tabs-smooth .tab-slider-track,
853
+ .tabs-smooth .tab-slider-naver {
854
+ @apply rounded-lg;
855
+ }
856
+
857
+ .tabs-curved .tab-slider-track,
858
+ .tabs-curved .tab-slider-naver {
859
+ @apply rounded-xl;
860
+ }
861
+
862
+ .tabs-full .tab-slider-track,
863
+ .tabs-full .tab-slider-naver {
864
+ @apply rounded-full;
865
+ }
866
+
867
+ /* Size: sm */
868
+ .tabs-sm.tabs-two-slots .tab-slider-track {
869
+ @apply max-w-[140px];
870
+ }
871
+
872
+ .tabs-sm.tabs-three-slots .tab-slider-track {
873
+ @apply max-w-[210px];
874
+ }
875
+
876
+ .tabs-sm .tab-slider-track {
877
+ @apply h-8;
878
+ }
879
+
880
+ /* Size: md */
881
+ .tabs-md.tabs-two-slots .tab-slider-track {
882
+ @apply max-w-[250px];
883
+ }
884
+
885
+ .tabs-md.tabs-three-slots .tab-slider-track {
886
+ @apply max-w-[320px];
887
+ }
888
+
889
+ .tabs-md .tab-slider-track {
890
+ @apply h-10;
891
+ }
892
+
893
+ /* Slot-based transitions */
894
+ .tabs-two-slots .tab-slider-naver,
895
+ .tabs-two-slots .tab-slider-item {
896
+ @apply w-1/2;
897
+ }
898
+
899
+ .tabs-two-slots .tab-slider-item:first-child.tab-active~.tab-slider-naver {
900
+ @apply ms-0;
901
+ }
902
+
903
+ .tabs-two-slots .tab-slider-item:nth-child(2).tab-active~.tab-slider-naver {
904
+ @apply ms-[50%];
905
+ }
906
+
907
+ .tabs-three-slots .tab-slider-naver,
908
+ .tabs-three-slots .tab-slider-item {
909
+ @apply w-1/3;
910
+ }
911
+
912
+ .tabs-three-slots .tab-slider-item:first-child.tab-active~.tab-slider-naver {
913
+ @apply ms-0;
914
+ }
915
+
916
+ .tabs-three-slots .tab-slider-item:nth-child(2).tab-active~.tab-slider-naver {
917
+ @apply ms-[33.3%];
918
+ }
919
+
920
+ .tabs-three-slots .tab-slider-item:nth-child(3).tab-active~.tab-slider-naver {
921
+ @apply ms-[66.6%];
922
+ }
923
+
924
+ .accent-color-card {
925
+ --color: oklch(var(--primary-500));
926
+ }
927
+
928
+ /* Prevent Alpine.js transition flicker on initial load */
929
+ [x-cloak] {
930
+ display: none !important;
931
+ }
932
+
933
+ /* Prevent sidebar flicker during initial load */
934
+ .sidebar-container:not([data-alpine-loaded]) {
935
+ opacity: 0;
936
+ transition: opacity 0.1s ease-in;
937
+ }
938
+
939
+ .sidebar-container[data-alpine-loaded] {
940
+ opacity: 1;
941
+ }
942
+
943
+ /* Sidebar width styles */
944
+ .sidebar-expanded {
945
+ width: 280px;
946
+ }
947
+
948
+ /* Sidebar collapsed styles */
949
+ .sidebar-collapsed {
950
+ width: 4rem !important;
951
+ min-height: 100vh !important;
952
+ }
953
+
954
+ .sidebar-collapsed .btn-sidebar {
955
+ justify-content: center;
956
+ min-width: 2.5rem;
957
+ --text-color: var(--gray-100);
958
+ }
959
+
960
+ .sidebar-collapsed .btn-sidebar:hover {
961
+ --text-color: var(--white);
962
+ --bg-color: var(--clr-sidebar-btn-bg-hover);
963
+ }
964
+
965
+ /* Collapsed accordion group styling */
966
+ .sidebar-collapsed .accordion-group-collapsed {
967
+ display: flex;
968
+ justify-content: center;
969
+ align-items: center;
970
+ min-width: 2.5rem;
971
+ height: 3rem;
972
+ border-radius: 0.375rem;
973
+ cursor: pointer;
974
+ transition: background-color 0.2s;
975
+ color: oklch(var(--gray-100));
976
+ }
977
+
978
+ .sidebar-collapsed .accordion-group-collapsed:hover {
979
+ background-color: oklch(var(--clr-sidebar-btn-bg-hover));
980
+ color: oklch(var(--white));
981
+ }
982
+
983
+ /* Sidebar flyout dropdown (collapsed mode popover) */
984
+ .sidebar-flyout {
985
+ background-color: oklch(var(--clr-surface-200));
986
+ border: 1px solid oklch(var(--white) / 8%);
987
+ box-shadow: 0 8px 24px -4px oklch(var(--black) / 60%);
988
+ color: oklch(var(--white));
989
+ }
990
+
991
+ .sidebar-flyout .btn-sidebar {
992
+ --text-color: var(--gray-300);
993
+ }
994
+
995
+ .sidebar-flyout .btn-sidebar:not(.btn-loading):not(.htmx-request):hover {
996
+ --bg-color: var(--clr-sidebar-btn-bg-hover);
997
+ --text-color: var(--white);
998
+ }
999
+
1000
+ .sidebar-flyout .btn-sidebar:not(.btn-loading):not(.htmx-request).active {
1001
+ --bg-color: var(--clr-sidebar-btn-bg-active);
1002
+ --text-color: var(--white);
1003
+ }
1004
+
1005
+ /* Toggle button styling */
1006
+ .btn-ghost {
1007
+ --text-color: var(--gray-600);
1008
+ }
1009
+
1010
+ .btn-ghost:hover {
1011
+ --text-color: var(--gray-400);
1012
+ --bg-color: var(--gray-200);
1013
+ }
1014
+
1015
+ /* Toggle button in collapsed state */
1016
+ .sidebar-collapsed .btn-ghost {
1017
+ --text-color: var(--gray-600);
1018
+ }
1019
+
1020
+ .sidebar-collapsed .btn-ghost:hover {
1021
+ --text-color: var(--gray-400);
1022
+ --bg-color: var(--gray-200);
1023
+ }
1024
+
1025
+ /* Sidebar toggle button styling */
1026
+ .btn-sidebar-toggle {
1027
+ --text-color: var(--gray-600);
1028
+ --bg-color: var(--white);
1029
+ --border-color: var(--transparent);
1030
+ }
1031
+
1032
+ .btn-sidebar-toggle:hover {
1033
+ --text-color: var(--gray-400);
1034
+ --bg-color: var(--gray-100);
1035
+ }
1036
+
1037
+ /* Sidebar click-to-toggle cursor styles */
1038
+ .sidebar-expand-cursor {
1039
+ cursor: e-resize;
1040
+ }
1041
+
1042
+ .sidebar-collapse-cursor {
1043
+ cursor: w-resize;
1044
+ }
1045
+
1046
+ .sidebar-expand-cursor a,
1047
+ .sidebar-expand-cursor button,
1048
+ .sidebar-expand-cursor summary,
1049
+ .sidebar-expand-cursor [role="button"],
1050
+ .sidebar-collapse-cursor a,
1051
+ .sidebar-collapse-cursor button,
1052
+ .sidebar-collapse-cursor summary,
1053
+ .sidebar-collapse-cursor [role="button"] {
1054
+ cursor: pointer;
1055
+ }
1056
+
1057
+ .help-article {
1058
+ max-width: 48rem;
1059
+ color: oklch(var(--gray-800));
1060
+ font-size: 0.95rem;
1061
+ line-height: 1.75;
1062
+ }
1063
+
1064
+ .help-article > * + * {
1065
+ margin-top: 1rem;
1066
+ }
1067
+
1068
+ .help-article h1 {
1069
+ color: oklch(var(--gray-950));
1070
+ font-size: 2rem;
1071
+ font-weight: 650;
1072
+ line-height: 1.2;
1073
+ letter-spacing: 0;
1074
+ margin-bottom: 1rem;
1075
+ }
1076
+
1077
+ .help-article h2 {
1078
+ color: oklch(var(--gray-900));
1079
+ font-size: 1.15rem;
1080
+ font-weight: 650;
1081
+ line-height: 1.35;
1082
+ letter-spacing: 0;
1083
+ margin-top: 2rem;
1084
+ padding-top: 1.25rem;
1085
+ border-top: 1px solid oklch(var(--gray-200));
1086
+ }
1087
+
1088
+ .help-article h3 {
1089
+ color: oklch(var(--gray-900));
1090
+ font-size: 1rem;
1091
+ font-weight: 650;
1092
+ line-height: 1.45;
1093
+ margin-top: 1.5rem;
1094
+ }
1095
+
1096
+ .help-article p {
1097
+ max-width: 42rem;
1098
+ color: oklch(var(--gray-700));
1099
+ }
1100
+
1101
+ .help-article ul,
1102
+ .help-article ol {
1103
+ max-width: 42rem;
1104
+ padding-left: 1.35rem;
1105
+ color: oklch(var(--gray-700));
1106
+ }
1107
+
1108
+ .help-article ul {
1109
+ list-style: disc;
1110
+ }
1111
+
1112
+ .help-article ol {
1113
+ list-style: decimal;
1114
+ }
1115
+
1116
+ .help-article li {
1117
+ padding-left: 0.2rem;
1118
+ margin-top: 0.35rem;
1119
+ }
1120
+
1121
+ .help-article li::marker {
1122
+ color: oklch(var(--primary-600));
1123
+ font-weight: 650;
1124
+ }
1125
+
1126
+ .help-article strong {
1127
+ color: oklch(var(--gray-900));
1128
+ font-weight: 650;
1129
+ }
1130
+
1131
+ .help-article a {
1132
+ color: oklch(var(--primary-600));
1133
+ text-decoration: underline;
1134
+ text-underline-offset: 0.18em;
1135
+ }
1136
+
1137
+ .help-article blockquote {
1138
+ max-width: 42rem;
1139
+ border-left: 3px solid oklch(var(--primary-500));
1140
+ background: oklch(var(--primary-50) / 45%);
1141
+ color: oklch(var(--gray-800));
1142
+ padding: 0.8rem 1rem;
1143
+ border-radius: 0 0.375rem 0.375rem 0;
1144
+ }
1145
+
1146
+ .help-article code {
1147
+ border-radius: 0.25rem;
1148
+ background: oklch(var(--gray-100));
1149
+ color: oklch(var(--gray-900));
1150
+ padding: 0.12rem 0.3rem;
1151
+ font-size: 0.88em;
1152
+ }
1153
+
1154
+ .help-article pre {
1155
+ max-width: 100%;
1156
+ overflow-x: auto;
1157
+ border-radius: 0.5rem;
1158
+ background: oklch(var(--gray-950));
1159
+ color: oklch(var(--gray-50));
1160
+ padding: 1rem;
1161
+ }
1162
+
1163
+ .help-article pre code {
1164
+ background: transparent;
1165
+ color: inherit;
1166
+ padding: 0;
1167
+ }
1168
+
1169
+ .help-article table {
1170
+ width: 100%;
1171
+ border-collapse: collapse;
1172
+ font-size: 0.9rem;
1173
+ }
1174
+
1175
+ .help-article th,
1176
+ .help-article td {
1177
+ border-bottom: 1px solid oklch(var(--gray-200));
1178
+ padding: 0.65rem 0.75rem;
1179
+ text-align: left;
1180
+ }
1181
+
1182
+ .help-article th {
1183
+ color: oklch(var(--gray-900));
1184
+ font-weight: 650;
1185
+ background: oklch(var(--gray-50));
1186
+ }
1187
+ }
1188
+
1189
+ @layer utilities {
1190
+ .hide-scrollbar {
1191
+ scrollbar-width: none;
1192
+ }
1193
+
1194
+ .hide-scrollbar::-webkit-scrollbar {
1195
+ display: none;
1196
+ }
1197
+
1198
+ .hide-scrollbar-h::-webkit-scrollbar:horizontal {
1199
+ height: 0;
1200
+ display: none;
1201
+ }
1202
+
1203
+ .proxy-scrollbar {
1204
+ scrollbar-width: thin;
1205
+ scrollbar-color: #c1c1c1 #f1f1f1;
1206
+ }
1207
+
1208
+ .proxy-scrollbar::-webkit-scrollbar {
1209
+ height: 10px;
1210
+ }
1211
+
1212
+ .proxy-scrollbar::-webkit-scrollbar-track {
1213
+ background: #f1f1f1;
1214
+ border-radius: 5px;
1215
+ }
1216
+
1217
+ .proxy-scrollbar::-webkit-scrollbar-thumb {
1218
+ background: #c1c1c1;
1219
+ border-radius: 5px;
1220
+ }
1221
+
1222
+ .proxy-scrollbar::-webkit-scrollbar-thumb:hover {
1223
+ background: #a1a1a1;
1224
+ }
1225
+
1226
+ .no-transition {
1227
+ transition: none !important;
1228
+ }
1229
+
1230
+ /* Slider styles */
1231
+ .slider-thumb {
1232
+ -webkit-appearance: none;
1233
+ appearance: none;
1234
+ height: 1rem;
1235
+ position: relative;
1236
+ z-index: 10;
1237
+ }
1238
+
1239
+ .slider-thumb::-webkit-slider-thumb {
1240
+ -webkit-appearance: none;
1241
+ appearance: none;
1242
+ width: 16px;
1243
+ height: 16px;
1244
+ border-radius: 50%;
1245
+ background: oklch(var(--primary-500));
1246
+ cursor: pointer;
1247
+ border: 2px solid white;
1248
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
1249
+ position: relative;
1250
+ z-index: 20;
1251
+ }
1252
+
1253
+ .slider-thumb::-moz-range-thumb {
1254
+ width: 16px;
1255
+ height: 16px;
1256
+ border-radius: 50%;
1257
+ background: oklch(var(--primary-500));
1258
+ cursor: pointer;
1259
+ border: 2px solid white;
1260
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
1261
+ position: relative;
1262
+ z-index: 20;
1263
+ }
1264
+
1265
+ .slider-thumb:focus {
1266
+ outline: none;
1267
+ }
1268
+
1269
+ .slider-thumb:disabled::-webkit-slider-thumb {
1270
+ background: oklch(var(--gray-400));
1271
+ }
1272
+
1273
+ .slider-thumb:disabled::-moz-range-thumb {
1274
+ background: oklch(var(--gray-400));
1275
+ }
1276
+ }
1277
+
1278
+ /* iOS Safari 100vh fix - use dynamic viewport height */
1279
+ @supports (height: 100dvh) {
1280
+ .min-h-screen {
1281
+ min-height: 100dvh !important;
1282
+ }
1283
+ .h-screen {
1284
+ height: 100dvh !important;
1285
+ }
1286
+ }
1287
+
1288
+ /* Keyframes */
1289
+ @keyframes slide-in-right {
1290
+ from {
1291
+ transform: translateX(100%)
1292
+ }
1293
+ }
1294
+
1295
+ @keyframes slide-out-right {
1296
+ to {
1297
+ transform: translateX(100%)
1298
+ }
1299
+ }
1300
+
1301
+
1302
+ @keyframes slide-in-left {
1303
+ from {
1304
+ transform: translateX(-100%)
1305
+ }
1306
+ }
1307
+
1308
+ @keyframes slide-out-left {
1309
+ to {
1310
+ transform: translateX(-100%)
1311
+ }
1312
+ }
1313
+
1314
+ @keyframes slide-in-up {
1315
+ from {
1316
+ transform: translateY(100%)
1317
+ }
1318
+ }
1319
+
1320
+ @keyframes scale-down {
1321
+ to {
1322
+ transform: scale(.75)
1323
+ }
1324
+ }
1325
+
1326
+ @keyframes slide-out-down {
1327
+ to {
1328
+ transform: translateY(100%)
1329
+ }
1330
+ }
1331
+
1332
+ @keyframes slide-in-down {
1333
+ from {
1334
+ transform: translateY(-100%)
1335
+ }
1336
+ }
1337
+
1338
+ @keyframes slide-out-up {
1339
+ to {
1340
+ transform: translateY(-100%)
1341
+ }
1342
+ }
1343
+
1344
+ @keyframes dot-flashing {
1345
+ 0% {
1346
+ background-color: oklch(var(--color));
1347
+ }
1348
+
1349
+ 50%,
1350
+ 100% {
1351
+ background-color: oklch(var(--color) / 30%);
1352
+ }
1353
+ }
1354
+
1355
+ /* Lazy loading component styles */
1356
+ .lazy-load.htmx-settling * {
1357
+ opacity: 0;
1358
+ }
1359
+
1360
+ .lazy-load * {
1361
+ transition: opacity 300ms ease-in;
1362
+ }
1363
+
1364
+ /* Spotlight AI progress shimmer */
1365
+ .spotlight-shimmer {
1366
+ -webkit-mask-image: linear-gradient(
1367
+ -45deg,
1368
+ rgba(0, 0, 0, 1) 20%,
1369
+ rgba(0, 0, 0, 1) 40%,
1370
+ rgba(0, 0, 0, 0.2) 50%,
1371
+ rgba(0, 0, 0, 1) 60%,
1372
+ rgba(0, 0, 0, 1) 80%
1373
+ );
1374
+ mask-image: linear-gradient(
1375
+ -45deg,
1376
+ rgba(0, 0, 0, 1) 20%,
1377
+ rgba(0, 0, 0, 1) 40%,
1378
+ rgba(0, 0, 0, 0.2) 50%,
1379
+ rgba(0, 0, 0, 1) 60%,
1380
+ rgba(0, 0, 0, 1) 80%
1381
+ );
1382
+ -webkit-mask-size: 300% 100%;
1383
+ mask-size: 300% 100%;
1384
+ animation: spotlight-shimmer 4.5s linear infinite;
1385
+ }
1386
+
1387
+ .dark .spotlight-shimmer {
1388
+ -webkit-mask-image: linear-gradient(
1389
+ -45deg,
1390
+ rgba(0, 0, 0, 1) 15%,
1391
+ rgba(0, 0, 0, 1) 35%,
1392
+ rgba(0, 0, 0, 0.3) 50%,
1393
+ rgba(0, 0, 0, 1) 65%,
1394
+ rgba(0, 0, 0, 1) 85%
1395
+ );
1396
+ mask-image: linear-gradient(
1397
+ -45deg,
1398
+ rgba(0, 0, 0, 1) 15%,
1399
+ rgba(0, 0, 0, 1) 35%,
1400
+ rgba(0, 0, 0, 0.3) 50%,
1401
+ rgba(0, 0, 0, 1) 65%,
1402
+ rgba(0, 0, 0, 1) 85%
1403
+ );
1404
+ }
1405
+
1406
+ @keyframes spotlight-shimmer {
1407
+ 0% {
1408
+ -webkit-mask-position: 130% 0;
1409
+ mask-position: 130% 0;
1410
+ }
1411
+ 100% {
1412
+ -webkit-mask-position: -30% 0;
1413
+ mask-position: -30% 0;
1414
+ }
1415
+ }
1416
+
1417
+ @media (prefers-reduced-motion: reduce) {
1418
+ .spotlight-shimmer {
1419
+ animation: none;
1420
+ }
1421
+ }
1422
+
1423
+ /*
1424
+ * Infinite-scroll loading spinner reveal (scaffold/table InfiniteScrollSpinner).
1425
+ * The row stays `class="hidden"` so it is display:none at rest AND so the
1426
+ * fillGrid() scroll-guard (`tr:not(.hidden) > td[colspan]` in alpine.js) keeps
1427
+ * excluding it — removing `.hidden` would make fillGrid treat the spinner as an
1428
+ * empty-state row and lock table scrolling. Its `hx-indicator` puts
1429
+ * `.htmx-request` on the row itself while the next page loads; reveal it then.
1430
+ * Unlayered (not @layer) on purpose: Tailwind's `.hidden { display:none }` lives
1431
+ * in @layer utilities and wins over any layered rule regardless of specificity,
1432
+ * so the reveal must be unlayered to override it.
1433
+ */
1434
+ #infinite-scroll-spinner.htmx-request {
1435
+ display: table-row;
1436
+ }