@ryanhelsing/ry-ui 1.0.2 → 1.0.3

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 (51) hide show
  1. package/AGENTS.md +56 -0
  2. package/README.md +26 -1
  3. package/dist/components/ry-carousel.d.ts +21 -0
  4. package/dist/components/ry-carousel.d.ts.map +1 -0
  5. package/dist/components/ry-feature.d.ts +21 -0
  6. package/dist/components/ry-feature.d.ts.map +1 -0
  7. package/dist/components/ry-hero.d.ts +16 -0
  8. package/dist/components/ry-hero.d.ts.map +1 -0
  9. package/dist/components/ry-number-select.d.ts.map +1 -1
  10. package/dist/components/ry-pricing.d.ts +21 -0
  11. package/dist/components/ry-pricing.d.ts.map +1 -0
  12. package/dist/components/ry-select.d.ts +8 -1
  13. package/dist/components/ry-select.d.ts.map +1 -1
  14. package/dist/components/ry-stat.d.ts +17 -0
  15. package/dist/components/ry-stat.d.ts.map +1 -0
  16. package/dist/components/ry-tag-input.d.ts +18 -0
  17. package/dist/components/ry-tag-input.d.ts.map +1 -0
  18. package/dist/components/ry-tag.d.ts +19 -0
  19. package/dist/components/ry-tag.d.ts.map +1 -0
  20. package/dist/core/ry-transform.d.ts.map +1 -1
  21. package/dist/css/ry-structure.css +620 -148
  22. package/dist/css/ry-theme.css +456 -180
  23. package/dist/css/ry-tokens.css +112 -24
  24. package/dist/css/ry-ui.css +4708 -1059
  25. package/dist/ry-ui.d.ts +7 -0
  26. package/dist/ry-ui.d.ts.map +1 -1
  27. package/dist/ry-ui.js +1071 -713
  28. package/dist/ry-ui.js.map +1 -1
  29. package/dist/themes/dark.css +7 -90
  30. package/dist/themes/light.css +6 -35
  31. package/dist/themes/ocean.css +22 -26
  32. package/docs/components/accordion.md +31 -0
  33. package/docs/components/button.md +65 -0
  34. package/docs/components/color.md +84 -0
  35. package/docs/components/display.md +69 -0
  36. package/docs/components/drawer.md +36 -0
  37. package/docs/components/dropdown.md +33 -0
  38. package/docs/components/forms.md +86 -0
  39. package/docs/components/knob.md +42 -0
  40. package/docs/components/layout.md +189 -0
  41. package/docs/components/modal.md +38 -0
  42. package/docs/components/number-select.md +42 -0
  43. package/docs/components/slider.md +48 -0
  44. package/docs/components/tabs.md +30 -0
  45. package/docs/components/theme-toggle.md +36 -0
  46. package/docs/components/toast.md +27 -0
  47. package/docs/components/tooltip.md +14 -0
  48. package/docs/components/tree.md +46 -0
  49. package/docs/theming.md +182 -0
  50. package/package.json +5 -3
  51. package/USING_CDN.md +0 -591
@@ -6,6 +6,8 @@
6
6
  * Override these styles or swap with your own theme.
7
7
  */
8
8
 
9
+ @layer ry-theme {
10
+
9
11
  /* ═══════════════════════════════════════════════════════════════
10
12
  BASE / BODY
11
13
  ═══════════════════════════════════════════════════════════════ */
@@ -18,11 +20,7 @@ html {
18
20
  FOCUS STYLES
19
21
  ═══════════════════════════════════════════════════════════════ */
20
22
 
21
- [class^="ry-"]:focus-visible,
22
- [class*=" ry-"]:focus-visible,
23
- ry-button:focus-visible,
24
- .ry-btn:focus-visible,
25
- .ry-input:focus-visible {
23
+ :is([class^="ry-"], [class*=" ry-"], ry-button, .ry-btn, .ry-input):focus-visible {
26
24
  outline: none;
27
25
  box-shadow: var(--ry-focus-ring);
28
26
  }
@@ -39,7 +37,7 @@ ry-page {
39
37
  background-color: var(--ry-color-bg);
40
38
  }
41
39
 
42
- ry-page h1, ry-page h2, ry-page h3, ry-page h4, ry-page h5, ry-page h6 {
40
+ ry-page :is(h1, h2, h3, h4, h5, h6) {
43
41
  margin: 0 0 var(--ry-space-4) 0;
44
42
  font-weight: var(--ry-font-semibold);
45
43
  line-height: var(--ry-leading-tight);
@@ -70,7 +68,7 @@ ry-page a:hover {
70
68
 
71
69
  ry-header {
72
70
  background-color: var(--ry-color-bg);
73
- border-bottom: var(--ry-border-width) solid var(--ry-color-border);
71
+ border-block-end: var(--ry-border-width) solid var(--ry-color-border);
74
72
  }
75
73
 
76
74
  /* ═══════════════════════════════════════════════════════════════
@@ -79,7 +77,7 @@ ry-header {
79
77
 
80
78
  ry-footer {
81
79
  background-color: var(--ry-color-bg-subtle);
82
- border-top: var(--ry-border-width) solid var(--ry-color-border);
80
+ border-block-start: var(--ry-border-width) solid var(--ry-color-border);
83
81
  color: var(--ry-color-text-muted);
84
82
  }
85
83
 
@@ -124,8 +122,7 @@ ry-divider {
124
122
  BUTTONS
125
123
  ═══════════════════════════════════════════════════════════════ */
126
124
 
127
- .ry-btn,
128
- ry-button {
125
+ :is(.ry-btn, ry-button) {
129
126
  font-family: var(--ry-font-sans);
130
127
  font-size: var(--ry-text-sm);
131
128
  font-weight: var(--ry-font-medium);
@@ -142,71 +139,57 @@ ry-button {
142
139
  transition-timing-function: var(--ry-ease);
143
140
  }
144
141
 
145
- .ry-btn:hover,
146
- ry-button:hover {
142
+ :is(.ry-btn, ry-button):hover {
147
143
  background-color: var(--ry-color-primary-hover);
148
144
  }
149
145
 
150
- .ry-btn:active,
151
- ry-button:active {
146
+ :is(.ry-btn, ry-button):active {
152
147
  background-color: var(--ry-color-primary-active);
153
148
  }
154
149
 
155
- .ry-btn:disabled,
156
- .ry-btn[aria-disabled="true"],
157
- ry-button[disabled] {
150
+ :is(.ry-btn:disabled, .ry-btn[aria-disabled="true"], ry-button[disabled]) {
158
151
  opacity: 0.5;
159
152
  }
160
153
 
161
154
  /* Button variants */
162
- .ry-btn--secondary,
163
- ry-button[variant="secondary"] {
155
+ :is(.ry-btn--secondary, ry-button[variant="secondary"]) {
164
156
  background-color: var(--ry-color-secondary);
165
157
  }
166
- .ry-btn--secondary:hover,
167
- ry-button[variant="secondary"]:hover {
158
+ :is(.ry-btn--secondary, ry-button[variant="secondary"]):hover {
168
159
  background-color: var(--ry-color-secondary-hover);
169
160
  }
170
161
 
171
- .ry-btn--outline,
172
- ry-button[variant="outline"] {
162
+ :is(.ry-btn--outline, ry-button[variant="outline"]) {
173
163
  background-color: transparent;
174
164
  color: var(--ry-color-primary);
175
165
  border-color: var(--ry-color-primary);
176
166
  }
177
- .ry-btn--outline:hover,
178
- ry-button[variant="outline"]:hover {
167
+ :is(.ry-btn--outline, ry-button[variant="outline"]):hover {
179
168
  background-color: var(--ry-color-primary);
180
169
  color: var(--ry-color-text-inverse);
181
170
  }
182
171
 
183
- .ry-btn--ghost,
184
- ry-button[variant="ghost"] {
172
+ :is(.ry-btn--ghost, ry-button[variant="ghost"]) {
185
173
  background-color: transparent;
186
174
  color: var(--ry-color-text);
187
175
  }
188
- .ry-btn--ghost:hover,
189
- ry-button[variant="ghost"]:hover {
176
+ :is(.ry-btn--ghost, ry-button[variant="ghost"]):hover {
190
177
  background-color: var(--ry-color-bg-muted);
191
178
  }
192
179
 
193
- .ry-btn--danger,
194
- ry-button[variant="danger"] {
180
+ :is(.ry-btn--danger, ry-button[variant="danger"]) {
195
181
  background-color: var(--ry-color-danger);
196
182
  }
197
- .ry-btn--danger:hover,
198
- ry-button[variant="danger"]:hover {
199
- background-color: var(--ry-color-danger-hover, #dc2626);
183
+ :is(.ry-btn--danger, ry-button[variant="danger"]):hover {
184
+ background-color: var(--ry-color-danger-hover);
200
185
  }
201
186
 
202
187
  /* Button sizes (typography only - padding is structural) */
203
- .ry-btn--sm,
204
- ry-button[size="sm"] {
188
+ :is(.ry-btn--sm, ry-button[size="sm"]) {
205
189
  font-size: var(--ry-text-xs);
206
190
  }
207
191
 
208
- .ry-btn--lg,
209
- ry-button[size="lg"] {
192
+ :is(.ry-btn--lg, ry-button[size="lg"]) {
210
193
  font-size: var(--ry-text-base);
211
194
  }
212
195
 
@@ -440,37 +423,43 @@ ry-knob[color="danger"] [data-ry-target="indicator"] { background-color: var(--r
440
423
  }
441
424
 
442
425
  .ry-number-select__decrement {
443
- border-radius: var(--ry-radius-md) 0 0 var(--ry-radius-md);
444
- border-right: none;
426
+ border-start-start-radius: var(--ry-radius-md);
427
+ border-end-start-radius: var(--ry-radius-md);
428
+ border-start-end-radius: 0;
429
+ border-end-end-radius: 0;
430
+ border-inline-end: none;
445
431
  }
446
432
 
447
433
  .ry-number-select__increment {
448
- border-radius: 0 var(--ry-radius-md) var(--ry-radius-md) 0;
449
- border-left: none;
434
+ border-start-start-radius: 0;
435
+ border-end-start-radius: 0;
436
+ border-start-end-radius: var(--ry-radius-md);
437
+ border-end-end-radius: var(--ry-radius-md);
438
+ border-inline-start: none;
450
439
  }
451
440
 
452
441
  /* Single-button rounding */
453
442
  ry-number-select[arrows="start"] .ry-number-select__decrement {
454
443
  border-radius: var(--ry-radius-md);
455
- border-right: var(--ry-border-width) solid var(--ry-color-border);
444
+ border-inline-end: var(--ry-border-width) solid var(--ry-color-border);
456
445
  }
457
446
 
458
447
  ry-number-select[arrows="end"] .ry-number-select__increment {
459
448
  border-radius: var(--ry-radius-md);
460
- border-left: var(--ry-border-width) solid var(--ry-color-border);
449
+ border-inline-start: var(--ry-border-width) solid var(--ry-color-border);
461
450
  }
462
451
 
463
452
  .ry-number-select__display {
464
453
  background-color: var(--ry-color-bg);
465
- border-top: var(--ry-border-width) solid var(--ry-color-border);
466
- border-bottom: var(--ry-border-width) solid var(--ry-color-border);
454
+ border-block-start: var(--ry-border-width) solid var(--ry-color-border);
455
+ border-block-end: var(--ry-border-width) solid var(--ry-color-border);
467
456
  }
468
457
 
469
458
  /* Display borders when both arrows */
470
459
  ry-number-select:not([arrows]) .ry-number-select__display,
471
460
  ry-number-select[arrows="both"] .ry-number-select__display {
472
- border-left: none;
473
- border-right: none;
461
+ border-inline-start: none;
462
+ border-inline-end: none;
474
463
  }
475
464
 
476
465
  /* No arrows: full border + radius */
@@ -479,42 +468,100 @@ ry-number-select[arrows="none"] .ry-number-select__display {
479
468
  border-radius: var(--ry-radius-md);
480
469
  }
481
470
 
482
- /* Start only: display gets right border + right radius */
471
+ /* Start only: display gets end border + end radius */
483
472
  ry-number-select[arrows="start"] .ry-number-select__display {
484
- border-right: var(--ry-border-width) solid var(--ry-color-border);
485
- border-left: none;
486
- border-radius: 0 var(--ry-radius-md) var(--ry-radius-md) 0;
473
+ border-inline-end: var(--ry-border-width) solid var(--ry-color-border);
474
+ border-inline-start: none;
475
+ border-start-start-radius: 0;
476
+ border-end-start-radius: 0;
477
+ border-start-end-radius: var(--ry-radius-md);
478
+ border-end-end-radius: var(--ry-radius-md);
487
479
  }
488
480
 
489
- /* End only: display gets left border + left radius */
481
+ /* End only: display gets start border + start radius */
490
482
  ry-number-select[arrows="end"] .ry-number-select__display {
491
- border-left: var(--ry-border-width) solid var(--ry-color-border);
492
- border-right: none;
493
- border-radius: var(--ry-radius-md) 0 0 var(--ry-radius-md);
483
+ border-inline-start: var(--ry-border-width) solid var(--ry-color-border);
484
+ border-inline-end: none;
485
+ border-start-start-radius: var(--ry-radius-md);
486
+ border-end-start-radius: var(--ry-radius-md);
487
+ border-start-end-radius: 0;
488
+ border-end-end-radius: 0;
494
489
  }
495
490
 
496
491
  /* Stacked: top-rounded increment, bottom-rounded decrement, no radius on display */
497
492
  ry-number-select[arrows="stacked"] .ry-number-select__increment {
498
493
  border: var(--ry-border-width) solid var(--ry-color-border);
499
- border-bottom: none;
494
+ border-block-end: none;
500
495
  border-radius: var(--ry-radius-md) var(--ry-radius-md) 0 0;
501
- border-left: var(--ry-border-width) solid var(--ry-color-border);
502
496
  }
503
497
 
504
498
  ry-number-select[arrows="stacked"] .ry-number-select__decrement {
505
499
  border: var(--ry-border-width) solid var(--ry-color-border);
506
- border-top: none;
500
+ border-block-start: none;
507
501
  border-radius: 0 0 var(--ry-radius-md) var(--ry-radius-md);
508
- border-right: var(--ry-border-width) solid var(--ry-color-border);
509
502
  }
510
503
 
511
504
  ry-number-select[arrows="stacked"] .ry-number-select__display {
512
505
  border: var(--ry-border-width) solid var(--ry-color-border);
513
- border-top: none;
514
- border-bottom: none;
506
+ border-block-start: none;
507
+ border-block-end: none;
515
508
  border-radius: 0;
516
509
  }
517
510
 
511
+ /* Stacked-end: display start-rounded, buttons end-rounded */
512
+ ry-number-select[arrows="stacked-end"] .ry-number-select__display {
513
+ border: var(--ry-border-width) solid var(--ry-color-border);
514
+ border-inline-end: none;
515
+ border-start-start-radius: var(--ry-radius-md);
516
+ border-end-start-radius: var(--ry-radius-md);
517
+ border-start-end-radius: 0;
518
+ border-end-end-radius: 0;
519
+ }
520
+
521
+ ry-number-select[arrows="stacked-end"] .ry-number-select__increment {
522
+ border: var(--ry-border-width) solid var(--ry-color-border);
523
+ border-block-end: none;
524
+ border-start-end-radius: var(--ry-radius-md);
525
+ border-start-start-radius: 0;
526
+ border-end-start-radius: 0;
527
+ border-end-end-radius: 0;
528
+ }
529
+
530
+ ry-number-select[arrows="stacked-end"] .ry-number-select__decrement {
531
+ border: var(--ry-border-width) solid var(--ry-color-border);
532
+ border-end-end-radius: var(--ry-radius-md);
533
+ border-start-start-radius: 0;
534
+ border-start-end-radius: 0;
535
+ border-end-start-radius: 0;
536
+ }
537
+
538
+ /* Stacked-start: buttons start-rounded, display end-rounded */
539
+ ry-number-select[arrows="stacked-start"] .ry-number-select__display {
540
+ border: var(--ry-border-width) solid var(--ry-color-border);
541
+ border-inline-start: none;
542
+ border-start-start-radius: 0;
543
+ border-end-start-radius: 0;
544
+ border-start-end-radius: var(--ry-radius-md);
545
+ border-end-end-radius: var(--ry-radius-md);
546
+ }
547
+
548
+ ry-number-select[arrows="stacked-start"] .ry-number-select__increment {
549
+ border: var(--ry-border-width) solid var(--ry-color-border);
550
+ border-block-end: none;
551
+ border-start-start-radius: var(--ry-radius-md);
552
+ border-start-end-radius: 0;
553
+ border-end-start-radius: 0;
554
+ border-end-end-radius: 0;
555
+ }
556
+
557
+ ry-number-select[arrows="stacked-start"] .ry-number-select__decrement {
558
+ border: var(--ry-border-width) solid var(--ry-color-border);
559
+ border-end-start-radius: var(--ry-radius-md);
560
+ border-start-start-radius: 0;
561
+ border-start-end-radius: 0;
562
+ border-end-end-radius: 0;
563
+ }
564
+
518
565
  .ry-number-select__value {
519
566
  font-family: var(--ry-font-mono);
520
567
  font-size: var(--ry-text-sm);
@@ -529,7 +576,7 @@ ry-number-select[arrows="stacked"] .ry-number-select__display {
529
576
  color: var(--ry-color-text);
530
577
  background: transparent;
531
578
  border: none;
532
- border-bottom: 2px solid var(--ry-color-primary);
579
+ border-block-end: 2px solid var(--ry-color-primary);
533
580
  }
534
581
 
535
582
  .ry-number-select__display:focus-visible {
@@ -585,8 +632,7 @@ ry-card p {
585
632
  BADGES
586
633
  ═══════════════════════════════════════════════════════════════ */
587
634
 
588
- .ry-badge,
589
- ry-badge {
635
+ :is(.ry-badge, ry-badge) {
590
636
  font-size: var(--ry-text-xs);
591
637
  font-weight: var(--ry-font-medium);
592
638
  background-color: var(--ry-color-bg-muted);
@@ -594,26 +640,22 @@ ry-badge {
594
640
  border-radius: var(--ry-radius-full);
595
641
  }
596
642
 
597
- .ry-badge--primary,
598
- ry-badge[variant="primary"] {
643
+ :is(.ry-badge--primary, ry-badge[variant="primary"]) {
599
644
  background-color: var(--ry-color-primary);
600
645
  color: var(--ry-color-text-inverse);
601
646
  }
602
647
 
603
- .ry-badge--success,
604
- ry-badge[variant="success"] {
648
+ :is(.ry-badge--success, ry-badge[variant="success"]) {
605
649
  background-color: var(--ry-color-success);
606
650
  color: var(--ry-color-text-inverse);
607
651
  }
608
652
 
609
- .ry-badge--warning,
610
- ry-badge[variant="warning"] {
653
+ :is(.ry-badge--warning, ry-badge[variant="warning"]) {
611
654
  background-color: var(--ry-color-warning);
612
655
  color: var(--ry-color-text);
613
656
  }
614
657
 
615
- .ry-badge--danger,
616
- ry-badge[variant="danger"] {
658
+ :is(.ry-badge--danger, ry-badge[variant="danger"]) {
617
659
  background-color: var(--ry-color-danger);
618
660
  color: var(--ry-color-text-inverse);
619
661
  }
@@ -622,43 +664,37 @@ ry-badge[variant="danger"] {
622
664
  ALERTS
623
665
  ═══════════════════════════════════════════════════════════════ */
624
666
 
625
- .ry-alert,
626
- ry-alert {
667
+ :is(.ry-alert, ry-alert) {
627
668
  background-color: var(--ry-color-bg-subtle);
628
669
  border: var(--ry-border-width) solid var(--ry-color-border);
629
670
  border-radius: var(--ry-radius-lg);
630
671
  }
631
672
 
632
- .ry-alert--info,
633
- ry-alert[type="info"] {
634
- background-color: var(--ry-color-info-bg, #ecfeff);
673
+ :is(.ry-alert--info, ry-alert[type="info"]) {
674
+ background-color: var(--ry-color-info-bg);
635
675
  border-color: var(--ry-color-info);
636
- color: var(--ry-color-info-text, #0e7490);
676
+ color: var(--ry-color-info-text);
637
677
  }
638
678
 
639
- .ry-alert--success,
640
- ry-alert[type="success"] {
641
- background-color: var(--ry-color-success-bg, #f0fdf4);
679
+ :is(.ry-alert--success, ry-alert[type="success"]) {
680
+ background-color: var(--ry-color-success-bg);
642
681
  border-color: var(--ry-color-success);
643
- color: var(--ry-color-success-text, #15803d);
682
+ color: var(--ry-color-success-text);
644
683
  }
645
684
 
646
- .ry-alert--warning,
647
- ry-alert[type="warning"] {
648
- background-color: var(--ry-color-warning-bg, #fffbeb);
685
+ :is(.ry-alert--warning, ry-alert[type="warning"]) {
686
+ background-color: var(--ry-color-warning-bg);
649
687
  border-color: var(--ry-color-warning);
650
- color: var(--ry-color-warning-text, #b45309);
688
+ color: var(--ry-color-warning-text);
651
689
  }
652
690
 
653
- .ry-alert--danger,
654
- ry-alert[type="danger"] {
655
- background-color: var(--ry-color-danger-bg, #fef2f2);
691
+ :is(.ry-alert--danger, ry-alert[type="danger"]) {
692
+ background-color: var(--ry-color-danger-bg);
656
693
  border-color: var(--ry-color-danger);
657
- color: var(--ry-color-danger-text, #b91c1c);
694
+ color: var(--ry-color-danger-text);
658
695
  }
659
696
 
660
- .ry-alert__title,
661
- ry-alert [slot="title"] {
697
+ :is(.ry-alert__title, ry-alert [slot="title"]) {
662
698
  font-weight: var(--ry-font-semibold);
663
699
  }
664
700
 
@@ -666,10 +702,7 @@ ry-alert [slot="title"] {
666
702
  FORM ELEMENTS
667
703
  ═══════════════════════════════════════════════════════════════ */
668
704
 
669
- .ry-input,
670
- ry-field input,
671
- ry-field textarea,
672
- ry-field select {
705
+ :is(.ry-input, ry-field input, ry-field textarea, ry-field select) {
673
706
  font-family: var(--ry-font-sans);
674
707
  font-size: var(--ry-text-base);
675
708
  line-height: var(--ry-leading-normal);
@@ -683,35 +716,26 @@ ry-field select {
683
716
  box-shadow var(--ry-duration-fast) var(--ry-ease);
684
717
  }
685
718
 
686
- .ry-input:hover,
687
- ry-field input:hover,
688
- ry-field textarea:hover {
719
+ :is(.ry-input, ry-field input, ry-field textarea):hover {
689
720
  border-color: var(--ry-color-border-strong);
690
721
  }
691
722
 
692
- .ry-input:focus,
693
- ry-field input:focus,
694
- ry-field textarea:focus {
723
+ :is(.ry-input, ry-field input, ry-field textarea):focus {
695
724
  outline: none;
696
725
  border-color: var(--ry-color-primary);
697
726
  box-shadow: var(--ry-focus-ring);
698
727
  }
699
728
 
700
- .ry-input::placeholder,
701
- ry-field input::placeholder,
702
- ry-field textarea::placeholder {
729
+ :is(.ry-input, ry-field input, ry-field textarea)::placeholder {
703
730
  color: var(--ry-color-text-muted);
704
731
  }
705
732
 
706
- .ry-input:disabled,
707
- ry-field input:disabled,
708
- ry-field textarea:disabled {
733
+ :is(.ry-input, ry-field input, ry-field textarea):disabled {
709
734
  background-color: var(--ry-color-bg-muted);
710
735
  opacity: 0.5;
711
736
  }
712
737
 
713
- .ry-label,
714
- ry-field label {
738
+ :is(.ry-label, ry-field label) {
715
739
  font-size: var(--ry-text-sm);
716
740
  font-weight: var(--ry-font-medium);
717
741
  color: var(--ry-color-text);
@@ -726,14 +750,12 @@ ry-accordion {
726
750
  border-radius: var(--ry-radius-lg);
727
751
  }
728
752
 
729
- .ry-accordion__item,
730
- ry-accordion-item {
731
- border-bottom: var(--ry-border-width) solid var(--ry-color-border);
753
+ :is(.ry-accordion__item, ry-accordion-item) {
754
+ border-block-end: var(--ry-border-width) solid var(--ry-color-border);
732
755
  }
733
756
 
734
- .ry-accordion__item:last-child,
735
- ry-accordion-item:last-child {
736
- border-bottom: none;
757
+ :is(.ry-accordion__item, ry-accordion-item):last-child {
758
+ border-block-end: none;
737
759
  }
738
760
 
739
761
  .ry-accordion__trigger {
@@ -763,7 +785,7 @@ ry-accordion-item:last-child {
763
785
  ═══════════════════════════════════════════════════════════════ */
764
786
 
765
787
  .ry-tabs__list {
766
- border-bottom: var(--ry-border-width) solid var(--ry-color-border);
788
+ border-block-end: var(--ry-border-width) solid var(--ry-color-border);
767
789
  }
768
790
 
769
791
  .ry-tabs__trigger {
@@ -782,7 +804,7 @@ ry-accordion-item:last-child {
782
804
 
783
805
  .ry-tabs__trigger[aria-selected="true"] {
784
806
  color: var(--ry-color-primary);
785
- border-bottom-color: var(--ry-color-primary);
807
+ border-block-end-color: var(--ry-color-primary);
786
808
  }
787
809
 
788
810
  .ry-tabs__trigger:focus-visible {
@@ -806,7 +828,7 @@ ry-accordion-item:last-child {
806
828
  }
807
829
 
808
830
  .ry-modal__header {
809
- border-bottom: var(--ry-border-width) solid var(--ry-color-border);
831
+ border-block-end: var(--ry-border-width) solid var(--ry-color-border);
810
832
  }
811
833
 
812
834
  .ry-modal__title {
@@ -829,7 +851,7 @@ ry-accordion-item:last-child {
829
851
  }
830
852
 
831
853
  .ry-modal__footer {
832
- border-top: var(--ry-border-width) solid var(--ry-color-border);
854
+ border-block-start: var(--ry-border-width) solid var(--ry-color-border);
833
855
  background-color: var(--ry-color-bg-subtle);
834
856
  }
835
857
 
@@ -837,16 +859,14 @@ ry-accordion-item:last-child {
837
859
  DROPDOWN
838
860
  ═══════════════════════════════════════════════════════════════ */
839
861
 
840
- .ry-dropdown__menu,
841
- ry-menu {
862
+ :is(.ry-dropdown__menu, ry-menu) {
842
863
  background-color: var(--ry-color-bg);
843
864
  border: var(--ry-border-width) solid var(--ry-color-border);
844
865
  border-radius: var(--ry-radius-lg);
845
866
  box-shadow: var(--ry-shadow-lg);
846
867
  }
847
868
 
848
- .ry-dropdown__item,
849
- ry-menu-item {
869
+ :is(.ry-dropdown__item, ry-menu-item) {
850
870
  font-family: var(--ry-font-sans);
851
871
  font-size: var(--ry-text-sm);
852
872
  color: var(--ry-color-text);
@@ -855,13 +875,11 @@ ry-menu-item {
855
875
  transition: background-color var(--ry-duration-fast) var(--ry-ease);
856
876
  }
857
877
 
858
- .ry-dropdown__item:hover,
859
- ry-menu-item:hover {
878
+ :is(.ry-dropdown__item, ry-menu-item):hover {
860
879
  background-color: var(--ry-color-bg-muted);
861
880
  }
862
881
 
863
- .ry-dropdown__item:focus-visible,
864
- ry-menu-item:focus-visible {
882
+ :is(.ry-dropdown__item, ry-menu-item):focus-visible {
865
883
  outline: none;
866
884
  box-shadow: inset var(--ry-focus-ring);
867
885
  }
@@ -1063,8 +1081,7 @@ ry-select[data-ry-state="open"] .ry-select__trigger {
1063
1081
  transition: background-color var(--ry-duration-fast) var(--ry-ease);
1064
1082
  }
1065
1083
 
1066
- .ry-select__option:hover,
1067
- .ry-select__option[data-highlighted] {
1084
+ .ry-select__option:is(:hover, [data-highlighted]) {
1068
1085
  background-color: var(--ry-color-bg-muted);
1069
1086
  }
1070
1087
 
@@ -1081,106 +1098,131 @@ ry-select[data-ry-state="open"] .ry-select__trigger {
1081
1098
  background-color: transparent;
1082
1099
  }
1083
1100
 
1101
+ /* Multi-select checkmarks */
1102
+ .ry-select__check {
1103
+ color: var(--ry-color-primary);
1104
+ }
1105
+
1106
+ .ry-select__clear {
1107
+ background: transparent;
1108
+ color: var(--ry-color-text-muted);
1109
+ border-radius: var(--ry-radius-full);
1110
+ transition: color var(--ry-duration-fast) var(--ry-ease);
1111
+ }
1112
+
1113
+ .ry-select__clear:hover {
1114
+ color: var(--ry-color-text);
1115
+ }
1116
+
1117
+ /* Multi: checkmark is the indicator, no bg change on selected */
1118
+ ry-select[multiple] .ry-select__option[aria-selected="true"] {
1119
+ background-color: transparent;
1120
+ color: var(--ry-color-text);
1121
+ }
1122
+
1123
+ ry-select[multiple] .ry-select__option[aria-selected="true"]:is(:hover, [data-highlighted]) {
1124
+ background-color: var(--ry-color-bg-muted);
1125
+ }
1126
+
1084
1127
  /* ═══════════════════════════════════════════════════════════════
1085
1128
  CODE
1086
1129
  ═══════════════════════════════════════════════════════════════ */
1087
1130
 
1088
1131
  ry-code {
1089
- background-color: var(--ry-code-bg, #f6f8fa);
1132
+ background-color: var(--ry-code-bg);
1090
1133
  border-radius: var(--ry-radius-lg);
1091
1134
  box-shadow: var(--ry-shadow-lg);
1092
1135
  }
1093
1136
 
1094
1137
  .ry-code__header {
1095
- background-color: var(--ry-code-header-bg, #eaeef2);
1138
+ background-color: var(--ry-code-header-bg);
1096
1139
  }
1097
1140
 
1098
1141
  .ry-code__title {
1099
1142
  font-family: var(--ry-font-sans);
1100
1143
  font-size: var(--ry-text-xs);
1101
1144
  font-weight: var(--ry-font-bold);
1102
- color: var(--ry-code-title-color, #57606a);
1145
+ color: var(--ry-code-title-color);
1103
1146
  }
1104
1147
 
1105
1148
  .ry-code__copy {
1106
1149
  background: transparent;
1107
1150
  border-radius: var(--ry-radius-full);
1108
- color: var(--ry-code-icon-color, #8c959f);
1151
+ color: var(--ry-code-icon-color);
1109
1152
  transition: background-color var(--ry-duration-fast) var(--ry-ease),
1110
1153
  color var(--ry-duration-fast) var(--ry-ease);
1111
1154
  }
1112
1155
 
1113
1156
  .ry-code__copy:hover {
1114
- background-color: var(--ry-code-icon-hover-bg, #d0d7de);
1115
- color: var(--ry-code-icon-hover-color, #24292f);
1157
+ background-color: var(--ry-code-icon-hover-bg);
1158
+ color: var(--ry-code-icon-hover-color);
1116
1159
  }
1117
1160
 
1118
1161
  .ry-code__copy--success {
1119
1162
  color: var(--ry-color-success);
1120
1163
  }
1121
1164
 
1122
- .ry-code__pre,
1123
- .ry-code__code {
1165
+ :is(.ry-code__pre, .ry-code__code) {
1124
1166
  font-family: var(--ry-font-mono);
1125
1167
  font-size: var(--ry-text-sm);
1126
1168
  line-height: var(--ry-leading-relaxed);
1127
- color: var(--ry-code-text-color, #24292f);
1169
+ color: var(--ry-code-text-color);
1128
1170
  }
1129
1171
 
1130
1172
  .ry-code__line-number {
1131
- color: var(--ry-code-line-number-color, rgba(140, 149, 159, 0.6));
1132
- border-right: 1px solid var(--ry-code-line-border-color, #d0d7de);
1173
+ color: var(--ry-code-line-number-color);
1174
+ border-inline-end: 1px solid var(--ry-code-line-border-color);
1133
1175
  }
1134
1176
 
1135
1177
  .ry-code__color-preview {
1136
- border: 1px solid var(--ry-code-color-preview-border, rgba(36, 41, 47, 0.3));
1178
+ border: 1px solid var(--ry-code-color-preview-border);
1137
1179
  border-radius: var(--ry-radius-sm);
1138
1180
  }
1139
1181
 
1140
- /* Syntax highlighting colors (Cool/GitHub light as default) */
1182
+ /* Syntax highlighting colors */
1141
1183
  .ry-code__keyword {
1142
- color: var(--ry-code-keyword, #cf222e);
1184
+ color: var(--ry-code-keyword);
1143
1185
  }
1144
1186
 
1145
1187
  .ry-code__property {
1146
- color: var(--ry-code-property, #0550ae);
1188
+ color: var(--ry-code-property);
1147
1189
  }
1148
1190
 
1149
1191
  .ry-code__value {
1150
- color: var(--ry-code-value, #0a3069);
1192
+ color: var(--ry-code-value);
1151
1193
  }
1152
1194
 
1153
1195
  .ry-code__string {
1154
- color: var(--ry-code-string, #0a3069);
1196
+ color: var(--ry-code-string);
1155
1197
  }
1156
1198
 
1157
1199
  .ry-code__number {
1158
- color: var(--ry-code-number, #0550ae);
1200
+ color: var(--ry-code-number);
1159
1201
  }
1160
1202
 
1161
1203
  .ry-code__comment {
1162
- color: var(--ry-code-comment, #6e7781);
1204
+ color: var(--ry-code-comment);
1163
1205
  font-style: italic;
1164
1206
  }
1165
1207
 
1166
1208
  .ry-code__selector {
1167
- color: var(--ry-code-selector, #116329);
1209
+ color: var(--ry-code-selector);
1168
1210
  }
1169
1211
 
1170
1212
  .ry-code__punctuation {
1171
- color: var(--ry-code-punctuation, #24292f);
1213
+ color: var(--ry-code-punctuation);
1172
1214
  }
1173
1215
 
1174
1216
  .ry-code__tag {
1175
- color: var(--ry-code-tag, #116329);
1217
+ color: var(--ry-code-tag);
1176
1218
  }
1177
1219
 
1178
1220
  .ry-code__attribute {
1179
- color: var(--ry-code-attribute, #0550ae);
1221
+ color: var(--ry-code-attribute);
1180
1222
  }
1181
1223
 
1182
1224
  .ry-code__color {
1183
- color: var(--ry-code-value, #0a3069);
1225
+ color: var(--ry-code-value);
1184
1226
  }
1185
1227
 
1186
1228
  /* ═══════════════════════════════════════════════════════════════
@@ -1249,8 +1291,8 @@ input[type="checkbox"]:checked:hover {
1249
1291
  }
1250
1292
 
1251
1293
  input[type="checkbox"]::after {
1252
- border-right: 2px solid var(--ry-color-text-inverse);
1253
- border-bottom: 2px solid var(--ry-color-text-inverse);
1294
+ border-inline-end: 2px solid var(--ry-color-text-inverse);
1295
+ border-block-end: 2px solid var(--ry-color-text-inverse);
1254
1296
  margin-bottom: 2px;
1255
1297
  }
1256
1298
 
@@ -1314,15 +1356,15 @@ th {
1314
1356
  font-weight: var(--ry-font-semibold);
1315
1357
  color: var(--ry-color-text);
1316
1358
  background-color: var(--ry-color-bg-subtle);
1317
- border-bottom: var(--ry-border-width) solid var(--ry-color-border);
1359
+ border-block-end: var(--ry-border-width) solid var(--ry-color-border);
1318
1360
  }
1319
1361
 
1320
1362
  td {
1321
- border-bottom: var(--ry-border-width) solid var(--ry-color-border);
1363
+ border-block-end: var(--ry-border-width) solid var(--ry-color-border);
1322
1364
  }
1323
1365
 
1324
1366
  tbody tr:last-child td {
1325
- border-bottom: none;
1367
+ border-block-end: none;
1326
1368
  }
1327
1369
 
1328
1370
  tbody tr:hover {
@@ -1335,8 +1377,7 @@ table[data-bordered] {
1335
1377
  border-radius: var(--ry-radius-lg);
1336
1378
  }
1337
1379
 
1338
- table[data-bordered] th,
1339
- table[data-bordered] td {
1380
+ table[data-bordered] :is(th, td) {
1340
1381
  border: var(--ry-border-width) solid var(--ry-color-border);
1341
1382
  }
1342
1383
 
@@ -1371,7 +1412,7 @@ ry-color-picker [data-ry-target="trigger"]:focus-visible {
1371
1412
 
1372
1413
  ry-color-picker [data-ry-target="trigger-color"] {
1373
1414
  border-radius: calc(var(--ry-radius-md) - 1px);
1374
- outline: 3px solid rgba(0, 0, 0, 0.2);
1415
+ outline: 3px solid oklch(0 0 0 / 0.2);
1375
1416
  outline-offset: -3px;
1376
1417
  }
1377
1418
 
@@ -1400,12 +1441,12 @@ ry-color-picker [data-ry-target="grid-handle"] {
1400
1441
  background-color: transparent;
1401
1442
  border: 2px solid #fff;
1402
1443
  border-radius: var(--ry-radius-full);
1403
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.3);
1444
+ box-shadow: 0 0 0 1px oklch(0 0 0 / 0.3), inset 0 0 0 1px oklch(0 0 0 / 0.3);
1404
1445
  }
1405
1446
 
1406
1447
  ry-color-picker [data-ry-target="grid-handle"]:focus-visible {
1407
1448
  outline: none;
1408
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.3), var(--ry-focus-ring);
1449
+ box-shadow: 0 0 0 1px oklch(0 0 0 / 0.3), inset 0 0 0 1px oklch(0 0 0 / 0.3), var(--ry-focus-ring);
1409
1450
  }
1410
1451
 
1411
1452
  /* Hue slider */
@@ -1437,12 +1478,12 @@ ry-color-picker .ry-color-picker__alpha {
1437
1478
  ry-color-picker .ry-color-picker__slider-handle {
1438
1479
  background-color: #fff;
1439
1480
  border-radius: var(--ry-radius-full);
1440
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2), var(--ry-shadow-sm);
1481
+ box-shadow: 0 0 0 1px oklch(0 0 0 / 0.2), var(--ry-shadow-sm);
1441
1482
  }
1442
1483
 
1443
1484
  ry-color-picker .ry-color-picker__slider-handle:focus-visible {
1444
1485
  outline: none;
1445
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2), var(--ry-focus-ring);
1486
+ box-shadow: 0 0 0 1px oklch(0 0 0 / 0.2), var(--ry-focus-ring);
1446
1487
  }
1447
1488
 
1448
1489
  /* Preview */
@@ -1456,7 +1497,7 @@ ry-color-picker [data-ry-target="preview"] {
1456
1497
 
1457
1498
  ry-color-picker [data-ry-target="preview-color"] {
1458
1499
  border-radius: inherit;
1459
- outline: 3px solid rgba(0, 0, 0, 0.2);
1500
+ outline: 3px solid oklch(0 0 0 / 0.2);
1460
1501
  outline-offset: -3px;
1461
1502
  }
1462
1503
 
@@ -1550,7 +1591,7 @@ ry-color-input:focus-within [data-ry-target="trigger"] {
1550
1591
  ry-color-input [data-ry-target="swatch"] {
1551
1592
  background-image: repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%);
1552
1593
  background-size: 8px 8px;
1553
- border-right: var(--ry-border-width) solid var(--ry-color-border);
1594
+ border-inline-end: var(--ry-border-width) solid var(--ry-color-border);
1554
1595
  transition: background-color var(--ry-duration-fast) var(--ry-ease);
1555
1596
  }
1556
1597
 
@@ -1563,7 +1604,7 @@ ry-color-input [data-ry-target="swatch"]:focus-visible {
1563
1604
  }
1564
1605
 
1565
1606
  ry-color-input [data-ry-target="swatch-color"] {
1566
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
1607
+ box-shadow: inset 0 0 0 1px oklch(0 0 0 / 0.1);
1567
1608
  }
1568
1609
 
1569
1610
  ry-color-input [data-ry-target="input"] {
@@ -1647,7 +1688,7 @@ ry-gradient-picker [data-ry-target="shape-control"] button[data-active] {
1647
1688
  /* Gradient bar */
1648
1689
  ry-gradient-picker [data-ry-target="bar"] {
1649
1690
  border-radius: var(--ry-radius-full, 9999px);
1650
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
1691
+ box-shadow: inset 0 0 0 1px oklch(0 0 0 / 0.1);
1651
1692
  }
1652
1693
 
1653
1694
  /* Stop handles */
@@ -1655,7 +1696,7 @@ ry-gradient-picker [data-ry-target="stop"] {
1655
1696
  background-color: var(--stop-color, #fff);
1656
1697
  border: 2px solid #fff;
1657
1698
  border-radius: var(--ry-radius-full);
1658
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), var(--ry-shadow-sm);
1699
+ box-shadow: 0 0 0 1px oklch(0 0 0 / 0.3), var(--ry-shadow-sm);
1659
1700
  transition: transform var(--ry-duration-fast) var(--ry-ease),
1660
1701
  opacity var(--ry-duration-fast) var(--ry-ease);
1661
1702
  }
@@ -1719,7 +1760,7 @@ ry-tree {
1719
1760
 
1720
1761
  /* Vertical connector line */
1721
1762
  .ry-tree__children {
1722
- border-left: 1px solid var(--ry-color-border);
1763
+ border-inline-start: 1px solid var(--ry-color-border);
1723
1764
  }
1724
1765
 
1725
1766
  /* Horizontal connector line */
@@ -1727,8 +1768,7 @@ ry-tree {
1727
1768
  background-color: var(--ry-color-border);
1728
1769
  }
1729
1770
 
1730
- .ry-tree__label,
1731
- .ry-tree__file {
1771
+ :is(.ry-tree__label, .ry-tree__file) {
1732
1772
  font-family: var(--ry-font-sans);
1733
1773
  font-size: var(--ry-text-sm);
1734
1774
  color: var(--ry-color-text);
@@ -1736,8 +1776,7 @@ ry-tree {
1736
1776
  transition: background-color var(--ry-duration-fast) var(--ry-ease);
1737
1777
  }
1738
1778
 
1739
- .ry-tree__label:hover,
1740
- .ry-tree__file:hover {
1779
+ :is(.ry-tree__label, .ry-tree__file):hover {
1741
1780
  background-color: var(--ry-color-bg-muted);
1742
1781
  }
1743
1782
 
@@ -1778,12 +1817,11 @@ input[type="checkbox"].ry-tree__toggle::after {
1778
1817
  }
1779
1818
 
1780
1819
  .ry-tree__item--collapsed {
1781
- background-color: color-mix(in srgb, var(--ry-color-primary) 10%, transparent);
1820
+ background-color: color-mix(in oklch, var(--ry-color-primary) 10%, transparent);
1782
1821
  border-radius: var(--ry-radius-sm);
1783
1822
  }
1784
1823
 
1785
- .ry-tree__item[data-ry-drop-target="before"]::after,
1786
- .ry-tree__item[data-ry-drop-target="after"]::after {
1824
+ .ry-tree__item:is([data-ry-drop-target="before"], [data-ry-drop-target="after"])::after {
1787
1825
  background-color: var(--ry-color-primary);
1788
1826
  }
1789
1827
 
@@ -1796,3 +1834,241 @@ input[type="checkbox"].ry-tree__toggle::after {
1796
1834
  .ry-tree__item[data-ry-drop-target="inside"] > .ry-tree__label .ry-tree__icon {
1797
1835
  color: var(--ry-color-text-inverse);
1798
1836
  }
1837
+
1838
+ /* ═══════════════════════════════════════════════════════════════
1839
+ TAG
1840
+ ═══════════════════════════════════════════════════════════════ */
1841
+
1842
+ ry-tag {
1843
+ font-size: var(--ry-text-xs);
1844
+ font-weight: var(--ry-font-medium);
1845
+ background-color: var(--ry-color-bg-muted);
1846
+ color: var(--ry-color-text);
1847
+ border-radius: var(--ry-radius-full);
1848
+ }
1849
+
1850
+ ry-tag[variant="primary"] {
1851
+ background-color: var(--ry-color-primary);
1852
+ color: var(--ry-color-text-inverse);
1853
+ }
1854
+
1855
+ ry-tag[variant="success"] {
1856
+ background-color: var(--ry-color-success);
1857
+ color: var(--ry-color-text-inverse);
1858
+ }
1859
+
1860
+ ry-tag[variant="warning"] {
1861
+ background-color: var(--ry-color-warning);
1862
+ color: var(--ry-color-text);
1863
+ }
1864
+
1865
+ ry-tag[variant="danger"] {
1866
+ background-color: var(--ry-color-danger);
1867
+ color: var(--ry-color-text-inverse);
1868
+ }
1869
+
1870
+ ry-tag[disabled] {
1871
+ opacity: 0.5;
1872
+ }
1873
+
1874
+ .ry-tag__remove {
1875
+ background: transparent;
1876
+ color: currentColor;
1877
+ border-radius: var(--ry-radius-full);
1878
+ opacity: 0.6;
1879
+ transition: opacity var(--ry-duration-fast) var(--ry-ease);
1880
+ }
1881
+
1882
+ .ry-tag__remove:hover {
1883
+ opacity: 1;
1884
+ }
1885
+
1886
+ /* ═══════════════════════════════════════════════════════════════
1887
+ TAG INPUT
1888
+ ═══════════════════════════════════════════════════════════════ */
1889
+
1890
+ .ry-tag-input__container {
1891
+ background-color: var(--ry-color-bg);
1892
+ border: var(--ry-border-width) solid var(--ry-color-border);
1893
+ border-radius: var(--ry-radius-md);
1894
+ transition: border-color var(--ry-duration-fast) var(--ry-ease),
1895
+ box-shadow var(--ry-duration-fast) var(--ry-ease);
1896
+ }
1897
+
1898
+ .ry-tag-input__container:hover {
1899
+ border-color: var(--ry-color-border-strong);
1900
+ }
1901
+
1902
+ .ry-tag-input__container:focus-within {
1903
+ border-color: var(--ry-color-primary);
1904
+ box-shadow: var(--ry-focus-ring);
1905
+ }
1906
+
1907
+ .ry-tag-input__input {
1908
+ font-family: var(--ry-font-sans);
1909
+ font-size: var(--ry-text-sm);
1910
+ color: var(--ry-color-text);
1911
+ background: transparent;
1912
+ }
1913
+
1914
+ .ry-tag-input__input::placeholder {
1915
+ color: var(--ry-color-text-muted);
1916
+ }
1917
+
1918
+ ry-tag-input[disabled] .ry-tag-input__container {
1919
+ opacity: 0.5;
1920
+ background-color: var(--ry-color-bg-muted);
1921
+ }
1922
+
1923
+ /* ═══════════════════════════════════════════════════════════════
1924
+ HERO
1925
+ ═══════════════════════════════════════════════════════════════ */
1926
+
1927
+ ry-hero h1 {
1928
+ font-size: var(--ry-text-4xl);
1929
+ font-weight: var(--ry-font-bold);
1930
+ line-height: var(--ry-leading-tight);
1931
+ color: var(--ry-color-text);
1932
+ }
1933
+
1934
+ ry-hero p {
1935
+ font-size: var(--ry-text-lg);
1936
+ line-height: var(--ry-leading-relaxed);
1937
+ color: var(--ry-color-text-muted);
1938
+ }
1939
+
1940
+ /* ═══════════════════════════════════════════════════════════════
1941
+ STAT
1942
+ ═══════════════════════════════════════════════════════════════ */
1943
+
1944
+ .ry-stat__value {
1945
+ font-size: var(--ry-text-3xl);
1946
+ font-weight: var(--ry-font-bold);
1947
+ color: var(--ry-color-text);
1948
+ }
1949
+
1950
+ ry-stat[size="sm"] .ry-stat__value {
1951
+ font-size: var(--ry-text-2xl);
1952
+ }
1953
+
1954
+ ry-stat[size="lg"] .ry-stat__value {
1955
+ font-size: var(--ry-text-4xl);
1956
+ }
1957
+
1958
+ .ry-stat__label {
1959
+ font-size: var(--ry-text-sm);
1960
+ color: var(--ry-color-text-muted);
1961
+ }
1962
+
1963
+ .ry-stat__trend--up {
1964
+ color: var(--ry-color-success);
1965
+ }
1966
+
1967
+ .ry-stat__trend--down {
1968
+ color: var(--ry-color-danger);
1969
+ }
1970
+
1971
+ /* ═══════════════════════════════════════════════════════════════
1972
+ FEATURE
1973
+ ═══════════════════════════════════════════════════════════════ */
1974
+
1975
+ .ry-feature__icon {
1976
+ background-color: var(--ry-color-primary);
1977
+ color: var(--ry-color-text-inverse);
1978
+ border-radius: var(--ry-radius-full);
1979
+ }
1980
+
1981
+ ry-feature h3 {
1982
+ font-size: var(--ry-text-lg);
1983
+ font-weight: var(--ry-font-semibold);
1984
+ color: var(--ry-color-text);
1985
+ }
1986
+
1987
+ ry-feature p {
1988
+ font-size: var(--ry-text-sm);
1989
+ color: var(--ry-color-text-muted);
1990
+ line-height: var(--ry-leading-relaxed);
1991
+ }
1992
+
1993
+ /* ═══════════════════════════════════════════════════════════════
1994
+ PRICING
1995
+ ═══════════════════════════════════════════════════════════════ */
1996
+
1997
+ ry-pricing-card {
1998
+ background-color: var(--ry-color-bg);
1999
+ border: var(--ry-border-width) solid var(--ry-color-border);
2000
+ border-radius: var(--ry-radius-xl);
2001
+ box-shadow: var(--ry-shadow-sm);
2002
+ }
2003
+
2004
+ ry-pricing-card[featured] {
2005
+ border-color: var(--ry-color-primary);
2006
+ box-shadow: var(--ry-shadow-lg);
2007
+ }
2008
+
2009
+ ry-pricing-card h3 {
2010
+ font-size: var(--ry-text-xl);
2011
+ font-weight: var(--ry-font-semibold);
2012
+ color: var(--ry-color-text);
2013
+ }
2014
+
2015
+ ry-pricing-card [slot="price"] {
2016
+ font-size: var(--ry-text-4xl);
2017
+ font-weight: var(--ry-font-bold);
2018
+ color: var(--ry-color-text);
2019
+ }
2020
+
2021
+ ry-pricing-card [slot="price"] span {
2022
+ font-size: var(--ry-text-base);
2023
+ font-weight: var(--ry-font-normal);
2024
+ color: var(--ry-color-text-muted);
2025
+ }
2026
+
2027
+ ry-pricing-card ul li {
2028
+ border-block-end: var(--ry-border-width) solid var(--ry-color-border);
2029
+ font-size: var(--ry-text-sm);
2030
+ color: var(--ry-color-text-muted);
2031
+ }
2032
+
2033
+ ry-pricing-card ul li:last-child {
2034
+ border-block-end: none;
2035
+ }
2036
+
2037
+ /* ═══════════════════════════════════════════════════════════════
2038
+ CAROUSEL
2039
+ ═══════════════════════════════════════════════════════════════ */
2040
+
2041
+ .ry-carousel__arrow {
2042
+ background-color: var(--ry-color-bg);
2043
+ color: var(--ry-color-text);
2044
+ border-radius: var(--ry-radius-full);
2045
+ box-shadow: var(--ry-shadow-md);
2046
+ transition: background-color var(--ry-duration-fast) var(--ry-ease),
2047
+ box-shadow var(--ry-duration-fast) var(--ry-ease);
2048
+ }
2049
+
2050
+ .ry-carousel__arrow:hover {
2051
+ background-color: var(--ry-color-bg-muted);
2052
+ box-shadow: var(--ry-shadow-lg);
2053
+ }
2054
+
2055
+ .ry-carousel__arrow:focus-visible {
2056
+ outline: none;
2057
+ box-shadow: var(--ry-focus-ring);
2058
+ }
2059
+
2060
+ .ry-carousel__dot {
2061
+ background-color: var(--ry-color-border);
2062
+ border-radius: var(--ry-radius-full);
2063
+ transition: background-color var(--ry-duration-fast) var(--ry-ease);
2064
+ }
2065
+
2066
+ .ry-carousel__dot[data-active] {
2067
+ background-color: var(--ry-color-primary);
2068
+ }
2069
+
2070
+ .ry-carousel__dot:hover {
2071
+ background-color: var(--ry-color-primary-hover);
2072
+ }
2073
+
2074
+ } /* @layer ry-theme */