@ryanhelsing/ry-ui 1.0.0

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 (63) hide show
  1. package/README.md +223 -0
  2. package/dist/components/ry-accordion.d.ts +24 -0
  3. package/dist/components/ry-accordion.d.ts.map +1 -0
  4. package/dist/components/ry-alert.d.ts +19 -0
  5. package/dist/components/ry-alert.d.ts.map +1 -0
  6. package/dist/components/ry-button.d.ts +19 -0
  7. package/dist/components/ry-button.d.ts.map +1 -0
  8. package/dist/components/ry-code.d.ts +27 -0
  9. package/dist/components/ry-code.d.ts.map +1 -0
  10. package/dist/components/ry-color-input.d.ts +28 -0
  11. package/dist/components/ry-color-input.d.ts.map +1 -0
  12. package/dist/components/ry-color-picker.d.ts +52 -0
  13. package/dist/components/ry-color-picker.d.ts.map +1 -0
  14. package/dist/components/ry-drawer.d.ts +28 -0
  15. package/dist/components/ry-drawer.d.ts.map +1 -0
  16. package/dist/components/ry-dropdown.d.ts +24 -0
  17. package/dist/components/ry-dropdown.d.ts.map +1 -0
  18. package/dist/components/ry-example.d.ts +23 -0
  19. package/dist/components/ry-example.d.ts.map +1 -0
  20. package/dist/components/ry-field.d.ts +18 -0
  21. package/dist/components/ry-field.d.ts.map +1 -0
  22. package/dist/components/ry-icon.d.ts +27 -0
  23. package/dist/components/ry-icon.d.ts.map +1 -0
  24. package/dist/components/ry-knob.d.ts +27 -0
  25. package/dist/components/ry-knob.d.ts.map +1 -0
  26. package/dist/components/ry-modal.d.ts +23 -0
  27. package/dist/components/ry-modal.d.ts.map +1 -0
  28. package/dist/components/ry-select.d.ts +29 -0
  29. package/dist/components/ry-select.d.ts.map +1 -0
  30. package/dist/components/ry-slider.d.ts +30 -0
  31. package/dist/components/ry-slider.d.ts.map +1 -0
  32. package/dist/components/ry-switch.d.ts +22 -0
  33. package/dist/components/ry-switch.d.ts.map +1 -0
  34. package/dist/components/ry-tabs.d.ts +21 -0
  35. package/dist/components/ry-tabs.d.ts.map +1 -0
  36. package/dist/components/ry-theme-toggle.d.ts +21 -0
  37. package/dist/components/ry-theme-toggle.d.ts.map +1 -0
  38. package/dist/components/ry-toast.d.ts +31 -0
  39. package/dist/components/ry-toast.d.ts.map +1 -0
  40. package/dist/components/ry-toggle-button.d.ts +31 -0
  41. package/dist/components/ry-toggle-button.d.ts.map +1 -0
  42. package/dist/components/ry-tooltip.d.ts +23 -0
  43. package/dist/components/ry-tooltip.d.ts.map +1 -0
  44. package/dist/core/ry-element.d.ts +66 -0
  45. package/dist/core/ry-element.d.ts.map +1 -0
  46. package/dist/core/ry-icons.d.ts +38 -0
  47. package/dist/core/ry-icons.d.ts.map +1 -0
  48. package/dist/core/ry-transform.d.ts +35 -0
  49. package/dist/core/ry-transform.d.ts.map +1 -0
  50. package/dist/css/ry-base.css +155 -0
  51. package/dist/css/ry-components.css +1195 -0
  52. package/dist/css/ry-layout.css +240 -0
  53. package/dist/css/ry-structure.css +1737 -0
  54. package/dist/css/ry-theme.css +1433 -0
  55. package/dist/css/ry-tokens.css +145 -0
  56. package/dist/css/ry-ui.css +1207 -0
  57. package/dist/ry-ui.d.ts +54 -0
  58. package/dist/ry-ui.d.ts.map +1 -0
  59. package/dist/ry-ui.js +2433 -0
  60. package/dist/ry-ui.js.map +1 -0
  61. package/dist/types.d.ts +33 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/package.json +40 -0
@@ -0,0 +1,1433 @@
1
+ /**
2
+ * ry-ui Theme CSS
3
+ *
4
+ * All visual styling: colors, shadows, borders, typography.
5
+ * Requires ry-structure.css for layout.
6
+ * Override these styles or swap with your own theme.
7
+ */
8
+
9
+ /* ═══════════════════════════════════════════════════════════════
10
+ BASE / BODY
11
+ ═══════════════════════════════════════════════════════════════ */
12
+
13
+ html {
14
+ background-color: var(--ry-color-bg);
15
+ }
16
+
17
+ /* ═══════════════════════════════════════════════════════════════
18
+ FOCUS STYLES
19
+ ═══════════════════════════════════════════════════════════════ */
20
+
21
+ [class^="ry-"]:focus-visible,
22
+ [class*=" ry-"]:focus-visible,
23
+ ry-button:focus-visible,
24
+ .ry-btn:focus-visible,
25
+ .ry-input:focus-visible {
26
+ outline: none;
27
+ box-shadow: var(--ry-focus-ring);
28
+ }
29
+
30
+ /* ═══════════════════════════════════════════════════════════════
31
+ PAGE TYPOGRAPHY
32
+ ═══════════════════════════════════════════════════════════════ */
33
+
34
+ ry-page {
35
+ font-family: var(--ry-font-sans);
36
+ font-size: var(--ry-text-base);
37
+ line-height: var(--ry-leading-normal);
38
+ color: var(--ry-color-text);
39
+ background-color: var(--ry-color-bg);
40
+ }
41
+
42
+ ry-page h1, ry-page h2, ry-page h3, ry-page h4, ry-page h5, ry-page h6 {
43
+ margin: 0 0 var(--ry-space-4) 0;
44
+ font-weight: var(--ry-font-semibold);
45
+ line-height: var(--ry-leading-tight);
46
+ color: var(--ry-color-text);
47
+ }
48
+
49
+ ry-page h1 { font-size: var(--ry-text-4xl); }
50
+ ry-page h2 { font-size: var(--ry-text-3xl); }
51
+ ry-page h3 { font-size: var(--ry-text-2xl); }
52
+ ry-page h4 { font-size: var(--ry-text-xl); }
53
+
54
+ ry-page p {
55
+ margin: 0 0 var(--ry-space-4) 0;
56
+ }
57
+
58
+ ry-page a {
59
+ color: var(--ry-color-primary);
60
+ text-decoration: none;
61
+ }
62
+
63
+ ry-page a:hover {
64
+ text-decoration: underline;
65
+ }
66
+
67
+ /* ═══════════════════════════════════════════════════════════════
68
+ HEADER
69
+ ═══════════════════════════════════════════════════════════════ */
70
+
71
+ ry-header {
72
+ background-color: var(--ry-color-bg);
73
+ border-bottom: var(--ry-border-width) solid var(--ry-color-border);
74
+ }
75
+
76
+ /* ═══════════════════════════════════════════════════════════════
77
+ FOOTER
78
+ ═══════════════════════════════════════════════════════════════ */
79
+
80
+ ry-footer {
81
+ background-color: var(--ry-color-bg-subtle);
82
+ border-top: var(--ry-border-width) solid var(--ry-color-border);
83
+ color: var(--ry-color-text-muted);
84
+ }
85
+
86
+ /* ═══════════════════════════════════════════════════════════════
87
+ NAV
88
+ ═══════════════════════════════════════════════════════════════ */
89
+
90
+ ry-nav a {
91
+ color: var(--ry-color-text-muted);
92
+ font-size: var(--ry-text-sm);
93
+ font-weight: var(--ry-font-medium);
94
+ transition: color var(--ry-duration-fast) var(--ry-ease);
95
+ }
96
+
97
+ ry-nav a:hover {
98
+ color: var(--ry-color-text);
99
+ }
100
+
101
+ ry-nav a[aria-current="page"] {
102
+ color: var(--ry-color-primary);
103
+ }
104
+
105
+ /* ═══════════════════════════════════════════════════════════════
106
+ LOGO
107
+ ═══════════════════════════════════════════════════════════════ */
108
+
109
+ ry-logo {
110
+ font-size: var(--ry-text-xl);
111
+ font-weight: var(--ry-font-bold);
112
+ color: var(--ry-color-text);
113
+ }
114
+
115
+ /* ═══════════════════════════════════════════════════════════════
116
+ DIVIDER
117
+ ═══════════════════════════════════════════════════════════════ */
118
+
119
+ ry-divider {
120
+ background-color: var(--ry-color-border);
121
+ }
122
+
123
+ /* ═══════════════════════════════════════════════════════════════
124
+ BUTTONS
125
+ ═══════════════════════════════════════════════════════════════ */
126
+
127
+ .ry-btn,
128
+ ry-button {
129
+ font-family: var(--ry-font-sans);
130
+ font-size: var(--ry-text-sm);
131
+ font-weight: var(--ry-font-medium);
132
+ line-height: var(--ry-leading-normal);
133
+ text-decoration: none;
134
+
135
+ background-color: var(--ry-color-primary);
136
+ color: var(--ry-color-text-inverse);
137
+ border: var(--ry-border-width) solid transparent;
138
+ border-radius: var(--ry-radius-md);
139
+
140
+ transition-property: background-color, border-color, color, box-shadow;
141
+ transition-duration: var(--ry-duration-fast);
142
+ transition-timing-function: var(--ry-ease);
143
+ }
144
+
145
+ .ry-btn:hover,
146
+ ry-button:hover {
147
+ background-color: var(--ry-color-primary-hover);
148
+ }
149
+
150
+ .ry-btn:active,
151
+ ry-button:active {
152
+ background-color: var(--ry-color-primary-active);
153
+ }
154
+
155
+ .ry-btn:disabled,
156
+ .ry-btn[aria-disabled="true"],
157
+ ry-button[disabled] {
158
+ opacity: 0.5;
159
+ }
160
+
161
+ /* Button variants */
162
+ .ry-btn--secondary,
163
+ ry-button[variant="secondary"] {
164
+ background-color: var(--ry-color-secondary);
165
+ }
166
+ .ry-btn--secondary:hover,
167
+ ry-button[variant="secondary"]:hover {
168
+ background-color: var(--ry-color-secondary-hover);
169
+ }
170
+
171
+ .ry-btn--outline,
172
+ ry-button[variant="outline"] {
173
+ background-color: transparent;
174
+ color: var(--ry-color-primary);
175
+ border-color: var(--ry-color-primary);
176
+ }
177
+ .ry-btn--outline:hover,
178
+ ry-button[variant="outline"]:hover {
179
+ background-color: var(--ry-color-primary);
180
+ color: var(--ry-color-text-inverse);
181
+ }
182
+
183
+ .ry-btn--ghost,
184
+ ry-button[variant="ghost"] {
185
+ background-color: transparent;
186
+ color: var(--ry-color-text);
187
+ }
188
+ .ry-btn--ghost:hover,
189
+ ry-button[variant="ghost"]:hover {
190
+ background-color: var(--ry-color-bg-muted);
191
+ }
192
+
193
+ .ry-btn--danger,
194
+ ry-button[variant="danger"] {
195
+ background-color: var(--ry-color-danger);
196
+ }
197
+ .ry-btn--danger:hover,
198
+ ry-button[variant="danger"]:hover {
199
+ background-color: var(--ry-color-danger-hover, #dc2626);
200
+ }
201
+
202
+ /* Button sizes (typography only - padding is structural) */
203
+ .ry-btn--sm,
204
+ ry-button[size="sm"] {
205
+ font-size: var(--ry-text-xs);
206
+ }
207
+
208
+ .ry-btn--lg,
209
+ ry-button[size="lg"] {
210
+ font-size: var(--ry-text-base);
211
+ }
212
+
213
+ /* ═══════════════════════════════════════════════════════════════
214
+ TOGGLE BUTTON
215
+ ═══════════════════════════════════════════════════════════════ */
216
+
217
+ ry-toggle-button {
218
+ font-family: var(--ry-font-sans);
219
+ font-size: var(--ry-text-sm);
220
+ font-weight: var(--ry-font-medium);
221
+ line-height: var(--ry-leading-normal);
222
+ text-decoration: none;
223
+
224
+ background-color: var(--ry-color-bg);
225
+ color: var(--ry-color-text);
226
+ border: var(--ry-border-width) solid var(--ry-color-border);
227
+ border-radius: var(--ry-radius-md);
228
+
229
+ transition-property: background-color, border-color, color, box-shadow;
230
+ transition-duration: var(--ry-duration-fast);
231
+ transition-timing-function: var(--ry-ease);
232
+ }
233
+
234
+ ry-toggle-button:hover {
235
+ background-color: var(--ry-color-bg-muted);
236
+ border-color: var(--ry-color-border-strong);
237
+ }
238
+
239
+ ry-toggle-button:active {
240
+ background-color: var(--ry-color-bg-subtle);
241
+ }
242
+
243
+ ry-toggle-button[pressed] {
244
+ background-color: var(--ry-color-primary);
245
+ border-color: var(--ry-color-primary);
246
+ color: var(--ry-color-text-inverse);
247
+ }
248
+
249
+ ry-toggle-button[pressed]:hover {
250
+ background-color: var(--ry-color-primary-hover);
251
+ border-color: var(--ry-color-primary-hover);
252
+ }
253
+
254
+ ry-toggle-button[disabled] {
255
+ opacity: 0.5;
256
+ }
257
+
258
+ ry-toggle-button:focus-visible {
259
+ outline: none;
260
+ box-shadow: var(--ry-focus-ring);
261
+ }
262
+
263
+ /* Size variants (typography only) */
264
+ ry-toggle-button[size="sm"] {
265
+ font-size: var(--ry-text-xs);
266
+ }
267
+
268
+ ry-toggle-button[size="lg"] {
269
+ font-size: var(--ry-text-base);
270
+ }
271
+
272
+ /* ═══════════════════════════════════════════════════════════════
273
+ SLIDER
274
+ ═══════════════════════════════════════════════════════════════ */
275
+
276
+ ry-slider [data-ry-target="track"] {
277
+ background-color: var(--ry-color-bg-muted);
278
+ border-radius: var(--ry-radius-full);
279
+ }
280
+
281
+ ry-slider [data-ry-target="fill"] {
282
+ background-color: var(--ry-color-primary);
283
+ border-radius: var(--ry-radius-full);
284
+ }
285
+
286
+ ry-slider [data-ry-target^="thumb"] {
287
+ background-color: var(--ry-color-bg);
288
+ border: 2px solid var(--ry-color-primary);
289
+ border-radius: var(--ry-radius-full);
290
+ box-shadow: var(--ry-shadow-sm);
291
+ transition: box-shadow var(--ry-duration-fast) var(--ry-ease);
292
+ }
293
+
294
+ ry-slider [data-ry-target^="thumb"]:hover {
295
+ box-shadow: var(--ry-shadow-md);
296
+ }
297
+
298
+ ry-slider [data-ry-target^="thumb"]:focus-visible {
299
+ outline: none;
300
+ box-shadow: var(--ry-focus-ring);
301
+ }
302
+
303
+ ry-slider[disabled] {
304
+ opacity: 0.5;
305
+ }
306
+
307
+ ry-slider [data-ry-target="labels"] {
308
+ font-size: var(--ry-text-xs);
309
+ color: var(--ry-color-text-muted);
310
+ }
311
+
312
+ ry-slider [data-ry-target^="tooltip"] {
313
+ background-color: var(--ry-color-text);
314
+ color: var(--ry-color-text-inverse);
315
+ padding: var(--ry-space-1) var(--ry-space-2);
316
+ border-radius: var(--ry-radius-md);
317
+ font-size: var(--ry-text-xs);
318
+ font-weight: var(--ry-font-medium);
319
+ }
320
+
321
+ /* Color variants */
322
+ ry-slider[color="secondary"] [data-ry-target="fill"] { background-color: var(--ry-color-secondary); }
323
+ ry-slider[color="secondary"] [data-ry-target^="thumb"] { border-color: var(--ry-color-secondary); }
324
+
325
+ ry-slider[color="success"] [data-ry-target="fill"] { background-color: var(--ry-color-success); }
326
+ ry-slider[color="success"] [data-ry-target^="thumb"] { border-color: var(--ry-color-success); }
327
+
328
+ ry-slider[color="warning"] [data-ry-target="fill"] { background-color: var(--ry-color-warning); }
329
+ ry-slider[color="warning"] [data-ry-target^="thumb"] { border-color: var(--ry-color-warning); }
330
+
331
+ ry-slider[color="danger"] [data-ry-target="fill"] { background-color: var(--ry-color-danger); }
332
+ ry-slider[color="danger"] [data-ry-target^="thumb"] { border-color: var(--ry-color-danger); }
333
+
334
+ ry-slider[color="info"] [data-ry-target="fill"] { background-color: var(--ry-color-info); }
335
+ ry-slider[color="info"] [data-ry-target^="thumb"] { border-color: var(--ry-color-info); }
336
+
337
+ /* ═══════════════════════════════════════════════════════════════
338
+ KNOB
339
+ ═══════════════════════════════════════════════════════════════ */
340
+
341
+ ry-knob [data-ry-target="ring"] {
342
+ background: conic-gradient(
343
+ from 225deg,
344
+ var(--ry-color-primary) calc(var(--knob-percent) * 270deg),
345
+ var(--ry-color-bg-muted) calc(var(--knob-percent) * 270deg)
346
+ );
347
+ border-radius: var(--ry-radius-full);
348
+ }
349
+
350
+ ry-knob [data-ry-target="cap"] {
351
+ background: var(--ry-color-bg);
352
+ border: var(--ry-border-width) solid var(--ry-color-border);
353
+ border-radius: var(--ry-radius-full);
354
+ margin: 4px;
355
+ width: calc(100% - 8px);
356
+ height: calc(100% - 8px);
357
+ }
358
+
359
+ ry-knob [data-ry-target="indicator"] {
360
+ background-color: var(--ry-color-primary);
361
+ border-radius: 1.5px;
362
+ }
363
+
364
+ ry-knob [data-ry-target="display"] {
365
+ font-family: var(--ry-font-mono);
366
+ font-size: var(--ry-text-sm);
367
+ font-weight: var(--ry-font-medium);
368
+ color: var(--ry-color-text);
369
+ }
370
+
371
+ ry-knob [data-ry-target="label"] {
372
+ font-size: var(--ry-text-xs);
373
+ color: var(--ry-color-text-muted);
374
+ }
375
+
376
+ ry-knob:focus-visible [data-ry-target="ring"] {
377
+ box-shadow: var(--ry-focus-ring);
378
+ }
379
+
380
+ ry-knob[disabled] {
381
+ opacity: 0.5;
382
+ }
383
+
384
+ /* Color variants */
385
+ ry-knob[color="secondary"] [data-ry-target="ring"] {
386
+ background: conic-gradient(
387
+ from 225deg,
388
+ var(--ry-color-secondary) calc(var(--knob-percent) * 270deg),
389
+ var(--ry-color-bg-muted) calc(var(--knob-percent) * 270deg)
390
+ );
391
+ }
392
+ ry-knob[color="secondary"] [data-ry-target="indicator"] { background-color: var(--ry-color-secondary); }
393
+
394
+ ry-knob[color="success"] [data-ry-target="ring"] {
395
+ background: conic-gradient(
396
+ from 225deg,
397
+ var(--ry-color-success) calc(var(--knob-percent) * 270deg),
398
+ var(--ry-color-bg-muted) calc(var(--knob-percent) * 270deg)
399
+ );
400
+ }
401
+ ry-knob[color="success"] [data-ry-target="indicator"] { background-color: var(--ry-color-success); }
402
+
403
+ ry-knob[color="warning"] [data-ry-target="ring"] {
404
+ background: conic-gradient(
405
+ from 225deg,
406
+ var(--ry-color-warning) calc(var(--knob-percent) * 270deg),
407
+ var(--ry-color-bg-muted) calc(var(--knob-percent) * 270deg)
408
+ );
409
+ }
410
+ ry-knob[color="warning"] [data-ry-target="indicator"] { background-color: var(--ry-color-warning); }
411
+
412
+ ry-knob[color="danger"] [data-ry-target="ring"] {
413
+ background: conic-gradient(
414
+ from 225deg,
415
+ var(--ry-color-danger) calc(var(--knob-percent) * 270deg),
416
+ var(--ry-color-bg-muted) calc(var(--knob-percent) * 270deg)
417
+ );
418
+ }
419
+ ry-knob[color="danger"] [data-ry-target="indicator"] { background-color: var(--ry-color-danger); }
420
+
421
+ /* ═══════════════════════════════════════════════════════════════
422
+ CARDS
423
+ ═══════════════════════════════════════════════════════════════ */
424
+
425
+ ry-card {
426
+ background-color: var(--ry-color-bg);
427
+ border: var(--ry-border-width) solid var(--ry-color-border);
428
+ border-radius: var(--ry-radius-lg);
429
+ box-shadow: var(--ry-shadow-sm);
430
+ }
431
+
432
+ ry-card h3 {
433
+ font-size: var(--ry-text-lg);
434
+ font-weight: var(--ry-font-semibold);
435
+ }
436
+
437
+ ry-card p {
438
+ color: var(--ry-color-text-muted);
439
+ }
440
+
441
+ /* ═══════════════════════════════════════════════════════════════
442
+ BADGES
443
+ ═══════════════════════════════════════════════════════════════ */
444
+
445
+ .ry-badge,
446
+ ry-badge {
447
+ font-size: var(--ry-text-xs);
448
+ font-weight: var(--ry-font-medium);
449
+ background-color: var(--ry-color-bg-muted);
450
+ color: var(--ry-color-text);
451
+ border-radius: var(--ry-radius-full);
452
+ }
453
+
454
+ .ry-badge--primary,
455
+ ry-badge[variant="primary"] {
456
+ background-color: var(--ry-color-primary);
457
+ color: var(--ry-color-text-inverse);
458
+ }
459
+
460
+ .ry-badge--success,
461
+ ry-badge[variant="success"] {
462
+ background-color: var(--ry-color-success);
463
+ color: var(--ry-color-text-inverse);
464
+ }
465
+
466
+ .ry-badge--warning,
467
+ ry-badge[variant="warning"] {
468
+ background-color: var(--ry-color-warning);
469
+ color: var(--ry-color-text);
470
+ }
471
+
472
+ .ry-badge--danger,
473
+ ry-badge[variant="danger"] {
474
+ background-color: var(--ry-color-danger);
475
+ color: var(--ry-color-text-inverse);
476
+ }
477
+
478
+ /* ═══════════════════════════════════════════════════════════════
479
+ ALERTS
480
+ ═══════════════════════════════════════════════════════════════ */
481
+
482
+ .ry-alert,
483
+ ry-alert {
484
+ background-color: var(--ry-color-bg-subtle);
485
+ border: var(--ry-border-width) solid var(--ry-color-border);
486
+ border-radius: var(--ry-radius-lg);
487
+ }
488
+
489
+ .ry-alert--info,
490
+ ry-alert[type="info"] {
491
+ background-color: var(--ry-color-info-bg, #ecfeff);
492
+ border-color: var(--ry-color-info);
493
+ color: var(--ry-color-info-text, #0e7490);
494
+ }
495
+
496
+ .ry-alert--success,
497
+ ry-alert[type="success"] {
498
+ background-color: var(--ry-color-success-bg, #f0fdf4);
499
+ border-color: var(--ry-color-success);
500
+ color: var(--ry-color-success-text, #15803d);
501
+ }
502
+
503
+ .ry-alert--warning,
504
+ ry-alert[type="warning"] {
505
+ background-color: var(--ry-color-warning-bg, #fffbeb);
506
+ border-color: var(--ry-color-warning);
507
+ color: var(--ry-color-warning-text, #b45309);
508
+ }
509
+
510
+ .ry-alert--danger,
511
+ ry-alert[type="danger"] {
512
+ background-color: var(--ry-color-danger-bg, #fef2f2);
513
+ border-color: var(--ry-color-danger);
514
+ color: var(--ry-color-danger-text, #b91c1c);
515
+ }
516
+
517
+ .ry-alert__title,
518
+ ry-alert [slot="title"] {
519
+ font-weight: var(--ry-font-semibold);
520
+ }
521
+
522
+ /* ═══════════════════════════════════════════════════════════════
523
+ FORM ELEMENTS
524
+ ═══════════════════════════════════════════════════════════════ */
525
+
526
+ .ry-input,
527
+ ry-field input,
528
+ ry-field textarea,
529
+ ry-field select {
530
+ font-family: var(--ry-font-sans);
531
+ font-size: var(--ry-text-base);
532
+ line-height: var(--ry-leading-normal);
533
+ color: var(--ry-color-text);
534
+
535
+ background-color: var(--ry-color-bg);
536
+ border: var(--ry-border-width) solid var(--ry-color-border);
537
+ border-radius: var(--ry-radius-md);
538
+
539
+ transition: border-color var(--ry-duration-fast) var(--ry-ease),
540
+ box-shadow var(--ry-duration-fast) var(--ry-ease);
541
+ }
542
+
543
+ .ry-input:hover,
544
+ ry-field input:hover,
545
+ ry-field textarea:hover {
546
+ border-color: var(--ry-color-border-strong);
547
+ }
548
+
549
+ .ry-input:focus,
550
+ ry-field input:focus,
551
+ ry-field textarea:focus {
552
+ outline: none;
553
+ border-color: var(--ry-color-primary);
554
+ box-shadow: var(--ry-focus-ring);
555
+ }
556
+
557
+ .ry-input::placeholder,
558
+ ry-field input::placeholder,
559
+ ry-field textarea::placeholder {
560
+ color: var(--ry-color-text-muted);
561
+ }
562
+
563
+ .ry-input:disabled,
564
+ ry-field input:disabled,
565
+ ry-field textarea:disabled {
566
+ background-color: var(--ry-color-bg-muted);
567
+ opacity: 0.5;
568
+ }
569
+
570
+ .ry-label,
571
+ ry-field label {
572
+ font-size: var(--ry-text-sm);
573
+ font-weight: var(--ry-font-medium);
574
+ color: var(--ry-color-text);
575
+ }
576
+
577
+ /* ═══════════════════════════════════════════════════════════════
578
+ ACCORDION
579
+ ═══════════════════════════════════════════════════════════════ */
580
+
581
+ ry-accordion {
582
+ border: var(--ry-border-width) solid var(--ry-color-border);
583
+ border-radius: var(--ry-radius-lg);
584
+ }
585
+
586
+ .ry-accordion__item,
587
+ ry-accordion-item {
588
+ border-bottom: var(--ry-border-width) solid var(--ry-color-border);
589
+ }
590
+
591
+ .ry-accordion__item:last-child,
592
+ ry-accordion-item:last-child {
593
+ border-bottom: none;
594
+ }
595
+
596
+ .ry-accordion__trigger {
597
+ font-family: var(--ry-font-sans);
598
+ font-size: var(--ry-text-base);
599
+ font-weight: var(--ry-font-medium);
600
+ color: var(--ry-color-text);
601
+ background-color: transparent;
602
+ transition: background-color var(--ry-duration-fast) var(--ry-ease);
603
+ }
604
+
605
+ .ry-accordion__trigger:hover {
606
+ background-color: var(--ry-color-bg-subtle);
607
+ }
608
+
609
+ .ry-accordion__trigger:focus-visible {
610
+ outline: none;
611
+ box-shadow: inset var(--ry-focus-ring);
612
+ }
613
+
614
+ .ry-accordion__content {
615
+ color: var(--ry-color-text-muted);
616
+ }
617
+
618
+ /* ═══════════════════════════════════════════════════════════════
619
+ TABS
620
+ ═══════════════════════════════════════════════════════════════ */
621
+
622
+ .ry-tabs__list {
623
+ border-bottom: var(--ry-border-width) solid var(--ry-color-border);
624
+ }
625
+
626
+ .ry-tabs__trigger {
627
+ font-family: var(--ry-font-sans);
628
+ font-size: var(--ry-text-sm);
629
+ font-weight: var(--ry-font-medium);
630
+ color: var(--ry-color-text-muted);
631
+ background: transparent;
632
+ transition: color var(--ry-duration-fast) var(--ry-ease),
633
+ border-color var(--ry-duration-fast) var(--ry-ease);
634
+ }
635
+
636
+ .ry-tabs__trigger:hover {
637
+ color: var(--ry-color-text);
638
+ }
639
+
640
+ .ry-tabs__trigger[aria-selected="true"] {
641
+ color: var(--ry-color-primary);
642
+ border-bottom-color: var(--ry-color-primary);
643
+ }
644
+
645
+ .ry-tabs__trigger:focus-visible {
646
+ outline: none;
647
+ box-shadow: var(--ry-focus-ring);
648
+ border-radius: var(--ry-radius-sm);
649
+ }
650
+
651
+ /* ═══════════════════════════════════════════════════════════════
652
+ MODAL
653
+ ═══════════════════════════════════════════════════════════════ */
654
+
655
+ .ry-modal__backdrop {
656
+ background-color: var(--ry-color-overlay);
657
+ }
658
+
659
+ .ry-modal__dialog {
660
+ background-color: var(--ry-color-bg);
661
+ border-radius: var(--ry-radius-xl);
662
+ box-shadow: var(--ry-shadow-xl);
663
+ }
664
+
665
+ .ry-modal__header {
666
+ border-bottom: var(--ry-border-width) solid var(--ry-color-border);
667
+ }
668
+
669
+ .ry-modal__title {
670
+ font-size: var(--ry-text-lg);
671
+ font-weight: var(--ry-font-semibold);
672
+ }
673
+
674
+ .ry-modal__close {
675
+ font-size: var(--ry-text-xl);
676
+ background: transparent;
677
+ border-radius: var(--ry-radius-md);
678
+ color: var(--ry-color-text-muted);
679
+ transition: background-color var(--ry-duration-fast) var(--ry-ease),
680
+ color var(--ry-duration-fast) var(--ry-ease);
681
+ }
682
+
683
+ .ry-modal__close:hover {
684
+ background-color: var(--ry-color-bg-muted);
685
+ color: var(--ry-color-text);
686
+ }
687
+
688
+ .ry-modal__footer {
689
+ border-top: var(--ry-border-width) solid var(--ry-color-border);
690
+ background-color: var(--ry-color-bg-subtle);
691
+ }
692
+
693
+ /* ═══════════════════════════════════════════════════════════════
694
+ DROPDOWN
695
+ ═══════════════════════════════════════════════════════════════ */
696
+
697
+ .ry-dropdown__menu,
698
+ ry-menu {
699
+ background-color: var(--ry-color-bg);
700
+ border: var(--ry-border-width) solid var(--ry-color-border);
701
+ border-radius: var(--ry-radius-lg);
702
+ box-shadow: var(--ry-shadow-lg);
703
+ }
704
+
705
+ .ry-dropdown__item,
706
+ ry-menu-item {
707
+ font-family: var(--ry-font-sans);
708
+ font-size: var(--ry-text-sm);
709
+ color: var(--ry-color-text);
710
+ background: transparent;
711
+ border-radius: var(--ry-radius-md);
712
+ transition: background-color var(--ry-duration-fast) var(--ry-ease);
713
+ }
714
+
715
+ .ry-dropdown__item:hover,
716
+ ry-menu-item:hover {
717
+ background-color: var(--ry-color-bg-muted);
718
+ }
719
+
720
+ .ry-dropdown__item:focus-visible,
721
+ ry-menu-item:focus-visible {
722
+ outline: none;
723
+ box-shadow: inset var(--ry-focus-ring);
724
+ }
725
+
726
+ .ry-dropdown__divider {
727
+ background-color: var(--ry-color-border);
728
+ }
729
+
730
+ /* ═══════════════════════════════════════════════════════════════
731
+ SWITCH
732
+ ═══════════════════════════════════════════════════════════════ */
733
+
734
+ ry-switch[disabled] {
735
+ opacity: 0.5;
736
+ }
737
+
738
+ .ry-switch__track {
739
+ background-color: var(--ry-color-bg-muted);
740
+ border: var(--ry-border-width) solid var(--ry-color-border);
741
+ border-radius: var(--ry-radius-full);
742
+ transition: background-color var(--ry-duration-fast) var(--ry-ease),
743
+ border-color var(--ry-duration-fast) var(--ry-ease);
744
+ }
745
+
746
+ ry-switch[checked] .ry-switch__track {
747
+ background-color: var(--ry-color-primary);
748
+ border-color: var(--ry-color-primary);
749
+ }
750
+
751
+ .ry-switch__thumb {
752
+ background-color: var(--ry-color-bg);
753
+ border-radius: var(--ry-radius-full);
754
+ box-shadow: var(--ry-shadow-sm);
755
+ }
756
+
757
+ .ry-switch__label {
758
+ font-size: var(--ry-text-sm);
759
+ font-weight: var(--ry-font-medium);
760
+ color: var(--ry-color-text);
761
+ }
762
+
763
+ ry-switch:focus-visible .ry-switch__track {
764
+ box-shadow: var(--ry-focus-ring);
765
+ }
766
+
767
+ /* ═══════════════════════════════════════════════════════════════
768
+ TOOLTIP
769
+ ═══════════════════════════════════════════════════════════════ */
770
+
771
+ .ry-tooltip__content {
772
+ font-size: var(--ry-text-xs);
773
+ font-weight: var(--ry-font-medium);
774
+ line-height: var(--ry-leading-tight);
775
+ background-color: var(--ry-color-text);
776
+ color: var(--ry-color-text-inverse);
777
+ border-radius: var(--ry-radius-md);
778
+ }
779
+
780
+ /* ═══════════════════════════════════════════════════════════════
781
+ DRAWER
782
+ ═══════════════════════════════════════════════════════════════ */
783
+
784
+ .ry-drawer__backdrop {
785
+ background-color: var(--ry-color-overlay);
786
+ }
787
+
788
+ .ry-drawer__panel {
789
+ background-color: var(--ry-color-bg);
790
+ box-shadow: var(--ry-shadow-xl);
791
+ }
792
+
793
+ .ry-drawer__panel[data-ry-side="bottom"] {
794
+ border-radius: var(--ry-radius-xl) var(--ry-radius-xl) 0 0;
795
+ }
796
+
797
+ .ry-drawer__close {
798
+ font-size: var(--ry-text-xl);
799
+ background: transparent;
800
+ border-radius: var(--ry-radius-md);
801
+ color: var(--ry-color-text-muted);
802
+ transition: background-color var(--ry-duration-fast) var(--ry-ease),
803
+ color var(--ry-duration-fast) var(--ry-ease);
804
+ }
805
+
806
+ .ry-drawer__close:hover {
807
+ background-color: var(--ry-color-bg-muted);
808
+ color: var(--ry-color-text);
809
+ }
810
+
811
+ /* ═══════════════════════════════════════════════════════════════
812
+ TOAST
813
+ ═══════════════════════════════════════════════════════════════ */
814
+
815
+ ry-toast {
816
+ font-family: var(--ry-font-sans);
817
+ background-color: var(--ry-color-bg);
818
+ border: var(--ry-border-width) solid var(--ry-color-border);
819
+ border-radius: var(--ry-radius-lg);
820
+ box-shadow: var(--ry-shadow-lg);
821
+ }
822
+
823
+ .ry-toast__icon {
824
+ font-size: var(--ry-text-sm);
825
+ }
826
+
827
+ ry-toast[type="info"] .ry-toast__icon {
828
+ color: var(--ry-color-info);
829
+ }
830
+
831
+ ry-toast[type="success"] .ry-toast__icon {
832
+ color: var(--ry-color-success);
833
+ }
834
+
835
+ ry-toast[type="warning"] .ry-toast__icon {
836
+ color: var(--ry-color-warning);
837
+ }
838
+
839
+ ry-toast[type="error"] .ry-toast__icon {
840
+ color: var(--ry-color-danger);
841
+ }
842
+
843
+ .ry-toast__content {
844
+ font-size: var(--ry-text-sm);
845
+ color: var(--ry-color-text);
846
+ line-height: var(--ry-leading-normal);
847
+ }
848
+
849
+ .ry-toast__close {
850
+ font-size: var(--ry-text-lg);
851
+ background: transparent;
852
+ border-radius: var(--ry-radius-sm);
853
+ color: var(--ry-color-text-muted);
854
+ transition: background-color var(--ry-duration-fast) var(--ry-ease),
855
+ color var(--ry-duration-fast) var(--ry-ease);
856
+ }
857
+
858
+ .ry-toast__close:hover {
859
+ background-color: var(--ry-color-bg-muted);
860
+ color: var(--ry-color-text);
861
+ }
862
+
863
+ /* ═══════════════════════════════════════════════════════════════
864
+ SELECT
865
+ ═══════════════════════════════════════════════════════════════ */
866
+
867
+ ry-select[disabled] {
868
+ opacity: 0.5;
869
+ }
870
+
871
+ .ry-select__trigger {
872
+ font-family: var(--ry-font-sans);
873
+ font-size: var(--ry-text-base);
874
+ line-height: var(--ry-leading-normal);
875
+ background-color: var(--ry-color-bg);
876
+ border: var(--ry-border-width) solid var(--ry-color-border);
877
+ border-radius: var(--ry-radius-md);
878
+ transition: border-color var(--ry-duration-fast) var(--ry-ease),
879
+ box-shadow var(--ry-duration-fast) var(--ry-ease);
880
+ }
881
+
882
+ ry-select:hover .ry-select__trigger {
883
+ border-color: var(--ry-color-border-strong);
884
+ }
885
+
886
+ ry-select:focus-visible .ry-select__trigger {
887
+ outline: none;
888
+ border-color: var(--ry-color-primary);
889
+ box-shadow: var(--ry-focus-ring);
890
+ }
891
+
892
+ ry-select[data-ry-state="open"] .ry-select__trigger {
893
+ border-color: var(--ry-color-primary);
894
+ }
895
+
896
+ .ry-select__value {
897
+ color: var(--ry-color-text-muted);
898
+ }
899
+
900
+ .ry-select__value--selected {
901
+ color: var(--ry-color-text);
902
+ }
903
+
904
+ .ry-select__arrow {
905
+ font-size: var(--ry-text-xs);
906
+ color: var(--ry-color-text-muted);
907
+ }
908
+
909
+ .ry-select__dropdown {
910
+ background-color: var(--ry-color-bg);
911
+ border: var(--ry-border-width) solid var(--ry-color-border);
912
+ border-radius: var(--ry-radius-lg);
913
+ box-shadow: var(--ry-shadow-lg);
914
+ }
915
+
916
+ .ry-select__option {
917
+ font-size: var(--ry-text-sm);
918
+ color: var(--ry-color-text);
919
+ border-radius: var(--ry-radius-md);
920
+ transition: background-color var(--ry-duration-fast) var(--ry-ease);
921
+ }
922
+
923
+ .ry-select__option:hover,
924
+ .ry-select__option[data-highlighted] {
925
+ background-color: var(--ry-color-bg-muted);
926
+ }
927
+
928
+ .ry-select__option[aria-selected="true"] {
929
+ background-color: var(--ry-color-primary);
930
+ color: var(--ry-color-text-inverse);
931
+ }
932
+
933
+ .ry-select__option[data-disabled] {
934
+ opacity: 0.5;
935
+ }
936
+
937
+ .ry-select__option[data-disabled]:hover {
938
+ background-color: transparent;
939
+ }
940
+
941
+ /* ═══════════════════════════════════════════════════════════════
942
+ CODE
943
+ ═══════════════════════════════════════════════════════════════ */
944
+
945
+ ry-code {
946
+ background-color: var(--ry-code-bg, #f6f8fa);
947
+ border-radius: var(--ry-radius-lg);
948
+ box-shadow: var(--ry-shadow-lg);
949
+ }
950
+
951
+ .ry-code__header {
952
+ background-color: var(--ry-code-header-bg, #eaeef2);
953
+ }
954
+
955
+ .ry-code__title {
956
+ font-family: var(--ry-font-sans);
957
+ font-size: var(--ry-text-xs);
958
+ font-weight: var(--ry-font-bold);
959
+ color: var(--ry-code-title-color, #57606a);
960
+ }
961
+
962
+ .ry-code__copy {
963
+ background: transparent;
964
+ border-radius: var(--ry-radius-full);
965
+ color: var(--ry-code-icon-color, #8c959f);
966
+ transition: background-color var(--ry-duration-fast) var(--ry-ease),
967
+ color var(--ry-duration-fast) var(--ry-ease);
968
+ }
969
+
970
+ .ry-code__copy:hover {
971
+ background-color: var(--ry-code-icon-hover-bg, #d0d7de);
972
+ color: var(--ry-code-icon-hover-color, #24292f);
973
+ }
974
+
975
+ .ry-code__copy--success {
976
+ color: var(--ry-color-success);
977
+ }
978
+
979
+ .ry-code__pre,
980
+ .ry-code__code {
981
+ font-family: var(--ry-font-mono);
982
+ font-size: var(--ry-text-sm);
983
+ line-height: var(--ry-leading-relaxed);
984
+ color: var(--ry-code-text-color, #24292f);
985
+ }
986
+
987
+ .ry-code__line-number {
988
+ color: var(--ry-code-line-number-color, rgba(140, 149, 159, 0.6));
989
+ border-right: 1px solid var(--ry-code-line-border-color, #d0d7de);
990
+ }
991
+
992
+ .ry-code__color-preview {
993
+ border: 1px solid var(--ry-code-color-preview-border, rgba(36, 41, 47, 0.3));
994
+ border-radius: var(--ry-radius-sm);
995
+ }
996
+
997
+ /* Syntax highlighting colors (Cool/GitHub light as default) */
998
+ .ry-code__keyword {
999
+ color: var(--ry-code-keyword, #cf222e);
1000
+ }
1001
+
1002
+ .ry-code__property {
1003
+ color: var(--ry-code-property, #0550ae);
1004
+ }
1005
+
1006
+ .ry-code__value {
1007
+ color: var(--ry-code-value, #0a3069);
1008
+ }
1009
+
1010
+ .ry-code__string {
1011
+ color: var(--ry-code-string, #0a3069);
1012
+ }
1013
+
1014
+ .ry-code__number {
1015
+ color: var(--ry-code-number, #0550ae);
1016
+ }
1017
+
1018
+ .ry-code__comment {
1019
+ color: var(--ry-code-comment, #6e7781);
1020
+ font-style: italic;
1021
+ }
1022
+
1023
+ .ry-code__selector {
1024
+ color: var(--ry-code-selector, #116329);
1025
+ }
1026
+
1027
+ .ry-code__punctuation {
1028
+ color: var(--ry-code-punctuation, #24292f);
1029
+ }
1030
+
1031
+ .ry-code__tag {
1032
+ color: var(--ry-code-tag, #116329);
1033
+ }
1034
+
1035
+ .ry-code__attribute {
1036
+ color: var(--ry-code-attribute, #0550ae);
1037
+ }
1038
+
1039
+ .ry-code__color {
1040
+ color: var(--ry-code-value, #0a3069);
1041
+ }
1042
+
1043
+ /* ═══════════════════════════════════════════════════════════════
1044
+ EXAMPLE
1045
+ ═══════════════════════════════════════════════════════════════ */
1046
+
1047
+ .ry-example__preview {
1048
+ background-color: var(--ry-color-bg-subtle);
1049
+ border: var(--ry-border-width) solid var(--ry-color-border);
1050
+ border-radius: var(--ry-radius-lg);
1051
+ }
1052
+
1053
+ /* ═══════════════════════════════════════════════════════════════
1054
+ ICON
1055
+ ═══════════════════════════════════════════════════════════════ */
1056
+
1057
+ ry-icon {
1058
+ color: currentColor;
1059
+ }
1060
+
1061
+ /* ═══════════════════════════════════════════════════════════════
1062
+ CHECKBOX
1063
+ ═══════════════════════════════════════════════════════════════ */
1064
+
1065
+ input[type="checkbox"] {
1066
+ background-color: var(--ry-color-bg);
1067
+ border: var(--ry-border-width) solid var(--ry-color-border);
1068
+ border-radius: var(--ry-radius-sm);
1069
+ transition: background-color var(--ry-duration-fast) var(--ry-ease),
1070
+ border-color var(--ry-duration-fast) var(--ry-ease),
1071
+ box-shadow var(--ry-duration-fast) var(--ry-ease);
1072
+ }
1073
+
1074
+ input[type="checkbox"]:hover {
1075
+ border-color: var(--ry-color-border-strong);
1076
+ }
1077
+
1078
+ input[type="checkbox"]:focus-visible {
1079
+ outline: none;
1080
+ border-color: var(--ry-color-primary);
1081
+ box-shadow: var(--ry-focus-ring);
1082
+ }
1083
+
1084
+ input[type="checkbox"]:checked {
1085
+ background-color: var(--ry-color-primary);
1086
+ border-color: var(--ry-color-primary);
1087
+ }
1088
+
1089
+ input[type="checkbox"]:checked:hover {
1090
+ background-color: var(--ry-color-primary-hover);
1091
+ border-color: var(--ry-color-primary-hover);
1092
+ }
1093
+
1094
+ input[type="checkbox"]::after {
1095
+ border-right: 2px solid var(--ry-color-text-inverse);
1096
+ border-bottom: 2px solid var(--ry-color-text-inverse);
1097
+ margin-bottom: 2px;
1098
+ }
1099
+
1100
+ input[type="checkbox"]:disabled {
1101
+ opacity: 0.5;
1102
+ background-color: var(--ry-color-bg-muted);
1103
+ }
1104
+
1105
+ /* ═══════════════════════════════════════════════════════════════
1106
+ RADIO
1107
+ ═══════════════════════════════════════════════════════════════ */
1108
+
1109
+ input[type="radio"] {
1110
+ background-color: var(--ry-color-bg);
1111
+ border: var(--ry-border-width) solid var(--ry-color-border);
1112
+ border-radius: var(--ry-radius-full);
1113
+ transition: background-color var(--ry-duration-fast) var(--ry-ease),
1114
+ border-color var(--ry-duration-fast) var(--ry-ease),
1115
+ box-shadow var(--ry-duration-fast) var(--ry-ease);
1116
+ }
1117
+
1118
+ input[type="radio"]:hover {
1119
+ border-color: var(--ry-color-border-strong);
1120
+ }
1121
+
1122
+ input[type="radio"]:focus-visible {
1123
+ outline: none;
1124
+ border-color: var(--ry-color-primary);
1125
+ box-shadow: var(--ry-focus-ring);
1126
+ }
1127
+
1128
+ input[type="radio"]:checked {
1129
+ border-color: var(--ry-color-primary);
1130
+ }
1131
+
1132
+ input[type="radio"]:checked:hover {
1133
+ border-color: var(--ry-color-primary-hover);
1134
+ }
1135
+
1136
+ input[type="radio"]::after {
1137
+ background-color: var(--ry-color-primary);
1138
+ border-radius: var(--ry-radius-full);
1139
+ }
1140
+
1141
+ input[type="radio"]:disabled {
1142
+ opacity: 0.5;
1143
+ background-color: var(--ry-color-bg-muted);
1144
+ }
1145
+
1146
+ /* ═══════════════════════════════════════════════════════════════
1147
+ TABLE
1148
+ ═══════════════════════════════════════════════════════════════ */
1149
+
1150
+ table {
1151
+ font-family: var(--ry-font-sans);
1152
+ font-size: var(--ry-text-sm);
1153
+ color: var(--ry-color-text);
1154
+ }
1155
+
1156
+ th {
1157
+ font-weight: var(--ry-font-semibold);
1158
+ color: var(--ry-color-text);
1159
+ background-color: var(--ry-color-bg-subtle);
1160
+ border-bottom: var(--ry-border-width) solid var(--ry-color-border);
1161
+ }
1162
+
1163
+ td {
1164
+ border-bottom: var(--ry-border-width) solid var(--ry-color-border);
1165
+ }
1166
+
1167
+ tbody tr:last-child td {
1168
+ border-bottom: none;
1169
+ }
1170
+
1171
+ tbody tr:hover {
1172
+ background-color: var(--ry-color-bg-subtle);
1173
+ }
1174
+
1175
+ /* Table variants */
1176
+ table[data-bordered] {
1177
+ border: var(--ry-border-width) solid var(--ry-color-border);
1178
+ border-radius: var(--ry-radius-lg);
1179
+ }
1180
+
1181
+ table[data-bordered] th,
1182
+ table[data-bordered] td {
1183
+ border: var(--ry-border-width) solid var(--ry-color-border);
1184
+ }
1185
+
1186
+ table[data-striped] tbody tr:nth-child(even) {
1187
+ background-color: var(--ry-color-bg-subtle);
1188
+ }
1189
+
1190
+ table[data-striped] tbody tr:hover {
1191
+ background-color: var(--ry-color-bg-muted);
1192
+ }
1193
+
1194
+ /* ═══════════════════════════════════════════════════════════════
1195
+ COLOR PICKER
1196
+ ═══════════════════════════════════════════════════════════════ */
1197
+
1198
+ ry-color-picker[disabled] {
1199
+ opacity: 0.5;
1200
+ }
1201
+
1202
+ /* Trigger button */
1203
+ ry-color-picker [data-ry-target="trigger"] {
1204
+ background-color: var(--ry-color-bg);
1205
+ background-image: repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%);
1206
+ background-size: 8px 8px;
1207
+ border-radius: var(--ry-radius-md);
1208
+ overflow: hidden;
1209
+ }
1210
+
1211
+ ry-color-picker [data-ry-target="trigger"]:focus-visible {
1212
+ box-shadow: var(--ry-focus-ring);
1213
+ }
1214
+
1215
+ ry-color-picker [data-ry-target="trigger-color"] {
1216
+ border-radius: calc(var(--ry-radius-md) - 1px);
1217
+ outline: 3px solid rgba(0, 0, 0, 0.2);
1218
+ outline-offset: -3px;
1219
+ }
1220
+
1221
+ ry-color-picker [data-ry-target="trigger-color"] {
1222
+ border-radius: calc(var(--ry-radius-md) - 1px);
1223
+ }
1224
+
1225
+ /* Panel */
1226
+ ry-color-picker [data-ry-target="panel"] {
1227
+ background-color: var(--ry-color-bg);
1228
+ border: var(--ry-border-width) solid var(--ry-color-border);
1229
+ border-radius: var(--ry-radius-lg);
1230
+ box-shadow: var(--ry-shadow-lg);
1231
+ }
1232
+
1233
+ /* Grid */
1234
+ ry-color-picker [data-ry-target="grid"] {
1235
+ background-color: var(--grid-hue-color, #ff0000);
1236
+ background-image:
1237
+ linear-gradient(to top, #000 0%, transparent 100%),
1238
+ linear-gradient(to right, #fff 0%, transparent 100%);
1239
+ border-radius: var(--ry-radius-lg) var(--ry-radius-lg) 0 0;
1240
+ }
1241
+
1242
+ ry-color-picker [data-ry-target="grid-handle"] {
1243
+ background-color: transparent;
1244
+ border: 2px solid #fff;
1245
+ border-radius: var(--ry-radius-full);
1246
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.3);
1247
+ }
1248
+
1249
+ ry-color-picker [data-ry-target="grid-handle"]:focus-visible {
1250
+ outline: none;
1251
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.3), var(--ry-focus-ring);
1252
+ }
1253
+
1254
+ /* Hue slider */
1255
+ ry-color-picker .ry-color-picker__hue {
1256
+ background: linear-gradient(
1257
+ to right,
1258
+ hsl(0, 100%, 50%) 0%,
1259
+ hsl(60, 100%, 50%) 17%,
1260
+ hsl(120, 100%, 50%) 33%,
1261
+ hsl(180, 100%, 50%) 50%,
1262
+ hsl(240, 100%, 50%) 67%,
1263
+ hsl(300, 100%, 50%) 83%,
1264
+ hsl(360, 100%, 50%) 100%
1265
+ );
1266
+ border-radius: var(--ry-radius-full);
1267
+ }
1268
+
1269
+ /* Alpha slider */
1270
+ ry-color-picker .ry-color-picker__alpha {
1271
+ /* Checkerboard pattern for transparency */
1272
+ background-image:
1273
+ linear-gradient(to right, transparent 0%, var(--alpha-color, #ff0000) 100%),
1274
+ repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%);
1275
+ background-size: 100% 100%, 8px 8px;
1276
+ border-radius: var(--ry-radius-full);
1277
+ }
1278
+
1279
+ /* Slider handles */
1280
+ ry-color-picker .ry-color-picker__slider-handle {
1281
+ background-color: #fff;
1282
+ border-radius: var(--ry-radius-full);
1283
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2), var(--ry-shadow-sm);
1284
+ }
1285
+
1286
+ ry-color-picker .ry-color-picker__slider-handle:focus-visible {
1287
+ outline: none;
1288
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2), var(--ry-focus-ring);
1289
+ }
1290
+
1291
+ /* Preview */
1292
+ ry-color-picker [data-ry-target="preview"] {
1293
+ background-image: repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%);
1294
+ background-size: 8px 8px;
1295
+ border: var(--ry-border-width) solid var(--ry-color-border);
1296
+ border-radius: var(--ry-radius-md);
1297
+ overflow: hidden;
1298
+ }
1299
+
1300
+ ry-color-picker [data-ry-target="preview-color"] {
1301
+ border-radius: inherit;
1302
+ outline: 3px solid rgba(0, 0, 0, 0.2);
1303
+ outline-offset: -3px;
1304
+ }
1305
+
1306
+ /* Input */
1307
+ ry-color-picker [data-ry-target="input"] {
1308
+ font-family: var(--ry-font-mono);
1309
+ font-size: var(--ry-text-sm);
1310
+ color: var(--ry-color-text);
1311
+ background-color: var(--ry-color-bg);
1312
+ border: var(--ry-border-width) solid var(--ry-color-border);
1313
+ border-radius: var(--ry-radius-md);
1314
+ transition: border-color var(--ry-duration-fast) var(--ry-ease),
1315
+ box-shadow var(--ry-duration-fast) var(--ry-ease);
1316
+ }
1317
+
1318
+ ry-color-picker [data-ry-target="input"]:hover {
1319
+ border-color: var(--ry-color-border-strong);
1320
+ }
1321
+
1322
+ ry-color-picker [data-ry-target="input"]:focus {
1323
+ outline: none;
1324
+ border-color: var(--ry-color-primary);
1325
+ box-shadow: var(--ry-focus-ring);
1326
+ }
1327
+
1328
+ /* Format toggle */
1329
+ ry-color-picker [data-ry-target="format-toggle"] {
1330
+ font-family: var(--ry-font-sans);
1331
+ font-size: var(--ry-text-xs);
1332
+ font-weight: var(--ry-font-semibold);
1333
+ color: var(--ry-color-text-muted);
1334
+ background-color: var(--ry-color-bg-muted);
1335
+ border-radius: var(--ry-radius-md);
1336
+ transition: background-color var(--ry-duration-fast) var(--ry-ease),
1337
+ color var(--ry-duration-fast) var(--ry-ease);
1338
+ }
1339
+
1340
+ ry-color-picker [data-ry-target="format-toggle"]:hover {
1341
+ background-color: var(--ry-color-bg-subtle);
1342
+ color: var(--ry-color-text);
1343
+ }
1344
+
1345
+ ry-color-picker [data-ry-target="format-toggle"]:focus-visible {
1346
+ outline: none;
1347
+ box-shadow: var(--ry-focus-ring);
1348
+ }
1349
+
1350
+ /* Swatches */
1351
+ ry-color-picker .ry-color-picker__swatch {
1352
+ border-radius: var(--ry-radius-sm);
1353
+ transition: transform var(--ry-duration-fast) var(--ry-ease),
1354
+ box-shadow var(--ry-duration-fast) var(--ry-ease);
1355
+ }
1356
+
1357
+ ry-color-picker .ry-color-picker__swatch:hover {
1358
+ transform: scale(1.1);
1359
+ box-shadow: var(--ry-shadow-md);
1360
+ }
1361
+
1362
+ ry-color-picker .ry-color-picker__swatch:focus-visible {
1363
+ outline: none;
1364
+ box-shadow: var(--ry-focus-ring);
1365
+ }
1366
+
1367
+ /* ═══════════════════════════════════════════════════════════════
1368
+ COLOR INPUT
1369
+ ═══════════════════════════════════════════════════════════════ */
1370
+
1371
+ ry-color-input[disabled] {
1372
+ opacity: 0.5;
1373
+ }
1374
+
1375
+ ry-color-input [data-ry-target="trigger"] {
1376
+ background-color: var(--ry-color-bg);
1377
+ border: var(--ry-border-width) solid var(--ry-color-border);
1378
+ border-radius: var(--ry-radius-md);
1379
+ overflow: hidden;
1380
+ transition: border-color var(--ry-duration-fast) var(--ry-ease),
1381
+ box-shadow var(--ry-duration-fast) var(--ry-ease);
1382
+ }
1383
+
1384
+ ry-color-input:hover [data-ry-target="trigger"] {
1385
+ border-color: var(--ry-color-border-strong);
1386
+ }
1387
+
1388
+ ry-color-input:focus-within [data-ry-target="trigger"] {
1389
+ border-color: var(--ry-color-primary);
1390
+ box-shadow: var(--ry-focus-ring);
1391
+ }
1392
+
1393
+ ry-color-input [data-ry-target="swatch"] {
1394
+ background-image: repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%);
1395
+ background-size: 8px 8px;
1396
+ border-right: var(--ry-border-width) solid var(--ry-color-border);
1397
+ transition: background-color var(--ry-duration-fast) var(--ry-ease);
1398
+ }
1399
+
1400
+ ry-color-input [data-ry-target="swatch"]:hover {
1401
+ background-color: var(--ry-color-bg-muted);
1402
+ }
1403
+
1404
+ ry-color-input [data-ry-target="swatch"]:focus-visible {
1405
+ outline: none;
1406
+ }
1407
+
1408
+ ry-color-input [data-ry-target="swatch-color"] {
1409
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);
1410
+ }
1411
+
1412
+ ry-color-input [data-ry-target="input"] {
1413
+ font-family: var(--ry-font-mono);
1414
+ font-size: var(--ry-text-sm);
1415
+ color: var(--ry-color-text);
1416
+ background-color: transparent;
1417
+ border: none;
1418
+ }
1419
+
1420
+ ry-color-input [data-ry-target="input"]:focus {
1421
+ outline: none;
1422
+ }
1423
+
1424
+ ry-color-input [data-ry-target="input"]::placeholder {
1425
+ color: var(--ry-color-text-muted);
1426
+ }
1427
+
1428
+ ry-color-input [data-ry-target="panel"] {
1429
+ background-color: var(--ry-color-bg);
1430
+ border: var(--ry-border-width) solid var(--ry-color-border);
1431
+ border-radius: var(--ry-radius-lg);
1432
+ box-shadow: var(--ry-shadow-lg);
1433
+ }