@ryanhelsing/ry-ui 1.0.9 → 1.0.10

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 (41) hide show
  1. package/.claude/skills/ry-ui-builder/SKILL.md +186 -0
  2. package/AGENT.md +3 -1
  3. package/README.md +16 -2
  4. package/dist/_redirects +1 -0
  5. package/dist/app.d.ts +2 -0
  6. package/dist/app.d.ts.map +1 -0
  7. package/dist/components/ry-testimonial.d.ts +19 -0
  8. package/dist/components/ry-testimonial.d.ts.map +1 -0
  9. package/dist/components/ry-theme-panel.d.ts +25 -0
  10. package/dist/components/ry-theme-panel.d.ts.map +1 -0
  11. package/dist/core/ry-icons.d.ts.map +1 -1
  12. package/dist/core/ry-transform.d.ts.map +1 -1
  13. package/dist/css/ry-structure.css +122 -3
  14. package/dist/css/ry-theme.css +133 -0
  15. package/dist/css/ry-tokens.css +4 -26
  16. package/dist/css/ry-ui.css +259 -29
  17. package/dist/pages/components.html +1827 -0
  18. package/dist/pages/landing.html +229 -0
  19. package/dist/ry-ui.d.ts +2 -0
  20. package/dist/ry-ui.d.ts.map +1 -1
  21. package/dist/ry-ui.js +382 -245
  22. package/dist/ry-ui.js.map +1 -1
  23. package/docs/components/forms.md +10 -3
  24. package/examples/starter-local.html +252 -0
  25. package/examples/starter-minimal.html +252 -0
  26. package/examples/themes/skeuomorphic/css-dark-neon-led-volume-dial/LICENSE.txt +21 -0
  27. package/examples/themes/skeuomorphic/css-dark-neon-led-volume-dial/README.md +7 -0
  28. package/examples/themes/skeuomorphic/css-dark-neon-led-volume-dial/dist/index.html +23 -0
  29. package/examples/themes/skeuomorphic/css-dark-neon-led-volume-dial/dist/style.css +126 -0
  30. package/examples/themes/skeuomorphic/css-dark-neon-led-volume-dial/src/index.html +5 -0
  31. package/examples/themes/skeuomorphic/css-dark-neon-led-volume-dial/src/style.scss +161 -0
  32. package/examples/themes/skeuomorphic/led-controls/LICENSE.txt +21 -0
  33. package/examples/themes/skeuomorphic/led-controls/README.md +7 -0
  34. package/examples/themes/skeuomorphic/led-controls/dist/index.html +17 -0
  35. package/examples/themes/skeuomorphic/led-controls/dist/script.js +27 -0
  36. package/examples/themes/skeuomorphic/led-controls/dist/style.css +135 -0
  37. package/examples/themes/skeuomorphic/led-controls/src/index.html +1 -0
  38. package/examples/themes/skeuomorphic/led-controls/src/script.ts +59 -0
  39. package/examples/themes/skeuomorphic/led-controls/src/style.scss +253 -0
  40. package/llms.txt +346 -0
  41. package/package.json +12 -4
@@ -9,33 +9,11 @@
9
9
 
10
10
  /* ═══════════════════════════════════════════════════════════════
11
11
  @property — typed custom properties for animation & type safety
12
+ Note: color tokens are NOT registered here because @property
13
+ prevents light-dark() from re-resolving on dynamic color-scheme
14
+ changes in Firefox. Colors use unregistered custom properties.
12
15
  ═══════════════════════════════════════════════════════════════ */
13
16
 
14
- @property --ry-color-primary { syntax: "<color>"; inherits: true; initial-value: oklch(0.623 0.188 259.8); }
15
- @property --ry-color-primary-hover { syntax: "<color>"; inherits: true; initial-value: oklch(0.546 0.215 262.9); }
16
- @property --ry-color-primary-active { syntax: "<color>"; inherits: true; initial-value: oklch(0.488 0.217 264.4); }
17
- @property --ry-color-secondary { syntax: "<color>"; inherits: true; initial-value: oklch(0.554 0.041 257.4); }
18
- @property --ry-color-secondary-hover { syntax: "<color>"; inherits: true; initial-value: oklch(0.446 0.037 257.3); }
19
- @property --ry-color-secondary-active { syntax: "<color>"; inherits: true; initial-value: oklch(0.372 0.039 257.3); }
20
- @property --ry-color-accent { syntax: "<color>"; inherits: true; initial-value: oklch(0.627 0.213 303.9); }
21
- @property --ry-color-accent-hover { syntax: "<color>"; inherits: true; initial-value: oklch(0.557 0.213 303.9); }
22
- @property --ry-color-accent-active { syntax: "<color>"; inherits: true; initial-value: oklch(0.497 0.213 303.9); }
23
- @property --ry-color-success { syntax: "<color>"; inherits: true; initial-value: oklch(0.723 0.192 149.6); }
24
- @property --ry-color-warning { syntax: "<color>"; inherits: true; initial-value: oklch(0.769 0.165 70.1); }
25
- @property --ry-color-danger { syntax: "<color>"; inherits: true; initial-value: oklch(0.637 0.208 25.3); }
26
- @property --ry-color-info { syntax: "<color>"; inherits: true; initial-value: oklch(0.715 0.126 215.2); }
27
- @property --ry-color-text { syntax: "<color>"; inherits: true; initial-value: oklch(0.279 0.037 260); }
28
- @property --ry-color-text-muted { syntax: "<color>"; inherits: true; initial-value: oklch(0.554 0.041 257.4); }
29
- @property --ry-color-text-inverse { syntax: "<color>"; inherits: true; initial-value: oklch(1 0 0); }
30
- @property --ry-color-bg { syntax: "<color>"; inherits: true; initial-value: oklch(1 0 0); }
31
- @property --ry-color-bg-subtle { syntax: "<color>"; inherits: true; initial-value: oklch(0.984 0.003 248.2); }
32
- @property --ry-color-bg-muted { syntax: "<color>"; inherits: true; initial-value: oklch(0.968 0.007 248.1); }
33
- @property --ry-color-border { syntax: "<color>"; inherits: true; initial-value: oklch(0.929 0.013 255.6); }
34
- @property --ry-color-border-strong { syntax: "<color>"; inherits: true; initial-value: oklch(0.869 0.02 252.9); }
35
- @property --ry-color-overlay { syntax: "<color>"; inherits: true; initial-value: oklch(0 0 0 / 0.5); }
36
- @property --ry-shadow-color { syntax: "<color>"; inherits: true; initial-value: oklch(0 0 0 / 0.1); }
37
- @property --ry-shadow-color-sm { syntax: "<color>"; inherits: true; initial-value: oklch(0 0 0 / 0.05); }
38
-
39
17
  @property --ry-duration-fast { syntax: "<time>"; inherits: true; initial-value: 100ms; }
40
18
  @property --ry-duration-normal { syntax: "<time>"; inherits: true; initial-value: 200ms; }
41
19
  @property --ry-duration-slow { syntax: "<time>"; inherits: true; initial-value: 300ms; }
@@ -234,7 +212,7 @@
234
212
  --ry-focus-ring: 0 0 0 3px light-dark(oklch(0.623 0.188 259.8 / 0.5), oklch(0.714 0.143 254.6 / 0.5));
235
213
  }
236
214
 
237
- /* Force light or dark mode */
215
+ /* Force light or dark mode (legacy — theme used to conflate theme + mode) */
238
216
  [data-ry-theme="light"] { color-scheme: light; }
239
217
  [data-ry-theme="dark"] { color-scheme: dark; }
240
218
 
@@ -406,6 +384,26 @@ ry-section:last-child {
406
384
  margin-block-end: 0;
407
385
  }
408
386
 
387
+ ry-section[narrow] {
388
+ max-inline-size: 48rem;
389
+ margin-inline: auto;
390
+ }
391
+
392
+ /* Logo bar pattern */
393
+ .ry-logo-bar {
394
+ text-align: center;
395
+ }
396
+
397
+ .ry-logo-bar p {
398
+ margin: 0 0 var(--ry-space-4, 1rem);
399
+ }
400
+
401
+ .ry-logo-bar ry-cluster {
402
+ justify-content: center;
403
+ gap: var(--ry-space-10, 2.5rem);
404
+ flex-wrap: wrap;
405
+ }
406
+
409
407
  /* ═══════════════════════════════════════════════════════════════
410
408
  GRID
411
409
  ═══════════════════════════════════════════════════════════════ */
@@ -2844,12 +2842,14 @@ ry-hero[full-bleed] {
2844
2842
  ry-stat {
2845
2843
  display: flex;
2846
2844
  flex-direction: column;
2845
+ align-items: center;
2846
+ text-align: center;
2847
2847
  gap: var(--ry-space-1, 0.25rem);
2848
2848
  }
2849
2849
 
2850
- ry-stat[align="center"] {
2851
- align-items: center;
2852
- text-align: center;
2850
+ ry-stat[align="left"] {
2851
+ align-items: flex-start;
2852
+ text-align: start;
2853
2853
  }
2854
2854
 
2855
2855
  ry-stat [data-ry-target="value"] {
@@ -2984,6 +2984,7 @@ ry-pricing-card ul li {
2984
2984
 
2985
2985
  ry-pricing-card :is(ry-button, .ry-btn) {
2986
2986
  margin-block-start: auto;
2987
+ width: 100%;
2987
2988
  }
2988
2989
 
2989
2990
  /* ═══════════════════════════════════════════════════════════════
@@ -3178,6 +3179,102 @@ ry-combobox [data-ry-target="native"] {
3178
3179
  border: 0;
3179
3180
  }
3180
3181
 
3182
+ /* ═══════════════════════════════════════════════════════════════
3183
+ TESTIMONIAL
3184
+ ═══════════════════════════════════════════════════════════════ */
3185
+
3186
+ ry-testimonial {
3187
+ display: flex;
3188
+ flex-direction: column;
3189
+ align-items: center;
3190
+ text-align: center;
3191
+ gap: var(--ry-space-3, 0.75rem);
3192
+ padding: var(--ry-space-6, 1.5rem);
3193
+ }
3194
+
3195
+ ry-testimonial [data-ry-target="avatar"] {
3196
+ width: 4rem;
3197
+ height: 4rem;
3198
+ border-radius: 9999px;
3199
+ overflow: hidden;
3200
+ flex-shrink: 0;
3201
+ }
3202
+
3203
+ ry-testimonial [data-ry-target="avatar"] img {
3204
+ width: 100%;
3205
+ height: 100%;
3206
+ object-fit: cover;
3207
+ }
3208
+
3209
+ ry-testimonial [data-ry-target="quote"] {
3210
+ margin: 0;
3211
+ max-inline-size: 36rem;
3212
+ }
3213
+
3214
+ ry-testimonial [data-ry-target="stars"] {
3215
+ display: flex;
3216
+ gap: var(--ry-space-1, 0.25rem);
3217
+ }
3218
+
3219
+ ry-testimonial [data-ry-target="stars"] svg {
3220
+ width: 16px;
3221
+ height: 16px;
3222
+ }
3223
+
3224
+ ry-testimonial [data-ry-target="attribution"] {
3225
+ display: flex;
3226
+ flex-direction: column;
3227
+ gap: var(--ry-space-1, 0.25rem);
3228
+ }
3229
+
3230
+ /* ═══════════════════════════════════════════════════════════════
3231
+ THEME PANEL
3232
+ ═══════════════════════════════════════════════════════════════ */
3233
+
3234
+ ry-theme-panel {
3235
+ position: fixed;
3236
+ inset-block-end: var(--ry-space-4, 1rem);
3237
+ inset-inline-end: var(--ry-space-4, 1rem);
3238
+ z-index: var(--ry-z-fixed, 1000);
3239
+ }
3240
+
3241
+ ry-theme-panel [data-ry-target="panel"] {
3242
+ display: flex;
3243
+ flex-direction: column;
3244
+ gap: var(--ry-space-2, 0.5rem);
3245
+ padding: var(--ry-space-3, 0.75rem);
3246
+ }
3247
+
3248
+ ry-theme-panel [data-ry-target="theme-row"],
3249
+ ry-theme-panel [data-ry-target="mode-row"] {
3250
+ display: flex;
3251
+ align-items: center;
3252
+ gap: var(--ry-space-3, 0.75rem);
3253
+ }
3254
+
3255
+ ry-theme-panel [data-ry-target="theme-options"],
3256
+ ry-theme-panel [data-ry-target="mode-options"] {
3257
+ display: flex;
3258
+ gap: var(--ry-space-1, 0.25rem);
3259
+ }
3260
+
3261
+ ry-theme-panel [data-ry-target="label"] {
3262
+ min-inline-size: 3rem;
3263
+ text-transform: uppercase;
3264
+ letter-spacing: 0.05em;
3265
+ }
3266
+
3267
+ ry-theme-panel [data-ry-target="theme-btn"],
3268
+ ry-theme-panel [data-ry-target="mode-btn"] {
3269
+ padding: var(--ry-space-1, 0.25rem) var(--ry-space-2, 0.5rem);
3270
+ font: inherit;
3271
+ font-size: 0.6875rem;
3272
+ cursor: pointer;
3273
+ border: none;
3274
+ background: none;
3275
+ line-height: 1;
3276
+ }
3277
+
3181
3278
  } /* @layer ry-structure */
3182
3279
 
3183
3280
  /**
@@ -3253,6 +3350,25 @@ ry-header {
3253
3350
  border-block-end: var(--ry-border-width) solid var(--ry-color-border);
3254
3351
  }
3255
3352
 
3353
+ ry-header strong {
3354
+ font-size: var(--ry-text-xl);
3355
+ }
3356
+
3357
+ ry-header span {
3358
+ color: var(--ry-color-text-muted);
3359
+ }
3360
+
3361
+ ry-header a:not(.ry-btn) {
3362
+ color: var(--ry-color-text-muted);
3363
+ text-decoration: none;
3364
+ font-size: var(--ry-text-sm);
3365
+ transition: color var(--ry-duration-fast);
3366
+ }
3367
+
3368
+ ry-header a:not(.ry-btn):hover {
3369
+ color: var(--ry-color-text);
3370
+ }
3371
+
3256
3372
  /* ═══════════════════════════════════════════════════════════════
3257
3373
  FOOTER
3258
3374
  ═══════════════════════════════════════════════════════════════ */
@@ -3263,6 +3379,16 @@ ry-footer {
3263
3379
  color: var(--ry-color-text-muted);
3264
3380
  }
3265
3381
 
3382
+ ry-footer a {
3383
+ color: inherit;
3384
+ text-decoration: none;
3385
+ transition: color var(--ry-duration-fast);
3386
+ }
3387
+
3388
+ ry-footer a:hover {
3389
+ color: var(--ry-color-text);
3390
+ }
3391
+
3266
3392
  /* ═══════════════════════════════════════════════════════════════
3267
3393
  NAV
3268
3394
  ═══════════════════════════════════════════════════════════════ */
@@ -5471,4 +5597,108 @@ ry-combobox[data-ry-state="open"] .ry-combobox__input-wrapper {
5471
5597
  color: var(--ry-color-text-muted);
5472
5598
  }
5473
5599
 
5600
+ /* ═══════════════════════════════════════════════════════════════
5601
+ LOGO BAR
5602
+ ═══════════════════════════════════════════════════════════════ */
5603
+
5604
+ .ry-logo-bar p {
5605
+ color: var(--ry-color-text-muted);
5606
+ font-size: var(--ry-text-sm);
5607
+ text-transform: uppercase;
5608
+ letter-spacing: 0.1em;
5609
+ }
5610
+
5611
+ .ry-logo-bar span {
5612
+ font-size: var(--ry-text-2xl);
5613
+ font-weight: var(--ry-font-bold);
5614
+ color: var(--ry-color-text);
5615
+ opacity: 0.5;
5616
+ }
5617
+
5618
+ /* ═══════════════════════════════════════════════════════════════
5619
+ TESTIMONIAL
5620
+ ═══════════════════════════════════════════════════════════════ */
5621
+
5622
+ .ry-testimonial__quote {
5623
+ font-size: var(--ry-text-lg);
5624
+ font-style: italic;
5625
+ line-height: var(--ry-leading-relaxed);
5626
+ color: var(--ry-color-text);
5627
+ }
5628
+
5629
+ .ry-testimonial__name {
5630
+ font-weight: var(--ry-font-semibold);
5631
+ color: var(--ry-color-text);
5632
+ }
5633
+
5634
+ .ry-testimonial__role {
5635
+ font-size: var(--ry-text-sm);
5636
+ color: var(--ry-color-text-muted);
5637
+ }
5638
+
5639
+ .ry-testimonial__star {
5640
+ color: var(--ry-color-warning);
5641
+ }
5642
+
5643
+ .ry-testimonial__star svg {
5644
+ fill: var(--ry-color-warning);
5645
+ }
5646
+
5647
+ .ry-testimonial__avatar {
5648
+ background-color: var(--ry-color-bg-muted);
5649
+ border: 2px solid var(--ry-color-border);
5650
+ }
5651
+
5652
+ /* ═══════════════════════════════════════════════════════════════
5653
+ "NONE" THEME — flat, no flourish
5654
+ Default theme minus radii, shadows, and decorative extras.
5655
+ Proves FORM/THEME separation: structure handles all layout.
5656
+ ═══════════════════════════════════════════════════════════════ */
5657
+
5658
+ [data-ry-theme="none"] {
5659
+ --ry-radius-sm: 0;
5660
+ --ry-radius-md: 0;
5661
+ --ry-radius-lg: 0;
5662
+ --ry-radius-xl: 0;
5663
+ --ry-radius-2xl: 0;
5664
+ --ry-radius-full: 0;
5665
+ --ry-shadow-sm: none;
5666
+ --ry-shadow-md: none;
5667
+ --ry-shadow-lg: none;
5668
+ --ry-shadow-xl: none;
5669
+ }
5670
+
5671
+ /* ═══════════════════════════════════════════════════════════════
5672
+ THEME PANEL
5673
+ ═══════════════════════════════════════════════════════════════ */
5674
+
5675
+ .ry-theme-panel {
5676
+ font-family: var(--ry-font-sans);
5677
+ background-color: var(--ry-color-bg);
5678
+ border-radius: var(--ry-radius-lg);
5679
+ box-shadow: var(--ry-shadow-lg);
5680
+ border: 1px solid var(--ry-color-border);
5681
+ }
5682
+
5683
+ .ry-theme-panel__label {
5684
+ color: var(--ry-color-text-muted);
5685
+ font-weight: 600;
5686
+ font-size: 0.6875rem;
5687
+ }
5688
+
5689
+ .ry-theme-panel__btn {
5690
+ border-radius: var(--ry-radius-sm);
5691
+ color: var(--ry-color-text-muted);
5692
+ transition: background-color var(--ry-duration-fast);
5693
+ }
5694
+
5695
+ .ry-theme-panel__btn:hover {
5696
+ background-color: var(--ry-color-bg-muted);
5697
+ }
5698
+
5699
+ .ry-theme-panel__btn[aria-pressed="true"] {
5700
+ background-color: var(--ry-color-primary);
5701
+ color: var(--ry-color-text-inverse);
5702
+ }
5703
+
5474
5704
  } /* @layer ry-theme */