rook-cli 1.3.2 → 1.3.4

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 (89) hide show
  1. package/package.json +3 -2
  2. package/rook-framework/PRD-INSTALL-COMMAND.md +379 -0
  3. package/rook-framework/PRD.md +1214 -0
  4. package/rook-framework/README.md +143 -0
  5. package/rook-framework/assets/rk-accordion.js +99 -0
  6. package/rook-framework/assets/rk-alert-dialog.js +132 -0
  7. package/rook-framework/assets/rk-bottom-app-bar.js +88 -0
  8. package/rook-framework/assets/rk-carousel.js +145 -0
  9. package/rook-framework/assets/rk-collapsible.js +151 -0
  10. package/rook-framework/assets/rk-dialog.js +161 -0
  11. package/rook-framework/assets/rk-drawer.js +214 -0
  12. package/rook-framework/assets/rk-framework-core.css +2554 -0
  13. package/rook-framework/assets/rk-framework-tokens.css +101 -0
  14. package/rook-framework/assets/rk-modal.js +91 -0
  15. package/rook-framework/assets/rk-popover.js +264 -0
  16. package/rook-framework/assets/rk-progress.js +81 -0
  17. package/rook-framework/assets/rk-quantity.js +91 -0
  18. package/rook-framework/assets/rk-scroll-area.js +286 -0
  19. package/rook-framework/assets/rk-sheet.js +157 -0
  20. package/rook-framework/assets/rk-tabs.js +179 -0
  21. package/rook-framework/assets/rk-toggle.js +153 -0
  22. package/rook-framework/blocks/rk-accordion.liquid +97 -0
  23. package/rook-framework/blocks/rk-badge.liquid +103 -0
  24. package/rook-framework/blocks/rk-button.liquid +166 -0
  25. package/rook-framework/blocks/rk-divider.liquid +100 -0
  26. package/rook-framework/blocks/rk-form-field.liquid +120 -0
  27. package/rook-framework/blocks/rk-icon.liquid +134 -0
  28. package/rook-framework/blocks/rk-image.liquid +198 -0
  29. package/rook-framework/blocks/rk-installments.liquid +99 -0
  30. package/rook-framework/blocks/rk-pix-discount.liquid +99 -0
  31. package/rook-framework/blocks/rk-price.liquid +128 -0
  32. package/rook-framework/blocks/rk-quantity.liquid +108 -0
  33. package/rook-framework/blocks/rk-quick-add.liquid +137 -0
  34. package/rook-framework/blocks/rk-skeleton.liquid +104 -0
  35. package/rook-framework/blocks/rk-typography.liquid +183 -0
  36. package/rook-framework/config/rk-settings_schema.json +259 -0
  37. package/rook-framework/snippets/rk-accordion.liquid +31 -0
  38. package/rook-framework/snippets/rk-alert-dialog.liquid +83 -0
  39. package/rook-framework/snippets/rk-aspect-ratio.liquid +23 -0
  40. package/rook-framework/snippets/rk-badge.liquid +17 -0
  41. package/rook-framework/snippets/rk-bottom-app-bar.liquid +51 -0
  42. package/rook-framework/snippets/rk-button.liquid +49 -0
  43. package/rook-framework/snippets/rk-card.liquid +64 -0
  44. package/rook-framework/snippets/rk-carousel.liquid +74 -0
  45. package/rook-framework/snippets/rk-checkbox.liquid +34 -0
  46. package/rook-framework/snippets/rk-collapsible.liquid +52 -0
  47. package/rook-framework/snippets/rk-dialog.liquid +85 -0
  48. package/rook-framework/snippets/rk-divider.liquid +25 -0
  49. package/rook-framework/snippets/rk-drawer.liquid +81 -0
  50. package/rook-framework/snippets/rk-external-assets copy.liquid +33 -0
  51. package/rook-framework/snippets/rk-external-assets.liquid +68 -0
  52. package/rook-framework/snippets/rk-form-field.liquid +83 -0
  53. package/rook-framework/snippets/rk-gap-style.liquid +32 -0
  54. package/rook-framework/snippets/rk-icon.liquid +28 -0
  55. package/rook-framework/snippets/rk-image.liquid +60 -0
  56. package/rook-framework/snippets/rk-input.liquid +35 -0
  57. package/rook-framework/snippets/rk-installments.liquid +54 -0
  58. package/rook-framework/snippets/rk-item.liquid +69 -0
  59. package/rook-framework/snippets/rk-layout-style.liquid +37 -0
  60. package/rook-framework/snippets/rk-modal.liquid +31 -0
  61. package/rook-framework/snippets/rk-pix-discount.liquid +34 -0
  62. package/rook-framework/snippets/rk-popover.liquid +77 -0
  63. package/rook-framework/snippets/rk-price.liquid +48 -0
  64. package/rook-framework/snippets/rk-progress.liquid +38 -0
  65. package/rook-framework/snippets/rk-quantity.liquid +56 -0
  66. package/rook-framework/snippets/rk-quick-add.liquid +67 -0
  67. package/rook-framework/snippets/rk-scripts.liquid +17 -0
  68. package/rook-framework/snippets/rk-scroll-area.liquid +60 -0
  69. package/rook-framework/snippets/rk-sheet.liquid +86 -0
  70. package/rook-framework/snippets/rk-size-style.liquid +48 -0
  71. package/rook-framework/snippets/rk-skeleton.liquid +25 -0
  72. package/rook-framework/snippets/rk-spacing-padding.liquid +18 -0
  73. package/rook-framework/snippets/rk-spacing-style.liquid +54 -0
  74. package/rook-framework/snippets/rk-spinner.liquid +43 -0
  75. package/rook-framework/snippets/rk-swatch.liquid +33 -0
  76. package/rook-framework/snippets/rk-table.liquid +44 -0
  77. package/rook-framework/snippets/rk-tabs.liquid +52 -0
  78. package/rook-framework/snippets/rk-textarea.liquid +42 -0
  79. package/rook-framework/snippets/rk-toggle-group.liquid +27 -0
  80. package/rook-framework/snippets/rk-toggle.liquid +58 -0
  81. package/rook-framework/snippets/rk-typography.liquid +27 -0
  82. package/rook-framework/snippets/rk-variables.liquid +74 -0
  83. package/src/app.js +24 -0
  84. package/src/commands/InstallCommand.js +133 -0
  85. package/src/mcp/server.js +111 -1
  86. package/src/services/FrameworkInstaller.js +379 -0
  87. package/src/templates/block.liquid.txt +0 -15
  88. package/src/ui/PromptUI.js +15 -1
  89. package/src/utils/logger.js +1 -1
@@ -0,0 +1,2554 @@
1
+ /* ==========================================================================
2
+ Rook UI Core Framework — Core Stylesheet
3
+ Estilização BEM para todos os Átomos e Moléculas.
4
+ ========================================================================== */
5
+
6
+ /* --------------------------------------------------------------------------
7
+ rk-block (Block Utility — Size + Spacing + Gap + Layout)
8
+ Consumes CSS variables generated by rk-size-style, rk-spacing-style,
9
+ rk-gap-style, and rk-layout-style snippets.
10
+ -------------------------------------------------------------------------- */
11
+ .rk-block {
12
+ display: block;
13
+ width: var(--rk-width, auto);
14
+ height: var(--rk-height, auto);
15
+ padding-block-start: var(--rk-pt, 0);
16
+ padding-block-end: var(--rk-pb, 0);
17
+ padding-inline-start: var(--rk-ps, 0);
18
+ padding-inline-end: var(--rk-pe, 0);
19
+ }
20
+
21
+ @media (max-width: 749px) {
22
+ .rk-block {
23
+ width: var(--rk-width-mobile, var(--rk-width, auto));
24
+ }
25
+ }
26
+
27
+ /* Size Style — width/height from rk-size-style snippet */
28
+ .rk-size-style {
29
+ width: var(--rk-width, auto);
30
+ min-width: 0;
31
+ height: var(--rk-height, auto);
32
+ }
33
+
34
+ @media (max-width: 749px) {
35
+ .rk-size-style {
36
+ width: var(--rk-width-mobile, var(--rk-width, auto));
37
+ min-width: var(--rk-width-mobile-min, 0);
38
+ }
39
+ }
40
+
41
+ /* Spacing Style — padding from rk-spacing-style / rk-spacing-padding snippets */
42
+ .rk-spacing-style {
43
+ padding-block-start: var(--rk-pt, 0);
44
+ padding-block-end: var(--rk-pb, 0);
45
+ padding-inline-start: var(--rk-ps, 0);
46
+ padding-inline-end: var(--rk-pe, 0);
47
+ }
48
+
49
+ /* Gap Style — gap from rk-gap-style snippet */
50
+ .rk-gap-style {
51
+ gap: var(--rk-gap, 0);
52
+ }
53
+
54
+ /* Layout Style — flex from rk-layout-style snippet */
55
+ .rk-layout-style {
56
+ display: flex;
57
+ flex-direction: var(--rk-flex-direction, column);
58
+ flex-wrap: var(--rk-flex-wrap, nowrap);
59
+ justify-content: var(--rk-h-align, flex-start);
60
+ align-items: var(--rk-v-align, stretch);
61
+ gap: var(--rk-gap, 0);
62
+ }
63
+
64
+ @media (max-width: 749px) {
65
+ .rk-layout-style {
66
+ flex-wrap: var(--rk-flex-wrap-mobile, wrap);
67
+ }
68
+ }
69
+
70
+ /* --------------------------------------------------------------------------
71
+ rk-btn (Button)
72
+ -------------------------------------------------------------------------- */
73
+ .rk-btn {
74
+ display: inline-flex;
75
+ align-items: center;
76
+ justify-content: center;
77
+ gap: var(--rk-space-xs);
78
+ padding: var(--rk-btn-padding-md);
79
+ font-size: var(--rk-btn-font-md);
80
+ font-weight: 600;
81
+ line-height: 1;
82
+ text-decoration: none;
83
+ border: 2px solid transparent;
84
+ border-radius: var(--rk-radius);
85
+ cursor: pointer;
86
+ transition: background-color var(--rk-transition),
87
+ color var(--rk-transition),
88
+ border-color var(--rk-transition),
89
+ opacity var(--rk-transition),
90
+ transform var(--rk-transition);
91
+ -webkit-appearance: none;
92
+ appearance: none;
93
+ position: relative;
94
+ overflow: hidden;
95
+ font-family: inherit;
96
+ }
97
+
98
+ .rk-btn:active {
99
+ transform: scale(0.97);
100
+ }
101
+
102
+ /* Sizes */
103
+ .rk-btn--sm {
104
+ padding: var(--rk-btn-padding-sm);
105
+ font-size: var(--rk-btn-font-sm);
106
+ }
107
+
108
+ .rk-btn--md {
109
+ padding: var(--rk-btn-padding-md);
110
+ font-size: var(--rk-btn-font-md);
111
+ }
112
+
113
+ .rk-btn--lg {
114
+ padding: var(--rk-btn-padding-lg);
115
+ font-size: var(--rk-btn-font-lg);
116
+ }
117
+
118
+ .rk-btn--full {
119
+ width: 100%;
120
+ }
121
+
122
+ /* Primary */
123
+ .rk-btn--primary {
124
+ background-color: var(--rk-color-primary);
125
+ color: var(--rk-color-secondary);
126
+ border-color: var(--rk-color-primary);
127
+ }
128
+
129
+ .rk-btn--primary:hover {
130
+ background-color: var(--rk-color-primary-hover);
131
+ border-color: var(--rk-color-primary-hover);
132
+ }
133
+
134
+ /* Secondary */
135
+ .rk-btn--secondary {
136
+ background-color: var(--rk-color-secondary);
137
+ color: var(--rk-color-primary);
138
+ border-color: var(--rk-color-border);
139
+ }
140
+
141
+ .rk-btn--secondary:hover {
142
+ background-color: var(--rk-color-secondary-hover);
143
+ }
144
+
145
+ /* Outline */
146
+ .rk-btn--outline {
147
+ background-color: transparent;
148
+ color: var(--rk-color-primary);
149
+ border-color: var(--rk-color-primary);
150
+ }
151
+
152
+ .rk-btn--outline:hover {
153
+ background-color: var(--rk-color-primary);
154
+ color: var(--rk-color-secondary);
155
+ }
156
+
157
+ /* Ghost */
158
+ .rk-btn--ghost {
159
+ background-color: transparent;
160
+ color: var(--rk-color-primary);
161
+ border-color: transparent;
162
+ }
163
+
164
+ .rk-btn--ghost:hover {
165
+ background-color: rgba(0, 0, 0, 0.05);
166
+ }
167
+
168
+ /* Link */
169
+ .rk-btn--link {
170
+ background: none;
171
+ color: var(--rk-color-primary);
172
+ border: none;
173
+ padding: 0;
174
+ text-decoration: underline;
175
+ text-underline-offset: 3px;
176
+ }
177
+
178
+ .rk-btn--link:hover {
179
+ color: var(--rk-color-primary-hover);
180
+ }
181
+
182
+ /* States */
183
+ .rk-btn[disabled],
184
+ .rk-btn--disabled {
185
+ opacity: 0.5;
186
+ cursor: not-allowed;
187
+ pointer-events: none;
188
+ }
189
+
190
+ .rk-btn--loading .rk-btn__text {
191
+ visibility: hidden;
192
+ }
193
+
194
+ .rk-btn--loading::after {
195
+ content: '';
196
+ position: absolute;
197
+ width: 1em;
198
+ height: 1em;
199
+ border: 2px solid currentColor;
200
+ border-right-color: transparent;
201
+ border-radius: 50%;
202
+ animation: rk-spin 0.6s linear infinite;
203
+ }
204
+
205
+ @keyframes rk-spin {
206
+ to {
207
+ transform: rotate(360deg);
208
+ }
209
+ }
210
+
211
+ /* --------------------------------------------------------------------------
212
+ rk-image (Image)
213
+ -------------------------------------------------------------------------- */
214
+ .rk-image {
215
+ display: block;
216
+ position: relative;
217
+ overflow: hidden;
218
+ }
219
+
220
+ .rk-image__img {
221
+ display: block;
222
+ width: 100%;
223
+ height: auto;
224
+ object-fit: cover;
225
+ }
226
+
227
+ .rk-image--rounded .rk-image__img {
228
+ border-radius: var(--rk-radius);
229
+ }
230
+
231
+ .rk-image--circle .rk-image__img {
232
+ border-radius: 50%;
233
+ }
234
+
235
+ .rk-image__placeholder {
236
+ display: flex;
237
+ align-items: center;
238
+ justify-content: center;
239
+ background-color: var(--rk-color-secondary-hover);
240
+ color: var(--rk-color-text-muted);
241
+ aspect-ratio: var(--rk-image-aspect, 1);
242
+ width: 100%;
243
+ }
244
+
245
+ /* --------------------------------------------------------------------------
246
+ rk-icon (Icon)
247
+ -------------------------------------------------------------------------- */
248
+ .rk-icon {
249
+ display: inline-flex;
250
+ align-items: center;
251
+ justify-content: center;
252
+ width: var(--rk-icon-size, 20px);
253
+ height: var(--rk-icon-size, 20px);
254
+ color: inherit;
255
+ }
256
+
257
+ .rk-icon svg {
258
+ width: 100%;
259
+ height: 100%;
260
+ fill: currentColor;
261
+ }
262
+
263
+ .rk-icon--sm {
264
+ --rk-icon-size: 16px;
265
+ }
266
+
267
+ .rk-icon--md {
268
+ --rk-icon-size: 20px;
269
+ }
270
+
271
+ .rk-icon--lg {
272
+ --rk-icon-size: 24px;
273
+ }
274
+
275
+ .rk-icon--xl {
276
+ --rk-icon-size: 32px;
277
+ }
278
+
279
+ /* --------------------------------------------------------------------------
280
+ rk-input (Input)
281
+ -------------------------------------------------------------------------- */
282
+ .rk-input {
283
+ display: block;
284
+ width: 100%;
285
+ padding: var(--rk-space-sm) var(--rk-space-md);
286
+ font-size: var(--rk-font-size-md);
287
+ font-family: inherit;
288
+ color: var(--rk-color-text);
289
+ background-color: transparent;
290
+ border: 1px solid var(--rk-color-border);
291
+ border-radius: var(--rk-radius);
292
+ transition: border-color var(--rk-transition), box-shadow var(--rk-transition);
293
+ outline: none;
294
+ }
295
+
296
+ .rk-input:focus {
297
+ border-color: var(--rk-color-primary);
298
+ box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.08);
299
+ }
300
+
301
+ .rk-input--error {
302
+ border-color: var(--rk-color-danger);
303
+ }
304
+
305
+ .rk-input--error:focus {
306
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.15);
307
+ }
308
+
309
+ .rk-input[disabled] {
310
+ opacity: 0.5;
311
+ cursor: not-allowed;
312
+ }
313
+
314
+ /* --------------------------------------------------------------------------
315
+ rk-textarea (Textarea Input Pattern)
316
+ -------------------------------------------------------------------------- */
317
+ .rk-textarea {
318
+ display: flex;
319
+ min-height: 80px;
320
+ /* equivalent roughly to 3 rows of default line-height */
321
+ width: 100%;
322
+ border-radius: var(--rk-radius);
323
+ border: 1px solid var(--rk-color-border);
324
+ background-color: transparent;
325
+ padding: var(--rk-space-sm) var(--rk-space-md);
326
+ font-size: var(--rk-font-size-sm);
327
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
328
+ /* shadow-sm */
329
+ transition: border-color var(--rk-transition), box-shadow var(--rk-transition);
330
+ outline: none;
331
+ font-family: inherit;
332
+ }
333
+
334
+ .rk-textarea::placeholder {
335
+ color: var(--rk-color-text-muted);
336
+ }
337
+
338
+ .rk-textarea:focus {
339
+ border-color: var(--rk-color-ring);
340
+ box-shadow: 0 0 0 3px rgba(15, 23, 42, 0.1);
341
+ /* focus ring */
342
+ }
343
+
344
+ /* Resize Modifiers */
345
+ .rk-textarea--resize-none {
346
+ resize: none;
347
+ }
348
+
349
+ .rk-textarea--resize-vertical {
350
+ resize: vertical;
351
+ }
352
+
353
+ .rk-textarea--resize-both {
354
+ resize: both;
355
+ }
356
+
357
+ .rk-textarea--error {
358
+ border-color: var(--rk-color-danger);
359
+ }
360
+
361
+ .rk-textarea--error:focus {
362
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.15);
363
+ }
364
+
365
+ .rk-textarea[disabled],
366
+ .rk-textarea:disabled {
367
+ opacity: 0.5;
368
+ cursor: not-allowed;
369
+ }
370
+
371
+ /* --------------------------------------------------------------------------
372
+ rk-checkbox (Checkbox)
373
+ -------------------------------------------------------------------------- */
374
+ .rk-checkbox {
375
+ display: inline-flex;
376
+ align-items: center;
377
+ gap: var(--rk-space-xs);
378
+ cursor: pointer;
379
+ }
380
+
381
+ .rk-checkbox__input {
382
+ width: 18px;
383
+ height: 18px;
384
+ border: 1px solid var(--rk-color-border);
385
+ border-radius: calc(var(--rk-radius) * 0.4);
386
+ cursor: pointer;
387
+ accent-color: var(--rk-color-primary);
388
+ }
389
+
390
+ .rk-checkbox__label {
391
+ font-size: var(--rk-font-size-sm);
392
+ color: var(--rk-color-text);
393
+ user-select: none;
394
+ }
395
+
396
+ /* --------------------------------------------------------------------------
397
+ rk-badge (Badge)
398
+ -------------------------------------------------------------------------- */
399
+ .rk-badge {
400
+ display: inline-flex;
401
+ align-items: center;
402
+ padding: var(--rk-space-2xs) var(--rk-space-xs);
403
+ font-size: var(--rk-font-size-xs);
404
+ font-weight: 600;
405
+ line-height: 1;
406
+ text-transform: uppercase;
407
+ letter-spacing: 0.05em;
408
+ border-radius: var(--rk-radius-pill);
409
+ white-space: nowrap;
410
+ }
411
+
412
+ .rk-badge--primary {
413
+ background-color: var(--rk-color-primary);
414
+ color: var(--rk-color-secondary);
415
+ }
416
+
417
+ .rk-badge--success {
418
+ background-color: var(--rk-color-success);
419
+ color: #fff;
420
+ }
421
+
422
+ .rk-badge--danger {
423
+ background-color: var(--rk-color-danger);
424
+ color: #fff;
425
+ }
426
+
427
+ .rk-badge--outline {
428
+ background-color: transparent;
429
+ border: 1px solid currentColor;
430
+ color: var(--rk-color-text);
431
+ }
432
+
433
+ /* --------------------------------------------------------------------------
434
+ rk-typography (Typography)
435
+ -------------------------------------------------------------------------- */
436
+ .rk-typography {
437
+ color: var(--rk-color-text);
438
+ line-height: 1.6;
439
+ }
440
+
441
+ .rk-typography--xs {
442
+ font-size: var(--rk-font-size-xs);
443
+ }
444
+
445
+ .rk-typography--sm {
446
+ font-size: var(--rk-font-size-sm);
447
+ }
448
+
449
+ .rk-typography--md {
450
+ font-size: var(--rk-font-size-md);
451
+ }
452
+
453
+ .rk-typography--lg {
454
+ font-size: var(--rk-font-size-lg);
455
+ }
456
+
457
+ .rk-typography--xl {
458
+ font-size: var(--rk-font-size-xl);
459
+ }
460
+
461
+ .rk-typography--2xl {
462
+ font-size: var(--rk-font-size-2xl);
463
+ }
464
+
465
+ .rk-typography--3xl {
466
+ font-size: var(--rk-font-size-3xl);
467
+ }
468
+
469
+ .rk-typography--4xl {
470
+ font-size: var(--rk-font-size-4xl);
471
+ }
472
+
473
+ .rk-typography--center {
474
+ text-align: center;
475
+ }
476
+
477
+ .rk-typography--right {
478
+ text-align: right;
479
+ }
480
+
481
+ .rk-typography--muted {
482
+ color: var(--rk-color-text-muted);
483
+ }
484
+
485
+ .rk-typography--bold {
486
+ font-weight: 700;
487
+ }
488
+
489
+ .rk-typography--uppercase {
490
+ text-transform: uppercase;
491
+ letter-spacing: 0.05em;
492
+ }
493
+
494
+ /* --------------------------------------------------------------------------
495
+ rk-divider (Divider)
496
+ -------------------------------------------------------------------------- */
497
+ .rk-divider {
498
+ display: flex;
499
+ align-items: center;
500
+ justify-content: var(--rk-divider-align, center);
501
+ width: 100%;
502
+ }
503
+
504
+ .rk-divider__line {
505
+ flex-basis: var(--rk-divider-width, 100%);
506
+ height: 0;
507
+ border: none;
508
+ border-top: var(--rk-divider-thickness, 1px) solid var(--rk-color-border);
509
+ }
510
+
511
+ /* --------------------------------------------------------------------------
512
+ rk-price (Price)
513
+ -------------------------------------------------------------------------- */
514
+ .rk-price {
515
+ display: flex;
516
+ flex-wrap: wrap;
517
+ align-items: baseline;
518
+ gap: var(--rk-space-xs);
519
+ }
520
+
521
+ .rk-price__current {
522
+ font-weight: 700;
523
+ color: var(--rk-color-text);
524
+ }
525
+
526
+ .rk-price__compare {
527
+ font-weight: 400;
528
+ color: var(--rk-color-text-muted);
529
+ text-decoration: line-through;
530
+ }
531
+
532
+ .rk-price__from {
533
+ font-size: var(--rk-font-size-sm);
534
+ color: var(--rk-color-text-muted);
535
+ font-weight: 400;
536
+ }
537
+
538
+ .rk-price--sale .rk-price__current {
539
+ color: var(--rk-color-danger);
540
+ }
541
+
542
+ /* --------------------------------------------------------------------------
543
+ rk-installments (Installments)
544
+ -------------------------------------------------------------------------- */
545
+ .rk-installments {
546
+ display: block;
547
+ font-size: var(--rk-font-size-sm);
548
+ color: var(--rk-color-text-muted);
549
+ }
550
+
551
+ .rk-installments__value {
552
+ font-weight: 600;
553
+ color: var(--rk-color-text);
554
+ }
555
+
556
+ .rk-installments__interest {
557
+ font-size: var(--rk-font-size-xs);
558
+ }
559
+
560
+ /* --------------------------------------------------------------------------
561
+ rk-pix (Pix Discount)
562
+ -------------------------------------------------------------------------- */
563
+ .rk-pix {
564
+ display: inline-flex;
565
+ align-items: center;
566
+ gap: var(--rk-space-xs);
567
+ font-size: var(--rk-font-size-sm);
568
+ color: var(--rk-color-success);
569
+ font-weight: 600;
570
+ }
571
+
572
+ .rk-pix__icon {
573
+ width: 16px;
574
+ height: 16px;
575
+ flex-shrink: 0;
576
+ }
577
+
578
+ .rk-pix__badge {
579
+ display: inline-block;
580
+ background-color: var(--rk-color-success);
581
+ color: #fff;
582
+ padding: 2px 6px;
583
+ border-radius: var(--rk-radius);
584
+ font-size: var(--rk-font-size-xs);
585
+ font-weight: 700;
586
+ margin-inline-start: var(--rk-space-2xs);
587
+ }
588
+
589
+ /* --------------------------------------------------------------------------
590
+ rk-quantity (Quantity Selector)
591
+ -------------------------------------------------------------------------- */
592
+ .rk-quantity {
593
+ display: inline-flex;
594
+ align-items: center;
595
+ border: 1px solid var(--rk-color-border);
596
+ border-radius: var(--rk-radius);
597
+ overflow: hidden;
598
+ }
599
+
600
+ .rk-quantity__btn {
601
+ display: flex;
602
+ align-items: center;
603
+ justify-content: center;
604
+ width: 40px;
605
+ height: 40px;
606
+ background: none;
607
+ border: none;
608
+ cursor: pointer;
609
+ color: var(--rk-color-text);
610
+ font-size: var(--rk-font-size-lg);
611
+ transition: background-color var(--rk-transition);
612
+ line-height: 1;
613
+ padding: 0;
614
+ font-family: inherit;
615
+ }
616
+
617
+ .rk-quantity__btn:hover {
618
+ background-color: var(--rk-color-secondary-hover);
619
+ }
620
+
621
+ .rk-quantity__btn[disabled] {
622
+ opacity: 0.3;
623
+ cursor: not-allowed;
624
+ }
625
+
626
+ .rk-quantity__input {
627
+ width: 48px;
628
+ height: 40px;
629
+ text-align: center;
630
+ border: none;
631
+ border-left: 1px solid var(--rk-color-border);
632
+ border-right: 1px solid var(--rk-color-border);
633
+ font-size: var(--rk-font-size-md);
634
+ font-family: inherit;
635
+ color: var(--rk-color-text);
636
+ background: transparent;
637
+ outline: none;
638
+ -webkit-appearance: textfield;
639
+ appearance: textfield;
640
+ }
641
+
642
+ .rk-quantity__input::-webkit-inner-spin-button,
643
+ .rk-quantity__input::-webkit-outer-spin-button {
644
+ -webkit-appearance: none;
645
+ margin: 0;
646
+ }
647
+
648
+ /* --------------------------------------------------------------------------
649
+ rk-accordion (Accordion)
650
+ -------------------------------------------------------------------------- */
651
+ .rk-accordion {
652
+ border-bottom: 1px solid var(--rk-color-border);
653
+ }
654
+
655
+ .rk-accordion__trigger {
656
+ display: flex;
657
+ align-items: center;
658
+ justify-content: space-between;
659
+ width: 100%;
660
+ padding: var(--rk-space-md) 0;
661
+ background: none;
662
+ border: none;
663
+ cursor: pointer;
664
+ font-size: var(--rk-font-size-md);
665
+ font-weight: 600;
666
+ color: var(--rk-color-text);
667
+ text-align: left;
668
+ font-family: inherit;
669
+ }
670
+
671
+ .rk-accordion__icon {
672
+ transition: transform var(--rk-transition);
673
+ flex-shrink: 0;
674
+ }
675
+
676
+ .rk-accordion[open] .rk-accordion__icon {
677
+ transform: rotate(180deg);
678
+ }
679
+
680
+ .rk-accordion__content {
681
+ padding-bottom: var(--rk-space-md);
682
+ font-size: var(--rk-font-size-sm);
683
+ color: var(--rk-color-text-muted);
684
+ line-height: 1.6;
685
+ }
686
+
687
+ /* --------------------------------------------------------------------------
688
+ rk-form-field (Form Field)
689
+ -------------------------------------------------------------------------- */
690
+ .rk-form-field {
691
+ display: flex;
692
+ flex-direction: column;
693
+ gap: var(--rk-space-2xs);
694
+ }
695
+
696
+ .rk-form-field__label {
697
+ font-size: var(--rk-font-size-sm);
698
+ font-weight: 600;
699
+ color: var(--rk-color-text);
700
+ }
701
+
702
+ .rk-form-field__error {
703
+ font-size: var(--rk-font-size-xs);
704
+ color: var(--rk-color-danger);
705
+ }
706
+
707
+ /* --------------------------------------------------------------------------
708
+ rk-modal (Modal)
709
+ -------------------------------------------------------------------------- */
710
+ .rk-modal {
711
+ position: fixed;
712
+ inset: 0;
713
+ z-index: var(--rk-layer-modal);
714
+ display: flex;
715
+ align-items: center;
716
+ justify-content: center;
717
+ pointer-events: none;
718
+ opacity: 0;
719
+ visibility: hidden;
720
+ transition: opacity var(--rk-transition), visibility var(--rk-transition);
721
+ }
722
+
723
+ .rk-modal--active {
724
+ pointer-events: all;
725
+ opacity: 1;
726
+ visibility: visible;
727
+ }
728
+
729
+ .rk-modal__overlay {
730
+ position: absolute;
731
+ inset: 0;
732
+ background: rgba(0, 0, 0, 0.5);
733
+ backdrop-filter: blur(4px);
734
+ }
735
+
736
+ .rk-modal__content {
737
+ position: relative;
738
+ z-index: 1;
739
+ background: #fff;
740
+ border-radius: var(--rk-radius);
741
+ max-width: 90vw;
742
+ max-height: 90vh;
743
+ overflow-y: auto;
744
+ padding: var(--rk-space-lg);
745
+ transform: translateY(16px);
746
+ transition: transform var(--rk-transition);
747
+ }
748
+
749
+ .rk-modal--active .rk-modal__content {
750
+ transform: translateY(0);
751
+ }
752
+
753
+ .rk-modal__close {
754
+ position: absolute;
755
+ top: var(--rk-space-sm);
756
+ right: var(--rk-space-sm);
757
+ background: none;
758
+ border: none;
759
+ cursor: pointer;
760
+ color: var(--rk-color-text-muted);
761
+ padding: var(--rk-space-2xs);
762
+ border-radius: 50%;
763
+ transition: background-color var(--rk-transition);
764
+ }
765
+
766
+ .rk-modal__close:hover {
767
+ background-color: var(--rk-color-secondary-hover);
768
+ }
769
+
770
+ /* --------------------------------------------------------------------------
771
+ rk-skeleton (Skeleton Loader)
772
+ -------------------------------------------------------------------------- */
773
+ .rk-skeleton {
774
+ display: block;
775
+ background: linear-gradient(90deg, var(--rk-color-secondary-hover) 25%, #e0e0e0 50%, var(--rk-color-secondary-hover) 75%);
776
+ background-size: 200% 100%;
777
+ animation: rk-shimmer 1.5s infinite ease-in-out;
778
+ border-radius: var(--rk-radius);
779
+ }
780
+
781
+ .rk-skeleton--text {
782
+ height: 1em;
783
+ margin-bottom: var(--rk-space-xs);
784
+ }
785
+
786
+ .rk-skeleton--circle {
787
+ border-radius: 50%;
788
+ }
789
+
790
+ @keyframes rk-shimmer {
791
+ 0% {
792
+ background-position: 200% 0;
793
+ }
794
+
795
+ 100% {
796
+ background-position: -200% 0;
797
+ }
798
+ }
799
+
800
+ /* --------------------------------------------------------------------------
801
+ rk-swatch (Variant Swatch)
802
+ -------------------------------------------------------------------------- */
803
+ .rk-swatch {
804
+ display: inline-block;
805
+ width: var(--rk-swatch-size, 32px);
806
+ height: var(--rk-swatch-size, 32px);
807
+ border-radius: 50%;
808
+ border: 2px solid var(--rk-color-border);
809
+ background: var(--rk-swatch-bg);
810
+ background-size: cover;
811
+ background-position: center;
812
+ cursor: pointer;
813
+ transition: border-color var(--rk-transition), transform var(--rk-transition);
814
+ }
815
+
816
+ .rk-swatch:hover {
817
+ transform: scale(1.1);
818
+ }
819
+
820
+ .rk-swatch--active {
821
+ border-color: var(--rk-color-primary);
822
+ box-shadow: 0 0 0 2px var(--rk-color-primary);
823
+ }
824
+
825
+ .rk-swatch--unavailable {
826
+ opacity: 0.3;
827
+ cursor: not-allowed;
828
+ pointer-events: none;
829
+ }
830
+
831
+ /* --------------------------------------------------------------------------
832
+ rk-pagination (Pagination)
833
+ -------------------------------------------------------------------------- */
834
+ .rk-pagination {
835
+ display: flex;
836
+ align-items: center;
837
+ justify-content: center;
838
+ gap: var(--rk-space-xs);
839
+ }
840
+
841
+ .rk-pagination__item {
842
+ display: flex;
843
+ align-items: center;
844
+ justify-content: center;
845
+ min-width: 36px;
846
+ height: 36px;
847
+ padding: 0 var(--rk-space-xs);
848
+ font-size: var(--rk-font-size-sm);
849
+ color: var(--rk-color-text);
850
+ text-decoration: none;
851
+ border-radius: var(--rk-radius);
852
+ border: 1px solid transparent;
853
+ transition: background-color var(--rk-transition), border-color var(--rk-transition);
854
+ }
855
+
856
+ .rk-pagination__item:hover {
857
+ background-color: var(--rk-color-secondary-hover);
858
+ border-color: var(--rk-color-border);
859
+ }
860
+
861
+ .rk-pagination__item--active {
862
+ background-color: var(--rk-color-primary);
863
+ color: var(--rk-color-secondary);
864
+ border-color: var(--rk-color-primary);
865
+ }
866
+
867
+ .rk-pagination__item[disabled] {
868
+ opacity: 0.3;
869
+ pointer-events: none;
870
+ }
871
+
872
+ /* --------------------------------------------------------------------------
873
+ rk-popover (Popover)
874
+ -------------------------------------------------------------------------- */
875
+ .rk-popover {
876
+ position: relative;
877
+ display: inline-flex;
878
+ }
879
+
880
+ .rk-popover__trigger {
881
+ display: inline-flex;
882
+ cursor: pointer;
883
+ }
884
+
885
+ .rk-popover__content {
886
+ position: absolute;
887
+ z-index: var(--rk-layer-popover);
888
+ width: var(--rk-popover-width, 320px);
889
+ max-width: calc(100vw - 16px);
890
+ max-height: 85vh;
891
+ overflow-y: auto;
892
+ background: #fff;
893
+ border: 1px solid var(--rk-color-border);
894
+ border-radius: var(--rk-radius);
895
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.06);
896
+ padding: var(--rk-space-md);
897
+ opacity: 0;
898
+ visibility: hidden;
899
+ pointer-events: none;
900
+ transition:
901
+ opacity var(--rk-transition),
902
+ visibility var(--rk-transition),
903
+ transform var(--rk-transition);
904
+ }
905
+
906
+ /* Side-based entry animations */
907
+ .rk-popover__content[data-side="bottom"] {
908
+ transform: translateY(-4px);
909
+ }
910
+
911
+ .rk-popover__content[data-side="top"] {
912
+ transform: translateY(4px);
913
+ }
914
+
915
+ .rk-popover__content[data-side="left"] {
916
+ transform: translateX(4px);
917
+ }
918
+
919
+ .rk-popover__content[data-side="right"] {
920
+ transform: translateX(-4px);
921
+ }
922
+
923
+ .rk-popover__content--active {
924
+ opacity: 1;
925
+ visibility: visible;
926
+ pointer-events: all;
927
+ transform: translate(0, 0);
928
+ }
929
+
930
+ /* Arrow */
931
+ .rk-popover__arrow {
932
+ position: absolute;
933
+ width: 10px;
934
+ height: 10px;
935
+ background: #fff;
936
+ border: 1px solid var(--rk-color-border);
937
+ border-right: none;
938
+ border-bottom: none;
939
+ pointer-events: none;
940
+ }
941
+
942
+ .rk-popover__content[data-side="bottom"] .rk-popover__arrow {
943
+ top: -6px;
944
+ left: 50%;
945
+ margin-left: -5px;
946
+ transform: rotate(45deg);
947
+ }
948
+
949
+ .rk-popover__content[data-side="top"] .rk-popover__arrow {
950
+ bottom: -6px;
951
+ left: 50%;
952
+ margin-left: -5px;
953
+ transform: rotate(225deg);
954
+ }
955
+
956
+ .rk-popover__content[data-side="left"] .rk-popover__arrow {
957
+ right: -6px;
958
+ top: 50%;
959
+ margin-top: -5px;
960
+ transform: rotate(135deg);
961
+ }
962
+
963
+ .rk-popover__content[data-side="right"] .rk-popover__arrow {
964
+ left: -6px;
965
+ top: 50%;
966
+ margin-top: -5px;
967
+ transform: rotate(-45deg);
968
+ }
969
+
970
+ /* Header */
971
+ .rk-popover__header {
972
+ margin-bottom: var(--rk-space-sm);
973
+ padding-bottom: var(--rk-space-sm);
974
+ border-bottom: 1px solid var(--rk-color-border);
975
+ }
976
+
977
+ .rk-popover__title {
978
+ font-size: var(--rk-font-size-md);
979
+ font-weight: 600;
980
+ color: var(--rk-color-text);
981
+ margin: 0;
982
+ line-height: 1.4;
983
+ }
984
+
985
+ .rk-popover__description {
986
+ font-size: var(--rk-font-size-sm);
987
+ color: var(--rk-color-text-muted);
988
+ margin: var(--rk-space-2xs) 0 0;
989
+ line-height: 1.5;
990
+ }
991
+
992
+ /* Body */
993
+ .rk-popover__body {
994
+ font-size: var(--rk-font-size-sm);
995
+ color: var(--rk-color-text);
996
+ line-height: 1.5;
997
+ }
998
+
999
+ /* --------------------------------------------------------------------------
1000
+ rk-scroll-area (Scroll Area)
1001
+ -------------------------------------------------------------------------- */
1002
+ .rk-scroll-area {
1003
+ position: relative;
1004
+ width: var(--rk-scroll-area-width, 100%);
1005
+ height: var(--rk-scroll-area-height, 100%);
1006
+ overflow: hidden;
1007
+ }
1008
+
1009
+ /* Viewport — hides native scrollbars */
1010
+ .rk-scroll-area__viewport {
1011
+ width: 100%;
1012
+ height: 100%;
1013
+ overflow: scroll;
1014
+ outline: none;
1015
+
1016
+ /* Hide native scrollbars — WebKit/Blink */
1017
+ scrollbar-width: none;
1018
+ /* Firefox */
1019
+ }
1020
+
1021
+ .rk-scroll-area__viewport::-webkit-scrollbar {
1022
+ display: none;
1023
+ /* Chrome, Safari, Edge */
1024
+ }
1025
+
1026
+ /* Scrollbar Track (shared) */
1027
+ .rk-scroll-area__scrollbar {
1028
+ position: absolute;
1029
+ z-index: var(--rk-layer-raised);
1030
+ user-select: none;
1031
+ touch-action: none;
1032
+ transition: opacity var(--rk-transition), background-color var(--rk-transition);
1033
+ }
1034
+
1035
+ .rk-scroll-area__scrollbar--hidden {
1036
+ display: none;
1037
+ }
1038
+
1039
+ /* Vertical track */
1040
+ .rk-scroll-area__scrollbar--vertical {
1041
+ top: 0;
1042
+ right: 0;
1043
+ bottom: 0;
1044
+ width: var(--rk-scrollbar-size, 8px);
1045
+ padding: 2px;
1046
+ }
1047
+
1048
+ /* Horizontal track */
1049
+ .rk-scroll-area__scrollbar--horizontal {
1050
+ left: 0;
1051
+ right: 0;
1052
+ bottom: 0;
1053
+ height: var(--rk-scrollbar-size, 8px);
1054
+ padding: 2px;
1055
+ }
1056
+
1057
+ /* Thumb */
1058
+ .rk-scroll-area__thumb {
1059
+ border-radius: var(--rk-radius-pill);
1060
+ background-color: rgba(0, 0, 0, 0.2);
1061
+ transition: background-color var(--rk-transition);
1062
+ cursor: pointer;
1063
+ will-change: transform;
1064
+ }
1065
+
1066
+ /* Vertical thumb defaults */
1067
+ .rk-scroll-area__scrollbar--vertical .rk-scroll-area__thumb {
1068
+ width: 100%;
1069
+ min-height: 24px;
1070
+ }
1071
+
1072
+ /* Horizontal thumb defaults */
1073
+ .rk-scroll-area__scrollbar--horizontal .rk-scroll-area__thumb {
1074
+ height: 100%;
1075
+ min-width: 24px;
1076
+ }
1077
+
1078
+ /* Hover state */
1079
+ .rk-scroll-area__thumb:hover {
1080
+ background-color: rgba(0, 0, 0, 0.35);
1081
+ }
1082
+
1083
+ /* Active/Dragging state */
1084
+ .rk-scroll-area__thumb--active,
1085
+ .rk-scroll-area__thumb:active {
1086
+ background-color: rgba(0, 0, 0, 0.5);
1087
+ }
1088
+
1089
+ /* Corner (both-axis mode) */
1090
+ .rk-scroll-area__corner {
1091
+ position: absolute;
1092
+ right: 0;
1093
+ bottom: 0;
1094
+ width: var(--rk-scrollbar-size, 8px);
1095
+ height: var(--rk-scrollbar-size, 8px);
1096
+ background: transparent;
1097
+ }
1098
+
1099
+ .rk-scroll-area__corner--hidden {
1100
+ display: none;
1101
+ }
1102
+
1103
+ /* -------------------------------------------------------------------
1104
+ Visibility Modes
1105
+ ------------------------------------------------------------------- */
1106
+
1107
+ /* Auto: scrollbars hidden by default, shown on scroll */
1108
+ .rk-scroll-area .rk-scroll-area__scrollbar {
1109
+ opacity: 0;
1110
+ }
1111
+
1112
+ .rk-scroll-area--scrolling .rk-scroll-area__scrollbar {
1113
+ opacity: 1;
1114
+ }
1115
+
1116
+ /* Always: scrollbars always visible */
1117
+ .rk-scroll-area--always .rk-scroll-area__scrollbar {
1118
+ opacity: 1;
1119
+ }
1120
+
1121
+ /* Hover: handled by CSS + JS (class toggle), same as auto visually */
1122
+
1123
+ /* --------------------------------------------------------------------------
1124
+ rk-drawer (Drawer / Sliding Panel)
1125
+ -------------------------------------------------------------------------- */
1126
+ .rk-drawer {
1127
+ position: fixed;
1128
+ inset: 0;
1129
+ z-index: var(--rk-layer-drawer);
1130
+ pointer-events: none;
1131
+ visibility: hidden;
1132
+ }
1133
+
1134
+ .rk-drawer--active {
1135
+ pointer-events: all;
1136
+ visibility: visible;
1137
+ }
1138
+
1139
+ /* Overlay */
1140
+ .rk-drawer__overlay {
1141
+ position: absolute;
1142
+ inset: 0;
1143
+ background: rgba(0, 0, 0, 0.5);
1144
+ backdrop-filter: blur(4px);
1145
+ opacity: 0;
1146
+ transition: opacity var(--rk-transition);
1147
+ }
1148
+
1149
+ .rk-drawer--active .rk-drawer__overlay {
1150
+ opacity: 1;
1151
+ }
1152
+
1153
+ /* Panel (shared) */
1154
+ .rk-drawer__panel {
1155
+ position: absolute;
1156
+ z-index: 1;
1157
+ background: #fff;
1158
+ display: flex;
1159
+ flex-direction: column;
1160
+ overflow: hidden;
1161
+ transition: transform var(--rk-transition);
1162
+ will-change: transform;
1163
+ }
1164
+
1165
+ /* Panel — Bottom */
1166
+ .rk-drawer__panel--bottom {
1167
+ bottom: 0;
1168
+ left: 0;
1169
+ right: 0;
1170
+ max-height: var(--rk-drawer-height, 85vh);
1171
+ border-radius: var(--rk-radius) var(--rk-radius) 0 0;
1172
+ transform: translateY(100%);
1173
+ }
1174
+
1175
+ .rk-drawer--active .rk-drawer__panel--bottom {
1176
+ transform: translateY(0);
1177
+ }
1178
+
1179
+ /* Panel — Top */
1180
+ .rk-drawer__panel--top {
1181
+ top: 0;
1182
+ left: 0;
1183
+ right: 0;
1184
+ max-height: var(--rk-drawer-height, 85vh);
1185
+ border-radius: 0 0 var(--rk-radius) var(--rk-radius);
1186
+ transform: translateY(-100%);
1187
+ }
1188
+
1189
+ .rk-drawer--active .rk-drawer__panel--top {
1190
+ transform: translateY(0);
1191
+ }
1192
+
1193
+ /* Panel — Right */
1194
+ .rk-drawer__panel--right {
1195
+ top: 0;
1196
+ right: 0;
1197
+ bottom: 0;
1198
+ width: var(--rk-drawer-width, 380px);
1199
+ max-width: 90vw;
1200
+ border-radius: var(--rk-radius) 0 0 var(--rk-radius);
1201
+ transform: translateX(100%);
1202
+ }
1203
+
1204
+ .rk-drawer--active .rk-drawer__panel--right {
1205
+ transform: translateX(0);
1206
+ }
1207
+
1208
+ /* Panel — Left */
1209
+ .rk-drawer__panel--left {
1210
+ top: 0;
1211
+ left: 0;
1212
+ bottom: 0;
1213
+ width: var(--rk-drawer-width, 380px);
1214
+ max-width: 90vw;
1215
+ border-radius: 0 var(--rk-radius) var(--rk-radius) 0;
1216
+ transform: translateX(-100%);
1217
+ }
1218
+
1219
+ .rk-drawer--active .rk-drawer__panel--left {
1220
+ transform: translateX(0);
1221
+ }
1222
+
1223
+ /* Handle (drag indicator) */
1224
+ .rk-drawer__handle {
1225
+ display: flex;
1226
+ justify-content: center;
1227
+ padding: var(--rk-space-sm) 0 var(--rk-space-2xs);
1228
+ cursor: grab;
1229
+ touch-action: none;
1230
+ }
1231
+
1232
+ .rk-drawer__handle:active {
1233
+ cursor: grabbing;
1234
+ }
1235
+
1236
+ .rk-drawer__handle-bar {
1237
+ width: 40px;
1238
+ height: 4px;
1239
+ border-radius: var(--rk-radius-pill);
1240
+ background-color: var(--rk-color-border);
1241
+ }
1242
+
1243
+ /* Close button */
1244
+ .rk-drawer__close {
1245
+ position: absolute;
1246
+ top: var(--rk-space-sm);
1247
+ right: var(--rk-space-sm);
1248
+ background: none;
1249
+ border: none;
1250
+ cursor: pointer;
1251
+ color: var(--rk-color-text-muted);
1252
+ padding: var(--rk-space-2xs);
1253
+ border-radius: 50%;
1254
+ transition: background-color var(--rk-transition);
1255
+ z-index: 2;
1256
+ }
1257
+
1258
+ .rk-drawer__close:hover {
1259
+ background-color: var(--rk-color-secondary-hover);
1260
+ }
1261
+
1262
+ /* Header */
1263
+ .rk-drawer__header {
1264
+ padding: var(--rk-space-md) var(--rk-space-lg);
1265
+ padding-right: var(--rk-space-2xl);
1266
+ border-bottom: 1px solid var(--rk-color-border);
1267
+ flex-shrink: 0;
1268
+ }
1269
+
1270
+ .rk-drawer__title {
1271
+ font-size: var(--rk-font-size-lg);
1272
+ font-weight: 600;
1273
+ color: var(--rk-color-text);
1274
+ margin: 0;
1275
+ line-height: 1.4;
1276
+ }
1277
+
1278
+ .rk-drawer__description {
1279
+ font-size: var(--rk-font-size-sm);
1280
+ color: var(--rk-color-text-muted);
1281
+ margin: var(--rk-space-2xs) 0 0;
1282
+ line-height: 1.5;
1283
+ }
1284
+
1285
+ /* Body */
1286
+ .rk-drawer__body {
1287
+ flex: 1;
1288
+ overflow-y: auto;
1289
+ padding: var(--rk-space-lg);
1290
+ }
1291
+
1292
+ /* Footer */
1293
+ .rk-drawer__footer {
1294
+ padding: var(--rk-space-md) var(--rk-space-lg);
1295
+ border-top: 1px solid var(--rk-color-border);
1296
+ flex-shrink: 0;
1297
+ }
1298
+
1299
+ /* --------------------------------------------------------------------------
1300
+ rk-alert-dialog (Alert Dialog)
1301
+ -------------------------------------------------------------------------- */
1302
+ .rk-alert-dialog {
1303
+ position: fixed;
1304
+ inset: 0;
1305
+ z-index: var(--rk-layer-alert);
1306
+ display: flex;
1307
+ align-items: center;
1308
+ justify-content: center;
1309
+ pointer-events: none;
1310
+ opacity: 0;
1311
+ visibility: hidden;
1312
+ transition: opacity var(--rk-transition), visibility var(--rk-transition);
1313
+ }
1314
+
1315
+ .rk-alert-dialog--active {
1316
+ pointer-events: all;
1317
+ opacity: 1;
1318
+ visibility: visible;
1319
+ }
1320
+
1321
+ /* Overlay — stronger than modal, non-dismissable */
1322
+ .rk-alert-dialog__overlay {
1323
+ position: absolute;
1324
+ inset: 0;
1325
+ background: rgba(0, 0, 0, 0.6);
1326
+ backdrop-filter: blur(6px);
1327
+ }
1328
+
1329
+ /* Content */
1330
+ .rk-alert-dialog__content {
1331
+ position: relative;
1332
+ z-index: 1;
1333
+ background: #fff;
1334
+ border-radius: var(--rk-radius);
1335
+ width: min(440px, 90vw);
1336
+ padding: var(--rk-space-lg);
1337
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18), 0 2px 8px rgba(0, 0, 0, 0.08);
1338
+ transform: scale(0.95);
1339
+ transition: transform var(--rk-transition);
1340
+ }
1341
+
1342
+ .rk-alert-dialog--active .rk-alert-dialog__content {
1343
+ transform: scale(1);
1344
+ }
1345
+
1346
+ /* Header */
1347
+ .rk-alert-dialog__header {
1348
+ margin-bottom: var(--rk-space-lg);
1349
+ }
1350
+
1351
+ .rk-alert-dialog__title {
1352
+ font-size: var(--rk-font-size-lg);
1353
+ font-weight: 600;
1354
+ color: var(--rk-color-text);
1355
+ margin: 0;
1356
+ line-height: 1.4;
1357
+ }
1358
+
1359
+ .rk-alert-dialog__description {
1360
+ font-size: var(--rk-font-size-sm);
1361
+ color: var(--rk-color-text-muted);
1362
+ margin: var(--rk-space-xs) 0 0;
1363
+ line-height: 1.6;
1364
+ }
1365
+
1366
+ /* Footer (actions) */
1367
+ .rk-alert-dialog__footer {
1368
+ display: flex;
1369
+ justify-content: flex-end;
1370
+ gap: var(--rk-space-sm);
1371
+ }
1372
+
1373
+ /* Danger button variant (for destructive actions) */
1374
+ .rk-btn--danger {
1375
+ background-color: var(--rk-color-danger);
1376
+ color: #fff;
1377
+ border-color: var(--rk-color-danger);
1378
+ }
1379
+
1380
+ .rk-btn--danger:hover {
1381
+ background-color: #dc2626;
1382
+ border-color: #dc2626;
1383
+ }
1384
+
1385
+ /* --------------------------------------------------------------------------
1386
+ rk-dialog (Dialog / Modal — Shadcn/UI pattern)
1387
+ -------------------------------------------------------------------------- */
1388
+ .rk-dialog {
1389
+ position: fixed;
1390
+ inset: 0;
1391
+ z-index: var(--rk-layer-modal);
1392
+ display: flex;
1393
+ align-items: center;
1394
+ justify-content: center;
1395
+ pointer-events: none;
1396
+ opacity: 0;
1397
+ visibility: hidden;
1398
+ transition: opacity var(--rk-transition), visibility var(--rk-transition);
1399
+ }
1400
+
1401
+ .rk-dialog--active {
1402
+ pointer-events: all;
1403
+ opacity: 1;
1404
+ visibility: visible;
1405
+ }
1406
+
1407
+ /* Overlay */
1408
+ .rk-dialog__overlay {
1409
+ position: absolute;
1410
+ inset: 0;
1411
+ background: rgba(0, 0, 0, 0.5);
1412
+ backdrop-filter: blur(4px);
1413
+ }
1414
+
1415
+ /* Content */
1416
+ .rk-dialog__content {
1417
+ position: relative;
1418
+ z-index: 1;
1419
+ background: #fff;
1420
+ border-radius: var(--rk-radius);
1421
+ width: var(--rk-dialog-width, 540px);
1422
+ max-width: 90vw;
1423
+ max-height: 85vh;
1424
+ display: flex;
1425
+ flex-direction: column;
1426
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.16), 0 2px 8px rgba(0, 0, 0, 0.08);
1427
+ transform: translateY(16px) scale(0.97);
1428
+ transition: transform var(--rk-transition);
1429
+ }
1430
+
1431
+ .rk-dialog--active .rk-dialog__content {
1432
+ transform: translateY(0) scale(1);
1433
+ }
1434
+
1435
+ /* Close button */
1436
+ .rk-dialog__close {
1437
+ position: absolute;
1438
+ top: var(--rk-space-sm);
1439
+ right: var(--rk-space-sm);
1440
+ background: none;
1441
+ border: none;
1442
+ cursor: pointer;
1443
+ color: var(--rk-color-text-muted);
1444
+ padding: var(--rk-space-2xs);
1445
+ border-radius: 50%;
1446
+ transition: background-color var(--rk-transition), color var(--rk-transition);
1447
+ z-index: 2;
1448
+ }
1449
+
1450
+ .rk-dialog__close:hover {
1451
+ background-color: var(--rk-color-secondary-hover);
1452
+ color: var(--rk-color-text);
1453
+ }
1454
+
1455
+ /* Header */
1456
+ .rk-dialog__header {
1457
+ padding: var(--rk-space-lg) var(--rk-space-lg) var(--rk-space-sm);
1458
+ padding-right: var(--rk-space-2xl);
1459
+ flex-shrink: 0;
1460
+ }
1461
+
1462
+ .rk-dialog__title {
1463
+ font-size: var(--rk-font-size-lg);
1464
+ font-weight: 600;
1465
+ color: var(--rk-color-text);
1466
+ margin: 0;
1467
+ line-height: 1.4;
1468
+ }
1469
+
1470
+ .rk-dialog__description {
1471
+ font-size: var(--rk-font-size-sm);
1472
+ color: var(--rk-color-text-muted);
1473
+ margin: var(--rk-space-2xs) 0 0;
1474
+ line-height: 1.5;
1475
+ }
1476
+
1477
+ /* Body */
1478
+ .rk-dialog__body {
1479
+ flex: 1;
1480
+ overflow-y: auto;
1481
+ padding: var(--rk-space-sm) var(--rk-space-lg);
1482
+ font-size: var(--rk-font-size-sm);
1483
+ color: var(--rk-color-text);
1484
+ line-height: 1.6;
1485
+ }
1486
+
1487
+ /* Footer */
1488
+ .rk-dialog__footer {
1489
+ display: flex;
1490
+ justify-content: flex-end;
1491
+ gap: var(--rk-space-sm);
1492
+ padding: var(--rk-space-sm) var(--rk-space-lg) var(--rk-space-lg);
1493
+ flex-shrink: 0;
1494
+ }
1495
+
1496
+ /* Responsive — mobile fullscreen-ish */
1497
+ @media (max-width: 749px) {
1498
+ .rk-dialog__content {
1499
+ width: 100vw;
1500
+ max-width: 100vw;
1501
+ max-height: 90vh;
1502
+ border-radius: var(--rk-radius) var(--rk-radius) 0 0;
1503
+ margin-top: auto;
1504
+ }
1505
+
1506
+ .rk-dialog {
1507
+ align-items: flex-end;
1508
+ }
1509
+
1510
+ .rk-dialog--active .rk-dialog__content {
1511
+ transform: translateY(0) scale(1);
1512
+ }
1513
+
1514
+ .rk-dialog__content {
1515
+ transform: translateY(100%);
1516
+ }
1517
+ }
1518
+
1519
+ /* --------------------------------------------------------------------------
1520
+ rk-sheet (Sheet / Side Panel)
1521
+ -------------------------------------------------------------------------- */
1522
+ .rk-sheet {
1523
+ position: fixed;
1524
+ inset: 0;
1525
+ z-index: var(--rk-layer-modal);
1526
+ pointer-events: none;
1527
+ visibility: hidden;
1528
+ }
1529
+
1530
+ .rk-sheet--active {
1531
+ pointer-events: all;
1532
+ visibility: visible;
1533
+ }
1534
+
1535
+ /* Overlay */
1536
+ .rk-sheet__overlay {
1537
+ position: absolute;
1538
+ inset: 0;
1539
+ background: rgba(0, 0, 0, 0.5);
1540
+ backdrop-filter: blur(4px);
1541
+ opacity: 0;
1542
+ transition: opacity var(--rk-transition);
1543
+ }
1544
+
1545
+ .rk-sheet--active .rk-sheet__overlay {
1546
+ opacity: 1;
1547
+ }
1548
+
1549
+ /* Panel (shared) */
1550
+ .rk-sheet__panel {
1551
+ position: absolute;
1552
+ z-index: 1;
1553
+ background: #fff;
1554
+ display: flex;
1555
+ flex-direction: column;
1556
+ overflow: hidden;
1557
+ box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12), -1px 0 4px rgba(0, 0, 0, 0.06);
1558
+ transition: transform var(--rk-transition);
1559
+ will-change: transform;
1560
+ }
1561
+
1562
+ /* Panel — Right (default) */
1563
+ .rk-sheet__panel--right {
1564
+ top: 0;
1565
+ right: 0;
1566
+ bottom: 0;
1567
+ width: var(--rk-sheet-size, 400px);
1568
+ max-width: 100vw;
1569
+ transform: translateX(100%);
1570
+ }
1571
+
1572
+ .rk-sheet--active .rk-sheet__panel--right {
1573
+ transform: translateX(0);
1574
+ }
1575
+
1576
+ /* Panel — Left */
1577
+ .rk-sheet__panel--left {
1578
+ top: 0;
1579
+ left: 0;
1580
+ bottom: 0;
1581
+ width: var(--rk-sheet-size, 400px);
1582
+ max-width: 100vw;
1583
+ box-shadow: 4px 0 24px rgba(0, 0, 0, 0.12), 1px 0 4px rgba(0, 0, 0, 0.06);
1584
+ transform: translateX(-100%);
1585
+ }
1586
+
1587
+ .rk-sheet--active .rk-sheet__panel--left {
1588
+ transform: translateX(0);
1589
+ }
1590
+
1591
+ /* Panel — Top */
1592
+ .rk-sheet__panel--top {
1593
+ top: 0;
1594
+ left: 0;
1595
+ right: 0;
1596
+ height: var(--rk-sheet-size, 400px);
1597
+ max-height: 100vh;
1598
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.06);
1599
+ transform: translateY(-100%);
1600
+ }
1601
+
1602
+ .rk-sheet--active .rk-sheet__panel--top {
1603
+ transform: translateY(0);
1604
+ }
1605
+
1606
+ /* Panel — Bottom */
1607
+ .rk-sheet__panel--bottom {
1608
+ bottom: 0;
1609
+ left: 0;
1610
+ right: 0;
1611
+ height: var(--rk-sheet-size, 400px);
1612
+ max-height: 100vh;
1613
+ box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.12), 0 -1px 4px rgba(0, 0, 0, 0.06);
1614
+ transform: translateY(100%);
1615
+ }
1616
+
1617
+ .rk-sheet--active .rk-sheet__panel--bottom {
1618
+ transform: translateY(0);
1619
+ }
1620
+
1621
+ /* Close button */
1622
+ .rk-sheet__close {
1623
+ position: absolute;
1624
+ top: var(--rk-space-sm);
1625
+ right: var(--rk-space-sm);
1626
+ background: none;
1627
+ border: none;
1628
+ cursor: pointer;
1629
+ color: var(--rk-color-text-muted);
1630
+ padding: var(--rk-space-2xs);
1631
+ border-radius: 50%;
1632
+ transition: background-color var(--rk-transition), color var(--rk-transition);
1633
+ z-index: 2;
1634
+ }
1635
+
1636
+ .rk-sheet__close:hover {
1637
+ background-color: var(--rk-color-secondary-hover);
1638
+ color: var(--rk-color-text);
1639
+ }
1640
+
1641
+ /* Header */
1642
+ .rk-sheet__header {
1643
+ padding: var(--rk-space-lg) var(--rk-space-lg) var(--rk-space-sm);
1644
+ padding-right: var(--rk-space-2xl);
1645
+ border-bottom: 1px solid var(--rk-color-border);
1646
+ flex-shrink: 0;
1647
+ }
1648
+
1649
+ .rk-sheet__title {
1650
+ font-size: var(--rk-font-size-lg);
1651
+ font-weight: 600;
1652
+ color: var(--rk-color-text);
1653
+ margin: 0;
1654
+ line-height: 1.4;
1655
+ }
1656
+
1657
+ .rk-sheet__description {
1658
+ font-size: var(--rk-font-size-sm);
1659
+ color: var(--rk-color-text-muted);
1660
+ margin: var(--rk-space-2xs) 0 0;
1661
+ line-height: 1.5;
1662
+ }
1663
+
1664
+ /* Body */
1665
+ .rk-sheet__body {
1666
+ flex: 1;
1667
+ overflow-y: auto;
1668
+ padding: var(--rk-space-lg);
1669
+ }
1670
+
1671
+ /* Footer */
1672
+ .rk-sheet__footer {
1673
+ padding: var(--rk-space-md) var(--rk-space-lg);
1674
+ border-top: 1px solid var(--rk-color-border);
1675
+ flex-shrink: 0;
1676
+ }
1677
+
1678
+ /* Responsive — mobile full-width for left/right sheets */
1679
+ @media (max-width: 749px) {
1680
+
1681
+ .rk-sheet__panel--right,
1682
+ .rk-sheet__panel--left {
1683
+ width: 100vw;
1684
+ }
1685
+ }
1686
+
1687
+ /* --------------------------------------------------------------------------
1688
+ rk-table (Table)
1689
+ -------------------------------------------------------------------------- */
1690
+ .rk-table-wrapper {
1691
+ position: relative;
1692
+ width: 100%;
1693
+ overflow-x: auto;
1694
+ }
1695
+
1696
+ .rk-table {
1697
+ width: 100%;
1698
+ caption-side: bottom;
1699
+ text-indent: 0;
1700
+ border-collapse: collapse;
1701
+ font-size: var(--rk-font-size-sm);
1702
+ }
1703
+
1704
+ .rk-table th,
1705
+ .rk-table td {
1706
+ padding: var(--rk-space-md);
1707
+ text-align: left;
1708
+ vertical-align: middle;
1709
+ }
1710
+
1711
+ .rk-table th {
1712
+ height: 48px;
1713
+ font-weight: 500;
1714
+ color: var(--rk-color-text-muted);
1715
+ border-bottom: 1px solid var(--rk-color-border);
1716
+ }
1717
+
1718
+ .rk-table td {
1719
+ color: var(--rk-color-text);
1720
+ }
1721
+
1722
+ .rk-table tbody tr {
1723
+ border-bottom: 1px solid var(--rk-color-border);
1724
+ transition: background-color var(--rk-transition);
1725
+ }
1726
+
1727
+ .rk-table tbody tr:last-child {
1728
+ border-bottom: 0;
1729
+ }
1730
+
1731
+ .rk-table tbody tr:hover {
1732
+ background-color: var(--rk-color-secondary-hover);
1733
+ }
1734
+
1735
+ /* Selected State */
1736
+ .rk-table tbody tr.rk-table__row--selected,
1737
+ .rk-table tbody tr[data-state="selected"] {
1738
+ background-color: var(--rk-color-secondary-hover);
1739
+ }
1740
+
1741
+ /* Striped variation */
1742
+ .rk-table--striped tbody tr:nth-child(even) {
1743
+ background-color: var(--rk-color-bg-secondary);
1744
+ }
1745
+
1746
+ .rk-table caption {
1747
+ margin-top: var(--rk-space-md);
1748
+ color: var(--rk-color-text-muted);
1749
+ font-size: var(--rk-font-size-sm);
1750
+ text-align: center;
1751
+ }
1752
+
1753
+ /* Alignment utilities for table */
1754
+ .rk-table .rk-text-right {
1755
+ text-align: right;
1756
+ }
1757
+
1758
+ .rk-table .rk-text-center {
1759
+ text-align: center;
1760
+ }
1761
+
1762
+ /* --------------------------------------------------------------------------
1763
+ rk-tabs (Tabs — Shadcn/UI pattern)
1764
+ -------------------------------------------------------------------------- */
1765
+ .rk-tabs {
1766
+ display: flex;
1767
+ flex-direction: column;
1768
+ gap: var(--rk-space-md);
1769
+ }
1770
+
1771
+ .rk-tabs--vertical {
1772
+ flex-direction: row;
1773
+ align-items: flex-start;
1774
+ }
1775
+
1776
+ /* Tab List */
1777
+ .rk-tabs__list {
1778
+ display: inline-flex;
1779
+ align-items: center;
1780
+ justify-content: center;
1781
+ background-color: var(--rk-color-bg-secondary);
1782
+ border-radius: var(--rk-radius);
1783
+ padding: var(--rk-space-2xs);
1784
+ gap: var(--rk-space-2xs);
1785
+ }
1786
+
1787
+ .rk-tabs--vertical .rk-tabs__list {
1788
+ flex-direction: column;
1789
+ justify-content: flex-start;
1790
+ align-items: stretch;
1791
+ }
1792
+
1793
+ /* Tab Trigger */
1794
+ .rk-tabs__trigger {
1795
+ display: inline-flex;
1796
+ align-items: center;
1797
+ justify-content: center;
1798
+ white-space: nowrap;
1799
+ border-radius: calc(var(--rk-radius) - 2px);
1800
+ padding: var(--rk-space-sm) var(--rk-space-xl);
1801
+ font-size: var(--rk-font-size-sm);
1802
+ font-weight: 500;
1803
+ color: var(--rk-color-text-muted);
1804
+ background: transparent;
1805
+ border: none;
1806
+ cursor: pointer;
1807
+ transition: all var(--rk-transition);
1808
+ }
1809
+
1810
+ .rk-tabs__trigger:hover {
1811
+ color: var(--rk-color-text);
1812
+ }
1813
+
1814
+ .rk-tabs__trigger:focus-visible {
1815
+ outline: 2px solid var(--rk-color-ring);
1816
+ outline-offset: 2px;
1817
+ }
1818
+
1819
+ .rk-tabs__trigger[aria-selected="true"] {
1820
+ background-color: #ffffff;
1821
+ color: var(--rk-color-text);
1822
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
1823
+ }
1824
+
1825
+ .rk-tabs__trigger:disabled,
1826
+ .rk-tabs__trigger[aria-disabled="true"] {
1827
+ opacity: 0.5;
1828
+ pointer-events: none;
1829
+ }
1830
+
1831
+ /* Tab Content Wrapper */
1832
+ .rk-tabs__content-wrapper {
1833
+ flex: 1;
1834
+ }
1835
+
1836
+ /* Tab Panel */
1837
+ .rk-tabs__panel {
1838
+ animation: rk-tabs-in 0.2s ease-out;
1839
+ }
1840
+
1841
+ .rk-tabs__panel[hidden] {
1842
+ display: none;
1843
+ }
1844
+
1845
+ .rk-tabs__panel:focus-visible {
1846
+ outline: 2px solid var(--rk-color-ring);
1847
+ outline-offset: 2px;
1848
+ }
1849
+
1850
+ @keyframes rk-tabs-in {
1851
+ from {
1852
+ opacity: 0;
1853
+ transform: translateY(2px);
1854
+ }
1855
+
1856
+ to {
1857
+ opacity: 1;
1858
+ transform: translateY(0);
1859
+ }
1860
+ }
1861
+
1862
+ /* Mobile responsive */
1863
+ @media (max-width: 749px) {
1864
+ .rk-tabs--horizontal .rk-tabs__list {
1865
+ display: flex;
1866
+ overflow-x: auto;
1867
+ justify-content: flex-start;
1868
+ /* Hide scrollbar for cleaner look */
1869
+ scrollbar-width: none;
1870
+ -ms-overflow-style: none;
1871
+ }
1872
+
1873
+ .rk-tabs--horizontal .rk-tabs__list::-webkit-scrollbar {
1874
+ display: none;
1875
+ }
1876
+ }
1877
+
1878
+ /* --------------------------------------------------------------------------
1879
+ rk-toggle & rk-toggle-group (Shadcn/UI pattern)
1880
+ -------------------------------------------------------------------------- */
1881
+ .rk-toggle {
1882
+ display: inline-flex;
1883
+ align-items: center;
1884
+ justify-content: center;
1885
+ gap: var(--rk-space-2xs);
1886
+ border-radius: var(--rk-radius);
1887
+ font-size: var(--rk-font-size-sm);
1888
+ font-weight: 500;
1889
+ transition: background-color var(--rk-transition), color var(--rk-transition),
1890
+ border-color var(--rk-transition), box-shadow var(--rk-transition);
1891
+ cursor: pointer;
1892
+ background: transparent;
1893
+ border: 1px solid transparent;
1894
+ /* reserve space */
1895
+ color: var(--rk-color-text-muted);
1896
+ }
1897
+
1898
+ .rk-toggle:hover {
1899
+ background-color: var(--rk-color-secondary-hover);
1900
+ color: var(--rk-color-text);
1901
+ }
1902
+
1903
+ .rk-toggle:focus-visible {
1904
+ outline: 2px solid var(--rk-color-ring);
1905
+ outline-offset: 2px;
1906
+ }
1907
+
1908
+ .rk-toggle:disabled,
1909
+ .rk-toggle[aria-disabled="true"] {
1910
+ opacity: 0.5;
1911
+ pointer-events: none;
1912
+ }
1913
+
1914
+ /* Pressed State */
1915
+ .rk-toggle[aria-pressed="true"],
1916
+ .rk-toggle--on {
1917
+ background-color: var(--rk-color-bg-secondary);
1918
+ color: var(--rk-color-text);
1919
+ }
1920
+
1921
+ /* Variants */
1922
+ .rk-toggle--default {
1923
+ background: transparent;
1924
+ }
1925
+
1926
+ .rk-toggle--outline {
1927
+ border-color: var(--rk-color-border);
1928
+ background: transparent;
1929
+ }
1930
+
1931
+ .rk-toggle--outline:hover {
1932
+ background-color: var(--rk-color-bg-secondary);
1933
+ }
1934
+
1935
+ .rk-toggle--outline[aria-pressed="true"],
1936
+ .rk-toggle--outline.rk-toggle--on {
1937
+ background-color: var(--rk-color-bg-secondary);
1938
+ }
1939
+
1940
+ /* Sizes */
1941
+ .rk-toggle--sm {
1942
+ padding: 0 var(--rk-space-sm);
1943
+ height: 32px;
1944
+ font-size: var(--rk-font-size-xs);
1945
+ }
1946
+
1947
+ .rk-toggle--md {
1948
+ padding: 0 var(--rk-space-md);
1949
+ height: 40px;
1950
+ }
1951
+
1952
+ .rk-toggle--lg {
1953
+ padding: 0 var(--rk-space-lg);
1954
+ height: 44px;
1955
+ }
1956
+
1957
+ /* Icons within Toggle */
1958
+ .rk-toggle__icon {
1959
+ display: inline-flex;
1960
+ align-items: center;
1961
+ justify-content: center;
1962
+ width: 1em;
1963
+ height: 1em;
1964
+ }
1965
+
1966
+ .rk-toggle__icon svg {
1967
+ width: 100%;
1968
+ height: 100%;
1969
+ }
1970
+
1971
+ /* Group */
1972
+ .rk-toggle-group {
1973
+ display: inline-flex;
1974
+ align-items: center;
1975
+ justify-content: center;
1976
+ border-radius: var(--rk-radius);
1977
+ }
1978
+
1979
+ /* Group seamless border matching (optional but good for 'outline') */
1980
+ .rk-toggle-group .rk-toggle--outline {
1981
+ border-radius: 0;
1982
+ margin-left: -1px;
1983
+ /* collapse double borders */
1984
+ }
1985
+
1986
+ .rk-toggle-group rk-toggle-element:first-child .rk-toggle--outline {
1987
+ border-top-left-radius: var(--rk-radius);
1988
+ border-bottom-left-radius: var(--rk-radius);
1989
+ margin-left: 0;
1990
+ }
1991
+
1992
+ .rk-toggle-group rk-toggle-element:last-child .rk-toggle--outline {
1993
+ border-top-right-radius: var(--rk-radius);
1994
+ border-bottom-right-radius: var(--rk-radius);
1995
+ }
1996
+
1997
+ /* --------------------------------------------------------------------------
1998
+ rk-progress (Shadcn/UI pattern)
1999
+ -------------------------------------------------------------------------- */
2000
+ .rk-progress {
2001
+ display: flex;
2002
+ flex-direction: column;
2003
+ width: 100%;
2004
+ gap: var(--rk-space-2xs);
2005
+ }
2006
+
2007
+ .rk-progress__track {
2008
+ position: relative;
2009
+ width: 100%;
2010
+ height: 16px;
2011
+ background-color: var(--rk-color-bg-secondary);
2012
+ border-radius: 9999px;
2013
+ /* Pill shape */
2014
+ overflow: hidden;
2015
+ }
2016
+
2017
+ .rk-progress__indicator {
2018
+ position: absolute;
2019
+ top: 0;
2020
+ bottom: 0;
2021
+ left: 0;
2022
+ width: 100%;
2023
+ background-color: var(--rk-color-text);
2024
+ /* Usually primary, we use text for high contrast abstract mode */
2025
+ border-radius: 9999px;
2026
+ /* Ensure edge is round */
2027
+ transform: translateX(-100%);
2028
+ transition: transform 0.4s cubic-bezier(0.65, 0, 0.35, 1);
2029
+ transform-origin: left center;
2030
+ }
2031
+
2032
+ /* --------------------------------------------------------------------------
2033
+ rk-collapsible (Collapsible — Shadcn/UI pattern)
2034
+ -------------------------------------------------------------------------- */
2035
+ .rk-collapsible {
2036
+ display: flex;
2037
+ flex-direction: column;
2038
+ }
2039
+
2040
+ .rk-collapsible__trigger {
2041
+ display: inline-flex;
2042
+ align-items: center;
2043
+ justify-content: space-between;
2044
+ width: 100%;
2045
+ background: transparent;
2046
+ border: none;
2047
+ cursor: pointer;
2048
+ font: inherit;
2049
+ color: inherit;
2050
+ padding: 0;
2051
+ text-align: left;
2052
+ }
2053
+
2054
+ .rk-collapsible__trigger:disabled {
2055
+ opacity: 0.5;
2056
+ pointer-events: none;
2057
+ }
2058
+
2059
+ /* The true secret to animating height without JS: CSS Grid 0fr to 1fr */
2060
+ .rk-collapsible__content {
2061
+ display: grid;
2062
+ grid-template-rows: 0fr;
2063
+ transition: grid-template-rows var(--rk-transition);
2064
+ }
2065
+
2066
+ .rk-collapsible__content[hidden] {
2067
+ display: none;
2068
+ }
2069
+
2070
+ .rk-collapsible__content--expanded {
2071
+ grid-template-rows: 1fr;
2072
+ }
2073
+
2074
+ /* Inner content must be min-height: 0 so it correctly collapses within the grid cell */
2075
+ .rk-collapsible__content-inner {
2076
+ overflow: hidden;
2077
+ min-height: 0;
2078
+ }
2079
+
2080
+ /* --------------------------------------------------------------------------
2081
+ rk-carousel (Carousel — Embla/Swiper.js pattern integrations)
2082
+ -------------------------------------------------------------------------- */
2083
+ .rk-carousel {
2084
+ display: block;
2085
+ width: 100%;
2086
+ position: relative;
2087
+ /* Avoid flash of Unstyled Content while Swiper loads JS */
2088
+ opacity: 0;
2089
+ animation: fadeIn var(--rk-transition) forwards;
2090
+ }
2091
+
2092
+ @keyframes fadeIn {
2093
+ to {
2094
+ opacity: 1;
2095
+ }
2096
+ }
2097
+
2098
+ .rk-carousel .swiper {
2099
+ width: 100%;
2100
+ height: 100%;
2101
+ }
2102
+
2103
+ .rk-carousel__slide {
2104
+ display: flex;
2105
+ justify-content: center;
2106
+ align-items: center;
2107
+ box-sizing: border-box;
2108
+ }
2109
+
2110
+ /* Base Nav Overrides (Arrows) */
2111
+ .rk-carousel__nav {
2112
+ color: var(--rk-color-text) !important;
2113
+ background-color: var(--rk-color-bg) !important;
2114
+ border: 1px solid var(--rk-color-border);
2115
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
2116
+ border-radius: 9999px;
2117
+ /* full rounded circle */
2118
+ width: 40px !important;
2119
+ height: 40px !important;
2120
+ transition: background-color var(--rk-transition), transform var(--rk-transition), opacity var(--rk-transition);
2121
+ }
2122
+
2123
+ .rk-carousel__nav::after {
2124
+ font-size: 14px !important;
2125
+ font-weight: 900;
2126
+ }
2127
+
2128
+ .rk-carousel__nav:hover {
2129
+ background-color: var(--rk-color-bg-secondary) !important;
2130
+ transform: scale(1.05);
2131
+ }
2132
+
2133
+ .rk-carousel__nav.swiper-button-disabled {
2134
+ opacity: 0.3 !important;
2135
+ pointer-events: none;
2136
+ }
2137
+
2138
+ /* Adjusting Arrow Placement default */
2139
+ .rk-carousel__nav--prev {
2140
+ left: var(--rk-space-xs) !important;
2141
+ }
2142
+
2143
+ .rk-carousel__nav--next {
2144
+ right: var(--rk-space-xs) !important;
2145
+ }
2146
+
2147
+ /* Pagination Dots */
2148
+ .rk-carousel__pagination-wrapper {
2149
+ position: relative;
2150
+ width: 100%;
2151
+ padding-top: var(--rk-space-md);
2152
+ display: flex;
2153
+ justify-content: center;
2154
+ }
2155
+
2156
+ .rk-carousel .swiper-pagination {
2157
+ position: relative !important;
2158
+ bottom: auto !important;
2159
+ }
2160
+
2161
+ .rk-carousel .swiper-pagination-bullet {
2162
+ background: var(--rk-color-text-muted) !important;
2163
+ opacity: 0.4 !important;
2164
+ width: 8px !important;
2165
+ height: 8px !important;
2166
+ transition: all var(--rk-transition);
2167
+ }
2168
+
2169
+ .rk-carousel .swiper-pagination-bullet-active {
2170
+ background: var(--rk-color-text) !important;
2171
+ opacity: 1 !important;
2172
+ width: 24px !important;
2173
+ border-radius: 4px !important;
2174
+ }
2175
+
2176
+ /* --------------------------------------------------------------------------
2177
+ rk-bottom-app-bar (Navigation — Mobile App Pattern)
2178
+ -------------------------------------------------------------------------- */
2179
+ .rk-bottom-app-bar {
2180
+ position: fixed;
2181
+ bottom: 0;
2182
+ left: 0;
2183
+ right: 0;
2184
+ width: 100%;
2185
+ z-index: 40;
2186
+ /* Layer below modals (50), but above content */
2187
+ background-color: var(--rk-color-bg);
2188
+ border-top: 1px solid var(--rk-color-border);
2189
+ padding-bottom: env(safe-area-inset-bottom);
2190
+ }
2191
+
2192
+ /* Glassmorphism Progressive Enhancement */
2193
+ @supports (backdrop-filter: blur(12px)) {
2194
+ .rk-bottom-app-bar {
2195
+ background-color: color-mix(in srgb, var(--rk-color-bg) 85%, transparent);
2196
+ backdrop-filter: blur(12px);
2197
+ }
2198
+ }
2199
+
2200
+ .rk-bottom-app-bar__row {
2201
+ display: flex;
2202
+ align-items: center;
2203
+ height: 64px;
2204
+ padding: 0 var(--rk-space-md);
2205
+ }
2206
+
2207
+ .rk-bottom-app-bar--distributed .rk-bottom-app-bar__row {
2208
+ justify-content: space-between;
2209
+ }
2210
+
2211
+ .rk-bottom-app-bar--grouped .rk-bottom-app-bar__row {
2212
+ justify-content: flex-start;
2213
+ gap: var(--rk-space-xs);
2214
+ }
2215
+
2216
+ /* Trigger Button Base */
2217
+ .rk-bottom-app-bar__item {
2218
+ display: inline-flex;
2219
+ flex-direction: column;
2220
+ align-items: center;
2221
+ justify-content: center;
2222
+ min-width: 48px;
2223
+ height: 48px;
2224
+ background: transparent;
2225
+ border: none;
2226
+ cursor: pointer;
2227
+ font: inherit;
2228
+ font-size: var(--rk-font-size-xs);
2229
+ font-weight: 500;
2230
+ color: var(--rk-color-text-muted);
2231
+ border-radius: var(--rk-radius);
2232
+ transition: color var(--rk-transition), background-color var(--rk-transition);
2233
+ }
2234
+
2235
+ .rk-bottom-app-bar__item:hover,
2236
+ .rk-bottom-app-bar__item:focus-visible {
2237
+ color: var(--rk-color-text);
2238
+ background-color: var(--rk-color-bg-secondary);
2239
+ }
2240
+
2241
+ .rk-bottom-app-bar__item[aria-expanded="true"] {
2242
+ color: var(--rk-color-text);
2243
+ }
2244
+
2245
+ /* Floating Action Button */
2246
+ .rk-bottom-app-bar__fab-wrapper {
2247
+ position: absolute;
2248
+ top: -24px;
2249
+ left: 50%;
2250
+ transform: translateX(-50%);
2251
+ z-index: 41;
2252
+ }
2253
+
2254
+ .rk-bottom-app-bar__fab {
2255
+ display: flex;
2256
+ align-items: center;
2257
+ justify-content: center;
2258
+ width: 56px;
2259
+ height: 56px;
2260
+ border-radius: 9999px;
2261
+ background-color: var(--rk-color-primary);
2262
+ color: var(--rk-color-primary-foreground);
2263
+ border: none;
2264
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
2265
+ cursor: pointer;
2266
+ transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
2267
+ }
2268
+
2269
+ .rk-bottom-app-bar__fab:hover,
2270
+ .rk-bottom-app-bar__fab:focus-visible {
2271
+ transform: translateX(-50%) scale(1.05);
2272
+ }
2273
+
2274
+ /* --------------------------------------------------------------------------
2275
+ rk-aspect-ratio (Aspect Ratio Utility Container)
2276
+ -------------------------------------------------------------------------- */
2277
+ .rk-aspect-ratio {
2278
+ position: relative;
2279
+ width: 100%;
2280
+ overflow: hidden;
2281
+ /* aspect-ratio applied via inline style for maximum dynamic flexibility */
2282
+ }
2283
+
2284
+ /* Forces inner content (images, iframes) to fill the aspect box constraints */
2285
+ .rk-aspect-ratio>* {
2286
+ position: absolute;
2287
+ top: 0;
2288
+ left: 0;
2289
+ width: 100%;
2290
+ height: 100%;
2291
+ object-fit: cover;
2292
+ }
2293
+
2294
+ /* --------------------------------------------------------------------------
2295
+ rk-card (Flexible Container Pattern)
2296
+ -------------------------------------------------------------------------- */
2297
+ .rk-card {
2298
+ display: flex;
2299
+ flex-direction: column;
2300
+ width: 100%;
2301
+ background-color: var(--rk-color-bg);
2302
+ border: 1px solid var(--rk-color-border);
2303
+ border-radius: var(--rk-radius-lg);
2304
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
2305
+ overflow: hidden;
2306
+ text-decoration: none;
2307
+ color: inherit;
2308
+ transition: box-shadow var(--rk-transition), transform var(--rk-transition), border-color var(--rk-transition);
2309
+ }
2310
+
2311
+ a.rk-card {
2312
+ cursor: pointer;
2313
+ }
2314
+
2315
+ /* Interactivity (Hover / Focus) */
2316
+ .rk-card--interactive:hover,
2317
+ .rk-card--interactive:focus-visible {
2318
+ border-color: var(--rk-color-border-hover);
2319
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
2320
+ transform: translateY(-2px);
2321
+ outline: none;
2322
+ }
2323
+
2324
+ .rk-card--interactive:focus-visible {
2325
+ box-shadow: 0 0 0 2px var(--rk-color-bg), 0 0 0 4px var(--rk-color-ring);
2326
+ }
2327
+
2328
+ /* Sub-components */
2329
+ .rk-card__header {
2330
+ display: flex;
2331
+ flex-direction: column;
2332
+ padding: var(--rk-space-md) var(--rk-space-md) 0;
2333
+ gap: var(--rk-space-xs);
2334
+ }
2335
+
2336
+ .rk-card__title {
2337
+ font-size: var(--rk-font-size-lg);
2338
+ font-weight: 600;
2339
+ line-height: var(--rk-line-height-tight);
2340
+ color: var(--rk-color-text);
2341
+ margin: 0;
2342
+ }
2343
+
2344
+ .rk-card__description {
2345
+ font-size: var(--rk-font-size-sm);
2346
+ color: var(--rk-color-text-muted);
2347
+ margin: 0;
2348
+ }
2349
+
2350
+ .rk-card__content {
2351
+ padding: var(--rk-space-md);
2352
+ flex-grow: 1;
2353
+ /* Pushes footer to bottom */
2354
+ }
2355
+
2356
+ /* Content direct sibling of header gets top padding removed if needed, typically Shadcn just adds uniform padding */
2357
+ .rk-card__header+.rk-card__content {
2358
+ padding-top: var(--rk-space-md);
2359
+ }
2360
+
2361
+ .rk-card__footer {
2362
+ display: flex;
2363
+ align-items: center;
2364
+ padding: 0 var(--rk-space-md) var(--rk-space-md);
2365
+ gap: var(--rk-space-sm);
2366
+ }
2367
+
2368
+ /* --------------------------------------------------------------------------
2369
+ rk-form-field (Input Labeling & Wrapper structural block)
2370
+ -------------------------------------------------------------------------- */
2371
+ .rk-form-field {
2372
+ display: flex;
2373
+ flex-direction: column;
2374
+ width: 100%;
2375
+ margin-bottom: var(--rk-space-md);
2376
+ color: var(--rk-color-text);
2377
+ }
2378
+
2379
+ /* Modifier: Allows inline stacking (label aside input) primarily for checkboxes/radios or dense table configs */
2380
+ .rk-form-field--horizontal {
2381
+ flex-direction: row;
2382
+ align-items: center;
2383
+ gap: var(--rk-space-md);
2384
+ }
2385
+
2386
+ .rk-form-field__label {
2387
+ display: block;
2388
+ font-size: var(--rk-font-size-sm);
2389
+ font-weight: 500;
2390
+ margin-bottom: var(--rk-space-xs);
2391
+ line-height: var(--rk-line-height-none);
2392
+ }
2393
+
2394
+ .rk-form-field__required {
2395
+ color: var(--rk-color-destructive);
2396
+ margin-left: 2px;
2397
+ }
2398
+
2399
+ .rk-form-field__control {
2400
+ width: 100%;
2401
+ }
2402
+
2403
+ .rk-form-field__description {
2404
+ font-size: 0.8rem;
2405
+ color: var(--rk-color-text-muted);
2406
+ margin-top: var(--rk-space-xs);
2407
+ margin-bottom: 0;
2408
+ }
2409
+
2410
+ .rk-form-field__error {
2411
+ font-size: 0.8rem;
2412
+ font-weight: 500;
2413
+ color: var(--rk-color-destructive);
2414
+ margin-top: var(--rk-space-xs);
2415
+ margin-bottom: 0;
2416
+ }
2417
+
2418
+ /* --------------------------------------------------------------------------
2419
+ rk-item (Standardized Menu/List row pattern)
2420
+ -------------------------------------------------------------------------- */
2421
+ .rk-item {
2422
+ display: flex;
2423
+ align-items: center;
2424
+ width: 100%;
2425
+ padding: var(--rk-space-sm) var(--rk-space-md);
2426
+ background-color: transparent;
2427
+ color: var(--rk-color-text);
2428
+ font-size: var(--rk-font-size-sm);
2429
+ line-height: var(--rk-line-height-normal);
2430
+ text-align: left;
2431
+ border: none;
2432
+ border-radius: var(--rk-radius-sm);
2433
+ text-decoration: none;
2434
+ cursor: default;
2435
+ transition: background-color var(--rk-transition), color var(--rk-transition);
2436
+ }
2437
+
2438
+ .rk-item--interactive {
2439
+ cursor: pointer;
2440
+ }
2441
+
2442
+ .rk-item--interactive:hover,
2443
+ .rk-item--interactive:focus-visible {
2444
+ background-color: var(--rk-color-bg-secondary);
2445
+ color: var(--rk-color-text);
2446
+ outline: none;
2447
+ }
2448
+
2449
+ .rk-item--selected {
2450
+ background-color: var(--rk-color-bg-secondary);
2451
+ color: var(--rk-color-text);
2452
+ font-weight: 500;
2453
+ }
2454
+
2455
+ .rk-item--disabled,
2456
+ .rk-item[disabled] {
2457
+ opacity: 0.5;
2458
+ pointer-events: none;
2459
+ cursor: not-allowed;
2460
+ }
2461
+
2462
+ /* Structural Spans */
2463
+ .rk-item__leading {
2464
+ display: flex;
2465
+ align-items: center;
2466
+ justify-content: center;
2467
+ margin-right: var(--rk-space-sm);
2468
+ flex-shrink: 0;
2469
+ }
2470
+
2471
+ .rk-item__main {
2472
+ display: flex;
2473
+ flex-direction: column;
2474
+ flex-grow: 1;
2475
+ overflow: hidden;
2476
+ /* For truncation */
2477
+ }
2478
+
2479
+ .rk-item__content {
2480
+ white-space: nowrap;
2481
+ overflow: hidden;
2482
+ text-overflow: ellipsis;
2483
+ }
2484
+
2485
+ .rk-item__description {
2486
+ font-size: var(--rk-font-size-xs);
2487
+ color: var(--rk-color-text-muted);
2488
+ margin-top: 2px;
2489
+ }
2490
+
2491
+ .rk-item__trailing {
2492
+ display: flex;
2493
+ align-items: center;
2494
+ justify-content: flex-end;
2495
+ margin-left: auto;
2496
+ padding-left: var(--rk-space-md);
2497
+ flex-shrink: 0;
2498
+ color: var(--rk-color-text-muted);
2499
+ }
2500
+
2501
+ /* --------------------------------------------------------------------------
2502
+ rk-spinner (Animated SVG Loading Indicator)
2503
+ -------------------------------------------------------------------------- */
2504
+ .rk-spinner-wrapper {
2505
+ display: inline-flex;
2506
+ align-items: center;
2507
+ justify-content: center;
2508
+ }
2509
+
2510
+ .rk-spinner {
2511
+ animation: rk-spin 1s linear infinite;
2512
+ color: inherit;
2513
+ }
2514
+
2515
+ @keyframes rk-spin {
2516
+ from {
2517
+ transform: rotate(0deg);
2518
+ }
2519
+
2520
+ to {
2521
+ transform: rotate(360deg);
2522
+ }
2523
+ }
2524
+
2525
+ /* Tamanhos */
2526
+ .rk-spinner--sm {
2527
+ width: 16px;
2528
+ height: 16px;
2529
+ }
2530
+
2531
+ .rk-spinner--md {
2532
+ width: 24px;
2533
+ height: 24px;
2534
+ }
2535
+
2536
+ .rk-spinner--lg {
2537
+ width: 32px;
2538
+ height: 32px;
2539
+ }
2540
+
2541
+ /* --------------------------------------------------------------------------
2542
+ rk-sr-only (Screen Reader Only utility)
2543
+ -------------------------------------------------------------------------- */
2544
+ .rk-sr-only {
2545
+ position: absolute;
2546
+ width: 1px;
2547
+ height: 1px;
2548
+ padding: 0;
2549
+ margin: -1px;
2550
+ overflow: hidden;
2551
+ clip: rect(0, 0, 0, 0);
2552
+ white-space: nowrap;
2553
+ border-width: 0;
2554
+ }