|
1 | 1 | /* ============================================================== */ |
2 | 2 | /* Landing page — React Intersection Observer */ |
3 | | -/* Page chrome follows Blume's theme; code + instrument panels are */ |
4 | | -/* a deliberate dark instrument surface in both color modes. */ |
| 3 | +/* Everything follows Blume's theme: chrome, panels, code, and */ |
| 4 | +/* instrument all adapt to light and dark. Tokens derive from the */ |
| 5 | +/* --color-* theme vars; the few that can't (code syntax, focal */ |
| 6 | +/* highlight) get an explicit dark override below. */ |
5 | 7 | /* ============================================================== */ |
6 | 8 |
|
7 | 9 | .rio-home { |
|
12 | 14 | --rio-line-2: color-mix(in srgb, var(--color-foreground) 22%, transparent); |
13 | 15 | --rio-surface: color-mix(in srgb, var(--color-foreground) 3.5%, transparent); |
14 | 16 | --rio-surface-2: color-mix(in srgb, var(--color-foreground) 7%, transparent); |
15 | | - --rio-panel: #0d0d15; |
16 | | - --rio-panel-2: #14141f; |
17 | | - --rio-panel-fg: #ece9f8; |
18 | | - --rio-panel-muted: #a6a3be; |
19 | | - --rio-panel-line: color-mix(in srgb, #a78bfa 24%, transparent); |
| 17 | + |
| 18 | + /* Panels: light surface in light mode, dark in dark, derived from theme. */ |
| 19 | + --rio-panel: color-mix( |
| 20 | + in srgb, |
| 21 | + var(--color-foreground) 4%, |
| 22 | + var(--color-background) |
| 23 | + ); |
| 24 | + --rio-panel-2: color-mix( |
| 25 | + in srgb, |
| 26 | + var(--color-foreground) 8%, |
| 27 | + var(--color-background) |
| 28 | + ); |
| 29 | + --rio-panel-inset: color-mix( |
| 30 | + in srgb, |
| 31 | + var(--color-foreground) 7%, |
| 32 | + var(--color-background) |
| 33 | + ); |
| 34 | + --rio-panel-fg: var(--color-foreground); |
| 35 | + --rio-panel-muted: var(--color-muted-foreground); |
| 36 | + --rio-panel-line: color-mix(in srgb, var(--rio-accent) 30%, transparent); |
| 37 | + --rio-panel-hair: color-mix(in srgb, var(--color-foreground) 9%, transparent); |
| 38 | + |
20 | 39 | --rio-violet: #a78bfa; |
21 | 40 | --rio-emerald: #34d399; |
22 | 41 | /* Dedicated button violet: darker/more saturated than the theme accent so |
23 | 42 | white label text stays high-contrast in both light and dark modes. */ |
24 | 43 | --rio-btn: oklch(0.56 0.18 290); |
25 | 44 | --rio-btn-hover: oklch(0.62 0.17 290); |
26 | | - --rio-focal: linear-gradient(135deg, #241f47 0%, #16294a 100%); |
| 45 | + |
| 46 | + /* Focal highlight (target chip, logged tiles) and its text. */ |
| 47 | + --rio-focal: linear-gradient( |
| 48 | + 135deg, |
| 49 | + color-mix(in srgb, #8b5cf6 16%, var(--color-background)), |
| 50 | + color-mix(in srgb, #22d3ee 13%, var(--color-background)) |
| 51 | + ); |
| 52 | + --rio-focal-fg: var(--color-foreground); |
| 53 | + |
| 54 | + /* Code syntax palette (light-mode values; dark overridden below). */ |
| 55 | + --rio-code-fg: #37324a; |
| 56 | + --rio-code-k: #7c3aed; |
| 57 | + --rio-code-f: #7c3aed; |
| 58 | + --rio-code-s: #0f7a4d; |
| 59 | + --rio-code-c: #86829a; |
| 60 | + --rio-code-p: #0b6bb3; |
| 61 | + |
27 | 62 | --rio-mono: var( |
28 | 63 | --blume-font-mono, |
29 | 64 | ui-monospace, |
|
38 | 73 | overflow-x: clip; |
39 | 74 | } |
40 | 75 |
|
| 76 | +:root[data-theme="dark"] .rio-home { |
| 77 | + --rio-panel-line: color-mix(in srgb, #a78bfa 24%, transparent); |
| 78 | + --rio-focal: linear-gradient(135deg, #241f47 0%, #16294a 100%); |
| 79 | + --rio-focal-fg: #f4f2ff; |
| 80 | + --rio-code-fg: #d7d4e6; |
| 81 | + --rio-code-k: #c4b5fd; |
| 82 | + --rio-code-f: #a78bfa; |
| 83 | + --rio-code-s: #8ee7a6; |
| 84 | + --rio-code-c: #948fb0; |
| 85 | + --rio-code-p: #7cc7ff; |
| 86 | +} |
| 87 | + |
41 | 88 | .rio-home ::selection { |
42 | 89 | background: color-mix(in srgb, var(--rio-accent) 32%, transparent); |
43 | 90 | color: var(--rio-fg); |
|
282 | 329 | align-items: center; |
283 | 330 | gap: 0.5rem; |
284 | 331 | padding: 0.7rem 0.7rem 0.7rem 0.9rem; |
285 | | - border-top: 1px solid color-mix(in srgb, #ffffff 6%, transparent); |
| 332 | + border-top: 1px solid var(--rio-panel-hair); |
286 | 333 | } |
287 | 334 |
|
288 | 335 | .rio-install__cmd { |
|
313 | 360 | height: 2.1rem; |
314 | 361 | flex: none; |
315 | 362 | border-radius: 8px; |
316 | | - border: 1px solid color-mix(in srgb, #ffffff 10%, transparent); |
| 363 | + border: 1px solid var(--rio-panel-hair); |
317 | 364 | background: var(--rio-panel-2); |
318 | 365 | color: var(--rio-panel-muted); |
319 | 366 | cursor: pointer; |
|
428 | 475 | position: relative; |
429 | 476 | height: 8.5rem; |
430 | 477 | border-radius: 12px; |
431 | | - border: 1px solid color-mix(in srgb, #ffffff 8%, transparent); |
432 | | - background: |
433 | | - linear-gradient(color-mix(in srgb, #ffffff 3%, transparent), transparent), |
434 | | - #0a0a11; |
| 478 | + border: 1px solid var(--rio-panel-hair); |
| 479 | + background: var(--rio-panel-inset); |
435 | 480 | overflow: hidden; |
436 | 481 | margin-bottom: 1rem; |
437 | 482 | } |
|
476 | 521 | top: -1.5rem; |
477 | 522 | font-family: var(--rio-mono); |
478 | 523 | font-size: 0.62rem; |
479 | | - color: color-mix(in srgb, var(--rio-violet) 80%, white); |
| 524 | + color: color-mix(in srgb, var(--rio-accent) 72%, var(--rio-panel-fg)); |
480 | 525 | } |
481 | 526 |
|
482 | 527 | .rio-instrument__target { |
|
493 | 538 | font-size: 0.78rem; |
494 | 539 | border: 1px solid color-mix(in srgb, var(--rio-violet) 45%, transparent); |
495 | 540 | background: var(--rio-focal); |
496 | | - color: #f4f2ff; |
| 541 | + color: var(--rio-focal-fg); |
497 | 542 | transition: |
498 | 543 | box-shadow 0.3s ease, |
499 | 544 | border-color 0.3s ease; |
|
519 | 564 | gap: 0.5rem; |
520 | 565 | font-family: var(--rio-mono); |
521 | 566 | font-size: 0.76rem; |
522 | | - border-bottom: 1px solid color-mix(in srgb, #ffffff 6%, transparent); |
| 567 | + border-bottom: 1px solid var(--rio-panel-hair); |
523 | 568 | padding-bottom: 0.3rem; |
524 | 569 | } |
525 | 570 |
|
|
541 | 586 | color: var(--rio-emerald); |
542 | 587 | } |
543 | 588 | .rio-readout dd[data-tone="off"] { |
544 | | - color: color-mix(in srgb, var(--rio-panel-muted) 85%, white); |
| 589 | + color: var(--rio-panel-muted); |
545 | 590 | } |
546 | 591 |
|
547 | 592 | .rio-instrument__bar, |
548 | 593 | .rio-hud__bar { |
549 | 594 | height: 5px; |
550 | 595 | border-radius: 999px; |
551 | | - background: color-mix(in srgb, #ffffff 8%, transparent); |
| 596 | + background: var(--rio-panel-hair); |
552 | 597 | overflow: hidden; |
553 | 598 | } |
554 | 599 |
|
|
774 | 819 | font-size: 0.72rem; |
775 | 820 | color: var(--rio-panel-muted); |
776 | 821 | padding: 0.55rem 0.9rem; |
777 | | - border-bottom: 1px solid color-mix(in srgb, #ffffff 6%, transparent); |
| 822 | + border-bottom: 1px solid var(--rio-panel-hair); |
778 | 823 | background: var(--rio-panel-2); |
779 | 824 | } |
780 | 825 |
|
|
785 | 830 | font-family: var(--rio-mono); |
786 | 831 | font-size: 0.82rem; |
787 | 832 | line-height: 1.65; |
788 | | - color: #d7d4e6; |
| 833 | + color: var(--rio-code-fg); |
789 | 834 | tab-size: 2; |
790 | 835 | } |
791 | 836 |
|
|
798 | 843 | height: 8px; |
799 | 844 | } |
800 | 845 | .rio-code__pre::-webkit-scrollbar-thumb { |
801 | | - background: color-mix(in srgb, #ffffff 14%, transparent); |
| 846 | + background: color-mix(in srgb, var(--color-foreground) 22%, transparent); |
802 | 847 | border-radius: 999px; |
803 | 848 | } |
804 | 849 |
|
| 850 | +/* Syntax token colors — theme-aware (values set on .rio-home + dark override). */ |
| 851 | +.rio-tok--t { |
| 852 | + color: var(--rio-code-fg); |
| 853 | +} |
| 854 | +.rio-tok--k { |
| 855 | + color: var(--rio-code-k); |
| 856 | +} |
| 857 | +.rio-tok--f { |
| 858 | + color: var(--rio-code-f); |
| 859 | +} |
| 860 | +.rio-tok--s { |
| 861 | + color: var(--rio-code-s); |
| 862 | +} |
| 863 | +.rio-tok--c { |
| 864 | + color: var(--rio-code-c); |
| 865 | +} |
| 866 | +.rio-tok--p { |
| 867 | + color: var(--rio-code-p); |
| 868 | +} |
| 869 | + |
805 | 870 | /* ------------------------------------------------------------- */ |
806 | 871 | /* Impression strip */ |
807 | 872 | /* ------------------------------------------------------------- */ |
|
839 | 904 | .rio-tile[data-logged="true"] { |
840 | 905 | border-color: color-mix(in srgb, var(--rio-emerald) 50%, transparent); |
841 | 906 | background: var(--rio-focal); |
842 | | - color: #f2f1ff; |
| 907 | + color: var(--rio-focal-fg); |
843 | 908 | } |
844 | 909 |
|
845 | 910 | .rio-tile__id { |
|
872 | 937 | } |
873 | 938 |
|
874 | 939 | .rio-tile[data-logged="true"] .rio-tile__index { |
875 | | - color: color-mix(in srgb, #ffffff 45%, transparent); |
| 940 | + color: color-mix(in srgb, var(--rio-focal-fg) 55%, transparent); |
876 | 941 | } |
877 | 942 |
|
878 | 943 | .rio-impr__panel { |
|
0 commit comments