@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
@@ -10,6 +10,13 @@
10
10
  * only theme CSS requires .ry-* classes.
11
11
  */
12
12
 
13
+ @layer ry-structure {
14
+
15
+ /* Enable native height: auto animation for all components */
16
+ :root {
17
+ interpolate-size: allow-keywords;
18
+ }
19
+
13
20
  /* ═══════════════════════════════════════════════════════════════
14
21
  SCROLL LOCK (for modals, drawers)
15
22
  ═══════════════════════════════════════════════════════════════ */
@@ -31,21 +38,23 @@ ry {
31
38
  BOX SIZING RESET
32
39
  ═══════════════════════════════════════════════════════════════ */
33
40
 
34
- [data-ry-target],
35
- ry-page, ry-header, ry-main, ry-footer, ry-section, ry-aside,
36
- ry-grid, ry-stack, ry-cluster, ry-split, ry-center,
37
- ry-card, ry-accordion, ry-modal, ry-tabs, ry-dropdown,
38
- ry-button, ry-badge, ry-alert, ry-field, ry-nav, ry-logo, ry-actions,
39
- ry-accordion-item, ry-tab, ry-menu, ry-menu-item, ry-divider,
40
- ry-theme-toggle, ry-select, ry-switch, ry-tooltip, ry-drawer, ry-toast,
41
- ry-toggle-button, ry-knob, ry-slider, ry-number-select, ry-color-picker, ry-color-input,
42
- ry-tree, ry-tree-item {
41
+ :where([data-ry-target],
42
+ ry-page, ry-header, ry-main, ry-footer, ry-section, ry-aside,
43
+ ry-grid, ry-stack, ry-cluster, ry-split, ry-center,
44
+ ry-card, ry-accordion, ry-modal, ry-tabs, ry-dropdown,
45
+ ry-button, ry-badge, ry-alert, ry-field, ry-nav, ry-logo, ry-actions,
46
+ ry-accordion-item, ry-tab, ry-menu, ry-menu-item, ry-divider,
47
+ ry-theme-toggle, ry-select, ry-switch, ry-tooltip, ry-drawer, ry-toast,
48
+ ry-toggle-button, ry-knob, ry-slider, ry-number-select, ry-color-picker, ry-color-input,
49
+ ry-gradient-picker, ry-tree, ry-tree-item,
50
+ ry-tag, ry-tag-input, ry-hero, ry-stat, ry-feature, ry-feature-grid,
51
+ ry-pricing, ry-pricing-card, ry-carousel) {
43
52
  box-sizing: border-box;
44
53
  }
45
54
 
46
- [data-ry-target] *,
47
- ry-page *, ry-header *, ry-main *, ry-footer *, ry-section *,
48
- ry-card *, ry-accordion *, ry-modal *, ry-tabs *, ry-dropdown * {
55
+ :where([data-ry-target],
56
+ ry-page, ry-header, ry-main, ry-footer, ry-section,
57
+ ry-card, ry-accordion, ry-modal, ry-tabs, ry-dropdown) * {
49
58
  box-sizing: inherit;
50
59
  }
51
60
 
@@ -54,51 +63,40 @@ ry-card *, ry-accordion *, ry-modal *, ry-tabs *, ry-dropdown * {
54
63
  ═══════════════════════════════════════════════════════════════ */
55
64
 
56
65
  /* Block elements */
57
- ry-page,
58
- ry-header,
59
- ry-main,
60
- ry-footer,
61
- ry-section,
62
- ry-aside,
63
- ry-card,
64
- ry-accordion,
65
- ry-accordion-item,
66
- ry-tabs,
67
- ry-tab,
68
- ry-alert,
69
- ry-field {
66
+ :is(ry-page, ry-header, ry-main, ry-footer, ry-section, ry-aside,
67
+ ry-card, ry-accordion, ry-accordion-item, ry-tabs, ry-tab, ry-alert, ry-field,
68
+ ry-tag-input, ry-carousel) {
70
69
  display: block;
71
70
  }
72
71
 
73
72
  /* Flex containers */
74
- ry-grid,
75
- ry-stack,
76
- ry-cluster,
77
- ry-split,
78
- ry-center,
79
- ry-nav,
80
- ry-actions {
73
+ :is(ry-grid, ry-stack, ry-cluster, ry-split, ry-center, ry-nav, ry-actions) {
81
74
  display: flex;
82
75
  }
83
76
 
84
77
  /* Inline elements */
85
- ry-badge,
86
- ry-logo {
78
+ :is(ry-badge, ry-logo, ry-tag) {
87
79
  display: inline-flex;
88
80
  }
89
81
 
90
82
  /* Contents (wrapper doesn't affect layout) */
91
- ry-modal,
92
- ry-drawer {
83
+ :is(ry-modal, ry-drawer) {
93
84
  display: contents;
94
85
  }
95
86
 
96
87
  /* Button-like elements */
97
- ry-button,
98
- ry-menu-item {
88
+ :is(ry-button, ry-menu-item) {
99
89
  display: inline-flex;
100
90
  }
101
91
 
92
+ /* Balanced text wrapping for headings in overlay/display components */
93
+ :is(ry-modal [data-ry-target="header"] h3,
94
+ ry-card h3,
95
+ ry-hero h1,
96
+ ry-pricing-card h3) {
97
+ text-wrap: balance;
98
+ }
99
+
102
100
  /* ═══════════════════════════════════════════════════════════════
103
101
  PAGE LAYOUT
104
102
  ═══════════════════════════════════════════════════════════════ */
@@ -108,6 +106,8 @@ ry-page {
108
106
  flex-direction: column;
109
107
  min-height: 100vh;
110
108
  min-height: 100dvh;
109
+ container-type: inline-size;
110
+ scrollbar-gutter: stable;
111
111
  }
112
112
 
113
113
  /* ═══════════════════════════════════════════════════════════════
@@ -138,6 +138,8 @@ ry-main {
138
138
  max-width: 1200px;
139
139
  margin: 0 auto;
140
140
  padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
141
+ container-type: inline-size;
142
+ scrollbar-gutter: stable;
141
143
  }
142
144
 
143
145
  /* ═══════════════════════════════════════════════════════════════
@@ -154,11 +156,12 @@ ry-footer {
154
156
  ═══════════════════════════════════════════════════════════════ */
155
157
 
156
158
  ry-section {
157
- margin-bottom: var(--ry-space-12, 3rem);
159
+ margin-block-end: var(--ry-space-12, 3rem);
160
+ container-type: inline-size;
158
161
  }
159
162
 
160
163
  ry-section:last-child {
161
- margin-bottom: 0;
164
+ margin-block-end: 0;
162
165
  }
163
166
 
164
167
  /* ═══════════════════════════════════════════════════════════════
@@ -177,21 +180,16 @@ ry-grid[cols="4"] { grid-template-columns: repeat(4, 1fr); }
177
180
  ry-grid[cols="5"] { grid-template-columns: repeat(5, 1fr); }
178
181
  ry-grid[cols="6"] { grid-template-columns: repeat(6, 1fr); }
179
182
 
180
- @media (max-width: 640px) {
181
- ry-grid[cols="2"],
182
- ry-grid[cols="3"],
183
- ry-grid[cols="4"],
184
- ry-grid[cols="5"],
185
- ry-grid[cols="6"] {
183
+ @container (max-width: 640px) {
184
+ :is(ry-grid[cols="2"], ry-grid[cols="3"], ry-grid[cols="4"],
185
+ ry-grid[cols="5"], ry-grid[cols="6"]) {
186
186
  grid-template-columns: 1fr;
187
187
  }
188
188
  }
189
189
 
190
- @media (min-width: 641px) and (max-width: 1024px) {
191
- ry-grid[cols="3"],
192
- ry-grid[cols="4"],
193
- ry-grid[cols="5"],
194
- ry-grid[cols="6"] {
190
+ @container (min-width: 641px) and (max-width: 1024px) {
191
+ :is(ry-grid[cols="3"], ry-grid[cols="4"],
192
+ ry-grid[cols="5"], ry-grid[cols="6"]) {
195
193
  grid-template-columns: repeat(2, 1fr);
196
194
  }
197
195
  }
@@ -244,7 +242,7 @@ ry-split > :last-child {
244
242
  width: 300px;
245
243
  }
246
244
 
247
- @media (max-width: 768px) {
245
+ @container (max-width: 768px) {
248
246
  ry-split {
249
247
  flex-direction: column;
250
248
  }
@@ -305,14 +303,16 @@ ry-actions {
305
303
  ry-divider {
306
304
  display: block;
307
305
  height: 1px;
308
- margin: var(--ry-space-4, 1rem) 0;
306
+ margin-block: var(--ry-space-4, 1rem);
307
+ margin-inline: 0;
309
308
  }
310
309
 
311
310
  ry-divider[vertical] {
312
311
  width: 1px;
313
312
  height: auto;
314
313
  align-self: stretch;
315
- margin: 0 var(--ry-space-4, 1rem);
314
+ margin-block: 0;
315
+ margin-inline: var(--ry-space-4, 1rem);
316
316
  }
317
317
 
318
318
  /* ═══════════════════════════════════════════════════════════════
@@ -390,7 +390,7 @@ ry-toggle-button[icon][size="lg"]:empty {
390
390
  ry-toggle-button[block] {
391
391
  display: block;
392
392
  width: 100%;
393
- text-align: left;
393
+ text-align: start;
394
394
  padding: var(--ry-space-4, 1rem);
395
395
  }
396
396
 
@@ -472,8 +472,7 @@ ry-number-select[disabled] {
472
472
  pointer-events: none;
473
473
  }
474
474
 
475
- ry-number-select [data-ry-target="decrement"],
476
- ry-number-select [data-ry-target="increment"] {
475
+ ry-number-select :is([data-ry-target="decrement"], [data-ry-target="increment"]) {
477
476
  display: inline-flex;
478
477
  align-items: center;
479
478
  justify-content: center;
@@ -484,8 +483,7 @@ ry-number-select [data-ry-target="increment"] {
484
483
  cursor: pointer;
485
484
  }
486
485
 
487
- ry-number-select [data-ry-target="decrement"] svg,
488
- ry-number-select [data-ry-target="increment"] svg {
486
+ ry-number-select :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg {
489
487
  width: 16px;
490
488
  height: 16px;
491
489
  }
@@ -502,8 +500,10 @@ ry-number-select [data-ry-target="display"] {
502
500
  outline: none;
503
501
  }
504
502
 
505
- ry-number-select[drag="y"] [data-ry-target="display"],
506
- ry-number-select[arrows="stacked"]:not([drag]) [data-ry-target="display"] {
503
+ :is(ry-number-select[drag="y"],
504
+ ry-number-select[arrows="stacked"]:not([drag]),
505
+ ry-number-select[arrows="stacked-end"]:not([drag]),
506
+ ry-number-select[arrows="stacked-start"]:not([drag])) [data-ry-target="display"] {
507
507
  cursor: ns-resize;
508
508
  }
509
509
 
@@ -515,8 +515,10 @@ ry-number-select[data-dragging] {
515
515
  cursor: ew-resize;
516
516
  }
517
517
 
518
- ry-number-select[drag="y"][data-dragging],
519
- ry-number-select[arrows="stacked"]:not([drag])[data-dragging] {
518
+ :is(ry-number-select[drag="y"],
519
+ ry-number-select[arrows="stacked"]:not([drag]),
520
+ ry-number-select[arrows="stacked-end"]:not([drag]),
521
+ ry-number-select[arrows="stacked-start"]:not([drag]))[data-dragging] {
520
522
  cursor: ns-resize;
521
523
  }
522
524
 
@@ -527,8 +529,7 @@ ry-number-select [data-ry-target="value"] {
527
529
  transition: transform 60ms ease-out;
528
530
  }
529
531
 
530
- ry-number-select [data-ry-target="prefix"],
531
- ry-number-select [data-ry-target="suffix"] {
532
+ ry-number-select :is([data-ry-target="prefix"], [data-ry-target="suffix"]) {
532
533
  flex-shrink: 0;
533
534
  pointer-events: none;
534
535
  }
@@ -547,7 +548,7 @@ ry-number-select [data-ry-target="input"] {
547
548
  ry-number-select [data-ry-target="label"] {
548
549
  display: block;
549
550
  text-align: center;
550
- margin-right: var(--ry-space-2, 0.5rem);
551
+ margin-inline-end: var(--ry-space-2, 0.5rem);
551
552
  order: -1;
552
553
  }
553
554
 
@@ -557,31 +558,42 @@ ry-number-select[arrows="stacked"] {
557
558
  align-items: stretch;
558
559
  }
559
560
 
560
- ry-number-select[arrows="stacked"] [data-ry-target="decrement"],
561
- ry-number-select[arrows="stacked"] [data-ry-target="increment"] {
561
+ ry-number-select[arrows="stacked"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) {
562
562
  width: auto;
563
563
  height: 24px;
564
564
  }
565
565
 
566
- ry-number-select[arrows="stacked"] [data-ry-target="decrement"] svg,
567
- ry-number-select[arrows="stacked"] [data-ry-target="increment"] svg {
566
+ ry-number-select[arrows="stacked"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg {
568
567
  width: 14px;
569
568
  height: 14px;
570
569
  }
571
570
 
571
+ /* Stacked-end / stacked-start (buttons grouped beside display) */
572
+ ry-number-select [data-ry-target="btn-group"] {
573
+ display: flex;
574
+ flex-direction: column;
575
+ flex-shrink: 0;
576
+ }
577
+
578
+ :is(ry-number-select[arrows="stacked-end"], ry-number-select[arrows="stacked-start"]) :is([data-ry-target="decrement"], [data-ry-target="increment"]) {
579
+ width: 28px;
580
+ height: 18px;
581
+ }
582
+
583
+ :is(ry-number-select[arrows="stacked-end"], ry-number-select[arrows="stacked-start"]) :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg {
584
+ width: 12px;
585
+ height: 12px;
586
+ }
587
+
572
588
  /* Sizes */
573
- ry-number-select[size="xs"] [data-ry-target="decrement"],
574
- ry-number-select[size="xs"] [data-ry-target="increment"] { width: 20px; height: 22px; }
589
+ ry-number-select[size="xs"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) { width: 20px; height: 22px; }
575
590
  ry-number-select[size="xs"] [data-ry-target="display"] { min-width: 28px; height: 22px; padding: 0 var(--ry-space-1, 0.25rem); }
576
- ry-number-select[size="xs"] [data-ry-target="decrement"] svg,
577
- ry-number-select[size="xs"] [data-ry-target="increment"] svg { width: 12px; height: 12px; }
591
+ ry-number-select[size="xs"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg { width: 12px; height: 12px; }
578
592
 
579
- ry-number-select[size="sm"] [data-ry-target="decrement"],
580
- ry-number-select[size="sm"] [data-ry-target="increment"] { width: 24px; height: 28px; }
593
+ ry-number-select[size="sm"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) { width: 24px; height: 28px; }
581
594
  ry-number-select[size="sm"] [data-ry-target="display"] { min-width: 36px; height: 28px; }
582
595
 
583
- ry-number-select[size="lg"] [data-ry-target="decrement"],
584
- ry-number-select[size="lg"] [data-ry-target="increment"] { width: 40px; height: 44px; }
596
+ ry-number-select[size="lg"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) { width: 40px; height: 44px; }
585
597
  ry-number-select[size="lg"] [data-ry-target="display"] { min-width: 60px; height: 44px; }
586
598
 
587
599
  /* ═══════════════════════════════════════════════════════════════
@@ -627,7 +639,7 @@ ry-slider [data-ry-target^="thumb"]:active {
627
639
  ry-slider [data-ry-target="labels"] {
628
640
  display: flex;
629
641
  justify-content: space-between;
630
- margin-top: var(--ry-space-2, 0.5rem);
642
+ margin-block-start: var(--ry-space-2, 0.5rem);
631
643
  pointer-events: none;
632
644
  }
633
645
 
@@ -641,16 +653,25 @@ ry-slider [data-ry-target^="tooltip"] {
641
653
  visibility: hidden;
642
654
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
643
655
  visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
656
+ transition-behavior: allow-discrete;
644
657
  pointer-events: none;
645
658
  }
646
659
 
647
- ry-slider [data-ry-target^="thumb"]:hover [data-ry-target^="tooltip"],
648
- ry-slider [data-ry-target^="thumb"]:focus [data-ry-target^="tooltip"],
649
- ry-slider[data-dragging] [data-ry-target^="tooltip"] {
660
+ :is(ry-slider [data-ry-target^="thumb"]:hover,
661
+ ry-slider [data-ry-target^="thumb"]:focus,
662
+ ry-slider[data-dragging]) [data-ry-target^="tooltip"] {
650
663
  opacity: 1;
651
664
  visibility: visible;
652
665
  }
653
666
 
667
+ @starting-style {
668
+ :is(ry-slider [data-ry-target^="thumb"]:hover,
669
+ ry-slider [data-ry-target^="thumb"]:focus,
670
+ ry-slider[data-dragging]) [data-ry-target^="tooltip"] {
671
+ opacity: 0;
672
+ }
673
+ }
674
+
654
675
  /* Vertical */
655
676
  ry-slider[vertical] {
656
677
  display: inline-flex;
@@ -681,8 +702,8 @@ ry-slider[vertical] [data-ry-target="labels"] {
681
702
  flex-direction: column-reverse;
682
703
  justify-content: space-between;
683
704
  height: 100%;
684
- margin-top: 0;
685
- margin-left: var(--ry-space-2, 0.5rem);
705
+ margin-block-start: 0;
706
+ margin-inline-start: var(--ry-space-2, 0.5rem);
686
707
  }
687
708
 
688
709
  /* Sizes */
@@ -696,6 +717,7 @@ ry-slider[size="lg"] { --ry-slider-track: 18px; --ry-slider-thumb: 40px; }
696
717
  ry-card {
697
718
  display: block;
698
719
  padding: var(--ry-space-6, 1.5rem);
720
+ container-type: inline-size;
699
721
  }
700
722
 
701
723
  ry-card h3 {
@@ -744,28 +766,24 @@ ry-alert [data-ry-target="content"] {
744
766
  FORM ELEMENTS
745
767
  ═══════════════════════════════════════════════════════════════ */
746
768
 
747
- ry-field input,
748
- ry-field textarea,
749
- ry-field select {
769
+ ry-field :is(input, textarea, select) {
750
770
  display: block;
751
771
  width: 100%;
752
772
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
753
773
  }
754
774
 
755
- ry-field input:disabled,
756
- ry-field textarea:disabled {
775
+ ry-field :is(input, textarea):disabled {
757
776
  cursor: not-allowed;
758
777
  }
759
778
 
760
- ry-field label,
761
- ry-field [data-ry-target="label"] {
779
+ ry-field :is(label, [data-ry-target="label"]) {
762
780
  display: block;
763
- margin-bottom: var(--ry-space-2, 0.5rem);
781
+ margin-block-end: var(--ry-space-2, 0.5rem);
764
782
  }
765
783
 
766
784
  ry-field {
767
785
  display: block;
768
- margin-bottom: var(--ry-space-4, 1rem);
786
+ margin-block-end: var(--ry-space-4, 1rem);
769
787
  }
770
788
 
771
789
  /* ═══════════════════════════════════════════════════════════════
@@ -782,7 +800,7 @@ ry-accordion [data-ry-target="trigger"] {
782
800
  justify-content: space-between;
783
801
  width: 100%;
784
802
  padding: var(--ry-space-4, 1rem) var(--ry-space-6, 1.5rem);
785
- text-align: left;
803
+ text-align: start;
786
804
  border: none;
787
805
  cursor: pointer;
788
806
  }
@@ -819,14 +837,14 @@ ry-tabs {
819
837
  ry-tabs [data-ry-target="list"] {
820
838
  display: flex;
821
839
  gap: var(--ry-space-1, 0.25rem);
822
- margin-bottom: var(--ry-space-4, 1rem);
840
+ margin-block-end: var(--ry-space-4, 1rem);
823
841
  }
824
842
 
825
843
  ry-tabs [data-ry-target="trigger"] {
826
844
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-4, 1rem);
827
845
  border: none;
828
- border-bottom: 2px solid transparent;
829
- margin-bottom: -1px;
846
+ border-block-end: 2px solid transparent;
847
+ margin-block-end: -1px;
830
848
  cursor: pointer;
831
849
  }
832
850
 
@@ -835,9 +853,9 @@ ry-tab {
835
853
  display: none;
836
854
  }
837
855
 
838
- ry-tabs [data-ry-target="panel"][data-ry-state="active"],
839
- ry-tab[active],
840
- ry-tab[data-ry-state="active"] {
856
+ :is(ry-tabs [data-ry-target="panel"][data-ry-state="active"],
857
+ ry-tab[active],
858
+ ry-tab[data-ry-state="active"]) {
841
859
  display: block;
842
860
  }
843
861
 
@@ -861,6 +879,7 @@ ry-modal [data-ry-target="backdrop"] {
861
879
  visibility: hidden;
862
880
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
863
881
  visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
882
+ transition-behavior: allow-discrete;
864
883
  }
865
884
 
866
885
  ry-modal[data-ry-state="open"] [data-ry-target="backdrop"] {
@@ -868,6 +887,12 @@ ry-modal[data-ry-state="open"] [data-ry-target="backdrop"] {
868
887
  visibility: visible;
869
888
  }
870
889
 
890
+ @starting-style {
891
+ ry-modal[data-ry-state="open"] [data-ry-target="backdrop"] {
892
+ opacity: 0;
893
+ }
894
+ }
895
+
871
896
  ry-modal [data-ry-target="dialog"] {
872
897
  position: fixed;
873
898
  top: 50%;
@@ -877,12 +902,14 @@ ry-modal [data-ry-target="dialog"] {
877
902
  max-width: 32rem;
878
903
  max-height: calc(100vh - var(--ry-space-8, 2rem));
879
904
  overflow: auto;
905
+ overscroll-behavior: contain;
880
906
  opacity: 0;
881
907
  visibility: hidden;
882
908
  transform: translate(-50%, -50%) scale(0.95);
883
909
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
884
910
  visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
885
911
  transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
912
+ transition-behavior: allow-discrete;
886
913
  }
887
914
 
888
915
  ry-modal[data-ry-state="open"] [data-ry-target="dialog"] {
@@ -891,6 +918,13 @@ ry-modal[data-ry-state="open"] [data-ry-target="dialog"] {
891
918
  transform: translate(-50%, -50%) scale(1);
892
919
  }
893
920
 
921
+ @starting-style {
922
+ ry-modal[data-ry-state="open"] [data-ry-target="dialog"] {
923
+ opacity: 0;
924
+ transform: translate(-50%, -50%) scale(0.95);
925
+ }
926
+ }
927
+
894
928
  ry-modal [data-ry-target="header"] {
895
929
  display: flex;
896
930
  align-items: center;
@@ -933,14 +967,13 @@ ry-dropdown {
933
967
  display: inline-block;
934
968
  }
935
969
 
936
- ry-dropdown [data-ry-target="menu"],
937
- ry-dropdown ry-menu {
970
+ ry-dropdown :is([data-ry-target="menu"], ry-menu) {
938
971
  position: absolute;
939
972
  top: 100%;
940
973
  left: 0;
941
974
  z-index: var(--ry-z-dropdown, 1000);
942
975
  min-width: 12rem;
943
- margin-top: var(--ry-space-1, 0.25rem);
976
+ margin-block-start: var(--ry-space-1, 0.25rem);
944
977
  padding: var(--ry-space-1, 0.25rem);
945
978
  opacity: 0;
946
979
  visibility: hidden;
@@ -948,26 +981,31 @@ ry-dropdown ry-menu {
948
981
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
949
982
  visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
950
983
  transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
984
+ transition-behavior: allow-discrete;
951
985
  }
952
986
 
953
- ry-dropdown[data-ry-state="open"] [data-ry-target="menu"],
954
- ry-dropdown[data-ry-state="open"] ry-menu {
987
+ ry-dropdown[data-ry-state="open"] :is([data-ry-target="menu"], ry-menu) {
955
988
  opacity: 1;
956
989
  visibility: visible;
957
990
  transform: translateY(0);
958
991
  }
959
992
 
960
- ry-dropdown[data-ry-position="top"] [data-ry-target="menu"],
961
- ry-dropdown[data-ry-position="top"] ry-menu {
993
+ @starting-style {
994
+ ry-dropdown[data-ry-state="open"] :is([data-ry-target="menu"], ry-menu) {
995
+ opacity: 0;
996
+ transform: translateY(-0.5rem);
997
+ }
998
+ }
999
+
1000
+ ry-dropdown[data-ry-position="top"] :is([data-ry-target="menu"], ry-menu) {
962
1001
  top: auto;
963
1002
  bottom: 100%;
964
- margin-top: 0;
965
- margin-bottom: var(--ry-space-1, 0.25rem);
1003
+ margin-block-start: 0;
1004
+ margin-block-end: var(--ry-space-1, 0.25rem);
966
1005
  transform: translateY(0.5rem);
967
1006
  }
968
1007
 
969
- ry-dropdown[data-ry-position="top"][data-ry-state="open"] [data-ry-target="menu"],
970
- ry-dropdown[data-ry-position="top"][data-ry-state="open"] ry-menu {
1008
+ ry-dropdown[data-ry-position="top"][data-ry-state="open"] :is([data-ry-target="menu"], ry-menu) {
971
1009
  transform: translateY(0);
972
1010
  }
973
1011
 
@@ -975,7 +1013,7 @@ ry-menu-item {
975
1013
  display: block;
976
1014
  width: 100%;
977
1015
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
978
- text-align: left;
1016
+ text-align: start;
979
1017
  text-decoration: none;
980
1018
  border: none;
981
1019
  cursor: pointer;
@@ -1052,6 +1090,7 @@ ry-tooltip [data-ry-target="content"] {
1052
1090
  pointer-events: none;
1053
1091
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
1054
1092
  visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
1093
+ transition-behavior: allow-discrete;
1055
1094
  }
1056
1095
 
1057
1096
  ry-tooltip[data-ry-state="open"] [data-ry-target="content"] {
@@ -1059,6 +1098,12 @@ ry-tooltip[data-ry-state="open"] [data-ry-target="content"] {
1059
1098
  visibility: visible;
1060
1099
  }
1061
1100
 
1101
+ @starting-style {
1102
+ ry-tooltip[data-ry-state="open"] [data-ry-target="content"] {
1103
+ opacity: 0;
1104
+ }
1105
+ }
1106
+
1062
1107
  /* Tooltip positioning - CSS handles all layout, no JS needed */
1063
1108
  ry-tooltip[data-ry-position="top"] [data-ry-target="content"] {
1064
1109
  bottom: 100%;
@@ -1104,6 +1149,7 @@ ry-drawer [data-ry-target="backdrop"] {
1104
1149
  visibility: hidden;
1105
1150
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
1106
1151
  visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
1152
+ transition-behavior: allow-discrete;
1107
1153
  }
1108
1154
 
1109
1155
  ry-drawer[data-ry-state="open"] [data-ry-target="backdrop"] {
@@ -1111,6 +1157,12 @@ ry-drawer[data-ry-state="open"] [data-ry-target="backdrop"] {
1111
1157
  visibility: visible;
1112
1158
  }
1113
1159
 
1160
+ @starting-style {
1161
+ ry-drawer[data-ry-state="open"] [data-ry-target="backdrop"] {
1162
+ opacity: 0;
1163
+ }
1164
+ }
1165
+
1114
1166
  ry-drawer [data-ry-target="panel"] {
1115
1167
  position: fixed;
1116
1168
  z-index: var(--ry-z-modal, 1050);
@@ -1119,6 +1171,7 @@ ry-drawer [data-ry-target="panel"] {
1119
1171
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
1120
1172
  visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
1121
1173
  transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
1174
+ transition-behavior: allow-discrete;
1122
1175
  }
1123
1176
 
1124
1177
  ry-drawer[data-ry-state="open"] [data-ry-target="panel"] {
@@ -1126,6 +1179,12 @@ ry-drawer[data-ry-state="open"] [data-ry-target="panel"] {
1126
1179
  visibility: visible;
1127
1180
  }
1128
1181
 
1182
+ @starting-style {
1183
+ ry-drawer[data-ry-state="open"] [data-ry-target="panel"] {
1184
+ opacity: 0;
1185
+ }
1186
+ }
1187
+
1129
1188
  /* Left drawer */
1130
1189
  ry-drawer [data-ry-target="panel"][data-ry-side="left"] {
1131
1190
  top: 0;
@@ -1200,6 +1259,7 @@ ry-drawer [data-ry-target="content"] {
1200
1259
  padding: var(--ry-space-6, 1.5rem);
1201
1260
  padding-top: var(--ry-space-12, 3rem);
1202
1261
  overflow-y: auto;
1262
+ overscroll-behavior: contain;
1203
1263
  height: 100%;
1204
1264
  }
1205
1265
 
@@ -1229,6 +1289,7 @@ ry-toast {
1229
1289
  transform: translateX(1rem);
1230
1290
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
1231
1291
  transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
1292
+ transition-behavior: allow-discrete;
1232
1293
  }
1233
1294
 
1234
1295
  ry-toast[data-ry-state="visible"] {
@@ -1236,6 +1297,13 @@ ry-toast[data-ry-state="visible"] {
1236
1297
  transform: translateX(0);
1237
1298
  }
1238
1299
 
1300
+ @starting-style {
1301
+ ry-toast[data-ry-state="visible"] {
1302
+ opacity: 0;
1303
+ transform: translateX(1rem);
1304
+ }
1305
+ }
1306
+
1239
1307
  ry-toast[data-ry-state="hiding"] {
1240
1308
  opacity: 0;
1241
1309
  transform: translateX(1rem);
@@ -1313,16 +1381,18 @@ ry-select [data-ry-target="dropdown"] {
1313
1381
  left: 0;
1314
1382
  right: 0;
1315
1383
  z-index: var(--ry-z-dropdown, 1000);
1316
- margin-top: var(--ry-space-1, 0.25rem);
1384
+ margin-block-start: var(--ry-space-1, 0.25rem);
1317
1385
  padding: var(--ry-space-1, 0.25rem);
1318
1386
  max-height: 15rem;
1319
1387
  overflow-y: auto;
1388
+ overscroll-behavior: contain;
1320
1389
  opacity: 0;
1321
1390
  visibility: hidden;
1322
1391
  transform: translateY(-0.5rem);
1323
1392
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
1324
1393
  visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
1325
1394
  transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
1395
+ transition-behavior: allow-discrete;
1326
1396
  }
1327
1397
 
1328
1398
  ry-select[data-ry-state="open"] [data-ry-target="dropdown"] {
@@ -1331,11 +1401,18 @@ ry-select[data-ry-state="open"] [data-ry-target="dropdown"] {
1331
1401
  transform: translateY(0);
1332
1402
  }
1333
1403
 
1404
+ @starting-style {
1405
+ ry-select[data-ry-state="open"] [data-ry-target="dropdown"] {
1406
+ opacity: 0;
1407
+ transform: translateY(-0.5rem);
1408
+ }
1409
+ }
1410
+
1334
1411
  ry-select[data-ry-position="top"] [data-ry-target="dropdown"] {
1335
1412
  top: auto;
1336
1413
  bottom: 100%;
1337
- margin-top: 0;
1338
- margin-bottom: var(--ry-space-1, 0.25rem);
1414
+ margin-block-start: 0;
1415
+ margin-block-end: var(--ry-space-1, 0.25rem);
1339
1416
  transform: translateY(0.5rem);
1340
1417
  }
1341
1418
 
@@ -1367,6 +1444,58 @@ ry-option {
1367
1444
  display: none;
1368
1445
  }
1369
1446
 
1447
+ /* Multi-select trigger */
1448
+ ry-select[multiple] [data-ry-target="trigger"] {
1449
+ flex-wrap: wrap;
1450
+ gap: var(--ry-space-1, 0.25rem);
1451
+ min-height: 2.5rem;
1452
+ }
1453
+
1454
+ ry-select[multiple] [data-ry-target="tags"] {
1455
+ display: contents;
1456
+ }
1457
+
1458
+ ry-select[multiple] [data-ry-target="clear"] {
1459
+ display: flex;
1460
+ align-items: center;
1461
+ justify-content: center;
1462
+ flex-shrink: 0;
1463
+ width: 1.25rem;
1464
+ height: 1.25rem;
1465
+ padding: 0;
1466
+ border: none;
1467
+ cursor: pointer;
1468
+ }
1469
+
1470
+ ry-select[multiple] [data-ry-target="clear"] svg {
1471
+ width: 14px;
1472
+ height: 14px;
1473
+ }
1474
+
1475
+ ry-select [data-ry-target="check"] {
1476
+ display: inline-flex;
1477
+ align-items: center;
1478
+ width: 1rem;
1479
+ height: 1rem;
1480
+ flex-shrink: 0;
1481
+ opacity: 0;
1482
+ }
1483
+
1484
+ ry-select [data-ry-target="check"] svg {
1485
+ width: 14px;
1486
+ height: 14px;
1487
+ }
1488
+
1489
+ ry-select [data-ry-target="option"][aria-selected="true"] [data-ry-target="check"] {
1490
+ opacity: 1;
1491
+ }
1492
+
1493
+ ry-select[multiple] [data-ry-target="option"] {
1494
+ display: flex;
1495
+ align-items: center;
1496
+ gap: var(--ry-space-2, 0.5rem);
1497
+ }
1498
+
1370
1499
  /* ═══════════════════════════════════════════════════════════════
1371
1500
  KEYFRAMES (structural animations)
1372
1501
  ═══════════════════════════════════════════════════════════════ */
@@ -1403,7 +1532,7 @@ ry-option {
1403
1532
  ry-code {
1404
1533
  display: block;
1405
1534
  overflow: hidden;
1406
- margin-bottom: var(--ry-space-4, 1rem);
1535
+ margin-block-end: var(--ry-space-4, 1rem);
1407
1536
  }
1408
1537
 
1409
1538
  ry-code [data-ry-target="header"] {
@@ -1457,22 +1586,22 @@ ry-code .ry-code__line {
1457
1586
  ry-code .ry-code__line-number {
1458
1587
  flex-shrink: 0;
1459
1588
  width: 2rem;
1460
- text-align: right;
1461
- padding-right: var(--ry-space-2, 0.5rem);
1589
+ text-align: end;
1590
+ padding-inline-end: var(--ry-space-2, 0.5rem);
1462
1591
  user-select: none;
1463
1592
  }
1464
1593
 
1465
1594
  ry-code .ry-code__line-content {
1466
1595
  flex: 1;
1467
1596
  min-width: 0;
1468
- padding-left: var(--ry-space-2, 0.5rem);
1597
+ padding-inline-start: var(--ry-space-2, 0.5rem);
1469
1598
  }
1470
1599
 
1471
1600
  ry-code .ry-code__color-preview {
1472
1601
  display: inline-block;
1473
1602
  width: 0.625rem;
1474
1603
  height: 0.625rem;
1475
- margin-right: var(--ry-space-1, 0.25rem);
1604
+ margin-inline-end: var(--ry-space-1, 0.25rem);
1476
1605
  vertical-align: middle;
1477
1606
  }
1478
1607
 
@@ -1496,7 +1625,7 @@ ry-example [data-ry-target="preview"] {
1496
1625
  padding: var(--ry-space-4, 1rem);
1497
1626
  }
1498
1627
 
1499
- @media (max-width: 768px) {
1628
+ @container (max-width: 768px) {
1500
1629
  ry-example {
1501
1630
  grid-template-columns: 1fr;
1502
1631
  }
@@ -1508,7 +1637,7 @@ ry-example[data-stacked] {
1508
1637
 
1509
1638
  .ry-example__usage {
1510
1639
  grid-column: 1 / -1;
1511
- margin-top: var(--ry-space-2, 0.5rem);
1640
+ padding-block-end: 3rem;
1512
1641
  }
1513
1642
 
1514
1643
  .ry-example__usage-toggle {
@@ -1529,7 +1658,7 @@ ry-example[data-stacked] {
1529
1658
  }
1530
1659
 
1531
1660
  .ry-example__usage-panel {
1532
- margin-top: var(--ry-space-2, 0.5rem);
1661
+ margin-block-start: var(--ry-space-2, 0.5rem);
1533
1662
  }
1534
1663
 
1535
1664
  .ry-example__usage-panel[hidden] {
@@ -1633,7 +1762,7 @@ input[type="radio"]:checked::after {
1633
1762
  table {
1634
1763
  width: 100%;
1635
1764
  border-collapse: collapse;
1636
- text-align: left;
1765
+ text-align: start;
1637
1766
  }
1638
1767
 
1639
1768
  th, td {
@@ -1642,7 +1771,7 @@ th, td {
1642
1771
  }
1643
1772
 
1644
1773
  th {
1645
- text-align: left;
1774
+ text-align: start;
1646
1775
  }
1647
1776
 
1648
1777
  /* ═══════════════════════════════════════════════════════════════
@@ -1956,7 +2085,7 @@ ry-gradient-picker [data-ry-target="angle-control"] {
1956
2085
  display: flex;
1957
2086
  align-items: center;
1958
2087
  gap: var(--ry-space-1, 0.25rem);
1959
- margin-left: auto;
2088
+ margin-inline-start: auto;
1960
2089
  }
1961
2090
 
1962
2091
  ry-gradient-picker [data-ry-target="angle-control"] ry-number-select {
@@ -1967,7 +2096,7 @@ ry-gradient-picker [data-ry-target="angle-control"] ry-number-select {
1967
2096
  ry-gradient-picker [data-ry-target="shape-control"] {
1968
2097
  display: none;
1969
2098
  gap: var(--ry-space-1, 0.25rem);
1970
- margin-left: auto;
2099
+ margin-inline-start: auto;
1971
2100
  }
1972
2101
 
1973
2102
  ry-gradient-picker [data-ry-target="shape-control"] button {
@@ -1996,15 +2125,7 @@ ry-gradient-picker[data-ry-type="radial"] [data-ry-target="shape-control"] {
1996
2125
  }
1997
2126
 
1998
2127
  /* When solid: hide bar, angle, shape */
1999
- ry-gradient-picker[data-ry-type="solid"] [data-ry-target="bar-container"] {
2000
- display: none;
2001
- }
2002
-
2003
- ry-gradient-picker[data-ry-type="solid"] [data-ry-target="angle-control"] {
2004
- display: none;
2005
- }
2006
-
2007
- ry-gradient-picker[data-ry-type="solid"] [data-ry-target="shape-control"] {
2128
+ ry-gradient-picker[data-ry-type="solid"] :is([data-ry-target="bar-container"], [data-ry-target="angle-control"], [data-ry-target="shape-control"]) {
2008
2129
  display: none;
2009
2130
  }
2010
2131
 
@@ -2093,36 +2214,34 @@ ry-tree-item {
2093
2214
  display: none;
2094
2215
  }
2095
2216
 
2096
- .ry-tree__root,
2097
- .ry-tree__children {
2217
+ :is(.ry-tree__root, .ry-tree__children) {
2098
2218
  list-style: none;
2099
2219
  padding: 0;
2100
2220
  margin: 0;
2101
2221
  }
2102
2222
 
2103
2223
  .ry-tree__children {
2104
- margin-left: 11px;
2105
- padding-left: 11px;
2224
+ margin-inline-start: 11px;
2225
+ padding-inline-start: 11px;
2106
2226
  overflow: hidden;
2107
2227
  }
2108
2228
 
2109
2229
  .ry-tree__item {
2110
2230
  position: relative;
2111
- margin-top: var(--ry-space-1, 0.25rem);
2231
+ margin-block-start: var(--ry-space-1, 0.25rem);
2112
2232
  }
2113
2233
 
2114
2234
  /* Horizontal connector lines for nested items */
2115
2235
  .ry-tree__children .ry-tree__item::before {
2116
2236
  content: "";
2117
2237
  position: absolute;
2118
- left: -11px;
2238
+ inset-inline-start: -11px;
2119
2239
  top: 14px;
2120
2240
  width: 11px;
2121
2241
  height: 1px;
2122
2242
  }
2123
2243
 
2124
- .ry-tree__label,
2125
- .ry-tree__file {
2244
+ :is(.ry-tree__label, .ry-tree__file) {
2126
2245
  display: flex;
2127
2246
  align-items: center;
2128
2247
  gap: var(--ry-space-2, 0.5rem);
@@ -2201,12 +2320,10 @@ ry-tree[no-animate] .ry-tree__children-wrapper {
2201
2320
  pointer-events: none;
2202
2321
  }
2203
2322
 
2204
- .ry-tree__item[data-ry-drop-target="before"]::after,
2205
- .ry-tree__item[data-ry-drop-target="after"]::after {
2323
+ .ry-tree__item:is([data-ry-drop-target="before"], [data-ry-drop-target="after"])::after {
2206
2324
  content: '';
2207
2325
  position: absolute;
2208
- left: 0;
2209
- right: 0;
2326
+ inset-inline: 0;
2210
2327
  height: 2px;
2211
2328
  pointer-events: none;
2212
2329
  }
@@ -2218,3 +2335,358 @@ ry-tree[no-animate] .ry-tree__children-wrapper {
2218
2335
  .ry-tree__item[data-ry-drop-target="after"]::after {
2219
2336
  bottom: -1px;
2220
2337
  }
2338
+
2339
+ /* ═══════════════════════════════════════════════════════════════
2340
+ TAG
2341
+ ═══════════════════════════════════════════════════════════════ */
2342
+
2343
+ ry-tag {
2344
+ display: inline-flex;
2345
+ align-items: center;
2346
+ gap: var(--ry-space-1, 0.25rem);
2347
+ padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
2348
+ max-width: 100%;
2349
+ line-height: 1;
2350
+ }
2351
+
2352
+ ry-tag[disabled] {
2353
+ pointer-events: none;
2354
+ }
2355
+
2356
+ ry-tag [data-ry-target="label"] {
2357
+ overflow: hidden;
2358
+ text-overflow: ellipsis;
2359
+ white-space: nowrap;
2360
+ }
2361
+
2362
+ ry-tag [data-ry-target="remove"] {
2363
+ display: inline-flex;
2364
+ align-items: center;
2365
+ justify-content: center;
2366
+ flex-shrink: 0;
2367
+ width: 1rem;
2368
+ height: 1rem;
2369
+ padding: 0;
2370
+ border: none;
2371
+ cursor: pointer;
2372
+ }
2373
+
2374
+ ry-tag [data-ry-target="remove"] svg {
2375
+ width: 12px;
2376
+ height: 12px;
2377
+ }
2378
+
2379
+ /* Size variants */
2380
+ ry-tag[size="sm"] {
2381
+ padding: 2px var(--ry-space-1, 0.25rem);
2382
+ }
2383
+
2384
+ ry-tag[size="sm"] [data-ry-target="remove"] {
2385
+ width: 0.75rem;
2386
+ height: 0.75rem;
2387
+ }
2388
+
2389
+ ry-tag[size="sm"] [data-ry-target="remove"] svg {
2390
+ width: 10px;
2391
+ height: 10px;
2392
+ }
2393
+
2394
+ ry-tag[size="lg"] {
2395
+ padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
2396
+ }
2397
+
2398
+ /* ═══════════════════════════════════════════════════════════════
2399
+ TAG INPUT
2400
+ ═══════════════════════════════════════════════════════════════ */
2401
+
2402
+ ry-tag-input {
2403
+ display: block;
2404
+ }
2405
+
2406
+ ry-tag-input [data-ry-target="container"] {
2407
+ display: flex;
2408
+ flex-wrap: wrap;
2409
+ align-items: center;
2410
+ gap: var(--ry-space-1, 0.25rem);
2411
+ padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
2412
+ min-height: 2.5rem;
2413
+ cursor: text;
2414
+ }
2415
+
2416
+ ry-tag-input [data-ry-target="input"] {
2417
+ flex: 1;
2418
+ min-width: 60px;
2419
+ padding: var(--ry-space-1, 0.25rem) 0;
2420
+ border: none;
2421
+ outline: none;
2422
+ }
2423
+
2424
+ ry-tag-input[disabled] [data-ry-target="container"] {
2425
+ cursor: not-allowed;
2426
+ }
2427
+
2428
+ /* ═══════════════════════════════════════════════════════════════
2429
+ HERO
2430
+ ═══════════════════════════════════════════════════════════════ */
2431
+
2432
+ ry-hero {
2433
+ display: flex;
2434
+ flex-direction: column;
2435
+ align-items: center;
2436
+ justify-content: center;
2437
+ padding: var(--ry-space-16, 4rem) var(--ry-space-6, 1.5rem);
2438
+ max-width: 48rem;
2439
+ margin-inline: auto;
2440
+ text-align: center;
2441
+ }
2442
+
2443
+ ry-hero[align="left"] {
2444
+ align-items: flex-start;
2445
+ text-align: start;
2446
+ }
2447
+
2448
+ ry-hero > * + * {
2449
+ margin-block-start: var(--ry-space-4, 1rem);
2450
+ }
2451
+
2452
+ ry-hero > h1 {
2453
+ margin: 0;
2454
+ }
2455
+
2456
+ ry-hero > p {
2457
+ margin: 0;
2458
+ margin-block-start: var(--ry-space-4, 1rem);
2459
+ }
2460
+
2461
+ /* Size variants */
2462
+ ry-hero[size="sm"] {
2463
+ padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
2464
+ }
2465
+
2466
+ ry-hero[size="lg"] {
2467
+ padding: var(--ry-space-20, 5rem) var(--ry-space-6, 1.5rem);
2468
+ }
2469
+
2470
+ ry-hero[full-bleed] {
2471
+ max-width: none;
2472
+ }
2473
+
2474
+ /* ═══════════════════════════════════════════════════════════════
2475
+ STAT
2476
+ ═══════════════════════════════════════════════════════════════ */
2477
+
2478
+ ry-stat {
2479
+ display: flex;
2480
+ flex-direction: column;
2481
+ gap: var(--ry-space-1, 0.25rem);
2482
+ }
2483
+
2484
+ ry-stat[align="center"] {
2485
+ align-items: center;
2486
+ text-align: center;
2487
+ }
2488
+
2489
+ ry-stat [data-ry-target="value"] {
2490
+ display: flex;
2491
+ align-items: center;
2492
+ gap: var(--ry-space-2, 0.5rem);
2493
+ }
2494
+
2495
+ ry-stat [data-ry-target="trend"] svg {
2496
+ width: 20px;
2497
+ height: 20px;
2498
+ }
2499
+
2500
+ /* Size variants */
2501
+ ry-stat[size="sm"] [data-ry-target="trend"] svg {
2502
+ width: 16px;
2503
+ height: 16px;
2504
+ }
2505
+
2506
+ /* ═══════════════════════════════════════════════════════════════
2507
+ FEATURE + FEATURE GRID
2508
+ ═══════════════════════════════════════════════════════════════ */
2509
+
2510
+ ry-feature-grid {
2511
+ display: grid;
2512
+ gap: var(--ry-space-6, 1.5rem);
2513
+ }
2514
+
2515
+ ry-feature-grid[cols="2"] { grid-template-columns: repeat(2, 1fr); }
2516
+ ry-feature-grid[cols="3"] { grid-template-columns: repeat(3, 1fr); }
2517
+ ry-feature-grid[cols="4"] { grid-template-columns: repeat(4, 1fr); }
2518
+
2519
+ @container (max-width: 640px) {
2520
+ :is(ry-feature-grid[cols="2"], ry-feature-grid[cols="3"], ry-feature-grid[cols="4"]) {
2521
+ grid-template-columns: 1fr;
2522
+ }
2523
+ }
2524
+
2525
+ @container (min-width: 641px) and (max-width: 1024px) {
2526
+ :is(ry-feature-grid[cols="3"], ry-feature-grid[cols="4"]) {
2527
+ grid-template-columns: repeat(2, 1fr);
2528
+ }
2529
+ }
2530
+
2531
+ ry-feature {
2532
+ display: flex;
2533
+ flex-direction: column;
2534
+ gap: var(--ry-space-3, 0.75rem);
2535
+ }
2536
+
2537
+ ry-feature[align="center"] {
2538
+ align-items: center;
2539
+ text-align: center;
2540
+ }
2541
+
2542
+ ry-feature [data-ry-target="icon"] {
2543
+ display: flex;
2544
+ align-items: center;
2545
+ justify-content: center;
2546
+ width: 3rem;
2547
+ height: 3rem;
2548
+ flex-shrink: 0;
2549
+ }
2550
+
2551
+ ry-feature [data-ry-target="icon"] svg {
2552
+ width: 24px;
2553
+ height: 24px;
2554
+ }
2555
+
2556
+ ry-feature h3 {
2557
+ margin: 0;
2558
+ }
2559
+
2560
+ ry-feature p {
2561
+ margin: 0;
2562
+ }
2563
+
2564
+ /* ═══════════════════════════════════════════════════════════════
2565
+ PRICING + PRICING CARD
2566
+ ═══════════════════════════════════════════════════════════════ */
2567
+
2568
+ ry-pricing {
2569
+ display: flex;
2570
+ flex-wrap: wrap;
2571
+ justify-content: center;
2572
+ gap: var(--ry-space-6, 1.5rem);
2573
+ align-items: stretch;
2574
+ }
2575
+
2576
+ @container (max-width: 640px) {
2577
+ ry-pricing {
2578
+ flex-direction: column;
2579
+ align-items: center;
2580
+ }
2581
+ }
2582
+
2583
+ ry-pricing-card {
2584
+ display: flex;
2585
+ flex-direction: column;
2586
+ padding: var(--ry-space-8, 2rem);
2587
+ width: 100%;
2588
+ max-width: 20rem;
2589
+ }
2590
+
2591
+ ry-pricing-card[featured] {
2592
+ transform: scale(1.05);
2593
+ z-index: 1;
2594
+ }
2595
+
2596
+ ry-pricing-card h3 {
2597
+ margin: 0 0 var(--ry-space-2, 0.5rem) 0;
2598
+ }
2599
+
2600
+ ry-pricing-card [slot="price"] {
2601
+ margin-block-end: var(--ry-space-6, 1.5rem);
2602
+ }
2603
+
2604
+ ry-pricing-card [slot="price"] span {
2605
+ display: inline;
2606
+ }
2607
+
2608
+ ry-pricing-card ul {
2609
+ list-style: none;
2610
+ padding: 0;
2611
+ margin: 0 0 var(--ry-space-6, 1.5rem) 0;
2612
+ flex: 1;
2613
+ }
2614
+
2615
+ ry-pricing-card ul li {
2616
+ padding: var(--ry-space-2, 0.5rem) 0;
2617
+ }
2618
+
2619
+ ry-pricing-card :is(ry-button, .ry-btn) {
2620
+ margin-block-start: auto;
2621
+ }
2622
+
2623
+ /* ═══════════════════════════════════════════════════════════════
2624
+ CAROUSEL
2625
+ ═══════════════════════════════════════════════════════════════ */
2626
+
2627
+ ry-carousel {
2628
+ display: block;
2629
+ position: relative;
2630
+ overflow: hidden;
2631
+ outline: none;
2632
+ }
2633
+
2634
+ ry-carousel [data-ry-target="viewport"] {
2635
+ overflow: hidden;
2636
+ touch-action: pan-y;
2637
+ }
2638
+
2639
+ ry-carousel [data-ry-target="track"] {
2640
+ display: flex;
2641
+ transition: transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
2642
+ }
2643
+
2644
+ ry-carousel [data-ry-target="slide"] {
2645
+ flex: 0 0 100%;
2646
+ min-width: 0;
2647
+ }
2648
+
2649
+ ry-carousel :is([data-ry-target="prev"], [data-ry-target="next"]) {
2650
+ position: absolute;
2651
+ top: 50%;
2652
+ transform: translateY(-50%);
2653
+ z-index: 1;
2654
+ display: flex;
2655
+ align-items: center;
2656
+ justify-content: center;
2657
+ width: 2.5rem;
2658
+ height: 2.5rem;
2659
+ padding: 0;
2660
+ border: none;
2661
+ cursor: pointer;
2662
+ }
2663
+
2664
+ ry-carousel [data-ry-target="prev"] {
2665
+ left: var(--ry-space-3, 0.75rem);
2666
+ }
2667
+
2668
+ ry-carousel [data-ry-target="next"] {
2669
+ right: var(--ry-space-3, 0.75rem);
2670
+ }
2671
+
2672
+ ry-carousel :is([data-ry-target="prev"], [data-ry-target="next"]) svg {
2673
+ width: 20px;
2674
+ height: 20px;
2675
+ }
2676
+
2677
+ ry-carousel [data-ry-target="dots"] {
2678
+ display: flex;
2679
+ justify-content: center;
2680
+ gap: var(--ry-space-2, 0.5rem);
2681
+ padding: var(--ry-space-3, 0.75rem) 0;
2682
+ }
2683
+
2684
+ ry-carousel [data-ry-target="dot"] {
2685
+ width: 0.5rem;
2686
+ height: 0.5rem;
2687
+ padding: 0;
2688
+ border: none;
2689
+ cursor: pointer;
2690
+ }
2691
+
2692
+ } /* @layer ry-structure */