rip-lang 3.13.93 → 3.13.95

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 (63) hide show
  1. package/README.md +1 -1
  2. package/docs/dist/rip.js +142 -38
  3. package/docs/dist/rip.min.js +174 -174
  4. package/docs/dist/rip.min.js.br +0 -0
  5. package/package.json +1 -1
  6. package/src/ui.rip +65 -0
  7. package/docs/ui/accordion.rip +0 -113
  8. package/docs/ui/alert-dialog.rip +0 -96
  9. package/docs/ui/autocomplete.rip +0 -141
  10. package/docs/ui/avatar.rip +0 -37
  11. package/docs/ui/badge.rip +0 -15
  12. package/docs/ui/breadcrumb.rip +0 -46
  13. package/docs/ui/button-group.rip +0 -26
  14. package/docs/ui/button.rip +0 -23
  15. package/docs/ui/card.rip +0 -25
  16. package/docs/ui/carousel.rip +0 -110
  17. package/docs/ui/checkbox-group.rip +0 -65
  18. package/docs/ui/checkbox.rip +0 -33
  19. package/docs/ui/collapsible.rip +0 -50
  20. package/docs/ui/combobox.rip +0 -155
  21. package/docs/ui/context-menu.rip +0 -105
  22. package/docs/ui/date-picker.rip +0 -214
  23. package/docs/ui/dialog.rip +0 -107
  24. package/docs/ui/drawer.rip +0 -79
  25. package/docs/ui/editable-value.rip +0 -80
  26. package/docs/ui/field.rip +0 -53
  27. package/docs/ui/fieldset.rip +0 -22
  28. package/docs/ui/form.rip +0 -39
  29. package/docs/ui/grid.rip +0 -901
  30. package/docs/ui/hljs-rip.js +0 -209
  31. package/docs/ui/index.css +0 -1772
  32. package/docs/ui/index.html +0 -2433
  33. package/docs/ui/input-group.rip +0 -28
  34. package/docs/ui/input.rip +0 -36
  35. package/docs/ui/label.rip +0 -16
  36. package/docs/ui/menu.rip +0 -162
  37. package/docs/ui/menubar.rip +0 -155
  38. package/docs/ui/meter.rip +0 -36
  39. package/docs/ui/multi-select.rip +0 -158
  40. package/docs/ui/native-select.rip +0 -32
  41. package/docs/ui/nav-menu.rip +0 -129
  42. package/docs/ui/number-field.rip +0 -162
  43. package/docs/ui/otp-field.rip +0 -89
  44. package/docs/ui/pagination.rip +0 -123
  45. package/docs/ui/popover.rip +0 -143
  46. package/docs/ui/preview-card.rip +0 -73
  47. package/docs/ui/progress.rip +0 -25
  48. package/docs/ui/radio-group.rip +0 -67
  49. package/docs/ui/resizable.rip +0 -123
  50. package/docs/ui/scroll-area.rip +0 -145
  51. package/docs/ui/select.rip +0 -184
  52. package/docs/ui/separator.rip +0 -17
  53. package/docs/ui/skeleton.rip +0 -22
  54. package/docs/ui/slider.rip +0 -165
  55. package/docs/ui/spinner.rip +0 -17
  56. package/docs/ui/table.rip +0 -27
  57. package/docs/ui/tabs.rip +0 -124
  58. package/docs/ui/textarea.rip +0 -48
  59. package/docs/ui/toast.rip +0 -87
  60. package/docs/ui/toggle-group.rip +0 -78
  61. package/docs/ui/toggle.rip +0 -24
  62. package/docs/ui/toolbar.rip +0 -46
  63. package/docs/ui/tooltip.rip +0 -115
package/docs/ui/index.css DELETED
@@ -1,1772 +0,0 @@
1
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
2
-
3
- body {
4
- font-family: 'Inter', system-ui, sans-serif;
5
- font-size: 14px;
6
- line-height: 1.5;
7
- color: #1e293b;
8
- background: #f8fafc;
9
- }
10
-
11
- button { font: inherit; cursor: pointer; }
12
-
13
- .gallery {
14
- max-width: 900px;
15
- margin: 0 auto;
16
- padding: 32px 24px;
17
-
18
- .gallery-header {
19
- margin-bottom: 32px;
20
-
21
- > div:first-child { display: flex; align-items: center; justify-content: space-between; }
22
- h1 { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; }
23
- p { color: #64748b; margin-top: 4px; }
24
- }
25
- }
26
-
27
- .theme-toggle {
28
- width: 36px; height: 36px; border: 1px solid #e2e8f0; border-radius: 8px;
29
- background: white; font-size: 18px; display: grid; place-items: center;
30
- cursor: pointer; color: #64748b; line-height: 1;
31
- }
32
-
33
- .section {
34
- margin-bottom: 48px;
35
-
36
- .section-title {
37
- font-size: 16px; font-weight: 700; letter-spacing: -0.01em;
38
- padding-bottom: 8px; margin-bottom: 16px;
39
- border-bottom: 2px solid #e2e8f0;
40
- display: flex; align-items: center; gap: 8px;
41
- }
42
-
43
- .section-desc { color: #64748b; font-size: 13px; margin-bottom: 16px; }
44
-
45
- .section-nav {
46
- margin-left: auto; display: flex; gap: 2px;
47
-
48
- a {
49
- font-size: 13px; color: #c0c8d4; cursor: pointer;
50
- width: 26px; height: 26px; display: grid; place-items: center;
51
- border-radius: 4px; text-decoration: none;
52
- transition: color 0.12s, background 0.12s;
53
-
54
- &:hover { color: #3b82f6; background: #eff6ff; }
55
- }
56
- }
57
- }
58
-
59
- .badge {
60
- font-size: 11px; font-weight: 600; padding: 3px 10px;
61
- border-radius: 10px; background: #dbeafe; color: #1d4ed8;
62
- border: 1px solid #93c5fd;
63
- cursor: pointer; transition: background 0.15s, color 0.15s, border-color 0.15s;
64
-
65
- &:hover { background: #bfdbfe; color: #1e40af; border-color: #60a5fa; }
66
- }
67
-
68
- .demo-row {
69
- padding: 16px; margin-bottom: 12px;
70
- background: white; border: 1px solid #e2e8f0; border-radius: 8px;
71
- }
72
-
73
- .demo-label {
74
- font-size: 11px; font-weight: 600; letter-spacing: 0.08em;
75
- text-transform: uppercase; color: #94a3b8; margin-bottom: 8px;
76
- }
77
-
78
- .demo-btn {
79
- padding: 6px 16px; border: 1px solid #cbd5e1; border-radius: 6px;
80
- background: white; font-size: 14px; color: #1e293b; outline: none; cursor: pointer;
81
- user-select: none; transition: transform 0.1s, background 0.1s;
82
-
83
- &:hover { background: #f8fafc; border-color: #94a3b8; }
84
- &:active { background: #f1f5f9; transform: scale(0.97); }
85
- }
86
-
87
- .status {
88
- margin-top: 8px; padding: 8px 12px; border-radius: 6px;
89
- font-size: 12px; font-family: monospace;
90
- background: #f1f5f9; color: #475569;
91
- }
92
-
93
- /* ── Select ── */
94
-
95
- .gallery button[role="combobox"] {
96
- display: inline-flex; align-items: center; justify-content: space-between;
97
- gap: 8px; padding: 6px 12px; height: 36px;
98
- border: 1px solid #cbd5e1; border-radius: 6px; background: white;
99
- cursor: pointer; min-width: 200px; font-size: 14px; color: #1e293b; outline: none;
100
-
101
- &::after {
102
- content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
103
- display: inline-block; line-height: 0;
104
- }
105
-
106
- &[data-open] {
107
- border-color: #94a3b8;
108
- &::after {
109
- content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23475569' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
110
- }
111
- }
112
-
113
- &[data-placeholder] { color: #94a3b8; }
114
- &[data-disabled] { opacity: 0.5; cursor: not-allowed; }
115
- }
116
-
117
- .gallery div[role="listbox"] {
118
- background: white; border: 1px solid #cbd5e1; border-radius: 6px;
119
- box-shadow: 0 4px 16px rgba(0,0,0,0.12); padding: 4px;
120
- overflow-y: auto; max-height: 280px; min-width: 200px; margin-top: 2px; z-index: 50;
121
-
122
- &:not([data-open]) { display: none; }
123
- }
124
-
125
- .gallery div[role="option"] {
126
- padding: 8px 12px; border-radius: 4px; cursor: pointer;
127
- font-size: 14px; outline: none; color: #1e293b;
128
-
129
- &[data-highlighted] { background: #eff6ff; }
130
- &[data-selected] { font-weight: 600; color: #1d4ed8; }
131
- }
132
-
133
- /* ── Combobox clear button ── */
134
-
135
- .gallery [data-clear] {
136
- position: absolute;
137
- right: 8px;
138
- background: none;
139
- border: none;
140
- color: #94a3b8;
141
- cursor: pointer;
142
- font-size: 14px;
143
- padding: 2px 4px;
144
- border-radius: 4px;
145
- line-height: 1;
146
-
147
- &:hover { color: #475569; background: #f1f5f9; }
148
- }
149
-
150
- /* ── Combobox / Menu popups ── */
151
-
152
- .gallery .combobox-popup,
153
- .gallery .menu-popup {
154
- background: white; border: 1px solid #cbd5e1; border-radius: 6px;
155
- box-shadow: 0 4px 16px rgba(0,0,0,0.12); padding: 4px; z-index: 100;
156
- overflow-y: auto; max-height: 280px;
157
- }
158
-
159
- .gallery .option,
160
- .gallery [role="menuitem"] {
161
- padding: 8px 12px; border-radius: 4px; cursor: pointer;
162
- font-size: 14px; outline: none;
163
-
164
- &[data-highlighted] { background: #eff6ff; }
165
- }
166
-
167
- .gallery .option[data-selected] { font-weight: 600; color: #1d4ed8; }
168
-
169
- /* ── Combobox / Text inputs ── */
170
-
171
- .gallery .combobox-input,
172
- .gallery input[type="text"]:not(.rip-grid-editor),
173
- .gallery input[type="email"],
174
- .gallery input[type="password"] {
175
- width: 100%; height: 36px; padding: 0 12px;
176
- border: 1px solid #cbd5e1; border-radius: 6px; font-size: 14px;
177
- color: #1e293b; background: white; outline: none;
178
-
179
- &:focus { border-color: #3b82f6; box-shadow: 0 0 0 3px rgba(59,130,246,0.1); }
180
- }
181
-
182
- /* ── Dialog ── */
183
-
184
- .gallery [data-open]:has(> [role="dialog"][aria-modal]) {
185
- position: fixed; inset: 0; background: rgba(0,0,0,0.4);
186
- display: grid; place-items: center; z-index: 100;
187
- animation: fadeIn 150ms ease;
188
- }
189
-
190
- .gallery .dialog-panel {
191
- background: white; border-radius: 12px; padding: 24px;
192
- box-shadow: 0 4px 16px rgba(0,0,0,0.12); max-width: min(90vw, 420px); width: 100%;
193
- }
194
-
195
- /* ── Toast ── */
196
-
197
- .gallery .toast-wrap {
198
- position: fixed; top: 16px; right: 16px; z-index: 200;
199
- }
200
-
201
- .gallery .toast-wrap [role="region"] {
202
- display: flex; flex-direction: column; gap: 12px;
203
- }
204
-
205
- .gallery .toast-wrap [role="status"],
206
- .gallery .toast-wrap [role="alert"] {
207
- padding: 12px 14px; border-radius: 8px; background: white;
208
- box-shadow: 0 4px 16px rgba(0,0,0,0.12); display: flex; align-items: center; gap: 8px;
209
- animation: slideIn 200ms ease; max-width: 220px; border-left: 3px solid #3b82f6; font-size: 13px; line-height: 1.4;
210
-
211
- &[data-type="success"] { border-left-color: #16a34a; }
212
- &[data-type="error"] { border-left-color: #dc2626; }
213
- &[data-leaving] { animation: fadeOut 200ms ease forwards; }
214
-
215
- span { font-size: 13px; }
216
-
217
- button {
218
- background: none; border: none; color: #94a3b8; cursor: pointer;
219
- font-size: 14px; padding: 2px 4px; border-radius: 4px; line-height: 1; flex-shrink: 0;
220
-
221
- &:hover { color: #475569; background: #f1f5f9; }
222
- }
223
- }
224
-
225
- /* ── Tooltip ── */
226
-
227
- .gallery [role="tooltip"] {
228
- background: #1e293b; color: white; font-size: 12px;
229
- padding: 4px 8px; border-radius: 4px; z-index: 200;
230
-
231
- &[data-entering] { animation: fadeIn 100ms ease; }
232
- }
233
-
234
- /* ── Tabs ── */
235
-
236
- .gallery [role="tablist"] {
237
- display: flex; gap: 4px; border-bottom: 1px solid #e2e8f0; margin-bottom: 12px;
238
- }
239
-
240
- .gallery [role="tab"] {
241
- padding: 8px 16px; border: none; background: none;
242
- font-size: 14px; font-weight: 500; color: #64748b; cursor: pointer;
243
- border-bottom: 2px solid transparent; margin-bottom: -1px;
244
-
245
- &[data-active] { color: #1d4ed8; border-bottom-color: #1d4ed8; }
246
- }
247
-
248
- /* ── Checkbox / Switch ── */
249
-
250
- .gallery [role="checkbox"],
251
- .gallery [role="switch"] {
252
- display: inline-flex; align-items: center; gap: 8px;
253
- padding: 6px 12px; border: 1px solid #cbd5e1; border-radius: 6px;
254
- background: white; cursor: pointer; font-size: 14px;
255
-
256
- &[data-checked] { background: #eff6ff; border-color: #3b82f6; color: #1d4ed8; }
257
- }
258
-
259
- /* ── Menu ── */
260
-
261
- .gallery [aria-haspopup="menu"] {
262
- padding: 6px 16px; height: 36px; border: 1px solid #cbd5e1;
263
- border-radius: 6px; background: white; font-size: 14px;
264
-
265
- &[data-open] { border-color: #3b82f6; }
266
- }
267
-
268
- .gallery [role="menu"] {
269
- background: white; border: 1px solid #cbd5e1; border-radius: 6px;
270
- box-shadow: 0 4px 16px rgba(0,0,0,0.12); padding: 4px;
271
- overflow-y: auto; max-height: 280px; min-width: 160px;
272
-
273
- &:not([data-open]) { display: none; }
274
- }
275
-
276
- /* ── Drawer ── */
277
-
278
- .gallery [data-open][data-side] {
279
- position: fixed; inset: 0; background: rgba(0,0,0,0.4);
280
- z-index: 100; animation: fadeIn 150ms ease;
281
- }
282
-
283
- .gallery .drawer-panel {
284
- position: fixed; top: 0; bottom: 0; width: min(85vw, 360px);
285
- background: white; padding: 24px; box-shadow: -4px 0 16px rgba(0,0,0,0.12);
286
- animation: slideInRight 200ms ease;
287
- overflow-y: auto;
288
-
289
- h2 { font-size: 18px; font-weight: 700; margin-bottom: 8px; }
290
- p { color: #64748b; font-size: 14px; margin-bottom: 12px; }
291
-
292
- button {
293
- margin-top: 12px;
294
- padding: 8px 20px;
295
- border: 1px solid #cbd5e1;
296
- border-radius: 6px;
297
- background: white;
298
- font-size: 14px;
299
- font-weight: 500;
300
- color: #1e293b;
301
- cursor: pointer;
302
-
303
- &:hover { background: #f8fafc; border-color: #94a3b8; }
304
- &:active { background: #f1f5f9; }
305
- }
306
- }
307
-
308
- [data-side="right"] .drawer-panel { right: 0; }
309
- [data-side="left"] .drawer-panel { left: 0; animation-name: slideInLeft; }
310
-
311
- @keyframes slideInRight { from { transform: translateX(100%); } to { transform: none; } }
312
- @keyframes slideInLeft { from { transform: translateX(-100%); } to { transform: none; } }
313
-
314
- /* ── Scroll Area ── */
315
-
316
- .scroll-demo {
317
- [data-orientation] {
318
- position: relative;
319
- max-height: 200px;
320
- border: 1px solid #e2e8f0;
321
- border-radius: 6px;
322
- }
323
-
324
- [data-viewport] {
325
- max-height: inherit;
326
- padding: 8px 12px;
327
- &::-webkit-scrollbar { display: none; }
328
- }
329
-
330
- [data-scrollbar] {
331
- position: absolute;
332
- top: 2px;
333
- bottom: 2px;
334
- right: 2px;
335
- width: 8px;
336
- opacity: 0;
337
- transition: opacity 200ms ease;
338
- z-index: 1;
339
- }
340
-
341
- [data-orientation]:hover [data-scrollbar],
342
- [data-scrolling] [data-scrollbar],
343
- [data-dragging] [data-scrollbar] { opacity: 1; }
344
-
345
- [data-thumb] {
346
- width: 100%;
347
- background: rgba(0,0,0,0.3);
348
- border-radius: 4px;
349
- cursor: grab;
350
- transition: background 150ms ease;
351
-
352
- &:hover { background: rgba(0,0,0,0.5); }
353
- &:active { background: rgba(0,0,0,0.6); }
354
- }
355
- }
356
-
357
- /* ── Number Field ── */
358
-
359
- .gallery .nf-wrap [role="group"] {
360
- display: inline-flex;
361
- align-items: center;
362
- border: 1px solid #cbd5e1;
363
- border-radius: 6px;
364
- overflow: hidden;
365
-
366
- input {
367
- width: 80px; height: 36px; text-align: center;
368
- border: none; outline: none; font-size: 14px;
369
- color: #1e293b; background: white;
370
-
371
- &:focus { outline: none; box-shadow: none; border-color: transparent; }
372
- }
373
-
374
- button {
375
- width: 36px; height: 36px; border: none; outline: none;
376
- background: #f8fafc; color: #475569; font-size: 16px;
377
- cursor: pointer; display: grid; place-items: center;
378
- user-select: none;
379
-
380
- &:hover:not(:disabled) { background: #e2e8f0; }
381
- &:active:not(:disabled) { background: #cbd5e1; }
382
- &:disabled { opacity: 0.3; cursor: not-allowed; }
383
- }
384
-
385
- [data-decrement] { border-right: 1px solid #e2e8f0; }
386
- [data-decrement]::before { content: "−"; }
387
- [data-increment] { border-left: 1px solid #e2e8f0; }
388
- [data-increment]::before { content: "+"; }
389
-
390
- &[data-disabled] { opacity: 0.5; pointer-events: none; }
391
- }
392
-
393
- /* ── Slider ── */
394
-
395
- .gallery .slider-wrap {
396
- padding: 12px 0;
397
- touch-action: none;
398
-
399
- [data-track] {
400
- position: relative;
401
- height: 6px;
402
- background: #e2e8f0;
403
- border-radius: 3px;
404
- cursor: pointer;
405
- }
406
-
407
- [data-indicator] {
408
- height: 100%;
409
- background: #3b82f6;
410
- border-radius: 3px;
411
- pointer-events: none;
412
- }
413
-
414
- [data-thumb] {
415
- width: 20px;
416
- height: 20px;
417
- background: white;
418
- border: 2px solid #3b82f6;
419
- border-radius: 50%;
420
- transform: translate(-50%, -50%);
421
- top: 50%;
422
- cursor: grab;
423
- transition: box-shadow 150ms ease;
424
-
425
- &:hover { box-shadow: 0 0 0 4px rgba(59,130,246,0.15); }
426
- &[data-active] { cursor: grabbing; box-shadow: 0 0 0 4px rgba(59,130,246,0.25); }
427
- }
428
-
429
- &[data-disabled] {
430
- opacity: 0.5;
431
- pointer-events: none;
432
- }
433
- }
434
-
435
- /* ── Separator ── */
436
-
437
- .gallery [role="none"][data-orientation="horizontal"],
438
- .gallery [role="separator"][data-orientation="horizontal"] {
439
- border: none; border-top: 1px solid #cbd5e1; margin: 8px 0; width: 100%;
440
- }
441
-
442
- .gallery [role="none"][data-orientation="vertical"],
443
- .gallery [role="separator"][data-orientation="vertical"] {
444
- border: none; border-left: 1px solid #cbd5e1; margin: 0;
445
- align-self: stretch; width: 0; min-height: 20px;
446
- }
447
-
448
- /* ── Button ── */
449
-
450
- .gallery .btn-demo .btn-row {
451
- display: flex; align-items: center; gap: 8px;
452
- }
453
-
454
- .gallery .btn-demo button {
455
- padding: 8px 16px; border: 1px solid #cbd5e1; border-radius: 6px;
456
- background: white; font-size: 14px; font-weight: 500; color: #1e293b;
457
- cursor: pointer; user-select: none; transition: all 150ms ease;
458
-
459
- &:hover:not([data-disabled]) { background: #f8fafc; border-color: #94a3b8; }
460
- &:active:not([data-disabled]) { background: #f1f5f9; transform: scale(0.98); }
461
- &[data-disabled] { opacity: 0.5; cursor: not-allowed; }
462
- }
463
-
464
- /* ── Toggle ── */
465
-
466
- .gallery .toggle-heart {
467
- button {
468
- width: 48px; height: 48px; border: 1px solid #e2e8f0; border-radius: 10px;
469
- background: white; cursor: pointer; display: grid; place-items: center;
470
- transition: all 150ms ease;
471
-
472
- &:hover { background: #fef2f2; border-color: #fca5a5; }
473
- }
474
-
475
- .heart {
476
- font-size: 24px; color: #cbd5e1; transition: all 150ms ease; line-height: 1;
477
- }
478
-
479
- [aria-pressed="true"] {
480
- background: #fef2f2; border-color: #f87171;
481
-
482
- .heart { color: #ef4444; }
483
- }
484
- }
485
-
486
- /* ── Progress ── */
487
-
488
- .progress-track {
489
- width: 200px; height: 8px; background: #e2e8f0; border-radius: 4px; overflow: hidden;
490
- }
491
-
492
- .progress-fill {
493
- height: 100%; background: #3b82f6; border-radius: 4px; transition: width 300ms;
494
- }
495
-
496
- /* ── Meter ── */
497
-
498
- .gallery [role="meter"] {
499
- width: 200px; height: 8px; background: #e2e8f0; border-radius: 4px;
500
-
501
- &[data-level="low"] { background: linear-gradient(90deg, #ef4444 var(--meter-percent), #e2e8f0 var(--meter-percent)); border-radius: 4px; }
502
- &[data-level="optimum"] { background: linear-gradient(90deg, #22c55e var(--meter-percent), #e2e8f0 var(--meter-percent)); border-radius: 4px; }
503
- &[data-level="high"] { background: linear-gradient(90deg, #f59e0b var(--meter-percent), #e2e8f0 var(--meter-percent)); border-radius: 4px; }
504
- }
505
-
506
- /* ── Grid ── */
507
-
508
- .grid-container {
509
- position: relative; overflow: auto; height: 420px;
510
- background: white; border-radius: 6px;
511
- box-shadow: 0 1px 3px rgba(0,0,0,0.08);
512
-
513
- &:focus { outline: none; }
514
- &:not([data-selecting]) .rip-grid tbody tr:hover td { background: rgba(59,130,246,0.06); }
515
- }
516
-
517
- .rip-grid {
518
- width: 100%; border-collapse: collapse; table-layout: fixed;
519
- font-family: system-ui, -apple-system, sans-serif; font-size: 13px; color: #1e293b;
520
-
521
- thead th {
522
- position: sticky; top: 0; z-index: 2; height: 36px; padding: 0 10px;
523
- background: #f8fafc; color: #475569; font-weight: 600; font-size: 11px;
524
- text-transform: uppercase; letter-spacing: 0.5px;
525
- border-bottom: 2px solid #e2e8f0; white-space: nowrap; user-select: none;
526
- }
527
-
528
- thead tr:hover .resize-handle { background: rgba(0,0,0,0.08); }
529
-
530
- tbody td {
531
- height: 32px; padding: 0 10px;
532
- border-bottom: 1px solid #e2e8f0; white-space: nowrap;
533
- overflow: hidden; text-overflow: ellipsis; cursor: default; user-select: none;
534
-
535
- &[data-selected] { background: rgba(59,130,246,0.08); }
536
- &[data-active] { background: rgba(59,130,246,0.20); outline: 2px solid #3b82f6; outline-offset: -2px; position: relative; z-index: 1; }
537
- }
538
-
539
- tbody tr.even td { background: #f8fafc; }
540
- tbody tr.even td[data-selected] { background: rgba(59,130,246,0.12); }
541
- tbody tr.spacer td { padding: 0; border: none; line-height: 0; font-size: 0; }
542
- }
543
-
544
- .grid-cell-ref {
545
- font-size: 11px; font-family: 'SF Mono', ui-monospace, monospace;
546
- color: #64748b; font-weight: 500;
547
- }
548
-
549
- .sort-arrow { color: #94a3b8; font-size: 11px; margin-left: 3px; }
550
-
551
- .sort-badge {
552
- display: inline-block; font-size: 9px; color: #64748b; background: #e2e8f0;
553
- border-radius: 50%; width: 14px; height: 14px; line-height: 14px;
554
- text-align: center; margin-left: 2px;
555
- }
556
-
557
- .resize-handle {
558
- position: absolute; right: 0; top: 0; bottom: 0; width: 2px;
559
- cursor: col-resize; z-index: 3; background: transparent;
560
-
561
- &:hover, &.active { background: rgba(59,130,246,0.3); }
562
- }
563
-
564
- .rip-grid-editor {
565
- position: absolute; z-index: 10; box-sizing: border-box;
566
- border: 2px solid #3b82f6; border-radius: 0;
567
- font-family: system-ui, -apple-system, sans-serif; font-size: 13px;
568
- padding: 0 8px; outline: none; background: white; color: #1e293b;
569
- }
570
-
571
- select.rip-grid-editor { cursor: pointer; padding-left: 4px; }
572
-
573
- .cell-checkbox { pointer-events: none; margin: 0; vertical-align: middle; }
574
-
575
- /* ── OTP Field ── */
576
-
577
- .gallery [role="group"][aria-label="One-time password"] {
578
- display: inline-flex; gap: 6px;
579
-
580
- input {
581
- width: 40px; height: 44px; text-align: center; font-size: 18px; font-weight: 600;
582
- border: 1px solid #cbd5e1; border-radius: 6px; background: white; color: #1e293b;
583
-
584
- &:focus { border-color: #3b82f6; box-shadow: 0 0 0 2px rgba(59,130,246,0.15); outline: none; }
585
- &[data-filled] { border-color: #3b82f6; }
586
- }
587
-
588
- &[data-complete] input { border-color: #22c55e; background: #f0fdf4; }
589
- &[data-disabled] input { opacity: 0.5; cursor: not-allowed; }
590
- }
591
-
592
- /* ── MultiSelect ── */
593
-
594
- .gallery [data-chips] {
595
- display: flex; flex-wrap: wrap; align-items: center; gap: 4px;
596
- padding: 4px 8px; border: 1px solid #cbd5e1; border-radius: 6px;
597
- background: white; min-height: 38px; cursor: text;
598
-
599
- &:focus-within { border-color: #3b82f6; box-shadow: 0 0 0 2px rgba(59,130,246,0.15); }
600
-
601
- input {
602
- border: none; outline: none; font: inherit; min-width: 80px;
603
- flex: 1; padding: 4px 0; background: transparent;
604
- }
605
- }
606
-
607
- .gallery [data-chip] {
608
- display: inline-flex; align-items: center; gap: 4px;
609
- padding: 2px 8px; background: #eff6ff; color: #1d4ed8;
610
- border-radius: 4px; font-size: 12px; font-weight: 500;
611
-
612
- [data-remove] {
613
- border: none; background: none; color: #3b82f6; cursor: pointer;
614
- font-size: 11px; padding: 0 2px; line-height: 1; border-radius: 2px;
615
-
616
- &:hover { background: #dbeafe; }
617
- }
618
- }
619
-
620
- /* ── EditableValue ── */
621
-
622
- .gallery [data-editing] { position: relative; }
623
-
624
- .gallery [data-edit-trigger] {
625
- border: none; background: none; color: #94a3b8; cursor: pointer;
626
- font-size: 14px; padding: 2px 6px; border-radius: 4px; margin-left: 4px;
627
-
628
- &:hover { color: #3b82f6; background: #f1f5f9; }
629
- }
630
-
631
- .gallery [data-editor][data-open] {
632
- background: white; border: 1px solid #cbd5e1; border-radius: 8px;
633
- box-shadow: 0 4px 16px rgba(0,0,0,0.12); padding: 12px;
634
- min-width: 200px; animation: fadeIn 0.15s ease;
635
-
636
- input { width: 100%; padding: 6px 10px; border: 1px solid #cbd5e1; border-radius: 4px; font: inherit; }
637
- }
638
-
639
- /* ── DatePicker ── */
640
-
641
- .gallery [data-calendar] {
642
- background: white; border: 1px solid #cbd5e1; border-radius: 8px;
643
- box-shadow: 0 4px 16px rgba(0,0,0,0.12); padding: 12px;
644
- min-width: 260px;
645
- }
646
-
647
- .gallery [data-header] {
648
- display: flex; align-items: center; justify-content: space-between;
649
- margin-bottom: 8px;
650
-
651
- [data-prev], [data-next] {
652
- border: none; background: none; cursor: pointer; font-size: 18px;
653
- color: #475569; width: 28px; height: 28px; border-radius: 4px;
654
- display: flex; align-items: center; justify-content: center;
655
-
656
- &:hover { background: #f1f5f9; }
657
- }
658
-
659
- [data-month-label] { font-weight: 600; font-size: 14px; color: #1e293b; }
660
- }
661
-
662
- .gallery [data-weekdays] {
663
- display: grid; grid-template-columns: repeat(7, 1fr);
664
- text-align: center; margin-bottom: 4px;
665
-
666
- [data-weekday] { font-size: 11px; font-weight: 600; color: #94a3b8; padding: 4px; }
667
- }
668
-
669
- .gallery [data-days] {
670
- display: grid; grid-template-columns: repeat(7, 1fr); gap: 1px;
671
-
672
- button {
673
- border: none; background: none; cursor: pointer; font-size: 13px;
674
- padding: 6px; border-radius: 4px; color: #1e293b; text-align: center;
675
- min-width: 32px; min-height: 32px;
676
-
677
- &:hover { background: #f1f5f9; }
678
- &:active:not([data-selected]) { background: #dbeafe; color: #1d4ed8; }
679
- &[data-outside] { color: #cbd5e1; }
680
- &[data-today] { font-weight: 700; outline: 2px solid #3b82f6; outline-offset: -2px; }
681
- &[data-selected] { background: #3b82f6; color: white; }
682
- &[data-in-range] { background: #dbeafe; color: #1e40af; border-radius: 0; }
683
- &[data-range-start] { border-radius: 4px 0 0 4px; }
684
- }
685
- }
686
-
687
- .gallery [data-trigger]:has(+ [data-calendar]),
688
- .gallery [data-trigger][aria-haspopup] {
689
- padding: 8px 14px; border: 1px solid #cbd5e1; border-radius: 6px;
690
- background: white; cursor: pointer; font-size: 14px; color: #1e293b;
691
- min-width: 180px; min-height: 38px;
692
-
693
- &:hover { border-color: #94a3b8; }
694
- &[aria-expanded="true"] { border-color: #3b82f6; }
695
- }
696
-
697
- /* ── Field ── */
698
-
699
- .gallery [data-label] {
700
- display: block; font-size: 13px; font-weight: 600; color: #334155; margin-bottom: 4px;
701
-
702
- [data-required] { color: #ef4444; }
703
- }
704
-
705
- .gallery [data-description] {
706
- font-size: 12px; color: #64748b; margin-top: 4px;
707
- }
708
-
709
- .gallery [data-error] {
710
- font-size: 12px; color: #ef4444; margin-top: 4px;
711
- }
712
-
713
- .gallery [data-invalid] input { border-color: #ef4444; }
714
-
715
- /* ── Fieldset ── */
716
-
717
- .gallery fieldset {
718
- border: 1px solid #e2e8f0; border-radius: 8px; padding: 16px;
719
- display: flex; flex-direction: column; gap: 12px;
720
-
721
- legend[data-legend] {
722
- font-size: 14px; font-weight: 600; color: #1e293b; padding: 0 4px;
723
- }
724
- }
725
-
726
- /* ── Form ── */
727
-
728
- .gallery form {
729
- display: flex; flex-direction: column; gap: 12px;
730
-
731
- button[type="submit"] {
732
- align-self: flex-start; padding: 8px 20px; background: #3b82f6;
733
- color: white; border: none; border-radius: 6px; font-size: 14px;
734
- cursor: pointer; user-select: none; transition: background 0.15s, transform 0.1s;
735
-
736
- &:hover { background: #2563eb; }
737
- &:active { transform: scale(0.97); }
738
- &:focus-visible { outline: 2px solid #3b82f6; outline-offset: 2px; }
739
- }
740
-
741
- &[data-submitting] button[type="submit"] { opacity: 0.6; cursor: wait; }
742
- }
743
-
744
- /* ── PreviewCard ── */
745
-
746
- .gallery [data-content][data-open] {
747
- animation: fadeIn 0.15s ease;
748
- }
749
-
750
- /* ── Menubar ── */
751
-
752
- .gallery [role="menubar"] {
753
- display: inline-flex; gap: 2px; background: #f8fafc;
754
- border: 1px solid #e2e8f0; border-radius: 8px; padding: 4px;
755
-
756
- [data-menu-trigger] {
757
- padding: 8px 16px; border: none; background: transparent;
758
- cursor: pointer; font-size: 14px; color: #475569; border-radius: 6px;
759
- transition: all 0.15s;
760
-
761
- &:hover, &[data-open] { background: white; color: #1e293b; box-shadow: 0 1px 3px rgba(0,0,0,0.08); }
762
- &:focus-visible { outline: 2px solid #3b82f6; outline-offset: -2px; }
763
- }
764
-
765
- [role="menu"] {
766
- background: white; border: 1px solid #cbd5e1; border-radius: 6px;
767
- box-shadow: 0 4px 16px rgba(0,0,0,0.12); padding: 4px;
768
- min-width: 140px; z-index: 50;
769
- }
770
- }
771
-
772
- /* ── NavigationMenu ── */
773
-
774
- .gallery nav[role="navigation"] {
775
- display: inline-flex; align-items: center; gap: 2px;
776
- padding: 4px; background: #f1f5f9; border-radius: 8px;
777
- }
778
-
779
- .gallery nav[role="navigation"] > a,
780
- .gallery nav[role="navigation"] > div > button {
781
- appearance: none; padding: 6px 14px; border: none; background: transparent;
782
- cursor: pointer; font: inherit; font-size: 13px; font-weight: 500;
783
- color: #475569; border-radius: 5px; text-decoration: none;
784
- user-select: none; transition: all 0.1s; outline: none;
785
- }
786
-
787
- .gallery nav[role="navigation"] > a:hover,
788
- .gallery nav[role="navigation"] > div > button:hover,
789
- .gallery nav[role="navigation"] > div > button[data-open] {
790
- background: white; color: #1e293b; box-shadow: 0 1px 3px rgba(0,0,0,0.08);
791
- }
792
-
793
- .gallery nav[role="navigation"] > a:active,
794
- .gallery nav[role="navigation"] > div > button:active { transform: scale(0.96); }
795
-
796
- .gallery nav[role="navigation"] > div > button {
797
- display: flex; align-items: center; gap: 4px;
798
- }
799
-
800
- .gallery nav[role="navigation"] > div > button::after {
801
- content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
802
- display: inline-block; line-height: 0; transition: transform 0.2s ease;
803
- }
804
-
805
- .gallery nav[role="navigation"] > div > button[data-open]::after { transform: rotate(180deg); }
806
-
807
- .gallery nav[role="navigation"] [data-nav-panel] {
808
- background: white; border: 1px solid #e2e8f0; border-radius: 10px;
809
- box-shadow: 0 8px 24px rgba(0,0,0,0.1); padding: 6px;
810
- min-width: 180px; z-index: 50;
811
- }
812
-
813
- .gallery nav[role="navigation"] [data-nav-panel] a {
814
- display: block; padding: 8px 12px; color: #475569; text-decoration: none;
815
- border-radius: 6px; font-size: 13px; transition: background 0.1s;
816
- }
817
-
818
- .gallery nav[role="navigation"] [data-nav-panel] a:hover {
819
- background: #f1f5f9; color: #1e293b;
820
- }
821
-
822
- /* ── ToggleGroup ── */
823
-
824
- .gallery [role="group"][data-orientation]:has(button[aria-pressed]) {
825
- display: inline-flex; gap: 0;
826
-
827
- &[data-orientation="horizontal"] { flex-direction: row; }
828
- &[data-orientation="vertical"] { flex-direction: column; }
829
-
830
- button[aria-pressed] {
831
- padding: 6px 14px; border: 1px solid #cbd5e1; background: white;
832
- cursor: pointer; font-size: 13px; color: #94a3b8; transition: all 0.15s;
833
- user-select: none;
834
-
835
- &:first-of-type { border-radius: 6px 0 0 6px; }
836
- &:last-of-type { border-radius: 0 6px 6px 0; }
837
- &:not(:first-of-type) { margin-left: -1px; }
838
- &[data-pressed="true"] { background: #3b82f6; color: white; border-color: #3b82f6; z-index: 1; }
839
- &:hover:not([data-pressed="true"]) { background: #f8fafc; color: #475569; }
840
- &:active { transform: scale(0.97); }
841
- &:focus-visible { outline: 2px solid #3b82f6; outline-offset: -2px; z-index: 2; }
842
- }
843
- }
844
-
845
- /* ── RadioGroup ── */
846
-
847
- .gallery [role="radiogroup"] {
848
- display: inline-flex; gap: 4px;
849
-
850
- &[data-orientation="horizontal"] { flex-direction: row; }
851
- &[data-orientation="vertical"] { flex-direction: column; }
852
-
853
- [role="radio"] {
854
- display: flex; align-items: center; gap: 8px;
855
- padding: 6px 14px; border: 1px solid #cbd5e1; border-radius: 6px;
856
- background: white; cursor: pointer; font-size: 13px; color: #475569; transition: all 0.15s;
857
-
858
- &[data-checked] { background: #eff6ff; color: #1d4ed8; border-color: #3b82f6; }
859
- &:hover:not([data-checked]) { background: #f8fafc; }
860
- &:focus-visible { outline: 2px solid #3b82f6; outline-offset: 2px; }
861
- }
862
- }
863
-
864
- /* ── CheckboxGroup ── */
865
-
866
- .gallery [role="group"][aria-label] {
867
- display: inline-flex; gap: 4px;
868
-
869
- &[data-orientation="horizontal"] { flex-direction: row; }
870
- &[data-orientation="vertical"] { flex-direction: column; }
871
-
872
- [role="checkbox"] {
873
- display: flex; align-items: center; gap: 8px;
874
- padding: 6px 14px; border: 1px solid #cbd5e1; border-radius: 6px;
875
- background: white; cursor: pointer; font-size: 13px; color: #475569; transition: all 0.15s;
876
-
877
- &[data-checked] { background: #eff6ff; color: #1d4ed8; border-color: #3b82f6; }
878
- &:hover:not([data-checked]) { background: #f8fafc; }
879
- &:focus-visible { outline: 2px solid #3b82f6; outline-offset: 2px; }
880
- }
881
- }
882
-
883
- /* ── Avatar ── */
884
-
885
- .gallery [role="img"][aria-label] {
886
- display: inline-flex; align-items: center; justify-content: center;
887
- width: 40px; height: 40px; border-radius: 50%; overflow: hidden;
888
- background: #e2e8f0; color: #475569; font-size: 14px; font-weight: 600;
889
-
890
- img { width: 100%; height: 100%; object-fit: cover; }
891
-
892
- [data-initials] { user-select: none; }
893
-
894
- [data-placeholder] {
895
- color: #94a3b8; font-size: 18px; font-weight: 400;
896
- }
897
- }
898
-
899
- /* ── ContextMenu ── */
900
-
901
- .gallery [role="menu"][data-open] {
902
- background: white; border: 1px solid #cbd5e1; border-radius: 6px;
903
- box-shadow: 0 4px 16px rgba(0,0,0,0.12); padding: 4px;
904
- min-width: 140px;
905
- }
906
-
907
- /* ── Toolbar ── */
908
-
909
- .gallery [role="toolbar"] {
910
- display: inline-flex; align-items: center; gap: 2px;
911
- padding: 4px; background: #f1f5f9; border-radius: 8px;
912
-
913
- &[data-orientation="vertical"] { flex-direction: column; }
914
-
915
- button {
916
- padding: 6px 14px; border: none; border-radius: 5px; background: transparent;
917
- font-size: 13px; font-weight: 500; color: #475569; cursor: pointer;
918
- user-select: none; transition: all 0.1s;
919
-
920
- &:hover { background: white; color: #1e293b; box-shadow: 0 1px 3px rgba(0,0,0,0.08); }
921
- &:active { transform: scale(0.96); }
922
- &[aria-pressed="true"] { background: white; color: #1d4ed8; box-shadow: 0 1px 3px rgba(0,0,0,0.08); }
923
- &:focus-visible { outline: 2px solid #3b82f6; outline-offset: -2px; }
924
- }
925
- }
926
-
927
- /* ── Table of Contents ── */
928
-
929
- html { scroll-behavior: auto; }
930
- html.no-transition, html.no-transition * { transition: none !important; }
931
-
932
- .toc {
933
- display: grid; grid-template-columns: 1fr 1fr;
934
- margin-bottom: 36px;
935
- background: white; border: 1px solid #e2e8f0; border-radius: 10px;
936
- overflow: hidden;
937
- }
938
-
939
- .toc-nav {
940
- display: flex; flex-wrap: wrap; align-content: flex-start;
941
- gap: 12px 20px; padding: 16px 20px;
942
- }
943
-
944
- .toc-group { display: flex; flex-direction: column; gap: 3px; }
945
-
946
- .toc-label {
947
- font-size: 10px; font-weight: 700; letter-spacing: 0.08em;
948
- text-transform: uppercase; color: #94a3b8; margin-bottom: 2px;
949
- }
950
-
951
- .toc-search {
952
- width: 100%; padding: 5px 10px; margin-bottom: 8px;
953
- border: 1px solid #e2e8f0; border-radius: 5px;
954
- font-size: 12px; background: white; color: #1e293b; outline: none;
955
- height: 28px;
956
-
957
- &:focus { border-color: #3b82f6; box-shadow: 0 0 0 2px rgba(59,130,246,0.1); }
958
- &::placeholder { color: #b0b8c4; }
959
- }
960
-
961
- .toc a {
962
- font-size: 12px; color: #475569; text-decoration: none;
963
- padding: 2px 8px; border-radius: 4px; background: #f1f5f9;
964
- cursor: pointer; transition: transform 0.12s; outline: none;
965
-
966
- &:hover, &[data-active] { background: #dbeafe; color: #1d4ed8; transform: scale(1.05); }
967
- &:focus-visible { background: #dbeafe; color: #1d4ed8; outline: 2px solid #3b82f6; outline-offset: 1px; }
968
- &[data-hidden] { display: none; }
969
- }
970
-
971
- .toc-group:not(:has(a:not([data-hidden]))) { display: none; }
972
-
973
- .toc-detail {
974
- border-left: 1px solid #e2e8f0; background: #fafbfc;
975
- padding: 16px 20px; display: flex; flex-direction: column;
976
- position: relative; min-height: 280px;
977
- }
978
-
979
- .toc-detail h3 {
980
- font-size: 16px; font-weight: 700; letter-spacing: -0.01em;
981
- display: flex; align-items: center; gap: 8px; margin-bottom: 4px;
982
- }
983
-
984
- .toc-detail .toc-desc {
985
- font-size: 13px; color: #64748b; margin-bottom: 12px;
986
- }
987
-
988
- .toc-detail .api { border: none; background: transparent; padding: 0; }
989
-
990
- .toc-detail .jump {
991
- position: absolute; top: 16px; right: 20px;
992
- font-size: 12px; color: #3b82f6; text-decoration: none;
993
-
994
- &:hover { text-decoration: underline; }
995
- }
996
-
997
- .toc-empty {
998
- display: flex; align-items: center; justify-content: center;
999
- height: 100%; color: #94a3b8; font-size: 13px;
1000
- }
1001
-
1002
- /* ── API Reference ── */
1003
-
1004
- .api {
1005
- margin-top: 12px; padding: 10px 14px;
1006
- background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px;
1007
- }
1008
-
1009
- .api dl {
1010
- display: grid; grid-template-columns: auto 1fr;
1011
- gap: 5px 10px; align-items: baseline; margin: 0;
1012
- }
1013
-
1014
- .api dt {
1015
- font-size: 10px; font-weight: 700; letter-spacing: 0.06em;
1016
- text-transform: uppercase; color: #94a3b8; white-space: nowrap;
1017
- }
1018
-
1019
- .api dd { display: flex; flex-wrap: wrap; gap: 3px; margin: 0; }
1020
-
1021
- .api code {
1022
- font-size: 11px; font-family: 'SF Mono', ui-monospace, monospace;
1023
- padding: 1px 5px; background: white; border: 1px solid #e2e8f0;
1024
- border-radius: 3px; color: #334155; white-space: nowrap;
1025
- }
1026
-
1027
- .api kbd {
1028
- font-size: 10px; font-family: inherit; font-weight: 500;
1029
- padding: 1px 5px; background: white; border: 1px solid #d1d5db;
1030
- border-radius: 3px; color: #374151; box-shadow: 0 1px 0 #d1d5db;
1031
- white-space: nowrap;
1032
- }
1033
-
1034
- .api .api-none { font-size: 11px; color: #cbd5e1; font-style: italic; }
1035
-
1036
- /* ── Source Code Viewer ── */
1037
-
1038
- body:has(.source-overlay) { overflow: hidden; }
1039
-
1040
- .source-overlay {
1041
- position: fixed; inset: 0; background: rgba(0,0,0,0.5);
1042
- display: grid; place-items: center; z-index: 200;
1043
- animation: fadeIn 150ms ease;
1044
- }
1045
-
1046
- .source-modal {
1047
- background: white; border-radius: 12px;
1048
- box-shadow: 0 8px 32px rgba(0,0,0,0.2);
1049
- width: min(90vw, 760px); max-height: 85vh;
1050
- display: flex; flex-direction: column;
1051
- overflow: hidden;
1052
- }
1053
-
1054
- .source-header {
1055
- display: flex; align-items: center; justify-content: space-between;
1056
- padding: 12px 16px; border-bottom: 1px solid #e2e8f0;
1057
- flex-shrink: 0;
1058
- }
1059
-
1060
- .source-title { display: flex; align-items: center; gap: 8px; }
1061
-
1062
- .source-name {
1063
- font-size: 15px; font-weight: 700; color: #0f172a;
1064
- }
1065
-
1066
- .source-badge {
1067
- font-size: 10px; font-weight: 600; padding: 2px 8px;
1068
- border-radius: 10px; background: #dbeafe; color: #1d4ed8;
1069
- }
1070
-
1071
- .source-close {
1072
- width: 28px; height: 28px; border-radius: 6px;
1073
- border: none; background: none; color: #94a3b8;
1074
- font-size: 18px; cursor: pointer; display: grid; place-items: center;
1075
- transition: background 0.15s, color 0.15s;
1076
-
1077
- &:hover { background: #f1f5f9; color: #475569; }
1078
- }
1079
-
1080
- .source-body {
1081
- overflow: auto; flex: 1; min-height: 0;
1082
- }
1083
-
1084
- .source-pre {
1085
- margin: 0; padding: 16px 0; display: flex;
1086
- font-size: 13px; line-height: 1.6;
1087
- font-family: ui-monospace, 'SF Mono', 'Cascadia Code', 'Fira Code', Menlo, monospace;
1088
- }
1089
-
1090
- .source-gutter {
1091
- color: #94a3b8; text-align: right; padding: 0 12px 0 16px;
1092
- user-select: none; flex-shrink: 0;
1093
- border-right: 1px solid #e2e8f0;
1094
- }
1095
-
1096
- .source-code {
1097
- padding: 0 16px; flex: 1; min-width: 0;
1098
- white-space: pre; background: transparent !important;
1099
- margin: 0; color: #1e293b;
1100
- }
1101
-
1102
- .source-code.hljs { padding: 0 16px; }
1103
-
1104
- /* Light mode syntax theme */
1105
- .source-code .hljs-comment { color: #6b7280; font-style: italic; }
1106
- .source-code .hljs-keyword { color: #7c3aed; }
1107
- .source-code .hljs-built_in { color: #6d28d9; }
1108
- .source-code .hljs-string,
1109
- .source-code .hljs-regexp { color: #16a34a; }
1110
- .source-code .hljs-number,
1111
- .source-code .hljs-literal { color: #d97706; }
1112
- .source-code .hljs-title,
1113
- .source-code .hljs-title\.function,
1114
- .source-code .hljs-title\.class { color: #2563eb; }
1115
- .source-code .hljs-function { color: #2563eb; }
1116
- .source-code .hljs-params { color: #9333ea; }
1117
- .source-code .hljs-variable { color: #0891b2; }
1118
- .source-code .hljs-attribute { color: #0d9488; }
1119
- .source-code .hljs-operator { color: #64748b; }
1120
- .source-code .hljs-subst { color: #dc2626; }
1121
- .source-code .hljs-type { color: #0891b2; }
1122
-
1123
- /* ── Badge ── */
1124
-
1125
- .gallery [data-variant] {
1126
- display: inline-flex; align-items: center; font-size: 11px; font-weight: 600;
1127
- padding: 2px 8px; border-radius: 10px; user-select: none;
1128
-
1129
- &[data-variant="solid"] { background: #3b82f6; color: white; }
1130
- &[data-variant="outline"] { background: transparent; color: #3b82f6; border: 1px solid #3b82f6; }
1131
- &[data-variant="subtle"] { background: #dbeafe; color: #1d4ed8; }
1132
- }
1133
-
1134
- /* ── Kbd ── */
1135
-
1136
- .gallery kbd:not(.api kbd) {
1137
- display: inline-block; font-family: ui-monospace, 'SF Mono', monospace;
1138
- font-size: 12px; font-weight: 500; padding: 2px 6px;
1139
- background: #f8fafc; border: 1px solid #d1d5db; border-radius: 4px;
1140
- color: #374151; box-shadow: 0 1px 0 #d1d5db; line-height: 1.4;
1141
- }
1142
-
1143
- /* ── Skeleton ── */
1144
-
1145
- .gallery [aria-busy="true"][role="status"]:not([aria-label="Carousel"]) {
1146
- width: var(--skeleton-width, 100%); height: var(--skeleton-height, 1em);
1147
- background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);
1148
- background-size: 200% 100%;
1149
- animation: shimmer 1.5s infinite;
1150
- border-radius: 4px;
1151
-
1152
- &[data-circle] { border-radius: 50%; }
1153
- }
1154
-
1155
- @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
1156
-
1157
- /* ── Spinner ── */
1158
-
1159
- .gallery .spinner-demo [role="status"][aria-label] {
1160
- width: var(--spinner-size, 24px); height: var(--spinner-size, 24px);
1161
- border: 3px solid #e2e8f0; border-top-color: #3b82f6;
1162
- border-radius: 50%; animation: spin 0.6s linear infinite;
1163
- }
1164
-
1165
- @keyframes spin { to { transform: rotate(360deg); } }
1166
-
1167
- /* ── AspectRatio ── */
1168
-
1169
- .gallery .aspect-demo > div {
1170
- overflow: hidden; border-radius: 8px; background: #e2e8f0;
1171
-
1172
- img { width: 100%; height: 100%; object-fit: cover; }
1173
- }
1174
-
1175
- /* ── Card ── */
1176
-
1177
- .gallery .card-demo { background: none; border: none; padding: 0; }
1178
-
1179
- .gallery .card-demo > div {
1180
- background: white; border: 1px solid #e2e8f0; border-radius: 8px;
1181
- overflow: hidden; transition: box-shadow 0.2s;
1182
-
1183
- &[data-interactive] { cursor: pointer; }
1184
- &[data-interactive]:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.1); }
1185
-
1186
- [data-header] { padding: 16px 16px 0; }
1187
- [data-header] h3 { font-size: 16px; font-weight: 700; }
1188
- [data-content] { padding: 12px 16px; color: #64748b; font-size: 13px; }
1189
- [data-footer] { padding: 12px 16px; display: flex; gap: 8px; border-top: 1px solid #e2e8f0; }
1190
- }
1191
-
1192
- /* ── Label ── */
1193
-
1194
- .gallery label[data-required] { font-size: 13px; font-weight: 600; color: #334155; }
1195
- .gallery label[data-required]::after { content: " *"; color: #ef4444; }
1196
-
1197
- /* ── Textarea ── */
1198
-
1199
- .gallery textarea {
1200
- width: 100%; min-height: 80px; padding: 8px 12px;
1201
- border: 1px solid #cbd5e1; border-radius: 6px; font: inherit; font-size: 14px;
1202
- color: #1e293b; background: white; outline: none; resize: vertical;
1203
-
1204
- &:focus { border-color: #3b82f6; box-shadow: 0 0 0 3px rgba(59,130,246,0.1); }
1205
- &[data-disabled] { opacity: 0.5; cursor: not-allowed; }
1206
- }
1207
-
1208
- /* ── NativeSelect ── */
1209
-
1210
- .gallery .native-select-demo select {
1211
- padding: 6px 12px; height: 36px; border: 1px solid #cbd5e1; border-radius: 6px;
1212
- background: white; font: inherit; font-size: 14px; color: #1e293b; outline: none; cursor: pointer;
1213
-
1214
- &:focus { border-color: #3b82f6; box-shadow: 0 0 0 3px rgba(59,130,246,0.1); }
1215
- &[data-disabled] { opacity: 0.5; cursor: not-allowed; }
1216
- }
1217
-
1218
- /* ── InputGroup ── */
1219
-
1220
- .gallery .input-group-demo > div {
1221
- display: inline-flex; align-items: center;
1222
- border: 1px solid #cbd5e1; border-radius: 6px; overflow: hidden;
1223
-
1224
- &[data-focused] { border-color: #3b82f6; box-shadow: 0 0 0 3px rgba(59,130,246,0.1); }
1225
- &[data-disabled] { opacity: 0.5; }
1226
-
1227
- [data-prefix], [data-suffix] {
1228
- padding: 0 10px; background: #f8fafc; color: #64748b;
1229
- font-size: 14px; height: 36px; display: flex; align-items: center;
1230
- border-right: 1px solid #e2e8f0; user-select: none;
1231
- }
1232
-
1233
- [data-suffix] { border-right: none; border-left: 1px solid #e2e8f0; }
1234
-
1235
- input {
1236
- border: none; outline: none; padding: 0 12px; height: 36px;
1237
- font: inherit; font-size: 14px; flex: 1; min-width: 0;
1238
- }
1239
- }
1240
-
1241
- /* ── ButtonGroup ── */
1242
-
1243
- .gallery [role="group"][data-orientation]:not(:has(button[aria-pressed])):not([role="radiogroup"]):not(:has([data-track])) {
1244
- display: inline-flex;
1245
-
1246
- &[data-orientation="horizontal"] { flex-direction: row; }
1247
- &[data-orientation="vertical"] { flex-direction: column; }
1248
-
1249
- button {
1250
- padding: 6px 14px; border: 1px solid #cbd5e1; background: white;
1251
- cursor: pointer; font-size: 13px; color: #1e293b; transition: all 0.15s;
1252
-
1253
- &:first-child { border-radius: 6px 0 0 6px; }
1254
- &:last-child { border-radius: 0 6px 6px 0; }
1255
- &:not(:first-child) { margin-left: -1px; }
1256
- &:hover { background: #f8fafc; z-index: 1; }
1257
- &:active { background: #f1f5f9; }
1258
- }
1259
-
1260
- &[data-disabled] { opacity: 0.5; pointer-events: none; }
1261
- }
1262
-
1263
- /* ── AlertDialog ── */
1264
-
1265
- .gallery [data-open]:has(> [role="alertdialog"]) {
1266
- position: fixed; inset: 0; background: rgba(0,0,0,0.4);
1267
- display: grid; place-items: center; z-index: 100;
1268
- animation: fadeIn 150ms ease;
1269
- }
1270
-
1271
- .gallery .alert-dialog-panel {
1272
- background: white; border-radius: 12px; padding: 24px;
1273
- box-shadow: 0 4px 16px rgba(0,0,0,0.12); max-width: min(90vw, 420px); width: 100%;
1274
- }
1275
-
1276
- /* ── Sheet ── */
1277
-
1278
- .gallery [data-open]:has([data-sheet]) {
1279
- position: fixed; inset: 0; background: rgba(0,0,0,0.4);
1280
- z-index: 100; animation: fadeIn 150ms ease;
1281
- }
1282
-
1283
- .gallery [data-sheet] {
1284
- position: fixed; background: white; padding: 24px;
1285
- box-shadow: 0 0 24px rgba(0,0,0,0.15); overflow-y: auto;
1286
-
1287
- &[data-side="right"] { top: 0; right: 0; bottom: 0; width: min(85vw, 360px); animation: slideInRight 200ms ease; }
1288
- &[data-side="left"] { top: 0; left: 0; bottom: 0; width: min(85vw, 360px); animation: slideInLeft 200ms ease; }
1289
- &[data-side="top"] { top: 0; left: 0; right: 0; height: min(85vh, 320px); animation: slideInTop 200ms ease; }
1290
- &[data-side="bottom"] { bottom: 0; left: 0; right: 0; height: min(85vh, 320px); animation: slideInBottom 200ms ease; }
1291
-
1292
- h2 { font-size: 18px; font-weight: 700; margin-bottom: 8px; }
1293
- p { color: #64748b; font-size: 14px; margin-bottom: 12px; }
1294
- }
1295
-
1296
- @keyframes slideInTop { from { transform: translateY(-100%); } to { transform: none; } }
1297
- @keyframes slideInBottom { from { transform: translateY(100%); } to { transform: none; } }
1298
-
1299
- /* ── Breadcrumb ── */
1300
-
1301
- .gallery nav[aria-label="Breadcrumb"] ol {
1302
- display: flex; align-items: center; gap: 6px; list-style: none;
1303
- font-size: 13px; color: #64748b;
1304
-
1305
- [data-item] { color: #64748b; text-decoration: none; }
1306
- [data-item]:hover:not([data-current]) { color: #1e293b; text-decoration: underline; }
1307
- [data-item] + [data-item]::before { content: '/'; color: #cbd5e1; margin-right: 6px; user-select: none; text-decoration: none; display: inline-block; }
1308
- [data-current] { color: #1e293b; font-weight: 600; }
1309
- }
1310
-
1311
- /* ── Table ── */
1312
-
1313
- .gallery .table-demo table {
1314
- width: 100%; border-collapse: collapse; font-size: 13px;
1315
-
1316
- caption { font-size: 14px; font-weight: 600; text-align: left; padding: 8px 0; color: #1e293b; }
1317
-
1318
- th { text-align: left; padding: 8px 12px; font-weight: 600; color: #475569;
1319
- border-bottom: 2px solid #e2e8f0; font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; }
1320
- td { padding: 8px 12px; border-bottom: 1px solid #e2e8f0; color: #1e293b; }
1321
-
1322
- &[data-striped] tbody tr:nth-child(even) td { background: #f8fafc; }
1323
- }
1324
-
1325
- /* ── Collapsible ── */
1326
-
1327
- .gallery [data-trigger]:has(+ [data-content]) {
1328
- padding: 8px 14px; border: 1px solid #cbd5e1; border-radius: 6px;
1329
- background: white; cursor: pointer; font-size: 14px; width: 100%; text-align: left;
1330
-
1331
- &[aria-expanded="true"] { border-color: #94a3b8; }
1332
- &:hover { background: #f8fafc; }
1333
- }
1334
-
1335
- .gallery .collapsible-demo [data-content] {
1336
- padding: 12px 14px; color: #64748b; font-size: 13px;
1337
- border: 1px solid #e2e8f0; border-top: none; border-radius: 0 0 6px 6px;
1338
- }
1339
-
1340
- /* ── Pagination ── */
1341
-
1342
- .gallery nav[aria-label="Pagination"] {
1343
- display: inline-flex; align-items: center; gap: 2px;
1344
-
1345
- button {
1346
- min-width: 32px; height: 32px; padding: 0 8px;
1347
- border: 1px solid #e2e8f0; border-radius: 6px; background: white;
1348
- font-size: 13px; color: #475569; cursor: pointer; transition: all 0.15s;
1349
-
1350
- &:hover:not(:disabled):not([data-active]) { background: #f1f5f9; border-color: #94a3b8; }
1351
- &[data-active] { background: #3b82f6; color: white; border-color: #3b82f6; }
1352
- &[data-active]:hover { background: #2563eb; }
1353
- &:disabled { opacity: 0.4; cursor: not-allowed; }
1354
- }
1355
-
1356
- [data-prev]::before { content: '‹'; }
1357
- [data-next]::before { content: '›'; }
1358
- [data-ellipsis] { min-width: 32px; text-align: center; color: #94a3b8; font-size: 13px; user-select: none; }
1359
- }
1360
-
1361
- /* ── Carousel ── */
1362
-
1363
- .gallery [aria-roledescription="carousel"] {
1364
- position: relative; overflow: hidden;
1365
- border: 1px solid #e2e8f0; border-radius: 8px; background: white;
1366
-
1367
- [role="tablist"] {
1368
- border-bottom: none; margin-bottom: 0;
1369
- min-height: 160px; display: grid; place-items: center;
1370
- padding: 24px; text-align: center; font-size: 18px; color: #475569;
1371
- }
1372
-
1373
- [role="tabpanel"] { padding: 24px; text-align: center; }
1374
-
1375
- [data-prev], [data-next] {
1376
- position: absolute; top: 50%; transform: translateY(-50%);
1377
- width: 32px; height: 32px; border-radius: 50%;
1378
- border: 1px solid #e2e8f0; background: white; cursor: pointer;
1379
- display: grid; place-items: center; font-size: 16px; color: #475569;
1380
- box-shadow: 0 2px 6px rgba(0,0,0,0.08); z-index: 2;
1381
-
1382
- &:hover:not(:disabled) { background: #f1f5f9; }
1383
- &:disabled { opacity: 0.3; cursor: not-allowed; }
1384
- }
1385
-
1386
- [data-prev] { left: 8px; }
1387
- [data-next] { right: 8px; }
1388
- [data-prev]::before { content: '‹'; }
1389
- [data-next]::before { content: '›'; }
1390
- }
1391
-
1392
- /* ── Resizable ── */
1393
-
1394
- .gallery .resizable-demo > div {
1395
- border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden;
1396
- min-height: 160px;
1397
-
1398
- [data-panel] {
1399
- display: flex; align-items: center; justify-content: center;
1400
- font-size: 13px; color: #64748b; background: white; overflow: hidden;
1401
- }
1402
-
1403
- [data-handle] {
1404
- flex-shrink: 0; background: #e2e8f0; cursor: col-resize;
1405
- display: flex; align-items: center; justify-content: center;
1406
- transition: background 0.15s;
1407
-
1408
- &:hover, &[data-dragging] { background: #3b82f6; }
1409
- }
1410
-
1411
- &[data-orientation="horizontal"] [data-handle] { width: 4px; }
1412
- &[data-orientation="vertical"] [data-handle] { height: 4px; cursor: row-resize; }
1413
- }
1414
-
1415
- /* ── Dark Mode ── */
1416
-
1417
- [data-theme="dark"] {
1418
- body { color: #e2e8f0; background: #0f172a; }
1419
- button { color: #e2e8f0; }
1420
-
1421
- .gallery-header p { color: #94a3b8; }
1422
-
1423
- .theme-toggle { border-color: #334155; background: #1e293b; color: #94a3b8; }
1424
- .theme-toggle:hover { background: #334155; color: #e2e8f0; }
1425
-
1426
- .section .section-title { border-bottom-color: #334155; color: #e2e8f0; }
1427
- .badge { background: #172554; color: #60a5fa; border-color: #1e3a8a; }
1428
- .badge:hover { background: #1e3a8a; color: #93c5fd; border-color: #3b82f6; }
1429
- .section .section-desc { color: #94a3b8; }
1430
- .section .section-nav a { color: #475569; }
1431
- .section .section-nav a:hover { color: #60a5fa; background: #172554; }
1432
-
1433
- .demo-row { background: #1e293b; border-color: #334155; }
1434
- .demo-label { color: #64748b; }
1435
- .demo-btn { border-color: #475569; background: #334155; color: #e2e8f0; }
1436
- .demo-row a[href] { color: #60a5fa; }
1437
- .status { background: #0f172a; color: #94a3b8; }
1438
-
1439
- .toc { background: #1e293b; border-color: #334155; }
1440
- .toc-search { border-color: #334155; background: #0f172a; color: #e2e8f0; }
1441
- .toc-search::placeholder { color: #64748b; }
1442
- .toc-label { color: #64748b; }
1443
- .toc a { color: #94a3b8; background: #0f172a; }
1444
- .toc a:hover, .toc a[data-active] { background: #172554; color: #60a5fa; }
1445
- .toc-detail { border-left-color: #334155; background: #0f172a; }
1446
- .toc-detail h3 { color: #e2e8f0; }
1447
- .toc-detail .toc-desc { color: #94a3b8; }
1448
- .toc-detail .jump { color: #60a5fa; }
1449
- .toc-empty { color: #475569; }
1450
-
1451
- .api { background: #0f172a; border-color: #334155; }
1452
- .api dt { color: #64748b; }
1453
- .api code { background: #1e293b; border-color: #334155; color: #cbd5e1; }
1454
- .api kbd { background: #1e293b; border-color: #475569; color: #94a3b8; box-shadow: 0 1px 0 #475569; }
1455
-
1456
- /* Select / Combobox */
1457
- .gallery button[role="combobox"] { border-color: #475569; background: #1e293b; color: #e2e8f0; }
1458
- .gallery button[role="combobox"][data-open] { border-color: #60a5fa; }
1459
- .gallery button[role="combobox"][data-placeholder] { color: #64748b; }
1460
- .gallery div[role="listbox"] { background: #1e293b; border-color: #475569; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1461
- .gallery div[role="option"] { color: #e2e8f0; }
1462
- .gallery div[role="option"][data-highlighted] { background: #172554; }
1463
- .gallery div[role="option"][data-selected] { color: #60a5fa; }
1464
- .gallery .combobox-popup, .gallery .menu-popup { background: #1e293b; border-color: #475569; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1465
- .gallery .option[data-highlighted], .gallery [role="menuitem"][data-highlighted] { background: #172554; }
1466
- .gallery .option[data-selected] { color: #60a5fa; }
1467
- .gallery [data-clear] { color: #64748b; }
1468
- .gallery [data-clear]:hover { color: #94a3b8; background: #334155; }
1469
-
1470
- /* Text inputs */
1471
- .gallery .combobox-input, .gallery input[type="text"]:not(.rip-grid-editor) { border-color: #475569; color: #e2e8f0; background: #0f172a; }
1472
- .gallery input[type="email"], .gallery input[type="password"], .gallery input[type="number"] { border-color: #475569 !important; color: #e2e8f0 !important; background: #0f172a !important; }
1473
-
1474
- /* Dialog / Drawer */
1475
- .gallery .dialog-panel { background: #1e293b; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1476
- .gallery .drawer-panel { background: #1e293b; box-shadow: -4px 0 16px rgba(0,0,0,0.4); }
1477
- .gallery .drawer-panel h2 { color: #e2e8f0; }
1478
- .gallery .drawer-panel p { color: #94a3b8; }
1479
- .gallery .drawer-panel button { border-color: #475569; background: #1e293b; color: #e2e8f0; }
1480
- .gallery .drawer-panel button:hover { background: #334155; border-color: #64748b; }
1481
-
1482
- /* Toast */
1483
- .gallery [role="status"] { background: #1e293b; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1484
- .gallery [role="status"] button { color: #64748b; }
1485
- .gallery [role="status"] button:hover { color: #94a3b8; background: #334155; }
1486
-
1487
- /* Tooltip */
1488
- .gallery [role="tooltip"] { background: #e2e8f0; color: #0f172a; }
1489
-
1490
- /* Tabs */
1491
- .gallery [role="tablist"] { border-bottom-color: #334155; }
1492
- .gallery [role="tab"] { color: #64748b; }
1493
- .gallery [role="tab"][data-active] { color: #60a5fa; border-bottom-color: #60a5fa; }
1494
-
1495
- /* Checkbox / Switch */
1496
- .gallery [role="checkbox"], .gallery [role="switch"] { border-color: #475569; background: #1e293b; color: #e2e8f0; }
1497
- .gallery [role="checkbox"][data-checked], .gallery [role="switch"][data-checked] { background: #172554; border-color: #3b82f6; color: #60a5fa; }
1498
-
1499
- /* Menu */
1500
- .gallery [aria-haspopup="menu"] { border-color: #475569; background: #1e293b; color: #e2e8f0; }
1501
- .gallery [role="menu"] { background: #1e293b; border-color: #475569; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1502
- .gallery [role="menu"][data-open] { background: #1e293b; border-color: #475569; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1503
-
1504
- /* Scroll Area */
1505
- .scroll-demo [data-orientation] { border-color: #334155; }
1506
-
1507
- /* Number Field */
1508
- .gallery .nf-wrap [role="group"] { border-color: #475569; }
1509
- .gallery .nf-wrap [role="group"] input { color: #e2e8f0; background: #1e293b; }
1510
- .gallery .nf-wrap [role="group"] button { background: #0f172a; color: #94a3b8; }
1511
- .gallery .nf-wrap [role="group"] button:hover:not(:disabled) { background: #334155; }
1512
- .gallery .nf-wrap [role="group"] [data-decrement] { border-right-color: #334155; }
1513
- .gallery .nf-wrap [role="group"] [data-increment] { border-left-color: #334155; }
1514
-
1515
- /* Slider */
1516
- .gallery .slider-wrap [data-track] { background: #334155; }
1517
- .gallery .slider-wrap [data-thumb] { background: #1e293b; border-color: #60a5fa; }
1518
-
1519
- /* Separator */
1520
- .gallery [role="none"][data-orientation="horizontal"], .gallery [role="separator"][data-orientation="horizontal"] { border-top-color: #475569; }
1521
- .gallery [role="none"][data-orientation="vertical"], .gallery [role="separator"][data-orientation="vertical"] { border-left-color: #475569; }
1522
-
1523
- /* Button */
1524
- .gallery .btn-demo button { border-color: #475569; background: #1e293b; color: #e2e8f0; }
1525
- .gallery .btn-demo button:hover:not([data-disabled]) { background: #334155; border-color: #64748b; }
1526
- .gallery .btn-demo button:active:not([data-disabled]) { background: #0f172a; }
1527
-
1528
- /* Toggle */
1529
- .gallery .toggle-heart button { border-color: #334155; background: #1e293b; }
1530
- .gallery .toggle-heart button:hover { background: #3f1d1d; border-color: #7f1d1d; }
1531
- .gallery .toggle-heart .heart { color: #475569; }
1532
- .gallery .toggle-heart [aria-pressed="true"] { background: #3f1d1d; border-color: #f87171; }
1533
-
1534
- /* Progress / Meter */
1535
- .progress-track { background: #334155; }
1536
- .gallery [role="meter"] { background: #334155; }
1537
- .gallery [role="meter"][data-level="low"] { background: linear-gradient(90deg, #ef4444 var(--meter-percent), #334155 var(--meter-percent)); }
1538
- .gallery [role="meter"][data-level="optimum"] { background: linear-gradient(90deg, #22c55e var(--meter-percent), #334155 var(--meter-percent)); }
1539
- .gallery [role="meter"][data-level="high"] { background: linear-gradient(90deg, #f59e0b var(--meter-percent), #334155 var(--meter-percent)); }
1540
-
1541
- /* Avatar */
1542
- .gallery [role="img"][aria-label] { background: #334155; color: #94a3b8; }
1543
- .gallery [role="img"][aria-label] [data-placeholder] { color: #64748b; }
1544
-
1545
- /* Grid */
1546
- .grid-container { background: #1e293b; box-shadow: 0 1px 3px rgba(0,0,0,0.3); }
1547
- .rip-grid { color: #e2e8f0; }
1548
- .rip-grid thead th { background: #0f172a; color: #94a3b8; border-bottom-color: #334155; }
1549
- .rip-grid tbody td { border-bottom-color: #334155; }
1550
- .rip-grid tbody tr.even td { background: #172032; }
1551
- .rip-grid-editor { background: #1e293b; color: #e2e8f0; }
1552
- .sort-badge { color: #94a3b8; background: #334155; }
1553
-
1554
- /* OTP Field */
1555
- .gallery [role="group"][aria-label="One-time password"] input { border-color: #475569; background: #0f172a; color: #e2e8f0; }
1556
- .gallery [role="group"][aria-label="One-time password"] input[data-filled] { border-color: #3b82f6; }
1557
- .gallery [role="group"][aria-label="One-time password"][data-complete] input { border-color: #22c55e; background: #052e16; }
1558
-
1559
- /* MultiSelect */
1560
- .gallery [data-chips] { border-color: #475569; background: #1e293b; }
1561
- .gallery [data-chips] input { color: #e2e8f0; }
1562
- .gallery [data-chip] { background: #172554; color: #60a5fa; }
1563
- .gallery [data-chip] [data-remove] { color: #60a5fa; }
1564
- .gallery [data-chip] [data-remove]:hover { background: #1e3a5f; }
1565
-
1566
- /* Editable Value */
1567
- .gallery [data-edit-trigger] { color: #64748b; }
1568
- .gallery [data-edit-trigger]:hover { color: #60a5fa; background: #172554; }
1569
- .gallery [data-editor][data-open] { background: #1e293b; border-color: #475569; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1570
- .gallery [data-editor][data-open] input { border-color: #475569; background: #0f172a; color: #e2e8f0; }
1571
-
1572
- /* DatePicker */
1573
- .gallery [data-calendar] { background: #1e293b; border-color: #475569; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1574
- .gallery [data-header] [data-prev], .gallery [data-header] [data-next] { color: #94a3b8; }
1575
- .gallery [data-header] [data-prev]:hover, .gallery [data-header] [data-next]:hover { background: #334155; }
1576
- .gallery [data-header] [data-month-label] { color: #e2e8f0; }
1577
- .gallery [data-weekdays] [data-weekday] { color: #64748b; }
1578
- .gallery [data-days] button { color: #e2e8f0; }
1579
- .gallery [data-days] button:hover { background: #334155; }
1580
- .gallery [data-days] button:active:not([data-selected]) { background: #1e3a5f; color: #93c5fd; }
1581
- .gallery [data-days] button[data-outside] { color: #475569; }
1582
- .gallery [data-days] button[data-in-range] { background: #1e3a5f; color: #93c5fd; }
1583
- .gallery [data-trigger]:has(+ [data-calendar]) { border-color: #475569; background: #334155; color: #e2e8f0; }
1584
- .gallery [data-trigger][aria-haspopup] { border-color: #475569; background: #334155; color: #e2e8f0; }
1585
-
1586
- /* Field / Fieldset / Form */
1587
- .gallery [data-label] { color: #cbd5e1; }
1588
- .gallery [data-description] { color: #64748b; }
1589
- .gallery fieldset { border-color: #334155; }
1590
- .gallery fieldset legend[data-legend] { color: #e2e8f0; }
1591
- .gallery form button[type="submit"] { background: #3b82f6; }
1592
- .gallery form button[type="submit"]:hover { background: #2563eb; }
1593
- .gallery [data-invalid] input { border-color: #ef4444; }
1594
-
1595
- /* Menubar */
1596
- .gallery [role="menubar"] { background: #0f172a; border-color: #334155; }
1597
- .gallery [role="menubar"] [data-menu-trigger] { color: #94a3b8; }
1598
- .gallery [role="menubar"] [data-menu-trigger]:hover, .gallery [role="menubar"] [data-menu-trigger][data-open] { background: #1e293b; color: #e2e8f0; box-shadow: 0 1px 3px rgba(0,0,0,0.3); }
1599
- .gallery [role="menubar"] [role="menu"] { background: #1e293b; border-color: #475569; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1600
-
1601
- /* Navigation Menu */
1602
- .gallery nav[role="navigation"] { background: #0f172a; }
1603
- .gallery nav[role="navigation"] > a, .gallery nav[role="navigation"] > div > button { color: #94a3b8; }
1604
- .gallery nav[role="navigation"] > a:hover, .gallery nav[role="navigation"] > div > button:hover, .gallery nav[role="navigation"] > div > button[data-open] { background: #1e293b; color: #e2e8f0; box-shadow: 0 1px 3px rgba(0,0,0,0.3); }
1605
- .gallery nav[role="navigation"] [data-nav-panel] { background: #1e293b; border-color: #475569; box-shadow: 0 8px 24px rgba(0,0,0,0.4); }
1606
- .gallery nav[role="navigation"] [data-nav-panel] a { color: #94a3b8; }
1607
- .gallery nav[role="navigation"] [data-nav-panel] a:hover { background: #334155; color: #e2e8f0; }
1608
-
1609
- /* ToggleGroup / RadioGroup / CheckboxGroup */
1610
- .gallery [role="group"][data-orientation]:has(button[aria-pressed]) button[aria-pressed] { border-color: #475569; background: #1e293b; color: #64748b; }
1611
- .gallery [role="group"][data-orientation]:has(button[aria-pressed]) button[aria-pressed][data-pressed="true"] { background: #3b82f6; color: white; border-color: #3b82f6; }
1612
- .gallery [role="group"][data-orientation]:has(button[aria-pressed]) button[aria-pressed]:hover:not([data-pressed="true"]) { background: #334155; color: #94a3b8; }
1613
- .gallery [role="radiogroup"] [role="radio"] { border-color: #475569; background: #1e293b; color: #94a3b8; }
1614
- .gallery [role="radiogroup"] [role="radio"][data-checked] { background: #172554; color: #60a5fa; border-color: #3b82f6; }
1615
- .gallery [role="radiogroup"] [role="radio"]:hover:not([data-checked]) { background: #334155; }
1616
- .gallery [role="group"][aria-label] [role="checkbox"] { border-color: #475569; background: #1e293b; color: #94a3b8; }
1617
- .gallery [role="group"][aria-label] [role="checkbox"][data-checked] { background: #172554; color: #60a5fa; border-color: #3b82f6; }
1618
- .gallery [role="group"][aria-label] [role="checkbox"]:hover:not([data-checked]) { background: #334155; }
1619
-
1620
- /* Toolbar */
1621
- .gallery [role="toolbar"] { background: #0f172a; }
1622
- .gallery [role="toolbar"] button { color: #94a3b8; }
1623
- .gallery [role="toolbar"] button:hover { background: #1e293b; color: #e2e8f0; box-shadow: 0 1px 3px rgba(0,0,0,0.3); }
1624
- .gallery [role="toolbar"] button[aria-pressed="true"] { background: #1e293b; color: #60a5fa; box-shadow: 0 1px 3px rgba(0,0,0,0.3); }
1625
-
1626
- /* Badge */
1627
- .gallery [data-variant="solid"] { background: #2563eb; }
1628
- .gallery [data-variant="outline"] { color: #60a5fa; border-color: #60a5fa; }
1629
- .gallery [data-variant="subtle"] { background: #172554; color: #60a5fa; }
1630
-
1631
- /* Kbd */
1632
- .gallery kbd:not(.api kbd) { background: #1e293b; border-color: #475569; color: #94a3b8; box-shadow: 0 1px 0 #475569; }
1633
-
1634
- /* Skeleton */
1635
- .gallery [aria-busy="true"][role="status"]:not([aria-label="Carousel"]) { background: linear-gradient(90deg, #334155 25%, #475569 50%, #334155 75%); background-size: 200% 100%; }
1636
-
1637
- /* Spinner */
1638
- .gallery .spinner-demo [role="status"][aria-label] { border-color: #334155; border-top-color: #60a5fa; }
1639
-
1640
- /* Card */
1641
- .gallery .card-demo > div { background: #1e293b; border-color: #334155; }
1642
- .gallery .card-demo > div [data-header] h3 { color: #e2e8f0; }
1643
- .gallery .card-demo > div [data-content] { color: #94a3b8; }
1644
-
1645
- /* Label */
1646
- .gallery label[data-required] { color: #cbd5e1; }
1647
-
1648
- /* Textarea */
1649
- .gallery textarea { border-color: #475569; background: #0f172a; color: #e2e8f0; }
1650
-
1651
- /* NativeSelect */
1652
- .gallery .native-select-demo select { border-color: #475569; background: #1e293b; color: #e2e8f0; }
1653
-
1654
- /* InputGroup */
1655
- .gallery .input-group-demo > div { border-color: #475569; }
1656
- .gallery .input-group-demo > div [data-prefix], .gallery .input-group-demo > div [data-suffix] { background: #0f172a; color: #94a3b8; border-color: #334155; }
1657
- .gallery .input-group-demo > div input { color: #e2e8f0; background: #1e293b; }
1658
-
1659
- /* ButtonGroup */
1660
- .gallery [role="group"][data-orientation]:not(:has(button[aria-pressed])):not([role="radiogroup"]) button { border-color: #475569; background: #1e293b; color: #e2e8f0; }
1661
- .gallery [role="group"][data-orientation]:not(:has(button[aria-pressed])):not([role="radiogroup"]) button:hover { background: #334155; }
1662
-
1663
- /* AlertDialog */
1664
- .gallery .alert-dialog-panel { background: #1e293b; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1665
-
1666
- /* Sheet */
1667
- .gallery [data-sheet] { background: #1e293b; box-shadow: 0 0 24px rgba(0,0,0,0.4); }
1668
- .gallery [data-sheet] h2 { color: #e2e8f0; }
1669
- .gallery [data-sheet] p { color: #94a3b8; }
1670
-
1671
- /* Breadcrumb */
1672
- .gallery nav[aria-label="Breadcrumb"] ol [data-item] { color: #94a3b8; }
1673
- .gallery nav[aria-label="Breadcrumb"] ol [data-item]:hover:not([data-current]) { color: #e2e8f0; }
1674
- .gallery nav[aria-label="Breadcrumb"] ol [data-item] + [data-item]::before { color: #475569; }
1675
- .gallery nav[aria-label="Breadcrumb"] ol [data-current] { color: #e2e8f0; }
1676
-
1677
- /* Table */
1678
- .gallery .table-demo table caption { color: #e2e8f0; }
1679
- .gallery .table-demo table th { color: #94a3b8; border-bottom-color: #334155; }
1680
- .gallery .table-demo table td { color: #e2e8f0; border-bottom-color: #334155; }
1681
- .gallery .table-demo table[data-striped] tbody tr:nth-child(even) td { background: #172032; }
1682
-
1683
- /* Collapsible */
1684
- .gallery .collapsible-demo [data-content] { border-color: #334155; color: #94a3b8; }
1685
-
1686
- /* Pagination */
1687
- .gallery nav[aria-label="Pagination"] button { border-color: #475569; background: #1e293b; color: #94a3b8; }
1688
- .gallery nav[aria-label="Pagination"] button:hover:not(:disabled) { background: #334155; border-color: #64748b; }
1689
- .gallery nav[aria-label="Pagination"] button[data-active] { background: #3b82f6; color: white; border-color: #3b82f6; }
1690
- .gallery nav[aria-label="Pagination"] [data-ellipsis] { color: #64748b; }
1691
-
1692
- /* Carousel */
1693
- .gallery [aria-roledescription="carousel"] { border-color: #334155; background: #1e293b; }
1694
- .gallery [aria-roledescription="carousel"] [data-prev], .gallery [aria-roledescription="carousel"] [data-next] { border-color: #475569; background: #1e293b; color: #94a3b8; box-shadow: 0 2px 6px rgba(0,0,0,0.3); }
1695
- .gallery [aria-roledescription="carousel"] [data-prev]:hover:not(:disabled), .gallery [aria-roledescription="carousel"] [data-next]:hover:not(:disabled) { background: #334155; }
1696
-
1697
- /* Resizable */
1698
- .gallery .resizable-demo > div { border-color: #334155; }
1699
- .gallery .resizable-demo > div [data-panel] { background: #1e293b; color: #94a3b8; }
1700
- .gallery .resizable-demo > div [data-handle] { background: #475569; }
1701
-
1702
- /* Shared demo styles */
1703
- .context-zone { border-color: #64748b; color: #94a3b8; }
1704
- .dialog-desc { color: #94a3b8; }
1705
- .floating-panel { background: #1e293b; border-color: #475569; box-shadow: 0 4px 16px rgba(0,0,0,0.4); }
1706
- .floating-title { color: #e2e8f0; }
1707
- .floating-desc { color: #94a3b8; }
1708
-
1709
- /* Accordion demo */
1710
- .accordion-trigger, .gallery [data-trigger][data-trigger] button, .gallery button[data-trigger] { border-color: #475569 !important; background: #334155 !important; color: #e2e8f0 !important; }
1711
- .accordion-content { color: #94a3b8; }
1712
-
1713
- /* Source Code Viewer */
1714
- .source-overlay { background: rgba(0,0,0,0.6); }
1715
- .source-modal { background: #1e293b; box-shadow: 0 8px 32px rgba(0,0,0,0.5); }
1716
- .source-header { border-bottom-color: #334155; }
1717
- .source-name { color: #e2e8f0; }
1718
- .source-badge { background: #172554; color: #60a5fa; }
1719
- .source-close { color: #64748b; }
1720
- .source-close:hover { background: #334155; color: #e2e8f0; }
1721
- .source-gutter { color: #475569; border-right-color: #334155; }
1722
- .source-code { color: #e2e8f0; }
1723
- .source-code .hljs-comment { color: #64748b; font-style: italic; }
1724
- .source-code .hljs-keyword { color: #c084fc; }
1725
- .source-code .hljs-built_in { color: #a78bfa; }
1726
- .source-code .hljs-string,
1727
- .source-code .hljs-regexp { color: #86efac; }
1728
- .source-code .hljs-number,
1729
- .source-code .hljs-literal { color: #fbbf24; }
1730
- .source-code .hljs-title,
1731
- .source-code .hljs-function { color: #93c5fd; }
1732
- .source-code .hljs-params { color: #f0abfc; }
1733
- .source-code .hljs-variable { color: #67e8f9; }
1734
- .source-code .hljs-attribute { color: #5eead4; }
1735
- .source-code .hljs-property { color: #e2e8f0; }
1736
- .source-code .hljs-operator { color: #94a3b8; }
1737
- .source-code .hljs-subst { color: #fca5a5; }
1738
- .source-code .hljs-type { color: #67e8f9; }
1739
- }
1740
-
1741
- /* ── Shared demo styles ── */
1742
-
1743
- .context-zone {
1744
- padding: 24px; border: 2px dashed #cbd5e1; border-radius: 8px;
1745
- text-align: center; color: #64748b; cursor: context-menu;
1746
- }
1747
-
1748
- .dialog-desc { color: #64748b; margin-bottom: 20px; }
1749
-
1750
- .floating-panel {
1751
- padding: 12px 16px; background: white; border: 1px solid #cbd5e1;
1752
- border-radius: 8px; box-shadow: 0 4px 16px rgba(0,0,0,0.12); min-width: 200px;
1753
- }
1754
-
1755
- .floating-title { font-size: 14px; font-weight: 600; color: #1e293b; margin-bottom: 4px; }
1756
- .floating-desc { font-size: 13px; color: #64748b; margin-top: 4px; }
1757
-
1758
- /* ── Accordion demo ── */
1759
-
1760
- .accordion-trigger {
1761
- width: 100%; text-align: left; padding: 8px 12px;
1762
- border: 1px solid #e2e8f0; border-radius: 6px; background: white;
1763
- font-size: 14px; cursor: pointer; margin-bottom: 4px;
1764
- }
1765
-
1766
- .accordion-content { padding: 8px 12px; color: #64748b; font-size: 13px; }
1767
-
1768
- /* ── Animations ── */
1769
-
1770
- @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
1771
- @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } }
1772
- @keyframes slideIn { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: none; } }