@ryanhelsing/ry-ui 1.0.13 → 1.0.15

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 (34) hide show
  1. package/.claude/skills/ry-ui-builder/SKILL.md +4 -6
  2. package/README.md +21 -25
  3. package/dist/components/ry-dropdown.d.ts +1 -1
  4. package/dist/components/ry-heading.d.ts +15 -0
  5. package/dist/components/ry-heading.d.ts.map +1 -0
  6. package/dist/components/ry-logo-bar.d.ts +25 -0
  7. package/dist/components/ry-logo-bar.d.ts.map +1 -0
  8. package/dist/components/ry-modal.d.ts +1 -1
  9. package/dist/components/ry-pricing.d.ts +4 -4
  10. package/dist/components/ry-pricing.d.ts.map +1 -1
  11. package/dist/components/ry-search-list.d.ts +30 -0
  12. package/dist/components/ry-search-list.d.ts.map +1 -0
  13. package/dist/components/ry-stat.d.ts +1 -4
  14. package/dist/components/ry-stat.d.ts.map +1 -1
  15. package/dist/components/ry-testimonial.d.ts +2 -5
  16. package/dist/components/ry-testimonial.d.ts.map +1 -1
  17. package/dist/components/ry-theme-panel.d.ts +1 -1
  18. package/dist/components/ry-theme-panel.d.ts.map +1 -1
  19. package/dist/core/ry-transform.d.ts.map +1 -1
  20. package/dist/css/ry-structure.css +555 -30
  21. package/dist/css/ry-theme.css +252 -41
  22. package/dist/css/ry-tokens.css +165 -100
  23. package/dist/css/ry-ui.css +977 -176
  24. package/dist/pages/components.html +19 -82
  25. package/dist/pages/landing.html +13 -40
  26. package/dist/ry-ui.d.ts +3 -1
  27. package/dist/ry-ui.d.ts.map +1 -1
  28. package/dist/ry-ui.js +945 -656
  29. package/dist/ry-ui.js.map +1 -1
  30. package/dist/themes/ocean.css +22 -22
  31. package/docs/components/dropdown.md +2 -2
  32. package/docs/components/modal.md +2 -2
  33. package/package.json +3 -1
  34. package/docs/components/button-group.md +0 -36
@@ -21,16 +21,146 @@
21
21
  SCROLL LOCK (for modals, drawers)
22
22
  ═══════════════════════════════════════════════════════════════ */
23
23
 
24
+ body {
25
+ margin: 0;
26
+ min-height: 100dvh;
27
+ line-height: 1.5;
28
+ -webkit-font-smoothing: antialiased;
29
+ text-rendering: optimizeLegibility;
30
+ }
31
+
24
32
  body[data-ry-scroll-lock] {
25
33
  overflow: hidden;
26
34
  padding-right: var(--ry-scrollbar-width, 0);
27
35
  }
28
36
 
37
+ /* ═══════════════════════════════════════════════════════════════
38
+ PREFLIGHT RESET (opt-in via data-ry-reset on body/html)
39
+ Faithful equivalent of Tailwind Preflight.
40
+ ═══════════════════════════════════════════════════════════════ */
41
+
42
+ /* Universal — :where() gives zero specificity so component styles always win */
43
+ :where([data-ry-reset]) *,
44
+ :where([data-ry-reset]) *::before,
45
+ :where([data-ry-reset]) *::after,
46
+ :where([data-ry-reset]) *::backdrop {
47
+ box-sizing: border-box;
48
+ margin: 0;
49
+ padding: 0;
50
+ border: 0 solid;
51
+ }
52
+
53
+ /* Root */
54
+ :where([data-ry-reset]) {
55
+ line-height: 1.5;
56
+ -webkit-text-size-adjust: 100%;
57
+ tab-size: 4;
58
+ -webkit-tap-highlight-color: transparent;
59
+ }
60
+
61
+ /* Typography */
62
+ :where([data-ry-reset]) :where(h1, h2, h3, h4, h5, h6) {
63
+ font-size: inherit;
64
+ font-weight: inherit;
65
+ }
66
+ :where([data-ry-reset]) :where(a) {
67
+ color: inherit;
68
+ text-decoration: inherit;
69
+ }
70
+ :where([data-ry-reset]) :where(b, strong) {
71
+ font-weight: bolder;
72
+ }
73
+ :where([data-ry-reset]) :where(code, kbd, samp, pre) {
74
+ font-size: 1em;
75
+ }
76
+ :where([data-ry-reset]) :where(small) {
77
+ font-size: 80%;
78
+ }
79
+ :where([data-ry-reset]) :where(sub, sup) {
80
+ font-size: 75%;
81
+ line-height: 0;
82
+ position: relative;
83
+ vertical-align: baseline;
84
+ }
85
+ :where([data-ry-reset]) :where(sub) { bottom: -0.25em; }
86
+ :where([data-ry-reset]) :where(sup) { top: -0.5em; }
87
+
88
+ /* Lists */
89
+ :where([data-ry-reset]) :where(ol, ul, menu) {
90
+ list-style: none;
91
+ }
92
+
93
+ /* Table */
94
+ :where([data-ry-reset]) :where(table) {
95
+ text-indent: 0;
96
+ border-color: inherit;
97
+ border-collapse: collapse;
98
+ }
99
+
100
+ /* HR */
101
+ :where([data-ry-reset]) :where(hr) {
102
+ height: 0;
103
+ color: inherit;
104
+ border-top-width: 1px;
105
+ }
106
+
107
+ /* Media */
108
+ :where([data-ry-reset]) :where(img, svg, video, canvas, audio, iframe, embed, object) {
109
+ display: block;
110
+ vertical-align: middle;
111
+ }
112
+ :where([data-ry-reset]) :where(img, video) {
113
+ max-width: 100%;
114
+ height: auto;
115
+ }
116
+
117
+ /* Form controls */
118
+ :where([data-ry-reset]) :where(button, input, select, optgroup, textarea) {
119
+ font: inherit;
120
+ font-feature-settings: inherit;
121
+ font-variation-settings: inherit;
122
+ letter-spacing: inherit;
123
+ color: inherit;
124
+ border-radius: 0;
125
+ background-color: transparent;
126
+ }
127
+ :where([data-ry-reset]) ::placeholder {
128
+ opacity: 1;
129
+ }
130
+ @supports (color: color-mix(in oklab, currentcolor 50%, transparent)) {
131
+ :where([data-ry-reset]) ::placeholder {
132
+ color: color-mix(in oklab, currentcolor 50%, transparent);
133
+ }
134
+ }
135
+ :where([data-ry-reset]) :where(textarea) {
136
+ resize: vertical;
137
+ }
138
+ :where([data-ry-reset]) :where(button, input:where([type='button'], [type='reset'], [type='submit'])) {
139
+ appearance: button;
140
+ }
141
+ :where([data-ry-reset]) ::-webkit-search-decoration {
142
+ -webkit-appearance: none;
143
+ }
144
+ :where([data-ry-reset]) ::-webkit-inner-spin-button,
145
+ :where([data-ry-reset]) ::-webkit-outer-spin-button {
146
+ height: auto;
147
+ }
148
+
149
+ /* Misc */
150
+ :where([data-ry-reset]) :where(summary) {
151
+ display: list-item;
152
+ }
153
+ :where([data-ry-reset]) :where([hidden]:not([hidden='until-found'])) {
154
+ display: none !important;
155
+ }
156
+
29
157
  /* ═══════════════════════════════════════════════════════════════
30
158
  TRANSFORM WRAPPER (FOUC prevention)
31
159
  ═══════════════════════════════════════════════════════════════ */
32
160
 
33
- ry {
161
+ ry,
162
+ ry-search-item,
163
+ ry-search-group {
34
164
  display: none;
35
165
  }
36
166
 
@@ -42,13 +172,14 @@ ry {
42
172
  ry-page, ry-header, ry-main, ry-footer, ry-section, ry-aside,
43
173
  ry-grid, ry-stack, ry-cluster, ry-split, ry-center,
44
174
  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,
175
+ ry-button, ry-badge, ry-alert, ry-field, ry-nav, ry-logo, ry-actions,
46
176
  ry-accordion-item, ry-tab, ry-menu, ry-menu-item, ry-divider,
47
177
  ry-theme-toggle, ry-select, ry-switch, ry-tooltip, ry-drawer, ry-toast,
48
178
  ry-toggle-button, ry-knob, ry-slider, ry-number-select, ry-color-picker, ry-color-input,
49
179
  ry-gradient-picker, ry-tree, ry-tree-item,
50
180
  ry-tag, ry-tag-input, ry-hero, ry-stat, ry-feature, ry-feature-grid,
51
- ry-pricing, ry-pricing-card, ry-carousel, ry-combobox) {
181
+ ry-pricing, ry-pricing-card, ry-carousel, ry-combobox, ry-heading,
182
+ ry-logo-bar) {
52
183
  box-sizing: border-box;
53
184
  }
54
185
 
@@ -93,7 +224,8 @@ ry {
93
224
  :is(ry-modal [data-ry-target="header"] h3,
94
225
  ry-card h3,
95
226
  ry-hero h1,
96
- ry-pricing-card h3) {
227
+ ry-pricing-card h3,
228
+ ry-heading [data-ry-target="title"]) {
97
229
  text-wrap: balance;
98
230
  }
99
231
 
@@ -108,6 +240,7 @@ ry-page {
108
240
  min-height: 100dvh;
109
241
  container-type: inline-size;
110
242
  scrollbar-gutter: stable;
243
+ overflow-x: clip;
111
244
  }
112
245
 
113
246
  /* ═══════════════════════════════════════════════════════════════
@@ -151,6 +284,51 @@ ry-footer {
151
284
  text-align: center;
152
285
  }
153
286
 
287
+ /* Full footer with columns */
288
+ ry-footer[layout="columns"] {
289
+ text-align: start;
290
+ padding: var(--ry-space-12, 3rem) var(--ry-space-6, 1.5rem);
291
+ }
292
+
293
+ ry-footer[layout="columns"] > [data-ry-target="columns"],
294
+ ry-footer[layout="columns"] > .ry-footer__columns {
295
+ display: grid;
296
+ grid-template-columns: 1.5fr repeat(auto-fit, minmax(8rem, 1fr));
297
+ gap: var(--ry-space-8, 2rem);
298
+ padding-block-end: var(--ry-space-8, 2rem);
299
+ }
300
+
301
+ ry-footer[layout="columns"] > [data-ry-target="columns"] nav,
302
+ ry-footer[layout="columns"] > .ry-footer__columns nav {
303
+ display: flex;
304
+ flex-direction: column;
305
+ gap: var(--ry-space-2, 0.5rem);
306
+ }
307
+
308
+ ry-footer[layout="columns"] > [data-ry-target="columns"] nav strong,
309
+ ry-footer[layout="columns"] > .ry-footer__columns nav strong {
310
+ margin-block-end: var(--ry-space-2, 0.5rem);
311
+ }
312
+
313
+ ry-footer[layout="columns"] > [data-ry-target="bottom"],
314
+ ry-footer[layout="columns"] > .ry-footer__bottom {
315
+ display: flex;
316
+ justify-content: space-between;
317
+ align-items: center;
318
+ flex-wrap: wrap;
319
+ gap: var(--ry-space-4, 1rem);
320
+ padding-block-start: var(--ry-space-6, 1.5rem);
321
+ border-top: 1px solid currentColor;
322
+ opacity: 0.5;
323
+ }
324
+
325
+ @media (max-width: 768px) {
326
+ ry-footer[layout="columns"] > [data-ry-target="columns"],
327
+ ry-footer[layout="columns"] > .ry-footer__columns {
328
+ grid-template-columns: 1fr 1fr;
329
+ }
330
+ }
331
+
154
332
  /* ═══════════════════════════════════════════════════════════════
155
333
  SECTION
156
334
  ═══════════════════════════════════════════════════════════════ */
@@ -169,19 +347,114 @@ ry-section[narrow] {
169
347
  margin-inline: auto;
170
348
  }
171
349
 
172
- /* Logo bar pattern */
173
- .ry-logo-bar {
174
- text-align: center;
350
+ /* Full-width breakout bg goes edge-to-edge, content stays centered */
351
+ ry-section[full],
352
+ ry-section[inverted],
353
+ ry-footer,
354
+ ry-logo-bar {
355
+ width: 100vw;
356
+ margin-inline-start: calc(50% - 50vw);
357
+ padding-inline: max(var(--ry-space-6, 1.5rem), calc(50vw - 50%));
175
358
  }
176
359
 
177
- .ry-logo-bar p {
178
- margin: 0 0 var(--ry-space-4, 1rem);
360
+ ry-section[inverted] {
361
+ padding-block: var(--ry-space-12, 3rem);
179
362
  }
180
363
 
181
- .ry-logo-bar ry-cluster {
182
- justify-content: center;
183
- gap: var(--ry-space-10, 2.5rem);
364
+ ry-section[pad-bottom="lg"] {
365
+ padding-bottom: var(--ry-space-20, 5rem);
366
+ }
367
+
368
+ /* ═══════════════════════════════════════════════════════════════
369
+ LOGO BAR
370
+ ═══════════════════════════════════════════════════════════════ */
371
+
372
+ ry-logo-bar {
373
+ display: flex;
184
374
  flex-wrap: wrap;
375
+ justify-content: center;
376
+ align-items: center;
377
+ gap: var(--ry-space-8, 2rem);
378
+ padding-block: var(--ry-space-8, 2rem);
379
+ text-align: center;
380
+ }
381
+
382
+ ry-logo-bar > p {
383
+ width: 100%;
384
+ margin: 0;
385
+ }
386
+
387
+ ry-logo-bar > :not(p) {
388
+ display: inline-flex;
389
+ align-items: center;
390
+ }
391
+
392
+ /* Scroll layout — horizontal scroll, no wrap */
393
+ ry-logo-bar[layout="scroll"] {
394
+ flex-wrap: nowrap;
395
+ overflow-x: auto;
396
+ overflow-y: hidden;
397
+ scrollbar-width: none;
398
+ -webkit-overflow-scrolling: touch;
399
+ }
400
+
401
+ ry-logo-bar[layout="scroll"]::-webkit-scrollbar {
402
+ display: none;
403
+ }
404
+
405
+ ry-logo-bar[layout="scroll"] > :not(p) {
406
+ flex-shrink: 0;
407
+ }
408
+
409
+ /* Marquee layout — infinite auto-scroll */
410
+ ry-logo-bar[layout="marquee"] {
411
+ flex-wrap: nowrap;
412
+ overflow: hidden;
413
+ }
414
+
415
+ ry-logo-bar[layout="marquee"] [data-ry-target="track"] {
416
+ display: flex;
417
+ align-items: center;
418
+ gap: var(--ry-space-8, 2rem);
419
+ width: max-content;
420
+ animation: ry-marquee var(--ry-logo-bar-speed, 30s) linear infinite;
421
+ }
422
+
423
+ ry-logo-bar[layout="marquee"] [data-ry-target="track"] > * {
424
+ display: inline-flex;
425
+ align-items: center;
426
+ flex-shrink: 0;
427
+ }
428
+
429
+ ry-logo-bar[layout="marquee"]:hover [data-ry-target="track"] {
430
+ animation-play-state: paused;
431
+ }
432
+
433
+ @keyframes ry-marquee {
434
+ from { transform: translateX(0); }
435
+ to { transform: translateX(-25%); }
436
+ }
437
+
438
+ /* Size variants */
439
+ ry-logo-bar[size="sm"] {
440
+ padding: var(--ry-space-4, 1rem) var(--ry-space-4, 1rem);
441
+ gap: var(--ry-space-4, 1rem);
442
+ }
443
+
444
+ ry-logo-bar[size="lg"] {
445
+ padding: var(--ry-space-12, 3rem) var(--ry-space-6, 1.5rem);
446
+ gap: var(--ry-space-6, 1.5rem);
447
+ }
448
+
449
+ /* Logo items */
450
+ ry-logo-bar img {
451
+ height: var(--ry-logo-bar-height, 2rem);
452
+ width: auto;
453
+ object-fit: contain;
454
+ }
455
+
456
+ ry-logo-bar span {
457
+ white-space: nowrap;
185
458
  }
186
459
 
187
460
  /* ═══════════════════════════════════════════════════════════════
@@ -209,6 +482,13 @@ ry-grid[cols="auto-fill"] {
209
482
  grid-template-columns: repeat(auto-fill, minmax(var(--ry-grid-min, 280px), 1fr));
210
483
  }
211
484
 
485
+ ry-grid[overlap] {
486
+ position: relative;
487
+ z-index: 1;
488
+ margin-top: calc(-1 * var(--ry-space-12, 3rem));
489
+ padding-inline: var(--ry-space-6, 1.5rem);
490
+ }
491
+
212
492
  /* Default responsive behavior */
213
493
  @container (max-width: 640px) {
214
494
  :is(ry-grid[cols="2"], ry-grid[cols="3"], ry-grid[cols="4"],
@@ -364,11 +644,13 @@ ry-center {
364
644
  ry-nav {
365
645
  display: flex;
366
646
  align-items: center;
367
- gap: var(--ry-space-4, 1rem);
647
+ gap: var(--ry-space-1, 0.25rem);
368
648
  }
369
649
 
370
650
  ry-nav a {
371
651
  text-decoration: none;
652
+ padding: var(--ry-space-2, 0.5rem) var(--ry-space-3, 0.75rem);
653
+ white-space: nowrap;
372
654
  }
373
655
 
374
656
  /* ═══════════════════════════════════════════════════════════════
@@ -388,6 +670,7 @@ ry-actions {
388
670
  display: flex;
389
671
  align-items: center;
390
672
  gap: var(--ry-space-2, 0.5rem);
673
+ margin-inline-start: auto;
391
674
  }
392
675
 
393
676
  /* ═══════════════════════════════════════════════════════════════
@@ -447,19 +730,13 @@ ry-button[icon][size="sm"]:empty {
447
730
  padding: var(--ry-space-1, 0.25rem);
448
731
  }
449
732
 
450
- /* ═══════════════════════════════════════════════════════════════
451
- BUTTON GROUP
452
- ═══════════════════════════════════════════════════════════════ */
453
-
454
- ry-button-group {
455
- display: inline-flex;
456
- gap: 2px;
457
- padding: 2px;
458
- border-radius: var(--ry-radius-md, 0.375rem);
459
- }
460
-
461
- ry-button-group > :is(ry-button, ry-toggle-button) {
462
- border-radius: calc(var(--ry-radius-md, 0.375rem) - 2px);
733
+ /* Link variant — inline text link style */
734
+ ry-button[variant="link"] {
735
+ background: none;
736
+ border: none;
737
+ padding: 0;
738
+ display: inline;
739
+ cursor: pointer;
463
740
  }
464
741
 
465
742
  /* ═══════════════════════════════════════════════════════════════
@@ -863,6 +1140,12 @@ ry-card p:last-child {
863
1140
  margin-bottom: 0;
864
1141
  }
865
1142
 
1143
+ ry-card > img:first-child {
1144
+ display: block;
1145
+ width: 100%;
1146
+ margin-bottom: var(--ry-space-4, 1rem);
1147
+ }
1148
+
866
1149
  /* ═══════════════════════════════════════════════════════════════
867
1150
  BADGES
868
1151
  ═══════════════════════════════════════════════════════════════ */
@@ -884,7 +1167,7 @@ ry-alert {
884
1167
  padding: var(--ry-space-4, 1rem);
885
1168
  }
886
1169
 
887
- ry-alert [slot="title"] {
1170
+ .ry-alert__title {
888
1171
  margin: 0 0 var(--ry-space-1, 0.25rem) 0;
889
1172
  }
890
1173
 
@@ -1596,7 +1879,11 @@ ry-select[multiple] [data-ry-target="trigger"] {
1596
1879
  }
1597
1880
 
1598
1881
  ry-select[multiple] [data-ry-target="tags"] {
1599
- display: contents;
1882
+ display: flex;
1883
+ flex-wrap: wrap;
1884
+ flex: 1 1 0%;
1885
+ gap: var(--ry-space-1, 0.25rem);
1886
+ align-items: center;
1600
1887
  }
1601
1888
 
1602
1889
  ry-select[multiple] [data-ry-target="clear"] {
@@ -2569,6 +2856,40 @@ ry-tag-input[disabled] [data-ry-target="container"] {
2569
2856
  cursor: not-allowed;
2570
2857
  }
2571
2858
 
2859
+ /* ═══════════════════════════════════════════════════════════════
2860
+ DEVICE FRAME (CSS-only phone mockup)
2861
+ ═══════════════════════════════════════════════════════════════ */
2862
+
2863
+ .ry-phone {
2864
+ position: relative;
2865
+ display: inline-block;
2866
+ padding: 0.75rem;
2867
+ border-radius: 2.5rem;
2868
+ border: 3px solid currentColor;
2869
+ overflow: hidden;
2870
+ max-width: 20rem;
2871
+ }
2872
+
2873
+ .ry-phone::before {
2874
+ content: '';
2875
+ position: absolute;
2876
+ top: 0.75rem;
2877
+ left: 50%;
2878
+ transform: translateX(-50%);
2879
+ width: 5rem;
2880
+ height: 1.5rem;
2881
+ border-radius: 0 0 1rem 1rem;
2882
+ background: currentColor;
2883
+ z-index: 1;
2884
+ }
2885
+
2886
+ .ry-phone img {
2887
+ display: block;
2888
+ width: 100%;
2889
+ height: auto;
2890
+ border-radius: 1.75rem;
2891
+ }
2892
+
2572
2893
  /* ═══════════════════════════════════════════════════════════════
2573
2894
  HERO
2574
2895
  ═══════════════════════════════════════════════════════════════ */
@@ -2611,10 +2932,95 @@ ry-hero[size="lg"] {
2611
2932
  padding: var(--ry-space-20, 5rem) var(--ry-space-6, 1.5rem);
2612
2933
  }
2613
2934
 
2935
+ ry-hero[size="full"] {
2936
+ min-height: 100vh;
2937
+ min-height: 100dvh;
2938
+ justify-content: center;
2939
+ }
2940
+
2614
2941
  ry-hero[full-bleed] {
2615
2942
  max-width: none;
2616
2943
  }
2617
2944
 
2945
+ /* Split layout: text + media side by side */
2946
+ ry-hero[layout="split"] {
2947
+ display: grid;
2948
+ grid-template-columns: 1fr 1fr;
2949
+ align-items: center;
2950
+ text-align: start;
2951
+ gap: 0;
2952
+ max-width: none;
2953
+ padding: 0;
2954
+ overflow: hidden;
2955
+ }
2956
+
2957
+ ry-hero[layout="split"] > *:first-child {
2958
+ display: flex;
2959
+ flex-direction: column;
2960
+ align-items: flex-start;
2961
+ gap: var(--ry-space-4, 1rem);
2962
+ padding: var(--ry-space-12, 3rem) var(--ry-space-12, 3rem) var(--ry-space-12, 3rem) clamp(var(--ry-space-6, 1.5rem), 8vw, 10rem);
2963
+ }
2964
+
2965
+ ry-hero[layout="split"] > *:first-child > * + * {
2966
+ margin-block-start: 0;
2967
+ }
2968
+
2969
+ ry-hero[layout="split"] > *:last-child {
2970
+ align-self: stretch;
2971
+ position: relative;
2972
+ overflow: hidden;
2973
+ }
2974
+
2975
+ ry-hero[layout="split"] > *:last-child img {
2976
+ display: block;
2977
+ width: 100%;
2978
+ height: 100%;
2979
+ object-fit: cover;
2980
+ object-position: center;
2981
+ }
2982
+
2983
+ /* Full viewport height for split */
2984
+ ry-hero[layout="split"][size="full"] {
2985
+ min-height: 100vh;
2986
+ min-height: 100dvh;
2987
+ }
2988
+
2989
+ /* Flip: image left, text right */
2990
+ ry-hero[layout="split"][reverse] {
2991
+ direction: rtl;
2992
+ }
2993
+
2994
+ ry-hero[layout="split"][reverse] > * {
2995
+ direction: ltr;
2996
+ }
2997
+
2998
+ ry-hero[layout="split"][reverse] > *:first-child {
2999
+ padding-inline: var(--ry-space-12, 3rem) clamp(var(--ry-space-6, 1.5rem), 8vw, 10rem);
3000
+ }
3001
+
3002
+ @media (max-width: 768px) {
3003
+ ry-hero[layout="split"] {
3004
+ grid-template-columns: 1fr;
3005
+ }
3006
+
3007
+ ry-hero[layout="split"] > *:first-child {
3008
+ padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
3009
+ }
3010
+
3011
+ ry-hero[layout="split"][reverse] > *:first-child {
3012
+ padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
3013
+ }
3014
+
3015
+ ry-hero[layout="split"] > *:last-child {
3016
+ max-height: 20rem;
3017
+ }
3018
+
3019
+ ry-hero[layout="split"][size="full"] {
3020
+ min-height: auto;
3021
+ }
3022
+ }
3023
+
2618
3024
  /* ═══════════════════════════════════════════════════════════════
2619
3025
  STAT
2620
3026
  ═══════════════════════════════════════════════════════════════ */
@@ -2743,11 +3149,11 @@ ry-pricing-card h3 {
2743
3149
  margin: 0 0 var(--ry-space-2, 0.5rem) 0;
2744
3150
  }
2745
3151
 
2746
- ry-pricing-card [slot="price"] {
3152
+ .ry-pricing-card__price {
2747
3153
  margin-block-end: var(--ry-space-6, 1.5rem);
2748
3154
  }
2749
3155
 
2750
- ry-pricing-card [slot="price"] span {
3156
+ .ry-pricing-card__price span {
2751
3157
  display: inline;
2752
3158
  }
2753
3159
 
@@ -3055,4 +3461,123 @@ ry-theme-panel [data-ry-target="mode-btn"] {
3055
3461
  line-height: 1;
3056
3462
  }
3057
3463
 
3464
+ /* ═══════════════════════════════════════════════════════════════
3465
+ HEADING
3466
+ ═══════════════════════════════════════════════════════════════ */
3467
+
3468
+ ry-heading {
3469
+ display: flex;
3470
+ flex-direction: column;
3471
+ gap: var(--ry-space-2, 0.5rem);
3472
+ }
3473
+
3474
+ ry-heading[align="center"] {
3475
+ text-align: center;
3476
+ }
3477
+
3478
+ ry-heading[align="right"] {
3479
+ text-align: end;
3480
+ }
3481
+
3482
+ /* Balanced text wrapping for heading titles */
3483
+ ry-heading [data-ry-target="title"] {
3484
+ text-wrap: balance;
3485
+ margin: 0;
3486
+ }
3487
+
3488
+ ry-heading [data-ry-target="sub"] {
3489
+ margin: 0;
3490
+ }
3491
+
3492
+ /* Divider variant: adds a bottom border */
3493
+ ry-heading[divider] {
3494
+ padding-block-end: var(--ry-space-4, 1rem);
3495
+ }
3496
+
3497
+ /* ═══════════════════════════════════════════════════════════════
3498
+ SEARCH LIST
3499
+ ═══════════════════════════════════════════════════════════════ */
3500
+
3501
+ ry-search-list {
3502
+ display: flex;
3503
+ flex-direction: column;
3504
+ overflow: hidden;
3505
+ min-height: 0;
3506
+ }
3507
+
3508
+ ry-search-list [data-ry-target="search"] {
3509
+ flex-shrink: 0;
3510
+ padding: var(--ry-space-2) var(--ry-space-3);
3511
+ position: sticky;
3512
+ top: 0;
3513
+ z-index: 1;
3514
+ }
3515
+
3516
+ ry-search-list [data-ry-target="input"] {
3517
+ width: 100%;
3518
+ padding: var(--ry-space-2) var(--ry-space-3);
3519
+ border: none;
3520
+ background: transparent;
3521
+ font: inherit;
3522
+ outline: none;
3523
+ }
3524
+
3525
+ ry-search-list [data-ry-target="list"] {
3526
+ flex: 1;
3527
+ overflow-y: auto;
3528
+ min-height: 0;
3529
+ padding: var(--ry-space-1) var(--ry-space-2);
3530
+ }
3531
+
3532
+ ry-search-list [data-ry-target="item"] {
3533
+ display: flex;
3534
+ align-items: center;
3535
+ padding: var(--ry-space-1) var(--ry-space-3);
3536
+ cursor: pointer;
3537
+ user-select: none;
3538
+ }
3539
+
3540
+ ry-search-list [data-ry-target="item"][hidden] {
3541
+ display: none;
3542
+ }
3543
+
3544
+ ry-search-list [data-ry-target="group-header"] {
3545
+ padding: var(--ry-space-2) var(--ry-space-3);
3546
+ padding-top: var(--ry-space-4);
3547
+ font-size: 0.6875rem;
3548
+ text-transform: uppercase;
3549
+ letter-spacing: 0.05em;
3550
+ pointer-events: none;
3551
+ user-select: none;
3552
+ }
3553
+
3554
+ ry-search-list [data-ry-target="group"][hidden] {
3555
+ display: none;
3556
+ }
3557
+
3558
+ ry-search-list [data-ry-target="empty"] {
3559
+ padding: var(--ry-space-6) var(--ry-space-3);
3560
+ text-align: center;
3561
+ }
3562
+
3563
+ ry-search-list [data-ry-target="empty"][hidden] {
3564
+ display: none;
3565
+ }
3566
+
3567
+ /* ═══════════════════════════════════════════════════════════════
3568
+ UTILITIES
3569
+ ═══════════════════════════════════════════════════════════════ */
3570
+
3571
+ .ry-avatar {
3572
+ display: block;
3573
+ width: 4rem;
3574
+ height: 4rem;
3575
+ margin-bottom: var(--ry-space-4, 1rem);
3576
+ }
3577
+
3578
+ .ry-avatar[data-size="lg"] {
3579
+ width: 6rem;
3580
+ height: 6rem;
3581
+ }
3582
+
3058
3583
  } /* @layer ry-structure */