@ryanhelsing/ry-ui 1.0.14 → 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.
@@ -106,13 +106,13 @@
106
106
  --ry-color-hover-overlay: color-mix(in oklch, var(--ry-color-text) 4%, transparent);
107
107
 
108
108
  /* Semantic backgrounds & text — derived from base semantic colors */
109
- --ry-color-info-bg: color-mix(in oklch, var(--ry-color-info) 12%, var(--ry-color-bg));
109
+ --ry-color-info-bg: color-mix(in srgb, var(--ry-color-info) 12%, var(--ry-color-bg));
110
110
  --ry-color-info-text: color-mix(in oklch, var(--ry-color-info) 70%, var(--ry-color-text));
111
- --ry-color-success-bg: color-mix(in oklch, var(--ry-color-success) 12%, var(--ry-color-bg));
111
+ --ry-color-success-bg: color-mix(in srgb, var(--ry-color-success) 12%, var(--ry-color-bg));
112
112
  --ry-color-success-text: color-mix(in oklch, var(--ry-color-success) 70%, var(--ry-color-text));
113
- --ry-color-warning-bg: color-mix(in oklch, var(--ry-color-warning) 12%, var(--ry-color-bg));
113
+ --ry-color-warning-bg: color-mix(in srgb, var(--ry-color-warning) 12%, var(--ry-color-bg));
114
114
  --ry-color-warning-text: color-mix(in oklch, var(--ry-color-warning) 70%, var(--ry-color-text));
115
- --ry-color-danger-bg: color-mix(in oklch, var(--ry-color-danger) 12%, var(--ry-color-bg));
115
+ --ry-color-danger-bg: color-mix(in srgb, var(--ry-color-danger) 12%, var(--ry-color-bg));
116
116
  --ry-color-danger-text: color-mix(in oklch, var(--ry-color-danger) 70%, var(--ry-color-text));
117
117
 
118
118
  /* ═══════════════════════════════════════════════════════════════
@@ -306,16 +306,146 @@
306
306
  SCROLL LOCK (for modals, drawers)
307
307
  ═══════════════════════════════════════════════════════════════ */
308
308
 
309
+ body {
310
+ margin: 0;
311
+ min-height: 100dvh;
312
+ line-height: 1.5;
313
+ -webkit-font-smoothing: antialiased;
314
+ text-rendering: optimizeLegibility;
315
+ }
316
+
309
317
  body[data-ry-scroll-lock] {
310
318
  overflow: hidden;
311
319
  padding-right: var(--ry-scrollbar-width, 0);
312
320
  }
313
321
 
322
+ /* ═══════════════════════════════════════════════════════════════
323
+ PREFLIGHT RESET (opt-in via data-ry-reset on body/html)
324
+ Faithful equivalent of Tailwind Preflight.
325
+ ═══════════════════════════════════════════════════════════════ */
326
+
327
+ /* Universal — :where() gives zero specificity so component styles always win */
328
+ :where([data-ry-reset]) *,
329
+ :where([data-ry-reset]) *::before,
330
+ :where([data-ry-reset]) *::after,
331
+ :where([data-ry-reset]) *::backdrop {
332
+ box-sizing: border-box;
333
+ margin: 0;
334
+ padding: 0;
335
+ border: 0 solid;
336
+ }
337
+
338
+ /* Root */
339
+ :where([data-ry-reset]) {
340
+ line-height: 1.5;
341
+ -webkit-text-size-adjust: 100%;
342
+ tab-size: 4;
343
+ -webkit-tap-highlight-color: transparent;
344
+ }
345
+
346
+ /* Typography */
347
+ :where([data-ry-reset]) :where(h1, h2, h3, h4, h5, h6) {
348
+ font-size: inherit;
349
+ font-weight: inherit;
350
+ }
351
+ :where([data-ry-reset]) :where(a) {
352
+ color: inherit;
353
+ text-decoration: inherit;
354
+ }
355
+ :where([data-ry-reset]) :where(b, strong) {
356
+ font-weight: bolder;
357
+ }
358
+ :where([data-ry-reset]) :where(code, kbd, samp, pre) {
359
+ font-size: 1em;
360
+ }
361
+ :where([data-ry-reset]) :where(small) {
362
+ font-size: 80%;
363
+ }
364
+ :where([data-ry-reset]) :where(sub, sup) {
365
+ font-size: 75%;
366
+ line-height: 0;
367
+ position: relative;
368
+ vertical-align: baseline;
369
+ }
370
+ :where([data-ry-reset]) :where(sub) { bottom: -0.25em; }
371
+ :where([data-ry-reset]) :where(sup) { top: -0.5em; }
372
+
373
+ /* Lists */
374
+ :where([data-ry-reset]) :where(ol, ul, menu) {
375
+ list-style: none;
376
+ }
377
+
378
+ /* Table */
379
+ :where([data-ry-reset]) :where(table) {
380
+ text-indent: 0;
381
+ border-color: inherit;
382
+ border-collapse: collapse;
383
+ }
384
+
385
+ /* HR */
386
+ :where([data-ry-reset]) :where(hr) {
387
+ height: 0;
388
+ color: inherit;
389
+ border-top-width: 1px;
390
+ }
391
+
392
+ /* Media */
393
+ :where([data-ry-reset]) :where(img, svg, video, canvas, audio, iframe, embed, object) {
394
+ display: block;
395
+ vertical-align: middle;
396
+ }
397
+ :where([data-ry-reset]) :where(img, video) {
398
+ max-width: 100%;
399
+ height: auto;
400
+ }
401
+
402
+ /* Form controls */
403
+ :where([data-ry-reset]) :where(button, input, select, optgroup, textarea) {
404
+ font: inherit;
405
+ font-feature-settings: inherit;
406
+ font-variation-settings: inherit;
407
+ letter-spacing: inherit;
408
+ color: inherit;
409
+ border-radius: 0;
410
+ background-color: transparent;
411
+ }
412
+ :where([data-ry-reset]) ::placeholder {
413
+ opacity: 1;
414
+ }
415
+ @supports (color: color-mix(in oklab, currentcolor 50%, transparent)) {
416
+ :where([data-ry-reset]) ::placeholder {
417
+ color: color-mix(in oklab, currentcolor 50%, transparent);
418
+ }
419
+ }
420
+ :where([data-ry-reset]) :where(textarea) {
421
+ resize: vertical;
422
+ }
423
+ :where([data-ry-reset]) :where(button, input:where([type='button'], [type='reset'], [type='submit'])) {
424
+ appearance: button;
425
+ }
426
+ :where([data-ry-reset]) ::-webkit-search-decoration {
427
+ -webkit-appearance: none;
428
+ }
429
+ :where([data-ry-reset]) ::-webkit-inner-spin-button,
430
+ :where([data-ry-reset]) ::-webkit-outer-spin-button {
431
+ height: auto;
432
+ }
433
+
434
+ /* Misc */
435
+ :where([data-ry-reset]) :where(summary) {
436
+ display: list-item;
437
+ }
438
+ :where([data-ry-reset]) :where([hidden]:not([hidden='until-found'])) {
439
+ display: none !important;
440
+ }
441
+
314
442
  /* ═══════════════════════════════════════════════════════════════
315
443
  TRANSFORM WRAPPER (FOUC prevention)
316
444
  ═══════════════════════════════════════════════════════════════ */
317
445
 
318
- ry {
446
+ ry,
447
+ ry-search-item,
448
+ ry-search-group {
319
449
  display: none;
320
450
  }
321
451
 
@@ -327,13 +457,14 @@ ry {
327
457
  ry-page, ry-header, ry-main, ry-footer, ry-section, ry-aside,
328
458
  ry-grid, ry-stack, ry-cluster, ry-split, ry-center,
329
459
  ry-card, ry-accordion, ry-modal, ry-tabs, ry-dropdown,
330
- ry-button, ry-button-group, ry-badge, ry-alert, ry-field, ry-nav, ry-logo, ry-actions,
460
+ ry-button, ry-badge, ry-alert, ry-field, ry-nav, ry-logo, ry-actions,
331
461
  ry-accordion-item, ry-tab, ry-menu, ry-menu-item, ry-divider,
332
462
  ry-theme-toggle, ry-select, ry-switch, ry-tooltip, ry-drawer, ry-toast,
333
463
  ry-toggle-button, ry-knob, ry-slider, ry-number-select, ry-color-picker, ry-color-input,
334
464
  ry-gradient-picker, ry-tree, ry-tree-item,
335
465
  ry-tag, ry-tag-input, ry-hero, ry-stat, ry-feature, ry-feature-grid,
336
- ry-pricing, ry-pricing-card, ry-carousel, ry-combobox, ry-heading) {
466
+ ry-pricing, ry-pricing-card, ry-carousel, ry-combobox, ry-heading,
467
+ ry-logo-bar) {
337
468
  box-sizing: border-box;
338
469
  }
339
470
 
@@ -394,6 +525,7 @@ ry-page {
394
525
  min-height: 100dvh;
395
526
  container-type: inline-size;
396
527
  scrollbar-gutter: stable;
528
+ overflow-x: clip;
397
529
  }
398
530
 
399
531
  /* ═══════════════════════════════════════════════════════════════
@@ -437,6 +569,51 @@ ry-footer {
437
569
  text-align: center;
438
570
  }
439
571
 
572
+ /* Full footer with columns */
573
+ ry-footer[layout="columns"] {
574
+ text-align: start;
575
+ padding: var(--ry-space-12, 3rem) var(--ry-space-6, 1.5rem);
576
+ }
577
+
578
+ ry-footer[layout="columns"] > [data-ry-target="columns"],
579
+ ry-footer[layout="columns"] > .ry-footer__columns {
580
+ display: grid;
581
+ grid-template-columns: 1.5fr repeat(auto-fit, minmax(8rem, 1fr));
582
+ gap: var(--ry-space-8, 2rem);
583
+ padding-block-end: var(--ry-space-8, 2rem);
584
+ }
585
+
586
+ ry-footer[layout="columns"] > [data-ry-target="columns"] nav,
587
+ ry-footer[layout="columns"] > .ry-footer__columns nav {
588
+ display: flex;
589
+ flex-direction: column;
590
+ gap: var(--ry-space-2, 0.5rem);
591
+ }
592
+
593
+ ry-footer[layout="columns"] > [data-ry-target="columns"] nav strong,
594
+ ry-footer[layout="columns"] > .ry-footer__columns nav strong {
595
+ margin-block-end: var(--ry-space-2, 0.5rem);
596
+ }
597
+
598
+ ry-footer[layout="columns"] > [data-ry-target="bottom"],
599
+ ry-footer[layout="columns"] > .ry-footer__bottom {
600
+ display: flex;
601
+ justify-content: space-between;
602
+ align-items: center;
603
+ flex-wrap: wrap;
604
+ gap: var(--ry-space-4, 1rem);
605
+ padding-block-start: var(--ry-space-6, 1.5rem);
606
+ border-top: 1px solid currentColor;
607
+ opacity: 0.5;
608
+ }
609
+
610
+ @media (max-width: 768px) {
611
+ ry-footer[layout="columns"] > [data-ry-target="columns"],
612
+ ry-footer[layout="columns"] > .ry-footer__columns {
613
+ grid-template-columns: 1fr 1fr;
614
+ }
615
+ }
616
+
440
617
  /* ═══════════════════════════════════════════════════════════════
441
618
  SECTION
442
619
  ═══════════════════════════════════════════════════════════════ */
@@ -455,19 +632,114 @@ ry-section[narrow] {
455
632
  margin-inline: auto;
456
633
  }
457
634
 
458
- /* Logo bar pattern */
459
- .ry-logo-bar {
460
- text-align: center;
635
+ /* Full-width breakout bg goes edge-to-edge, content stays centered */
636
+ ry-section[full],
637
+ ry-section[inverted],
638
+ ry-footer,
639
+ ry-logo-bar {
640
+ width: 100vw;
641
+ margin-inline-start: calc(50% - 50vw);
642
+ padding-inline: max(var(--ry-space-6, 1.5rem), calc(50vw - 50%));
461
643
  }
462
644
 
463
- .ry-logo-bar p {
464
- margin: 0 0 var(--ry-space-4, 1rem);
645
+ ry-section[inverted] {
646
+ padding-block: var(--ry-space-12, 3rem);
465
647
  }
466
648
 
467
- .ry-logo-bar ry-cluster {
468
- justify-content: center;
469
- gap: var(--ry-space-10, 2.5rem);
649
+ ry-section[pad-bottom="lg"] {
650
+ padding-bottom: var(--ry-space-20, 5rem);
651
+ }
652
+
653
+ /* ═══════════════════════════════════════════════════════════════
654
+ LOGO BAR
655
+ ═══════════════════════════════════════════════════════════════ */
656
+
657
+ ry-logo-bar {
658
+ display: flex;
470
659
  flex-wrap: wrap;
660
+ justify-content: center;
661
+ align-items: center;
662
+ gap: var(--ry-space-8, 2rem);
663
+ padding-block: var(--ry-space-8, 2rem);
664
+ text-align: center;
665
+ }
666
+
667
+ ry-logo-bar > p {
668
+ width: 100%;
669
+ margin: 0;
670
+ }
671
+
672
+ ry-logo-bar > :not(p) {
673
+ display: inline-flex;
674
+ align-items: center;
675
+ }
676
+
677
+ /* Scroll layout — horizontal scroll, no wrap */
678
+ ry-logo-bar[layout="scroll"] {
679
+ flex-wrap: nowrap;
680
+ overflow-x: auto;
681
+ overflow-y: hidden;
682
+ scrollbar-width: none;
683
+ -webkit-overflow-scrolling: touch;
684
+ }
685
+
686
+ ry-logo-bar[layout="scroll"]::-webkit-scrollbar {
687
+ display: none;
688
+ }
689
+
690
+ ry-logo-bar[layout="scroll"] > :not(p) {
691
+ flex-shrink: 0;
692
+ }
693
+
694
+ /* Marquee layout — infinite auto-scroll */
695
+ ry-logo-bar[layout="marquee"] {
696
+ flex-wrap: nowrap;
697
+ overflow: hidden;
698
+ }
699
+
700
+ ry-logo-bar[layout="marquee"] [data-ry-target="track"] {
701
+ display: flex;
702
+ align-items: center;
703
+ gap: var(--ry-space-8, 2rem);
704
+ width: max-content;
705
+ animation: ry-marquee var(--ry-logo-bar-speed, 30s) linear infinite;
706
+ }
707
+
708
+ ry-logo-bar[layout="marquee"] [data-ry-target="track"] > * {
709
+ display: inline-flex;
710
+ align-items: center;
711
+ flex-shrink: 0;
712
+ }
713
+
714
+ ry-logo-bar[layout="marquee"]:hover [data-ry-target="track"] {
715
+ animation-play-state: paused;
716
+ }
717
+
718
+ @keyframes ry-marquee {
719
+ from { transform: translateX(0); }
720
+ to { transform: translateX(-25%); }
721
+ }
722
+
723
+ /* Size variants */
724
+ ry-logo-bar[size="sm"] {
725
+ padding: var(--ry-space-4, 1rem) var(--ry-space-4, 1rem);
726
+ gap: var(--ry-space-4, 1rem);
727
+ }
728
+
729
+ ry-logo-bar[size="lg"] {
730
+ padding: var(--ry-space-12, 3rem) var(--ry-space-6, 1.5rem);
731
+ gap: var(--ry-space-6, 1.5rem);
732
+ }
733
+
734
+ /* Logo items */
735
+ ry-logo-bar img {
736
+ height: var(--ry-logo-bar-height, 2rem);
737
+ width: auto;
738
+ object-fit: contain;
739
+ }
740
+
741
+ ry-logo-bar span {
742
+ white-space: nowrap;
471
743
  }
472
744
 
473
745
  /* ═══════════════════════════════════════════════════════════════
@@ -495,6 +767,13 @@ ry-grid[cols="auto-fill"] {
495
767
  grid-template-columns: repeat(auto-fill, minmax(var(--ry-grid-min, 280px), 1fr));
496
768
  }
497
769
 
770
+ ry-grid[overlap] {
771
+ position: relative;
772
+ z-index: 1;
773
+ margin-top: calc(-1 * var(--ry-space-12, 3rem));
774
+ padding-inline: var(--ry-space-6, 1.5rem);
775
+ }
776
+
498
777
  /* Default responsive behavior */
499
778
  @container (max-width: 640px) {
500
779
  :is(ry-grid[cols="2"], ry-grid[cols="3"], ry-grid[cols="4"],
@@ -736,19 +1015,13 @@ ry-button[icon][size="sm"]:empty {
736
1015
  padding: var(--ry-space-1, 0.25rem);
737
1016
  }
738
1017
 
739
- /* ═══════════════════════════════════════════════════════════════
740
- BUTTON GROUP
741
- ═══════════════════════════════════════════════════════════════ */
742
-
743
- ry-button-group {
744
- display: inline-flex;
745
- gap: 2px;
746
- padding: 2px;
747
- border-radius: var(--ry-radius-md, 0.375rem);
748
- }
749
-
750
- ry-button-group > :is(ry-button, ry-toggle-button) {
751
- border-radius: calc(var(--ry-radius-md, 0.375rem) - 2px);
1018
+ /* Link variant — inline text link style */
1019
+ ry-button[variant="link"] {
1020
+ background: none;
1021
+ border: none;
1022
+ padding: 0;
1023
+ display: inline;
1024
+ cursor: pointer;
752
1025
  }
753
1026
 
754
1027
  /* ═══════════════════════════════════════════════════════════════
@@ -1152,6 +1425,12 @@ ry-card p:last-child {
1152
1425
  margin-bottom: 0;
1153
1426
  }
1154
1427
 
1428
+ ry-card > img:first-child {
1429
+ display: block;
1430
+ width: 100%;
1431
+ margin-bottom: var(--ry-space-4, 1rem);
1432
+ }
1433
+
1155
1434
  /* ═══════════════════════════════════════════════════════════════
1156
1435
  BADGES
1157
1436
  ═══════════════════════════════════════════════════════════════ */
@@ -1173,7 +1452,7 @@ ry-alert {
1173
1452
  padding: var(--ry-space-4, 1rem);
1174
1453
  }
1175
1454
 
1176
- ry-alert [slot="title"] {
1455
+ .ry-alert__title {
1177
1456
  margin: 0 0 var(--ry-space-1, 0.25rem) 0;
1178
1457
  }
1179
1458
 
@@ -1885,7 +2164,11 @@ ry-select[multiple] [data-ry-target="trigger"] {
1885
2164
  }
1886
2165
 
1887
2166
  ry-select[multiple] [data-ry-target="tags"] {
1888
- display: contents;
2167
+ display: flex;
2168
+ flex-wrap: wrap;
2169
+ flex: 1 1 0%;
2170
+ gap: var(--ry-space-1, 0.25rem);
2171
+ align-items: center;
1889
2172
  }
1890
2173
 
1891
2174
  ry-select[multiple] [data-ry-target="clear"] {
@@ -2858,6 +3141,40 @@ ry-tag-input[disabled] [data-ry-target="container"] {
2858
3141
  cursor: not-allowed;
2859
3142
  }
2860
3143
 
3144
+ /* ═══════════════════════════════════════════════════════════════
3145
+ DEVICE FRAME (CSS-only phone mockup)
3146
+ ═══════════════════════════════════════════════════════════════ */
3147
+
3148
+ .ry-phone {
3149
+ position: relative;
3150
+ display: inline-block;
3151
+ padding: 0.75rem;
3152
+ border-radius: 2.5rem;
3153
+ border: 3px solid currentColor;
3154
+ overflow: hidden;
3155
+ max-width: 20rem;
3156
+ }
3157
+
3158
+ .ry-phone::before {
3159
+ content: '';
3160
+ position: absolute;
3161
+ top: 0.75rem;
3162
+ left: 50%;
3163
+ transform: translateX(-50%);
3164
+ width: 5rem;
3165
+ height: 1.5rem;
3166
+ border-radius: 0 0 1rem 1rem;
3167
+ background: currentColor;
3168
+ z-index: 1;
3169
+ }
3170
+
3171
+ .ry-phone img {
3172
+ display: block;
3173
+ width: 100%;
3174
+ height: auto;
3175
+ border-radius: 1.75rem;
3176
+ }
3177
+
2861
3178
  /* ═══════════════════════════════════════════════════════════════
2862
3179
  HERO
2863
3180
  ═══════════════════════════════════════════════════════════════ */
@@ -2900,10 +3217,95 @@ ry-hero[size="lg"] {
2900
3217
  padding: var(--ry-space-20, 5rem) var(--ry-space-6, 1.5rem);
2901
3218
  }
2902
3219
 
3220
+ ry-hero[size="full"] {
3221
+ min-height: 100vh;
3222
+ min-height: 100dvh;
3223
+ justify-content: center;
3224
+ }
3225
+
2903
3226
  ry-hero[full-bleed] {
2904
3227
  max-width: none;
2905
3228
  }
2906
3229
 
3230
+ /* Split layout: text + media side by side */
3231
+ ry-hero[layout="split"] {
3232
+ display: grid;
3233
+ grid-template-columns: 1fr 1fr;
3234
+ align-items: center;
3235
+ text-align: start;
3236
+ gap: 0;
3237
+ max-width: none;
3238
+ padding: 0;
3239
+ overflow: hidden;
3240
+ }
3241
+
3242
+ ry-hero[layout="split"] > *:first-child {
3243
+ display: flex;
3244
+ flex-direction: column;
3245
+ align-items: flex-start;
3246
+ gap: var(--ry-space-4, 1rem);
3247
+ 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);
3248
+ }
3249
+
3250
+ ry-hero[layout="split"] > *:first-child > * + * {
3251
+ margin-block-start: 0;
3252
+ }
3253
+
3254
+ ry-hero[layout="split"] > *:last-child {
3255
+ align-self: stretch;
3256
+ position: relative;
3257
+ overflow: hidden;
3258
+ }
3259
+
3260
+ ry-hero[layout="split"] > *:last-child img {
3261
+ display: block;
3262
+ width: 100%;
3263
+ height: 100%;
3264
+ object-fit: cover;
3265
+ object-position: center;
3266
+ }
3267
+
3268
+ /* Full viewport height for split */
3269
+ ry-hero[layout="split"][size="full"] {
3270
+ min-height: 100vh;
3271
+ min-height: 100dvh;
3272
+ }
3273
+
3274
+ /* Flip: image left, text right */
3275
+ ry-hero[layout="split"][reverse] {
3276
+ direction: rtl;
3277
+ }
3278
+
3279
+ ry-hero[layout="split"][reverse] > * {
3280
+ direction: ltr;
3281
+ }
3282
+
3283
+ ry-hero[layout="split"][reverse] > *:first-child {
3284
+ padding-inline: var(--ry-space-12, 3rem) clamp(var(--ry-space-6, 1.5rem), 8vw, 10rem);
3285
+ }
3286
+
3287
+ @media (max-width: 768px) {
3288
+ ry-hero[layout="split"] {
3289
+ grid-template-columns: 1fr;
3290
+ }
3291
+
3292
+ ry-hero[layout="split"] > *:first-child {
3293
+ padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
3294
+ }
3295
+
3296
+ ry-hero[layout="split"][reverse] > *:first-child {
3297
+ padding: var(--ry-space-8, 2rem) var(--ry-space-6, 1.5rem);
3298
+ }
3299
+
3300
+ ry-hero[layout="split"] > *:last-child {
3301
+ max-height: 20rem;
3302
+ }
3303
+
3304
+ ry-hero[layout="split"][size="full"] {
3305
+ min-height: auto;
3306
+ }
3307
+ }
3308
+
2907
3309
  /* ═══════════════════════════════════════════════════════════════
2908
3310
  STAT
2909
3311
  ═══════════════════════════════════════════════════════════════ */
@@ -3032,11 +3434,11 @@ ry-pricing-card h3 {
3032
3434
  margin: 0 0 var(--ry-space-2, 0.5rem) 0;
3033
3435
  }
3034
3436
 
3035
- ry-pricing-card [slot="price"] {
3437
+ .ry-pricing-card__price {
3036
3438
  margin-block-end: var(--ry-space-6, 1.5rem);
3037
3439
  }
3038
3440
 
3039
- ry-pricing-card [slot="price"] span {
3441
+ .ry-pricing-card__price span {
3040
3442
  display: inline;
3041
3443
  }
3042
3444
 
@@ -3377,6 +3779,92 @@ ry-heading[divider] {
3377
3779
  padding-block-end: var(--ry-space-4, 1rem);
3378
3780
  }
3379
3781
 
3782
+ /* ═══════════════════════════════════════════════════════════════
3783
+ SEARCH LIST
3784
+ ═══════════════════════════════════════════════════════════════ */
3785
+
3786
+ ry-search-list {
3787
+ display: flex;
3788
+ flex-direction: column;
3789
+ overflow: hidden;
3790
+ min-height: 0;
3791
+ }
3792
+
3793
+ ry-search-list [data-ry-target="search"] {
3794
+ flex-shrink: 0;
3795
+ padding: var(--ry-space-2) var(--ry-space-3);
3796
+ position: sticky;
3797
+ top: 0;
3798
+ z-index: 1;
3799
+ }
3800
+
3801
+ ry-search-list [data-ry-target="input"] {
3802
+ width: 100%;
3803
+ padding: var(--ry-space-2) var(--ry-space-3);
3804
+ border: none;
3805
+ background: transparent;
3806
+ font: inherit;
3807
+ outline: none;
3808
+ }
3809
+
3810
+ ry-search-list [data-ry-target="list"] {
3811
+ flex: 1;
3812
+ overflow-y: auto;
3813
+ min-height: 0;
3814
+ padding: var(--ry-space-1) var(--ry-space-2);
3815
+ }
3816
+
3817
+ ry-search-list [data-ry-target="item"] {
3818
+ display: flex;
3819
+ align-items: center;
3820
+ padding: var(--ry-space-1) var(--ry-space-3);
3821
+ cursor: pointer;
3822
+ user-select: none;
3823
+ }
3824
+
3825
+ ry-search-list [data-ry-target="item"][hidden] {
3826
+ display: none;
3827
+ }
3828
+
3829
+ ry-search-list [data-ry-target="group-header"] {
3830
+ padding: var(--ry-space-2) var(--ry-space-3);
3831
+ padding-top: var(--ry-space-4);
3832
+ font-size: 0.6875rem;
3833
+ text-transform: uppercase;
3834
+ letter-spacing: 0.05em;
3835
+ pointer-events: none;
3836
+ user-select: none;
3837
+ }
3838
+
3839
+ ry-search-list [data-ry-target="group"][hidden] {
3840
+ display: none;
3841
+ }
3842
+
3843
+ ry-search-list [data-ry-target="empty"] {
3844
+ padding: var(--ry-space-6) var(--ry-space-3);
3845
+ text-align: center;
3846
+ }
3847
+
3848
+ ry-search-list [data-ry-target="empty"][hidden] {
3849
+ display: none;
3850
+ }
3851
+
3852
+ /* ═══════════════════════════════════════════════════════════════
3853
+ UTILITIES
3854
+ ═══════════════════════════════════════════════════════════════ */
3855
+
3856
+ .ry-avatar {
3857
+ display: block;
3858
+ width: 4rem;
3859
+ height: 4rem;
3860
+ margin-bottom: var(--ry-space-4, 1rem);
3861
+ }
3862
+
3863
+ .ry-avatar[data-size="lg"] {
3864
+ width: 6rem;
3865
+ height: 6rem;
3866
+ }
3867
+
3380
3868
  } /* @layer ry-structure */
3381
3869
 
3382
3870
  /**
@@ -3397,6 +3885,46 @@ html {
3397
3885
  background-color: var(--ry-color-bg);
3398
3886
  }
3399
3887
 
3888
+ /* ═══════════════════════════════════════════════════════════════
3889
+ SECTION — INVERTED
3890
+ ═══════════════════════════════════════════════════════════════ */
3891
+
3892
+ ry-section[inverted] {
3893
+ background-color: var(--ry-color-text);
3894
+ color: var(--ry-color-bg);
3895
+ border-radius: var(--ry-radius-lg);
3896
+ }
3897
+
3898
+ ry-section[inverted] :is(h1, h2, h3, h4, p, span, a) {
3899
+ color: inherit;
3900
+ }
3901
+
3902
+ ry-section[inverted] p {
3903
+ opacity: 0.7;
3904
+ }
3905
+
3906
+ /* ═══════════════════════════════════════════════════════════════
3907
+ FOOTER — INVERTED
3908
+ ═══════════════════════════════════════════════════════════════ */
3909
+
3910
+ ry-footer[inverted] {
3911
+ background-color: var(--ry-color-text);
3912
+ color: var(--ry-color-bg);
3913
+ }
3914
+
3915
+ ry-footer[inverted] :is(a, strong, p, span, nav) {
3916
+ color: inherit;
3917
+ }
3918
+
3919
+ ry-footer[inverted] a {
3920
+ opacity: 0.7;
3921
+ transition: opacity var(--ry-duration-fast);
3922
+ }
3923
+
3924
+ ry-footer[inverted] a:hover {
3925
+ opacity: 1;
3926
+ }
3927
+
3400
3928
  /* ═══════════════════════════════════════════════════════════════
3401
3929
  FOCUS STYLES
3402
3930
  ═══════════════════════════════════════════════════════════════ */
@@ -3557,7 +4085,7 @@ ry-split [data-ry-target="handle"]:focus-visible::after {
3557
4085
  BUTTONS
3558
4086
  ═══════════════════════════════════════════════════════════════ */
3559
4087
 
3560
- :is(.ry-btn, ry-button) {
4088
+ :is(:where(.ry-btn), ry-button) {
3561
4089
  font-family: var(--ry-font-sans);
3562
4090
  font-size: var(--ry-text-sm);
3563
4091
  font-weight: var(--ry-font-medium);
@@ -3574,93 +4102,88 @@ ry-split [data-ry-target="handle"]:focus-visible::after {
3574
4102
  transition-timing-function: var(--ry-ease);
3575
4103
  }
3576
4104
 
3577
- :is(.ry-btn, ry-button):hover {
4105
+ :is(:where(.ry-btn), ry-button):hover {
3578
4106
  background-color: var(--ry-color-primary-hover);
3579
4107
  }
3580
4108
 
3581
- :is(.ry-btn, ry-button):active {
4109
+ :is(:where(.ry-btn), ry-button):active {
3582
4110
  background-color: var(--ry-color-primary-active);
3583
4111
  }
3584
4112
 
3585
- :is(.ry-btn:disabled, .ry-btn[aria-disabled="true"], ry-button[disabled]) {
4113
+ :is(:where(.ry-btn:disabled, .ry-btn[aria-disabled="true"]), ry-button[disabled]) {
3586
4114
  opacity: 0.5;
3587
4115
  }
3588
4116
 
3589
4117
  /* Button variants */
3590
- :is(.ry-btn--secondary, ry-button[variant="secondary"]) {
4118
+ :is(:where(.ry-btn--secondary), ry-button[variant="secondary"]) {
3591
4119
  background-color: var(--ry-color-secondary);
3592
4120
  }
3593
- :is(.ry-btn--secondary, ry-button[variant="secondary"]):hover {
4121
+ :is(:where(.ry-btn--secondary), ry-button[variant="secondary"]):hover {
3594
4122
  background-color: var(--ry-color-secondary-hover);
3595
4123
  }
3596
4124
 
3597
- :is(.ry-btn--outline, ry-button[variant="outline"]) {
4125
+ :is(:where(.ry-btn--outline), ry-button[variant="outline"]) {
3598
4126
  background-color: transparent;
3599
4127
  color: var(--ry-color-primary);
3600
4128
  border-color: var(--ry-color-primary);
3601
4129
  }
3602
- :is(.ry-btn--outline, ry-button[variant="outline"]):hover {
4130
+ :is(:where(.ry-btn--outline), ry-button[variant="outline"]):hover {
3603
4131
  background-color: var(--ry-color-primary);
3604
4132
  color: var(--ry-color-text-inverse);
3605
4133
  }
3606
4134
 
3607
- :is(.ry-btn--ghost, ry-button[variant="ghost"]) {
4135
+ :is(:where(.ry-btn--ghost), ry-button[variant="ghost"]) {
3608
4136
  background-color: transparent;
3609
4137
  color: var(--ry-color-text);
3610
4138
  }
3611
- :is(.ry-btn--ghost, ry-button[variant="ghost"]):hover {
4139
+ :is(:where(.ry-btn--ghost), ry-button[variant="ghost"]):hover {
3612
4140
  background-color: var(--ry-color-bg-muted);
3613
4141
  }
3614
4142
 
3615
- :is(.ry-btn--danger, ry-button[variant="danger"]) {
4143
+ :is(:where(.ry-btn--danger), ry-button[variant="danger"]) {
3616
4144
  background-color: var(--ry-color-danger);
3617
4145
  }
3618
- :is(.ry-btn--danger, ry-button[variant="danger"]):hover {
4146
+ :is(:where(.ry-btn--danger), ry-button[variant="danger"]):hover {
3619
4147
  background-color: var(--ry-color-danger-hover);
3620
4148
  }
3621
4149
 
3622
- :is(.ry-btn--accent, ry-button[variant="accent"]) {
4150
+ :is(:where(.ry-btn--accent), ry-button[variant="accent"]) {
3623
4151
  background-color: var(--ry-color-accent);
3624
4152
  }
3625
- :is(.ry-btn--accent, ry-button[variant="accent"]):hover {
4153
+ :is(:where(.ry-btn--accent), ry-button[variant="accent"]):hover {
3626
4154
  background-color: var(--ry-color-accent-hover);
3627
4155
  }
3628
4156
 
4157
+ /* Link variant — inline text link */
4158
+ :is(:where(.ry-btn--link), ry-button[variant="link"]) {
4159
+ background: none;
4160
+ color: var(--ry-color-primary);
4161
+ font-weight: var(--ry-font-semibold);
4162
+ text-decoration: none;
4163
+ border: none;
4164
+ }
4165
+ :is(:where(.ry-btn--link), ry-button[variant="link"]):hover {
4166
+ text-decoration: underline;
4167
+ }
4168
+
3629
4169
  /* Pressed/active toggle state */
3630
- :is(.ry-btn[aria-pressed="true"], ry-button[pressed]) {
4170
+ :is(:where(.ry-btn[aria-pressed="true"]), ry-button[pressed]) {
3631
4171
  background-color: var(--ry-color-primary);
3632
4172
  color: var(--ry-color-text-inverse);
3633
4173
  border-color: var(--ry-color-primary);
3634
4174
  }
3635
- :is(.ry-btn[aria-pressed="true"], ry-button[pressed]):hover {
4175
+ :is(:where(.ry-btn[aria-pressed="true"]), ry-button[pressed]):hover {
3636
4176
  background-color: var(--ry-color-primary-hover);
3637
4177
  border-color: var(--ry-color-primary-hover);
3638
4178
  }
3639
4179
 
3640
- /* ═══════════════════════════════════════════════════════════════
3641
- BUTTON GROUP
3642
- ═══════════════════════════════════════════════════════════════ */
3643
-
3644
- ry-button-group {
3645
- background-color: var(--ry-color-bg-muted);
3646
- }
3647
-
3648
- ry-button-group > :is(ry-button, ry-toggle-button) {
3649
- border-color: transparent;
3650
- background-color: transparent;
3651
- color: var(--ry-color-text-muted);
3652
- }
3653
-
3654
- ry-button-group > :is(ry-button, ry-toggle-button):hover:not([pressed]) {
3655
- color: var(--ry-color-text);
3656
- }
3657
4180
 
3658
4181
  /* Button sizes (typography only - padding is structural) */
3659
- :is(.ry-btn--sm, ry-button[size="sm"]) {
4182
+ :is(:where(.ry-btn--sm), ry-button[size="sm"]) {
3660
4183
  font-size: var(--ry-text-xs);
3661
4184
  }
3662
4185
 
3663
- :is(.ry-btn--lg, ry-button[size="lg"]) {
4186
+ :is(:where(.ry-btn--lg), ry-button[size="lg"]) {
3664
4187
  font-size: var(--ry-text-base);
3665
4188
  }
3666
4189
 
@@ -4109,6 +4632,10 @@ ry-card p {
4109
4632
  color: var(--ry-color-text-muted);
4110
4633
  }
4111
4634
 
4635
+ ry-card > img:first-child {
4636
+ border-radius: var(--ry-radius-md);
4637
+ }
4638
+
4112
4639
  /* ═══════════════════════════════════════════════════════════════
4113
4640
  BADGES
4114
4641
  ═══════════════════════════════════════════════════════════════ */
@@ -4186,7 +4713,7 @@ ry-badge[style*="--ry-badge-color"] {
4186
4713
  color: var(--ry-color-danger-text);
4187
4714
  }
4188
4715
 
4189
- :is(.ry-alert__title, ry-alert [slot="title"]) {
4716
+ .ry-alert__title {
4190
4717
  font-weight: var(--ry-font-semibold);
4191
4718
  }
4192
4719
 
@@ -5530,13 +6057,13 @@ ry-pricing-card h3 {
5530
6057
  color: var(--ry-color-text);
5531
6058
  }
5532
6059
 
5533
- ry-pricing-card [slot="price"] {
6060
+ .ry-pricing-card__price {
5534
6061
  font-size: var(--ry-text-4xl);
5535
6062
  font-weight: var(--ry-font-bold);
5536
6063
  color: var(--ry-color-text);
5537
6064
  }
5538
6065
 
5539
- ry-pricing-card [slot="price"] span {
6066
+ .ry-pricing-card__price span {
5540
6067
  font-size: var(--ry-text-base);
5541
6068
  font-weight: var(--ry-font-normal);
5542
6069
  color: var(--ry-color-text-muted);
@@ -5706,18 +6233,34 @@ ry-combobox[data-ry-state="open"] .ry-combobox__input-wrapper {
5706
6233
  LOGO BAR
5707
6234
  ═══════════════════════════════════════════════════════════════ */
5708
6235
 
5709
- .ry-logo-bar p {
6236
+ ry-logo-bar > p {
5710
6237
  color: var(--ry-color-text-muted);
5711
6238
  font-size: var(--ry-text-sm);
6239
+ font-family: var(--ry-font-sans);
5712
6240
  text-transform: uppercase;
5713
6241
  letter-spacing: 0.1em;
5714
6242
  }
5715
6243
 
5716
- .ry-logo-bar span {
6244
+ ry-logo-bar span {
5717
6245
  font-size: var(--ry-text-2xl);
5718
6246
  font-weight: var(--ry-font-bold);
6247
+ font-family: var(--ry-font-sans);
5719
6248
  color: var(--ry-color-text);
5720
6249
  opacity: 0.5;
6250
+ transition: opacity var(--ry-duration-fast) var(--ry-ease);
6251
+ }
6252
+
6253
+ ry-logo-bar span:hover {
6254
+ opacity: 0.8;
6255
+ }
6256
+
6257
+ ry-logo-bar img {
6258
+ opacity: 0.5;
6259
+ transition: opacity var(--ry-duration-fast) var(--ry-ease);
6260
+ }
6261
+
6262
+ ry-logo-bar img:hover {
6263
+ opacity: 0.8;
5721
6264
  }
5722
6265
 
5723
6266
  /* ═══════════════════════════════════════════════════════════════
@@ -5868,4 +6411,95 @@ ry-heading[divider] {
5868
6411
  border-bottom: var(--ry-border-width) solid var(--ry-color-border);
5869
6412
  }
5870
6413
 
6414
+ /* ═══════════════════════════════════════════════════════════════
6415
+ SEARCH LIST
6416
+ ═══════════════════════════════════════════════════════════════ */
6417
+
6418
+ .ry-search-list__search {
6419
+ background-color: var(--ry-color-bg);
6420
+ border-bottom: var(--ry-border-width) solid var(--ry-color-border);
6421
+ }
6422
+
6423
+ .ry-search-list__input {
6424
+ font-family: var(--ry-font-sans);
6425
+ font-size: var(--ry-text-sm);
6426
+ color: var(--ry-color-text);
6427
+ }
6428
+
6429
+ .ry-search-list__input::placeholder {
6430
+ color: var(--ry-color-text-muted);
6431
+ }
6432
+
6433
+ .ry-search-list__item {
6434
+ font-size: var(--ry-text-sm);
6435
+ color: var(--ry-color-text);
6436
+ border-radius: var(--ry-radius-md);
6437
+ transition: background-color var(--ry-duration-fast) var(--ry-ease);
6438
+ }
6439
+
6440
+ .ry-search-list__item[data-highlighted] {
6441
+ background-color: var(--ry-color-bg-muted);
6442
+ }
6443
+
6444
+ .ry-search-list__item[aria-selected="true"] {
6445
+ background-color: var(--ry-color-primary);
6446
+ color: var(--ry-color-text-inverse);
6447
+ }
6448
+
6449
+ .ry-search-list__item[aria-selected="true"][data-highlighted] {
6450
+ background-color: var(--ry-color-primary-hover);
6451
+ }
6452
+
6453
+ .ry-search-list__group-header {
6454
+ font-family: var(--ry-font-sans);
6455
+ font-weight: 600;
6456
+ color: var(--ry-color-text-muted);
6457
+ }
6458
+
6459
+ .ry-search-list__empty {
6460
+ font-size: var(--ry-text-sm);
6461
+ color: var(--ry-color-text-muted);
6462
+ }
6463
+
6464
+ .ry-search-list__item mark {
6465
+ background-color: transparent;
6466
+ color: var(--ry-color-primary);
6467
+ font-weight: 600;
6468
+ }
6469
+
6470
+ .ry-search-list__item[aria-selected="true"] mark {
6471
+ color: inherit;
6472
+ text-decoration: underline;
6473
+ }
6474
+
6475
+ /* ═══════════════════════════════════════════════════════════════
6476
+ UTILITIES
6477
+ ═══════════════════════════════════════════════════════════════ */
6478
+
6479
+ .ry-eyebrow {
6480
+ text-transform: uppercase;
6481
+ letter-spacing: 0.1em;
6482
+ font-weight: var(--ry-font-semibold);
6483
+ font-size: var(--ry-text-sm);
6484
+ color: var(--ry-color-text-muted);
6485
+ }
6486
+
6487
+ .ry-avatar {
6488
+ border-radius: var(--ry-radius-full);
6489
+ object-fit: cover;
6490
+ }
6491
+
6492
+ .ry-bg-subtle {
6493
+ background-color: var(--ry-color-bg-subtle);
6494
+ }
6495
+
6496
+ .ry-bg-inverted {
6497
+ background-color: var(--ry-color-text);
6498
+ color: var(--ry-color-bg);
6499
+ }
6500
+
6501
+ .ry-bg-inverted p {
6502
+ opacity: 0.7;
6503
+ }
6504
+
5871
6505
  } /* @layer ry-theme */