@ryanhelsing/ry-ui 1.0.2 → 1.0.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 (59) hide show
  1. package/AGENT.md +460 -0
  2. package/AGENTS.md +57 -0
  3. package/README.md +45 -1
  4. package/dist/components/ry-button-group.d.ts +32 -0
  5. package/dist/components/ry-button-group.d.ts.map +1 -0
  6. package/dist/components/ry-carousel.d.ts +21 -0
  7. package/dist/components/ry-carousel.d.ts.map +1 -0
  8. package/dist/components/ry-feature.d.ts +21 -0
  9. package/dist/components/ry-feature.d.ts.map +1 -0
  10. package/dist/components/ry-field.d.ts +7 -1
  11. package/dist/components/ry-field.d.ts.map +1 -1
  12. package/dist/components/ry-hero.d.ts +16 -0
  13. package/dist/components/ry-hero.d.ts.map +1 -0
  14. package/dist/components/ry-number-select.d.ts.map +1 -1
  15. package/dist/components/ry-pricing.d.ts +21 -0
  16. package/dist/components/ry-pricing.d.ts.map +1 -0
  17. package/dist/components/ry-select.d.ts +8 -1
  18. package/dist/components/ry-select.d.ts.map +1 -1
  19. package/dist/components/ry-split.d.ts +28 -0
  20. package/dist/components/ry-split.d.ts.map +1 -0
  21. package/dist/components/ry-stat.d.ts +17 -0
  22. package/dist/components/ry-stat.d.ts.map +1 -0
  23. package/dist/components/ry-tag-input.d.ts +18 -0
  24. package/dist/components/ry-tag-input.d.ts.map +1 -0
  25. package/dist/components/ry-tag.d.ts +19 -0
  26. package/dist/components/ry-tag.d.ts.map +1 -0
  27. package/dist/core/ry-transform.d.ts.map +1 -1
  28. package/dist/css/ry-structure.css +739 -149
  29. package/dist/css/ry-theme.css +581 -180
  30. package/dist/css/ry-tokens.css +120 -24
  31. package/dist/css/ry-ui.css +4965 -1065
  32. package/dist/ry-ui.d.ts +9 -0
  33. package/dist/ry-ui.d.ts.map +1 -1
  34. package/dist/ry-ui.js +1309 -778
  35. package/dist/ry-ui.js.map +1 -1
  36. package/dist/themes/dark.css +7 -90
  37. package/dist/themes/light.css +6 -35
  38. package/dist/themes/ocean.css +22 -26
  39. package/docs/components/accordion.md +31 -0
  40. package/docs/components/button-group.md +36 -0
  41. package/docs/components/button.md +65 -0
  42. package/docs/components/color.md +84 -0
  43. package/docs/components/display.md +69 -0
  44. package/docs/components/drawer.md +36 -0
  45. package/docs/components/dropdown.md +33 -0
  46. package/docs/components/forms.md +90 -0
  47. package/docs/components/knob.md +42 -0
  48. package/docs/components/layout.md +217 -0
  49. package/docs/components/modal.md +38 -0
  50. package/docs/components/number-select.md +42 -0
  51. package/docs/components/slider.md +48 -0
  52. package/docs/components/tabs.md +30 -0
  53. package/docs/components/theme-toggle.md +36 -0
  54. package/docs/components/toast.md +27 -0
  55. package/docs/components/tooltip.md +14 -0
  56. package/docs/components/tree.md +46 -0
  57. package/docs/theming.md +182 -0
  58. package/package.json +8 -4
  59. 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-button-group, 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,25 +180,52 @@ 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
+ /* Auto-fit mode: fluid columns based on min-width */
184
+ ry-grid[cols="auto-fit"] {
185
+ grid-template-columns: repeat(auto-fit, minmax(var(--ry-grid-min, 280px), 1fr));
186
+ }
187
+
188
+ ry-grid[cols="auto-fill"] {
189
+ grid-template-columns: repeat(auto-fill, minmax(var(--ry-grid-min, 280px), 1fr));
190
+ }
191
+
192
+ /* Default responsive behavior */
193
+ @container (max-width: 640px) {
194
+ :is(ry-grid[cols="2"], ry-grid[cols="3"], ry-grid[cols="4"],
195
+ ry-grid[cols="5"], ry-grid[cols="6"]) {
186
196
  grid-template-columns: 1fr;
187
197
  }
188
198
  }
189
199
 
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"] {
200
+ @container (min-width: 641px) and (max-width: 1024px) {
201
+ :is(ry-grid[cols="3"], ry-grid[cols="4"],
202
+ ry-grid[cols="5"], ry-grid[cols="6"]) {
195
203
  grid-template-columns: repeat(2, 1fr);
196
204
  }
197
205
  }
198
206
 
207
+ /* Per-breakpoint column overrides: cols-sm, cols-md, cols-lg */
208
+ @container (max-width: 640px) {
209
+ ry-grid[cols-sm="1"] { grid-template-columns: 1fr; }
210
+ ry-grid[cols-sm="2"] { grid-template-columns: repeat(2, 1fr); }
211
+ ry-grid[cols-sm="3"] { grid-template-columns: repeat(3, 1fr); }
212
+ }
213
+
214
+ @container (min-width: 641px) and (max-width: 1024px) {
215
+ ry-grid[cols-md="1"] { grid-template-columns: 1fr; }
216
+ ry-grid[cols-md="2"] { grid-template-columns: repeat(2, 1fr); }
217
+ ry-grid[cols-md="3"] { grid-template-columns: repeat(3, 1fr); }
218
+ ry-grid[cols-md="4"] { grid-template-columns: repeat(4, 1fr); }
219
+ }
220
+
221
+ @container (min-width: 1025px) {
222
+ ry-grid[cols-lg="2"] { grid-template-columns: repeat(2, 1fr); }
223
+ ry-grid[cols-lg="3"] { grid-template-columns: repeat(3, 1fr); }
224
+ ry-grid[cols-lg="4"] { grid-template-columns: repeat(4, 1fr); }
225
+ ry-grid[cols-lg="5"] { grid-template-columns: repeat(5, 1fr); }
226
+ ry-grid[cols-lg="6"] { grid-template-columns: repeat(6, 1fr); }
227
+ }
228
+
199
229
  /* ═══════════════════════════════════════════════════════════════
200
230
  STACK (vertical)
201
231
  ═══════════════════════════════════════════════════════════════ */
@@ -241,16 +271,58 @@ ry-split > :first-child {
241
271
 
242
272
  ry-split > :last-child {
243
273
  flex-shrink: 0;
244
- width: 300px;
274
+ width: var(--ry-split-width, 300px);
275
+ min-width: var(--ry-split-min-width, 0);
245
276
  }
246
277
 
247
- @media (max-width: 768px) {
278
+ /* Resize handle */
279
+ ry-split [data-ry-target="handle"] {
280
+ flex-shrink: 0;
281
+ width: 8px;
282
+ margin-inline: -4px;
283
+ cursor: col-resize;
284
+ position: relative;
285
+ z-index: 1;
286
+ touch-action: none;
287
+ }
288
+
289
+ /* Larger hit area via pseudo-element */
290
+ ry-split [data-ry-target="handle"]::before {
291
+ content: '';
292
+ position: absolute;
293
+ inset-block: 0;
294
+ inset-inline: -4px;
295
+ }
296
+
297
+ /* Visible drag indicator */
298
+ ry-split [data-ry-target="handle"]::after {
299
+ content: '';
300
+ position: absolute;
301
+ inset-block-start: 50%;
302
+ inset-inline-start: 50%;
303
+ width: 4px;
304
+ height: 32px;
305
+ transform: translate(-50%, -50%);
306
+ border-radius: 2px;
307
+ opacity: 0;
308
+ transition: opacity var(--ry-duration-fast, 100ms);
309
+ }
310
+
311
+ ry-split [data-ry-target="handle"]:hover::after,
312
+ ry-split[data-ry-resizing] [data-ry-target="handle"]::after {
313
+ opacity: 1;
314
+ }
315
+
316
+ @container (max-width: 768px) {
248
317
  ry-split {
249
318
  flex-direction: column;
250
319
  }
251
320
  ry-split > :last-child {
252
321
  width: 100%;
253
322
  }
323
+ ry-split [data-ry-target="handle"] {
324
+ display: none;
325
+ }
254
326
  }
255
327
 
256
328
  /* ═══════════════════════════════════════════════════════════════
@@ -305,14 +377,16 @@ ry-actions {
305
377
  ry-divider {
306
378
  display: block;
307
379
  height: 1px;
308
- margin: var(--ry-space-4, 1rem) 0;
380
+ margin-block: var(--ry-space-4, 1rem);
381
+ margin-inline: 0;
309
382
  }
310
383
 
311
384
  ry-divider[vertical] {
312
385
  width: 1px;
313
386
  height: auto;
314
387
  align-self: stretch;
315
- margin: 0 var(--ry-space-4, 1rem);
388
+ margin-block: 0;
389
+ margin-inline: var(--ry-space-4, 1rem);
316
390
  }
317
391
 
318
392
  /* ═══════════════════════════════════════════════════════════════
@@ -344,6 +418,37 @@ ry-button[size="lg"] {
344
418
  padding: var(--ry-space-3, 0.75rem) var(--ry-space-6, 1.5rem);
345
419
  }
346
420
 
421
+ /* Icon-only button */
422
+ ry-button[icon]:empty {
423
+ padding: var(--ry-space-2, 0.5rem);
424
+ }
425
+
426
+ ry-button[icon][size="sm"]:empty {
427
+ padding: var(--ry-space-1, 0.25rem);
428
+ }
429
+
430
+ /* ═══════════════════════════════════════════════════════════════
431
+ BUTTON GROUP
432
+ ═══════════════════════════════════════════════════════════════ */
433
+
434
+ ry-button-group {
435
+ display: inline-flex;
436
+ }
437
+
438
+ ry-button-group > :is(ry-button, ry-toggle-button) {
439
+ border-radius: 0;
440
+ }
441
+
442
+ ry-button-group > :is(ry-button, ry-toggle-button):first-child {
443
+ border-start-start-radius: var(--ry-radius-md, 0.375rem);
444
+ border-end-start-radius: var(--ry-radius-md, 0.375rem);
445
+ }
446
+
447
+ ry-button-group > :is(ry-button, ry-toggle-button):last-child {
448
+ border-start-end-radius: var(--ry-radius-md, 0.375rem);
449
+ border-end-end-radius: var(--ry-radius-md, 0.375rem);
450
+ }
451
+
347
452
  /* ═══════════════════════════════════════════════════════════════
348
453
  TOGGLE BUTTON
349
454
  ═══════════════════════════════════════════════════════════════ */
@@ -390,7 +495,7 @@ ry-toggle-button[icon][size="lg"]:empty {
390
495
  ry-toggle-button[block] {
391
496
  display: block;
392
497
  width: 100%;
393
- text-align: left;
498
+ text-align: start;
394
499
  padding: var(--ry-space-4, 1rem);
395
500
  }
396
501
 
@@ -472,8 +577,7 @@ ry-number-select[disabled] {
472
577
  pointer-events: none;
473
578
  }
474
579
 
475
- ry-number-select [data-ry-target="decrement"],
476
- ry-number-select [data-ry-target="increment"] {
580
+ ry-number-select :is([data-ry-target="decrement"], [data-ry-target="increment"]) {
477
581
  display: inline-flex;
478
582
  align-items: center;
479
583
  justify-content: center;
@@ -484,8 +588,7 @@ ry-number-select [data-ry-target="increment"] {
484
588
  cursor: pointer;
485
589
  }
486
590
 
487
- ry-number-select [data-ry-target="decrement"] svg,
488
- ry-number-select [data-ry-target="increment"] svg {
591
+ ry-number-select :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg {
489
592
  width: 16px;
490
593
  height: 16px;
491
594
  }
@@ -502,8 +605,10 @@ ry-number-select [data-ry-target="display"] {
502
605
  outline: none;
503
606
  }
504
607
 
505
- ry-number-select[drag="y"] [data-ry-target="display"],
506
- ry-number-select[arrows="stacked"]:not([drag]) [data-ry-target="display"] {
608
+ :is(ry-number-select[drag="y"],
609
+ ry-number-select[arrows="stacked"]:not([drag]),
610
+ ry-number-select[arrows="stacked-end"]:not([drag]),
611
+ ry-number-select[arrows="stacked-start"]:not([drag])) [data-ry-target="display"] {
507
612
  cursor: ns-resize;
508
613
  }
509
614
 
@@ -515,8 +620,10 @@ ry-number-select[data-dragging] {
515
620
  cursor: ew-resize;
516
621
  }
517
622
 
518
- ry-number-select[drag="y"][data-dragging],
519
- ry-number-select[arrows="stacked"]:not([drag])[data-dragging] {
623
+ :is(ry-number-select[drag="y"],
624
+ ry-number-select[arrows="stacked"]:not([drag]),
625
+ ry-number-select[arrows="stacked-end"]:not([drag]),
626
+ ry-number-select[arrows="stacked-start"]:not([drag]))[data-dragging] {
520
627
  cursor: ns-resize;
521
628
  }
522
629
 
@@ -527,8 +634,7 @@ ry-number-select [data-ry-target="value"] {
527
634
  transition: transform 60ms ease-out;
528
635
  }
529
636
 
530
- ry-number-select [data-ry-target="prefix"],
531
- ry-number-select [data-ry-target="suffix"] {
637
+ ry-number-select :is([data-ry-target="prefix"], [data-ry-target="suffix"]) {
532
638
  flex-shrink: 0;
533
639
  pointer-events: none;
534
640
  }
@@ -547,7 +653,7 @@ ry-number-select [data-ry-target="input"] {
547
653
  ry-number-select [data-ry-target="label"] {
548
654
  display: block;
549
655
  text-align: center;
550
- margin-right: var(--ry-space-2, 0.5rem);
656
+ margin-inline-end: var(--ry-space-2, 0.5rem);
551
657
  order: -1;
552
658
  }
553
659
 
@@ -557,31 +663,42 @@ ry-number-select[arrows="stacked"] {
557
663
  align-items: stretch;
558
664
  }
559
665
 
560
- ry-number-select[arrows="stacked"] [data-ry-target="decrement"],
561
- ry-number-select[arrows="stacked"] [data-ry-target="increment"] {
666
+ ry-number-select[arrows="stacked"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) {
562
667
  width: auto;
563
668
  height: 24px;
564
669
  }
565
670
 
566
- ry-number-select[arrows="stacked"] [data-ry-target="decrement"] svg,
567
- ry-number-select[arrows="stacked"] [data-ry-target="increment"] svg {
671
+ ry-number-select[arrows="stacked"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg {
568
672
  width: 14px;
569
673
  height: 14px;
570
674
  }
571
675
 
676
+ /* Stacked-end / stacked-start (buttons grouped beside display) */
677
+ ry-number-select [data-ry-target="btn-group"] {
678
+ display: flex;
679
+ flex-direction: column;
680
+ flex-shrink: 0;
681
+ }
682
+
683
+ :is(ry-number-select[arrows="stacked-end"], ry-number-select[arrows="stacked-start"]) :is([data-ry-target="decrement"], [data-ry-target="increment"]) {
684
+ width: 28px;
685
+ height: 18px;
686
+ }
687
+
688
+ :is(ry-number-select[arrows="stacked-end"], ry-number-select[arrows="stacked-start"]) :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg {
689
+ width: 12px;
690
+ height: 12px;
691
+ }
692
+
572
693
  /* 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; }
694
+ ry-number-select[size="xs"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) { width: 20px; height: 22px; }
575
695
  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; }
696
+ ry-number-select[size="xs"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) svg { width: 12px; height: 12px; }
578
697
 
579
- ry-number-select[size="sm"] [data-ry-target="decrement"],
580
- ry-number-select[size="sm"] [data-ry-target="increment"] { width: 24px; height: 28px; }
698
+ ry-number-select[size="sm"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) { width: 24px; height: 28px; }
581
699
  ry-number-select[size="sm"] [data-ry-target="display"] { min-width: 36px; height: 28px; }
582
700
 
583
- ry-number-select[size="lg"] [data-ry-target="decrement"],
584
- ry-number-select[size="lg"] [data-ry-target="increment"] { width: 40px; height: 44px; }
701
+ ry-number-select[size="lg"] :is([data-ry-target="decrement"], [data-ry-target="increment"]) { width: 40px; height: 44px; }
585
702
  ry-number-select[size="lg"] [data-ry-target="display"] { min-width: 60px; height: 44px; }
586
703
 
587
704
  /* ═══════════════════════════════════════════════════════════════
@@ -627,7 +744,7 @@ ry-slider [data-ry-target^="thumb"]:active {
627
744
  ry-slider [data-ry-target="labels"] {
628
745
  display: flex;
629
746
  justify-content: space-between;
630
- margin-top: var(--ry-space-2, 0.5rem);
747
+ margin-block-start: var(--ry-space-2, 0.5rem);
631
748
  pointer-events: none;
632
749
  }
633
750
 
@@ -641,16 +758,25 @@ ry-slider [data-ry-target^="tooltip"] {
641
758
  visibility: hidden;
642
759
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
643
760
  visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
761
+ transition-behavior: allow-discrete;
644
762
  pointer-events: none;
645
763
  }
646
764
 
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"] {
765
+ :is(ry-slider [data-ry-target^="thumb"]:hover,
766
+ ry-slider [data-ry-target^="thumb"]:focus,
767
+ ry-slider[data-dragging]) [data-ry-target^="tooltip"] {
650
768
  opacity: 1;
651
769
  visibility: visible;
652
770
  }
653
771
 
772
+ @starting-style {
773
+ :is(ry-slider [data-ry-target^="thumb"]:hover,
774
+ ry-slider [data-ry-target^="thumb"]:focus,
775
+ ry-slider[data-dragging]) [data-ry-target^="tooltip"] {
776
+ opacity: 0;
777
+ }
778
+ }
779
+
654
780
  /* Vertical */
655
781
  ry-slider[vertical] {
656
782
  display: inline-flex;
@@ -681,8 +807,8 @@ ry-slider[vertical] [data-ry-target="labels"] {
681
807
  flex-direction: column-reverse;
682
808
  justify-content: space-between;
683
809
  height: 100%;
684
- margin-top: 0;
685
- margin-left: var(--ry-space-2, 0.5rem);
810
+ margin-block-start: 0;
811
+ margin-inline-start: var(--ry-space-2, 0.5rem);
686
812
  }
687
813
 
688
814
  /* Sizes */
@@ -696,6 +822,7 @@ ry-slider[size="lg"] { --ry-slider-track: 18px; --ry-slider-thumb: 40px; }
696
822
  ry-card {
697
823
  display: block;
698
824
  padding: var(--ry-space-6, 1.5rem);
825
+ container-type: inline-size;
699
826
  }
700
827
 
701
828
  ry-card h3 {
@@ -744,28 +871,37 @@ ry-alert [data-ry-target="content"] {
744
871
  FORM ELEMENTS
745
872
  ═══════════════════════════════════════════════════════════════ */
746
873
 
747
- ry-field input,
748
- ry-field textarea,
749
- ry-field select {
874
+ ry-field :is(input, textarea, select) {
750
875
  display: block;
751
876
  width: 100%;
752
877
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
753
878
  }
754
879
 
755
- ry-field input:disabled,
756
- ry-field textarea:disabled {
880
+ ry-field :is(input, textarea):disabled {
757
881
  cursor: not-allowed;
758
882
  }
759
883
 
760
- ry-field label,
761
- ry-field [data-ry-target="label"] {
884
+ ry-field :is(label, [data-ry-target="label"]) {
762
885
  display: block;
763
- margin-bottom: var(--ry-space-2, 0.5rem);
886
+ margin-block-end: var(--ry-space-2, 0.5rem);
764
887
  }
765
888
 
766
889
  ry-field {
767
890
  display: block;
768
- margin-bottom: var(--ry-space-4, 1rem);
891
+ margin-block-end: var(--ry-space-4, 1rem);
892
+ }
893
+
894
+ ry-field [data-ry-target="error"]:empty,
895
+ ry-field [data-ry-target="hint"]:empty {
896
+ display: none;
897
+ }
898
+
899
+ ry-field [data-ry-target="error"]:not(:empty) ~ [data-ry-target="hint"] {
900
+ display: none;
901
+ }
902
+
903
+ ry-field :is([data-ry-target="error"], [data-ry-target="hint"]) {
904
+ margin-block-start: var(--ry-space-1, 0.25rem);
769
905
  }
770
906
 
771
907
  /* ═══════════════════════════════════════════════════════════════
@@ -782,7 +918,7 @@ ry-accordion [data-ry-target="trigger"] {
782
918
  justify-content: space-between;
783
919
  width: 100%;
784
920
  padding: var(--ry-space-4, 1rem) var(--ry-space-6, 1.5rem);
785
- text-align: left;
921
+ text-align: start;
786
922
  border: none;
787
923
  cursor: pointer;
788
924
  }
@@ -819,14 +955,14 @@ ry-tabs {
819
955
  ry-tabs [data-ry-target="list"] {
820
956
  display: flex;
821
957
  gap: var(--ry-space-1, 0.25rem);
822
- margin-bottom: var(--ry-space-4, 1rem);
958
+ margin-block-end: var(--ry-space-4, 1rem);
823
959
  }
824
960
 
825
961
  ry-tabs [data-ry-target="trigger"] {
826
962
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-4, 1rem);
827
963
  border: none;
828
- border-bottom: 2px solid transparent;
829
- margin-bottom: -1px;
964
+ border-block-end: 2px solid transparent;
965
+ margin-block-end: -1px;
830
966
  cursor: pointer;
831
967
  }
832
968
 
@@ -835,9 +971,9 @@ ry-tab {
835
971
  display: none;
836
972
  }
837
973
 
838
- ry-tabs [data-ry-target="panel"][data-ry-state="active"],
839
- ry-tab[active],
840
- ry-tab[data-ry-state="active"] {
974
+ :is(ry-tabs [data-ry-target="panel"][data-ry-state="active"],
975
+ ry-tab[active],
976
+ ry-tab[data-ry-state="active"]) {
841
977
  display: block;
842
978
  }
843
979
 
@@ -861,6 +997,7 @@ ry-modal [data-ry-target="backdrop"] {
861
997
  visibility: hidden;
862
998
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
863
999
  visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
1000
+ transition-behavior: allow-discrete;
864
1001
  }
865
1002
 
866
1003
  ry-modal[data-ry-state="open"] [data-ry-target="backdrop"] {
@@ -868,6 +1005,12 @@ ry-modal[data-ry-state="open"] [data-ry-target="backdrop"] {
868
1005
  visibility: visible;
869
1006
  }
870
1007
 
1008
+ @starting-style {
1009
+ ry-modal[data-ry-state="open"] [data-ry-target="backdrop"] {
1010
+ opacity: 0;
1011
+ }
1012
+ }
1013
+
871
1014
  ry-modal [data-ry-target="dialog"] {
872
1015
  position: fixed;
873
1016
  top: 50%;
@@ -877,12 +1020,14 @@ ry-modal [data-ry-target="dialog"] {
877
1020
  max-width: 32rem;
878
1021
  max-height: calc(100vh - var(--ry-space-8, 2rem));
879
1022
  overflow: auto;
1023
+ overscroll-behavior: contain;
880
1024
  opacity: 0;
881
1025
  visibility: hidden;
882
1026
  transform: translate(-50%, -50%) scale(0.95);
883
1027
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
884
1028
  visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
885
1029
  transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
1030
+ transition-behavior: allow-discrete;
886
1031
  }
887
1032
 
888
1033
  ry-modal[data-ry-state="open"] [data-ry-target="dialog"] {
@@ -891,6 +1036,13 @@ ry-modal[data-ry-state="open"] [data-ry-target="dialog"] {
891
1036
  transform: translate(-50%, -50%) scale(1);
892
1037
  }
893
1038
 
1039
+ @starting-style {
1040
+ ry-modal[data-ry-state="open"] [data-ry-target="dialog"] {
1041
+ opacity: 0;
1042
+ transform: translate(-50%, -50%) scale(0.95);
1043
+ }
1044
+ }
1045
+
894
1046
  ry-modal [data-ry-target="header"] {
895
1047
  display: flex;
896
1048
  align-items: center;
@@ -933,14 +1085,13 @@ ry-dropdown {
933
1085
  display: inline-block;
934
1086
  }
935
1087
 
936
- ry-dropdown [data-ry-target="menu"],
937
- ry-dropdown ry-menu {
1088
+ ry-dropdown :is([data-ry-target="menu"], ry-menu) {
938
1089
  position: absolute;
939
1090
  top: 100%;
940
1091
  left: 0;
941
1092
  z-index: var(--ry-z-dropdown, 1000);
942
1093
  min-width: 12rem;
943
- margin-top: var(--ry-space-1, 0.25rem);
1094
+ margin-block-start: var(--ry-space-1, 0.25rem);
944
1095
  padding: var(--ry-space-1, 0.25rem);
945
1096
  opacity: 0;
946
1097
  visibility: hidden;
@@ -948,26 +1099,31 @@ ry-dropdown ry-menu {
948
1099
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
949
1100
  visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
950
1101
  transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
1102
+ transition-behavior: allow-discrete;
951
1103
  }
952
1104
 
953
- ry-dropdown[data-ry-state="open"] [data-ry-target="menu"],
954
- ry-dropdown[data-ry-state="open"] ry-menu {
1105
+ ry-dropdown[data-ry-state="open"] :is([data-ry-target="menu"], ry-menu) {
955
1106
  opacity: 1;
956
1107
  visibility: visible;
957
1108
  transform: translateY(0);
958
1109
  }
959
1110
 
960
- ry-dropdown[data-ry-position="top"] [data-ry-target="menu"],
961
- ry-dropdown[data-ry-position="top"] ry-menu {
1111
+ @starting-style {
1112
+ ry-dropdown[data-ry-state="open"] :is([data-ry-target="menu"], ry-menu) {
1113
+ opacity: 0;
1114
+ transform: translateY(-0.5rem);
1115
+ }
1116
+ }
1117
+
1118
+ ry-dropdown[data-ry-position="top"] :is([data-ry-target="menu"], ry-menu) {
962
1119
  top: auto;
963
1120
  bottom: 100%;
964
- margin-top: 0;
965
- margin-bottom: var(--ry-space-1, 0.25rem);
1121
+ margin-block-start: 0;
1122
+ margin-block-end: var(--ry-space-1, 0.25rem);
966
1123
  transform: translateY(0.5rem);
967
1124
  }
968
1125
 
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 {
1126
+ ry-dropdown[data-ry-position="top"][data-ry-state="open"] :is([data-ry-target="menu"], ry-menu) {
971
1127
  transform: translateY(0);
972
1128
  }
973
1129
 
@@ -975,7 +1131,7 @@ ry-menu-item {
975
1131
  display: block;
976
1132
  width: 100%;
977
1133
  padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
978
- text-align: left;
1134
+ text-align: start;
979
1135
  text-decoration: none;
980
1136
  border: none;
981
1137
  cursor: pointer;
@@ -1052,6 +1208,7 @@ ry-tooltip [data-ry-target="content"] {
1052
1208
  pointer-events: none;
1053
1209
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
1054
1210
  visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
1211
+ transition-behavior: allow-discrete;
1055
1212
  }
1056
1213
 
1057
1214
  ry-tooltip[data-ry-state="open"] [data-ry-target="content"] {
@@ -1059,6 +1216,12 @@ ry-tooltip[data-ry-state="open"] [data-ry-target="content"] {
1059
1216
  visibility: visible;
1060
1217
  }
1061
1218
 
1219
+ @starting-style {
1220
+ ry-tooltip[data-ry-state="open"] [data-ry-target="content"] {
1221
+ opacity: 0;
1222
+ }
1223
+ }
1224
+
1062
1225
  /* Tooltip positioning - CSS handles all layout, no JS needed */
1063
1226
  ry-tooltip[data-ry-position="top"] [data-ry-target="content"] {
1064
1227
  bottom: 100%;
@@ -1104,6 +1267,7 @@ ry-drawer [data-ry-target="backdrop"] {
1104
1267
  visibility: hidden;
1105
1268
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
1106
1269
  visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
1270
+ transition-behavior: allow-discrete;
1107
1271
  }
1108
1272
 
1109
1273
  ry-drawer[data-ry-state="open"] [data-ry-target="backdrop"] {
@@ -1111,6 +1275,12 @@ ry-drawer[data-ry-state="open"] [data-ry-target="backdrop"] {
1111
1275
  visibility: visible;
1112
1276
  }
1113
1277
 
1278
+ @starting-style {
1279
+ ry-drawer[data-ry-state="open"] [data-ry-target="backdrop"] {
1280
+ opacity: 0;
1281
+ }
1282
+ }
1283
+
1114
1284
  ry-drawer [data-ry-target="panel"] {
1115
1285
  position: fixed;
1116
1286
  z-index: var(--ry-z-modal, 1050);
@@ -1119,6 +1289,7 @@ ry-drawer [data-ry-target="panel"] {
1119
1289
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
1120
1290
  visibility var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
1121
1291
  transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
1292
+ transition-behavior: allow-discrete;
1122
1293
  }
1123
1294
 
1124
1295
  ry-drawer[data-ry-state="open"] [data-ry-target="panel"] {
@@ -1126,6 +1297,12 @@ ry-drawer[data-ry-state="open"] [data-ry-target="panel"] {
1126
1297
  visibility: visible;
1127
1298
  }
1128
1299
 
1300
+ @starting-style {
1301
+ ry-drawer[data-ry-state="open"] [data-ry-target="panel"] {
1302
+ opacity: 0;
1303
+ }
1304
+ }
1305
+
1129
1306
  /* Left drawer */
1130
1307
  ry-drawer [data-ry-target="panel"][data-ry-side="left"] {
1131
1308
  top: 0;
@@ -1200,6 +1377,7 @@ ry-drawer [data-ry-target="content"] {
1200
1377
  padding: var(--ry-space-6, 1.5rem);
1201
1378
  padding-top: var(--ry-space-12, 3rem);
1202
1379
  overflow-y: auto;
1380
+ overscroll-behavior: contain;
1203
1381
  height: 100%;
1204
1382
  }
1205
1383
 
@@ -1229,6 +1407,7 @@ ry-toast {
1229
1407
  transform: translateX(1rem);
1230
1408
  transition: opacity var(--ry-duration-normal, 200ms) var(--ry-ease, ease),
1231
1409
  transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
1410
+ transition-behavior: allow-discrete;
1232
1411
  }
1233
1412
 
1234
1413
  ry-toast[data-ry-state="visible"] {
@@ -1236,6 +1415,13 @@ ry-toast[data-ry-state="visible"] {
1236
1415
  transform: translateX(0);
1237
1416
  }
1238
1417
 
1418
+ @starting-style {
1419
+ ry-toast[data-ry-state="visible"] {
1420
+ opacity: 0;
1421
+ transform: translateX(1rem);
1422
+ }
1423
+ }
1424
+
1239
1425
  ry-toast[data-ry-state="hiding"] {
1240
1426
  opacity: 0;
1241
1427
  transform: translateX(1rem);
@@ -1313,16 +1499,18 @@ ry-select [data-ry-target="dropdown"] {
1313
1499
  left: 0;
1314
1500
  right: 0;
1315
1501
  z-index: var(--ry-z-dropdown, 1000);
1316
- margin-top: var(--ry-space-1, 0.25rem);
1502
+ margin-block-start: var(--ry-space-1, 0.25rem);
1317
1503
  padding: var(--ry-space-1, 0.25rem);
1318
1504
  max-height: 15rem;
1319
1505
  overflow-y: auto;
1506
+ overscroll-behavior: contain;
1320
1507
  opacity: 0;
1321
1508
  visibility: hidden;
1322
1509
  transform: translateY(-0.5rem);
1323
1510
  transition: opacity var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
1324
1511
  visibility var(--ry-duration-fast, 100ms) var(--ry-ease, ease),
1325
1512
  transform var(--ry-duration-fast, 100ms) var(--ry-ease, ease);
1513
+ transition-behavior: allow-discrete;
1326
1514
  }
1327
1515
 
1328
1516
  ry-select[data-ry-state="open"] [data-ry-target="dropdown"] {
@@ -1331,11 +1519,18 @@ ry-select[data-ry-state="open"] [data-ry-target="dropdown"] {
1331
1519
  transform: translateY(0);
1332
1520
  }
1333
1521
 
1522
+ @starting-style {
1523
+ ry-select[data-ry-state="open"] [data-ry-target="dropdown"] {
1524
+ opacity: 0;
1525
+ transform: translateY(-0.5rem);
1526
+ }
1527
+ }
1528
+
1334
1529
  ry-select[data-ry-position="top"] [data-ry-target="dropdown"] {
1335
1530
  top: auto;
1336
1531
  bottom: 100%;
1337
- margin-top: 0;
1338
- margin-bottom: var(--ry-space-1, 0.25rem);
1532
+ margin-block-start: 0;
1533
+ margin-block-end: var(--ry-space-1, 0.25rem);
1339
1534
  transform: translateY(0.5rem);
1340
1535
  }
1341
1536
 
@@ -1367,6 +1562,58 @@ ry-option {
1367
1562
  display: none;
1368
1563
  }
1369
1564
 
1565
+ /* Multi-select trigger */
1566
+ ry-select[multiple] [data-ry-target="trigger"] {
1567
+ flex-wrap: wrap;
1568
+ gap: var(--ry-space-1, 0.25rem);
1569
+ min-height: 2.5rem;
1570
+ }
1571
+
1572
+ ry-select[multiple] [data-ry-target="tags"] {
1573
+ display: contents;
1574
+ }
1575
+
1576
+ ry-select[multiple] [data-ry-target="clear"] {
1577
+ display: flex;
1578
+ align-items: center;
1579
+ justify-content: center;
1580
+ flex-shrink: 0;
1581
+ width: 1.25rem;
1582
+ height: 1.25rem;
1583
+ padding: 0;
1584
+ border: none;
1585
+ cursor: pointer;
1586
+ }
1587
+
1588
+ ry-select[multiple] [data-ry-target="clear"] svg {
1589
+ width: 14px;
1590
+ height: 14px;
1591
+ }
1592
+
1593
+ ry-select [data-ry-target="check"] {
1594
+ display: inline-flex;
1595
+ align-items: center;
1596
+ width: 1rem;
1597
+ height: 1rem;
1598
+ flex-shrink: 0;
1599
+ opacity: 0;
1600
+ }
1601
+
1602
+ ry-select [data-ry-target="check"] svg {
1603
+ width: 14px;
1604
+ height: 14px;
1605
+ }
1606
+
1607
+ ry-select [data-ry-target="option"][aria-selected="true"] [data-ry-target="check"] {
1608
+ opacity: 1;
1609
+ }
1610
+
1611
+ ry-select[multiple] [data-ry-target="option"] {
1612
+ display: flex;
1613
+ align-items: center;
1614
+ gap: var(--ry-space-2, 0.5rem);
1615
+ }
1616
+
1370
1617
  /* ═══════════════════════════════════════════════════════════════
1371
1618
  KEYFRAMES (structural animations)
1372
1619
  ═══════════════════════════════════════════════════════════════ */
@@ -1403,7 +1650,7 @@ ry-option {
1403
1650
  ry-code {
1404
1651
  display: block;
1405
1652
  overflow: hidden;
1406
- margin-bottom: var(--ry-space-4, 1rem);
1653
+ margin-block-end: var(--ry-space-4, 1rem);
1407
1654
  }
1408
1655
 
1409
1656
  ry-code [data-ry-target="header"] {
@@ -1457,22 +1704,22 @@ ry-code .ry-code__line {
1457
1704
  ry-code .ry-code__line-number {
1458
1705
  flex-shrink: 0;
1459
1706
  width: 2rem;
1460
- text-align: right;
1461
- padding-right: var(--ry-space-2, 0.5rem);
1707
+ text-align: end;
1708
+ padding-inline-end: var(--ry-space-2, 0.5rem);
1462
1709
  user-select: none;
1463
1710
  }
1464
1711
 
1465
1712
  ry-code .ry-code__line-content {
1466
1713
  flex: 1;
1467
1714
  min-width: 0;
1468
- padding-left: var(--ry-space-2, 0.5rem);
1715
+ padding-inline-start: var(--ry-space-2, 0.5rem);
1469
1716
  }
1470
1717
 
1471
1718
  ry-code .ry-code__color-preview {
1472
1719
  display: inline-block;
1473
1720
  width: 0.625rem;
1474
1721
  height: 0.625rem;
1475
- margin-right: var(--ry-space-1, 0.25rem);
1722
+ margin-inline-end: var(--ry-space-1, 0.25rem);
1476
1723
  vertical-align: middle;
1477
1724
  }
1478
1725
 
@@ -1496,7 +1743,7 @@ ry-example [data-ry-target="preview"] {
1496
1743
  padding: var(--ry-space-4, 1rem);
1497
1744
  }
1498
1745
 
1499
- @media (max-width: 768px) {
1746
+ @container (max-width: 768px) {
1500
1747
  ry-example {
1501
1748
  grid-template-columns: 1fr;
1502
1749
  }
@@ -1508,7 +1755,7 @@ ry-example[data-stacked] {
1508
1755
 
1509
1756
  .ry-example__usage {
1510
1757
  grid-column: 1 / -1;
1511
- margin-top: var(--ry-space-2, 0.5rem);
1758
+ padding-block-end: 3rem;
1512
1759
  }
1513
1760
 
1514
1761
  .ry-example__usage-toggle {
@@ -1529,7 +1776,7 @@ ry-example[data-stacked] {
1529
1776
  }
1530
1777
 
1531
1778
  .ry-example__usage-panel {
1532
- margin-top: var(--ry-space-2, 0.5rem);
1779
+ margin-block-start: var(--ry-space-2, 0.5rem);
1533
1780
  }
1534
1781
 
1535
1782
  .ry-example__usage-panel[hidden] {
@@ -1633,7 +1880,7 @@ input[type="radio"]:checked::after {
1633
1880
  table {
1634
1881
  width: 100%;
1635
1882
  border-collapse: collapse;
1636
- text-align: left;
1883
+ text-align: start;
1637
1884
  }
1638
1885
 
1639
1886
  th, td {
@@ -1642,7 +1889,7 @@ th, td {
1642
1889
  }
1643
1890
 
1644
1891
  th {
1645
- text-align: left;
1892
+ text-align: start;
1646
1893
  }
1647
1894
 
1648
1895
  /* ═══════════════════════════════════════════════════════════════
@@ -1956,7 +2203,7 @@ ry-gradient-picker [data-ry-target="angle-control"] {
1956
2203
  display: flex;
1957
2204
  align-items: center;
1958
2205
  gap: var(--ry-space-1, 0.25rem);
1959
- margin-left: auto;
2206
+ margin-inline-start: auto;
1960
2207
  }
1961
2208
 
1962
2209
  ry-gradient-picker [data-ry-target="angle-control"] ry-number-select {
@@ -1967,7 +2214,7 @@ ry-gradient-picker [data-ry-target="angle-control"] ry-number-select {
1967
2214
  ry-gradient-picker [data-ry-target="shape-control"] {
1968
2215
  display: none;
1969
2216
  gap: var(--ry-space-1, 0.25rem);
1970
- margin-left: auto;
2217
+ margin-inline-start: auto;
1971
2218
  }
1972
2219
 
1973
2220
  ry-gradient-picker [data-ry-target="shape-control"] button {
@@ -1996,15 +2243,7 @@ ry-gradient-picker[data-ry-type="radial"] [data-ry-target="shape-control"] {
1996
2243
  }
1997
2244
 
1998
2245
  /* 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"] {
2246
+ ry-gradient-picker[data-ry-type="solid"] :is([data-ry-target="bar-container"], [data-ry-target="angle-control"], [data-ry-target="shape-control"]) {
2008
2247
  display: none;
2009
2248
  }
2010
2249
 
@@ -2093,36 +2332,34 @@ ry-tree-item {
2093
2332
  display: none;
2094
2333
  }
2095
2334
 
2096
- .ry-tree__root,
2097
- .ry-tree__children {
2335
+ :is(.ry-tree__root, .ry-tree__children) {
2098
2336
  list-style: none;
2099
2337
  padding: 0;
2100
2338
  margin: 0;
2101
2339
  }
2102
2340
 
2103
2341
  .ry-tree__children {
2104
- margin-left: 11px;
2105
- padding-left: 11px;
2342
+ margin-inline-start: 11px;
2343
+ padding-inline-start: 11px;
2106
2344
  overflow: hidden;
2107
2345
  }
2108
2346
 
2109
2347
  .ry-tree__item {
2110
2348
  position: relative;
2111
- margin-top: var(--ry-space-1, 0.25rem);
2349
+ margin-block-start: var(--ry-space-1, 0.25rem);
2112
2350
  }
2113
2351
 
2114
2352
  /* Horizontal connector lines for nested items */
2115
2353
  .ry-tree__children .ry-tree__item::before {
2116
2354
  content: "";
2117
2355
  position: absolute;
2118
- left: -11px;
2356
+ inset-inline-start: -11px;
2119
2357
  top: 14px;
2120
2358
  width: 11px;
2121
2359
  height: 1px;
2122
2360
  }
2123
2361
 
2124
- .ry-tree__label,
2125
- .ry-tree__file {
2362
+ :is(.ry-tree__label, .ry-tree__file) {
2126
2363
  display: flex;
2127
2364
  align-items: center;
2128
2365
  gap: var(--ry-space-2, 0.5rem);
@@ -2201,12 +2438,10 @@ ry-tree[no-animate] .ry-tree__children-wrapper {
2201
2438
  pointer-events: none;
2202
2439
  }
2203
2440
 
2204
- .ry-tree__item[data-ry-drop-target="before"]::after,
2205
- .ry-tree__item[data-ry-drop-target="after"]::after {
2441
+ .ry-tree__item:is([data-ry-drop-target="before"], [data-ry-drop-target="after"])::after {
2206
2442
  content: '';
2207
2443
  position: absolute;
2208
- left: 0;
2209
- right: 0;
2444
+ inset-inline: 0;
2210
2445
  height: 2px;
2211
2446
  pointer-events: none;
2212
2447
  }
@@ -2218,3 +2453,358 @@ ry-tree[no-animate] .ry-tree__children-wrapper {
2218
2453
  .ry-tree__item[data-ry-drop-target="after"]::after {
2219
2454
  bottom: -1px;
2220
2455
  }
2456
+
2457
+ /* ═══════════════════════════════════════════════════════════════
2458
+ TAG
2459
+ ═══════════════════════════════════════════════════════════════ */
2460
+
2461
+ ry-tag {
2462
+ display: inline-flex;
2463
+ align-items: center;
2464
+ gap: var(--ry-space-1, 0.25rem);
2465
+ padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
2466
+ max-width: 100%;
2467
+ line-height: 1;
2468
+ }
2469
+
2470
+ ry-tag[disabled] {
2471
+ pointer-events: none;
2472
+ }
2473
+
2474
+ ry-tag [data-ry-target="label"] {
2475
+ overflow: hidden;
2476
+ text-overflow: ellipsis;
2477
+ white-space: nowrap;
2478
+ }
2479
+
2480
+ ry-tag [data-ry-target="remove"] {
2481
+ display: inline-flex;
2482
+ align-items: center;
2483
+ justify-content: center;
2484
+ flex-shrink: 0;
2485
+ width: 1rem;
2486
+ height: 1rem;
2487
+ padding: 0;
2488
+ border: none;
2489
+ cursor: pointer;
2490
+ }
2491
+
2492
+ ry-tag [data-ry-target="remove"] svg {
2493
+ width: 12px;
2494
+ height: 12px;
2495
+ }
2496
+
2497
+ /* Size variants */
2498
+ ry-tag[size="sm"] {
2499
+ padding: 2px var(--ry-space-1, 0.25rem);
2500
+ }
2501
+
2502
+ ry-tag[size="sm"] [data-ry-target="remove"] {
2503
+ width: 0.75rem;
2504
+ height: 0.75rem;
2505
+ }
2506
+
2507
+ ry-tag[size="sm"] [data-ry-target="remove"] svg {
2508
+ width: 10px;
2509
+ height: 10px;
2510
+ }
2511
+
2512
+ ry-tag[size="lg"] {
2513
+ padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
2514
+ }
2515
+
2516
+ /* ═══════════════════════════════════════════════════════════════
2517
+ TAG INPUT
2518
+ ═══════════════════════════════════════════════════════════════ */
2519
+
2520
+ ry-tag-input {
2521
+ display: block;
2522
+ }
2523
+
2524
+ ry-tag-input [data-ry-target="container"] {
2525
+ display: flex;
2526
+ flex-wrap: wrap;
2527
+ align-items: center;
2528
+ gap: var(--ry-space-1, 0.25rem);
2529
+ padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
2530
+ min-height: 2.5rem;
2531
+ cursor: text;
2532
+ }
2533
+
2534
+ ry-tag-input [data-ry-target="input"] {
2535
+ flex: 1;
2536
+ min-width: 60px;
2537
+ padding: var(--ry-space-1, 0.25rem) 0;
2538
+ border: none;
2539
+ outline: none;
2540
+ }
2541
+
2542
+ ry-tag-input[disabled] [data-ry-target="container"] {
2543
+ cursor: not-allowed;
2544
+ }
2545
+
2546
+ /* ═══════════════════════════════════════════════════════════════
2547
+ HERO
2548
+ ═══════════════════════════════════════════════════════════════ */
2549
+
2550
+ ry-hero {
2551
+ display: flex;
2552
+ flex-direction: column;
2553
+ align-items: center;
2554
+ justify-content: center;
2555
+ padding: var(--ry-space-16, 4rem) var(--ry-space-6, 1.5rem);
2556
+ max-width: 48rem;
2557
+ margin-inline: auto;
2558
+ text-align: center;
2559
+ }
2560
+
2561
+ ry-hero[align="left"] {
2562
+ align-items: flex-start;
2563
+ text-align: start;
2564
+ }
2565
+
2566
+ ry-hero > * + * {
2567
+ margin-block-start: var(--ry-space-4, 1rem);
2568
+ }
2569
+
2570
+ ry-hero > h1 {
2571
+ margin: 0;
2572
+ }
2573
+
2574
+ ry-hero > p {
2575
+ margin: 0;
2576
+ margin-block-start: var(--ry-space-4, 1rem);
2577
+ }
2578
+
2579
+ /* Size variants */
2580
+ ry-hero[size="sm"] {
2581
+ padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
2582
+ }
2583
+
2584
+ ry-hero[size="lg"] {
2585
+ padding: var(--ry-space-20, 5rem) var(--ry-space-6, 1.5rem);
2586
+ }
2587
+
2588
+ ry-hero[full-bleed] {
2589
+ max-width: none;
2590
+ }
2591
+
2592
+ /* ═══════════════════════════════════════════════════════════════
2593
+ STAT
2594
+ ═══════════════════════════════════════════════════════════════ */
2595
+
2596
+ ry-stat {
2597
+ display: flex;
2598
+ flex-direction: column;
2599
+ gap: var(--ry-space-1, 0.25rem);
2600
+ }
2601
+
2602
+ ry-stat[align="center"] {
2603
+ align-items: center;
2604
+ text-align: center;
2605
+ }
2606
+
2607
+ ry-stat [data-ry-target="value"] {
2608
+ display: flex;
2609
+ align-items: center;
2610
+ gap: var(--ry-space-2, 0.5rem);
2611
+ }
2612
+
2613
+ ry-stat [data-ry-target="trend"] svg {
2614
+ width: 20px;
2615
+ height: 20px;
2616
+ }
2617
+
2618
+ /* Size variants */
2619
+ ry-stat[size="sm"] [data-ry-target="trend"] svg {
2620
+ width: 16px;
2621
+ height: 16px;
2622
+ }
2623
+
2624
+ /* ═══════════════════════════════════════════════════════════════
2625
+ FEATURE + FEATURE GRID
2626
+ ═══════════════════════════════════════════════════════════════ */
2627
+
2628
+ ry-feature-grid {
2629
+ display: grid;
2630
+ gap: var(--ry-space-6, 1.5rem);
2631
+ }
2632
+
2633
+ ry-feature-grid[cols="2"] { grid-template-columns: repeat(2, 1fr); }
2634
+ ry-feature-grid[cols="3"] { grid-template-columns: repeat(3, 1fr); }
2635
+ ry-feature-grid[cols="4"] { grid-template-columns: repeat(4, 1fr); }
2636
+
2637
+ @container (max-width: 640px) {
2638
+ :is(ry-feature-grid[cols="2"], ry-feature-grid[cols="3"], ry-feature-grid[cols="4"]) {
2639
+ grid-template-columns: 1fr;
2640
+ }
2641
+ }
2642
+
2643
+ @container (min-width: 641px) and (max-width: 1024px) {
2644
+ :is(ry-feature-grid[cols="3"], ry-feature-grid[cols="4"]) {
2645
+ grid-template-columns: repeat(2, 1fr);
2646
+ }
2647
+ }
2648
+
2649
+ ry-feature {
2650
+ display: flex;
2651
+ flex-direction: column;
2652
+ gap: var(--ry-space-3, 0.75rem);
2653
+ }
2654
+
2655
+ ry-feature[align="center"] {
2656
+ align-items: center;
2657
+ text-align: center;
2658
+ }
2659
+
2660
+ ry-feature [data-ry-target="icon"] {
2661
+ display: flex;
2662
+ align-items: center;
2663
+ justify-content: center;
2664
+ width: 3rem;
2665
+ height: 3rem;
2666
+ flex-shrink: 0;
2667
+ }
2668
+
2669
+ ry-feature [data-ry-target="icon"] svg {
2670
+ width: 24px;
2671
+ height: 24px;
2672
+ }
2673
+
2674
+ ry-feature h3 {
2675
+ margin: 0;
2676
+ }
2677
+
2678
+ ry-feature p {
2679
+ margin: 0;
2680
+ }
2681
+
2682
+ /* ═══════════════════════════════════════════════════════════════
2683
+ PRICING + PRICING CARD
2684
+ ═══════════════════════════════════════════════════════════════ */
2685
+
2686
+ ry-pricing {
2687
+ display: flex;
2688
+ flex-wrap: wrap;
2689
+ justify-content: center;
2690
+ gap: var(--ry-space-6, 1.5rem);
2691
+ align-items: stretch;
2692
+ }
2693
+
2694
+ @container (max-width: 640px) {
2695
+ ry-pricing {
2696
+ flex-direction: column;
2697
+ align-items: center;
2698
+ }
2699
+ }
2700
+
2701
+ ry-pricing-card {
2702
+ display: flex;
2703
+ flex-direction: column;
2704
+ padding: var(--ry-space-8, 2rem);
2705
+ width: 100%;
2706
+ max-width: 20rem;
2707
+ }
2708
+
2709
+ ry-pricing-card[featured] {
2710
+ transform: scale(1.05);
2711
+ z-index: 1;
2712
+ }
2713
+
2714
+ ry-pricing-card h3 {
2715
+ margin: 0 0 var(--ry-space-2, 0.5rem) 0;
2716
+ }
2717
+
2718
+ ry-pricing-card [slot="price"] {
2719
+ margin-block-end: var(--ry-space-6, 1.5rem);
2720
+ }
2721
+
2722
+ ry-pricing-card [slot="price"] span {
2723
+ display: inline;
2724
+ }
2725
+
2726
+ ry-pricing-card ul {
2727
+ list-style: none;
2728
+ padding: 0;
2729
+ margin: 0 0 var(--ry-space-6, 1.5rem) 0;
2730
+ flex: 1;
2731
+ }
2732
+
2733
+ ry-pricing-card ul li {
2734
+ padding: var(--ry-space-2, 0.5rem) 0;
2735
+ }
2736
+
2737
+ ry-pricing-card :is(ry-button, .ry-btn) {
2738
+ margin-block-start: auto;
2739
+ }
2740
+
2741
+ /* ═══════════════════════════════════════════════════════════════
2742
+ CAROUSEL
2743
+ ═══════════════════════════════════════════════════════════════ */
2744
+
2745
+ ry-carousel {
2746
+ display: block;
2747
+ position: relative;
2748
+ overflow: hidden;
2749
+ outline: none;
2750
+ }
2751
+
2752
+ ry-carousel [data-ry-target="viewport"] {
2753
+ overflow: hidden;
2754
+ touch-action: pan-y;
2755
+ }
2756
+
2757
+ ry-carousel [data-ry-target="track"] {
2758
+ display: flex;
2759
+ transition: transform var(--ry-duration-normal, 200ms) var(--ry-ease, ease);
2760
+ }
2761
+
2762
+ ry-carousel [data-ry-target="slide"] {
2763
+ flex: 0 0 100%;
2764
+ min-width: 0;
2765
+ }
2766
+
2767
+ ry-carousel :is([data-ry-target="prev"], [data-ry-target="next"]) {
2768
+ position: absolute;
2769
+ top: 50%;
2770
+ transform: translateY(-50%);
2771
+ z-index: 1;
2772
+ display: flex;
2773
+ align-items: center;
2774
+ justify-content: center;
2775
+ width: 2.5rem;
2776
+ height: 2.5rem;
2777
+ padding: 0;
2778
+ border: none;
2779
+ cursor: pointer;
2780
+ }
2781
+
2782
+ ry-carousel [data-ry-target="prev"] {
2783
+ left: var(--ry-space-3, 0.75rem);
2784
+ }
2785
+
2786
+ ry-carousel [data-ry-target="next"] {
2787
+ right: var(--ry-space-3, 0.75rem);
2788
+ }
2789
+
2790
+ ry-carousel :is([data-ry-target="prev"], [data-ry-target="next"]) svg {
2791
+ width: 20px;
2792
+ height: 20px;
2793
+ }
2794
+
2795
+ ry-carousel [data-ry-target="dots"] {
2796
+ display: flex;
2797
+ justify-content: center;
2798
+ gap: var(--ry-space-2, 0.5rem);
2799
+ padding: var(--ry-space-3, 0.75rem) 0;
2800
+ }
2801
+
2802
+ ry-carousel [data-ry-target="dot"] {
2803
+ width: 0.5rem;
2804
+ height: 0.5rem;
2805
+ padding: 0;
2806
+ border: none;
2807
+ cursor: pointer;
2808
+ }
2809
+
2810
+ } /* @layer ry-structure */