@refrakt-md/lumina 0.21.0 → 0.23.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 (131) hide show
  1. package/base.css +2 -1
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +7 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/tokens.d.ts +5 -3
  6. package/dist/tokens.d.ts.map +1 -1
  7. package/dist/tokens.js +44 -3
  8. package/dist/tokens.js.map +1 -1
  9. package/index.css +11 -1
  10. package/package.json +7 -5
  11. package/styles/base/attributes.css +6 -7
  12. package/styles/dimensions/checklist.css +7 -36
  13. package/styles/dimensions/cover.css +13 -95
  14. package/styles/dimensions/density.css +6 -3
  15. package/styles/dimensions/frame.css +7 -4
  16. package/styles/dimensions/media.css +14 -61
  17. package/styles/dimensions/metadata.css +30 -80
  18. package/styles/dimensions/sections.css +16 -30
  19. package/styles/dimensions/sequence.css +17 -82
  20. package/styles/dimensions/state.css +39 -56
  21. package/styles/dimensions/substrate.css +3 -0
  22. package/styles/dimensions/surfaces.css +73 -113
  23. package/styles/elements/blockquote.css +3 -2
  24. package/styles/elements/code.css +3 -0
  25. package/styles/elements/table.css +3 -0
  26. package/styles/global.css +24 -63
  27. package/styles/layouts/blog.css +34 -95
  28. package/styles/layouts/default.css +12 -86
  29. package/styles/layouts/docs.css +9 -159
  30. package/styles/layouts/mobile.css +3 -52
  31. package/styles/layouts/on-this-page.css +8 -7
  32. package/styles/layouts/plan.css +27 -158
  33. package/styles/layouts/search.css +17 -82
  34. package/styles/layouts/split.css +24 -169
  35. package/styles/layouts/theme-toggle.css +3 -29
  36. package/styles/layouts/version-switcher.css +9 -10
  37. package/styles/runes/accordion.css +25 -68
  38. package/styles/runes/aggregate.css +4 -13
  39. package/styles/runes/annotate.css +11 -40
  40. package/styles/runes/api.css +4 -1
  41. package/styles/runes/audio.css +12 -50
  42. package/styles/runes/badge.css +5 -2
  43. package/styles/runes/bar.css +3 -0
  44. package/styles/runes/bento.css +18 -161
  45. package/styles/runes/bg.css +3 -37
  46. package/styles/runes/blog.css +18 -20
  47. package/styles/runes/bond.css +6 -26
  48. package/styles/runes/breadcrumb.css +7 -15
  49. package/styles/runes/budget.css +23 -45
  50. package/styles/runes/bug.css +5 -2
  51. package/styles/runes/card.css +27 -95
  52. package/styles/runes/cast.css +10 -27
  53. package/styles/runes/changelog.css +13 -17
  54. package/styles/runes/character.css +6 -20
  55. package/styles/runes/chart.css +15 -57
  56. package/styles/runes/codegroup.css +18 -26
  57. package/styles/runes/collection.css +8 -85
  58. package/styles/runes/compare.css +8 -19
  59. package/styles/runes/comparison.css +29 -56
  60. package/styles/runes/conversation.css +9 -31
  61. package/styles/runes/cta.css +17 -40
  62. package/styles/runes/datatable.css +33 -48
  63. package/styles/runes/decision.css +5 -2
  64. package/styles/runes/design-context.css +5 -4
  65. package/styles/runes/details.css +9 -17
  66. package/styles/runes/diagram.css +8 -16
  67. package/styles/runes/diff.css +11 -94
  68. package/styles/runes/drawer.css +9 -113
  69. package/styles/runes/embed.css +5 -13
  70. package/styles/runes/event.css +5 -3
  71. package/styles/runes/expand.css +10 -45
  72. package/styles/runes/faction.css +6 -12
  73. package/styles/runes/feature.css +15 -43
  74. package/styles/runes/figure.css +7 -26
  75. package/styles/runes/file-ref.css +3 -18
  76. package/styles/runes/form.css +19 -48
  77. package/styles/runes/gallery.css +8 -140
  78. package/styles/runes/grid.css +4 -56
  79. package/styles/runes/hero.css +28 -140
  80. package/styles/runes/hint.css +23 -48
  81. package/styles/runes/howto.css +9 -31
  82. package/styles/runes/itinerary.css +15 -44
  83. package/styles/runes/juxtapose.css +17 -92
  84. package/styles/runes/lore.css +7 -14
  85. package/styles/runes/map.css +9 -42
  86. package/styles/runes/mediatext.css +4 -45
  87. package/styles/runes/milestone.css +15 -28
  88. package/styles/runes/mockup.css +10 -115
  89. package/styles/runes/nav.css +37 -212
  90. package/styles/runes/organization.css +6 -5
  91. package/styles/runes/page-section.css +3 -4
  92. package/styles/runes/pagination.css +10 -42
  93. package/styles/runes/palette.css +16 -35
  94. package/styles/runes/placeholder.css +16 -0
  95. package/styles/runes/plan-history.css +23 -43
  96. package/styles/runes/plan-progress.css +6 -7
  97. package/styles/runes/plan-ref.css +4 -1
  98. package/styles/runes/playlist.css +10 -44
  99. package/styles/runes/plot.css +9 -25
  100. package/styles/runes/preview.css +9 -34
  101. package/styles/runes/pricing.css +23 -41
  102. package/styles/runes/progress.css +8 -27
  103. package/styles/runes/pullquote.css +9 -31
  104. package/styles/runes/realm.css +6 -12
  105. package/styles/runes/recipe.css +12 -36
  106. package/styles/runes/relationships.css +5 -36
  107. package/styles/runes/reveal.css +17 -22
  108. package/styles/runes/sandbox.css +9 -39
  109. package/styles/runes/section.css +10 -24
  110. package/styles/runes/showcase.css +3 -20
  111. package/styles/runes/sidenote.css +5 -4
  112. package/styles/runes/snippet.css +3 -0
  113. package/styles/runes/spacing.css +14 -33
  114. package/styles/runes/spec.css +5 -2
  115. package/styles/runes/steps.css +14 -46
  116. package/styles/runes/storyboard.css +4 -19
  117. package/styles/runes/swatch.css +4 -7
  118. package/styles/runes/symbol.css +16 -14
  119. package/styles/runes/tabs.css +15 -18
  120. package/styles/runes/testimonial.css +12 -13
  121. package/styles/runes/textblock.css +6 -24
  122. package/styles/runes/timeline.css +10 -28
  123. package/styles/runes/tint.css +3 -0
  124. package/styles/runes/toc.css +9 -7
  125. package/styles/runes/track.css +12 -41
  126. package/styles/runes/typography.css +15 -27
  127. package/styles/runes/work.css +5 -2
  128. package/styles/runes/xref.css +3 -1
  129. package/tokens/base.css +56 -66
  130. package/tokens/dark.css +79 -80
  131. package/styles/dimensions/guest-posture.css +0 -27
@@ -1,77 +1,44 @@
1
- /* Pagination — prev/next links at the foot of sequential pages.
2
- *
3
- * Each box stacks the directional marker above the label so the two
4
- * controls stay compact enough to sit side-by-side on mobile. Equal
5
- * heights are guaranteed by the container's `align-items: stretch`, so
6
- * if one label wraps to multiple lines the other box grows to match.
7
- *
8
- * Boxes are capped at ~50% width via `flex: 1 1 0` + `max-width`, with
9
- * `margin-left: auto` on `__next` so it stays right-aligned even when
10
- * `__prev` isn't rendered (first page in a sequence). */
11
-
1
+ @layer skin {
2
+ /* Pagination — skin. The flex row + box flex sizing + alignment + marker order
3
+ * live in @refrakt-md/skeleton (styles/runes/pagination.css). */
12
4
  .rf-pagination {
13
- display: flex;
14
- align-items: stretch;
15
5
  gap: 1rem;
16
6
  margin: 3rem 0 1.5rem;
17
7
  padding-top: 1.5rem;
18
8
  border-top: 1px solid var(--rf-color-border);
19
9
  }
20
-
21
10
  .rf-pagination__prev,
22
11
  .rf-pagination__next {
23
- display: flex;
24
- flex-direction: column;
25
12
  gap: 0.375rem;
26
13
  padding: 0.75rem 1rem;
27
14
  border: 1px solid var(--rf-color-border);
28
15
  border-radius: var(--rf-radius-md);
29
16
  color: var(--rf-color-text);
30
17
  text-decoration: none;
31
- font-size: 0.9rem;
18
+ font-size: var(--rf-text-sm);
32
19
  transition: border-color 150ms ease, background-color 150ms ease;
33
- flex: 1 1 0;
34
- min-width: 0;
35
- max-width: calc(50% - 0.5rem);
36
20
  }
37
-
38
21
  .rf-pagination__prev {
39
- align-items: flex-start;
40
22
  text-align: left;
41
23
  }
42
-
43
24
  .rf-pagination__next {
44
- align-items: flex-end;
45
25
  text-align: right;
46
- margin-left: auto;
47
26
  }
48
-
49
27
  .rf-pagination__prev:hover,
50
28
  .rf-pagination__next:hover {
51
29
  border-color: var(--rf-color-primary);
52
30
  background: var(--rf-color-surface, var(--rf-color-bg));
53
31
  text-decoration: none;
54
32
  }
55
-
56
33
  .rf-pagination [data-name="marker"] {
57
34
  color: var(--rf-color-muted);
58
- font-weight: 400;
59
- font-size: 1.1rem;
35
+ font-weight: var(--rf-weight-normal);
36
+ font-size: var(--rf-text-lg);
60
37
  line-height: 1;
61
38
  }
62
-
63
39
  .rf-pagination [data-name="label"] {
64
- font-weight: 500;
65
- }
66
-
67
- /* The pagination rune emits prev as `<marker> <label>` but next as
68
- `<label> <marker>` (an artefact of the original row layout where the
69
- arrow flanked the outer edge). With our vertical stack this puts the
70
- next arrow at the bottom of its box. Force it to the top to match prev. */
71
- .rf-pagination__next [data-name="marker"] {
72
- order: -1;
40
+ font-weight: var(--rf-weight-medium);
73
41
  }
74
-
75
42
  @media (max-width: 768px) {
76
43
  .rf-pagination {
77
44
  gap: 0.5rem;
@@ -79,7 +46,8 @@
79
46
  .rf-pagination__prev,
80
47
  .rf-pagination__next {
81
48
  padding: 0.625rem 0.875rem;
82
- max-width: calc(50% - 0.25rem);
83
- font-size: 0.85rem;
49
+ font-size: var(--rf-text-sm);
84
50
  }
85
51
  }
52
+
53
+ }
@@ -1,7 +1,8 @@
1
+ @layer skin {
1
2
  /* Palette — color swatch grid */
2
3
  .rf-palette__title {
3
- font-size: 1.125rem;
4
- font-weight: 600;
4
+ font-size: var(--rf-text-lg);
5
+ font-weight: var(--rf-weight-semibold);
5
6
  margin-bottom: 1rem;
6
7
  }
7
8
  .rf-palette__group {
@@ -11,56 +12,41 @@
11
12
  margin-bottom: 0;
12
13
  }
13
14
  .rf-palette__group-title {
14
- font-size: 0.8rem;
15
- font-weight: 600;
15
+ font-size: var(--rf-text-xs);
16
+ font-weight: var(--rf-weight-semibold);
16
17
  text-transform: uppercase;
17
- letter-spacing: 0.05em;
18
+ letter-spacing: var(--rf-tracking-wider);
18
19
  color: var(--rf-color-muted);
19
20
  margin-bottom: 0.75rem;
20
21
  }
21
22
  .rf-palette__grid {
22
- display: grid;
23
- grid-template-columns: repeat(var(--rf-palette-cols, 4), 1fr);
24
23
  gap: 0.75rem;
25
24
  }
26
-
27
- @media (max-width: 768px) {
28
- /* Cap the grid at 3 columns on narrow viewports — at 4 cols each swatch
29
- is too cramped to read the hex value. Palettes with fewer than 3
30
- declared columns keep their natural count (the `min()`). */
31
- .rf-palette__grid {
32
- grid-template-columns: repeat(min(var(--rf-palette-cols, 4), 3), 1fr);
33
- }
34
- }
35
25
  .rf-palette__swatch {
36
- display: flex;
37
- flex-direction: column;
38
26
  gap: 0.375rem;
39
27
  }
40
28
  .rf-palette__swatch-color {
41
- height: 5rem;
42
29
  border-radius: var(--rf-radius-md, 8px);
43
30
  border: 1px solid rgba(0, 0, 0, 0.08);
44
31
  }
45
32
  .rf-palette__swatch-name {
46
- font-weight: 500;
47
- font-size: 0.875rem;
33
+ font-weight: var(--rf-weight-medium);
34
+ font-size: var(--rf-text-sm);
48
35
  }
49
36
  .rf-palette__swatch-value {
50
37
  font-family: var(--rf-font-mono, monospace);
51
- font-size: 0.75rem;
38
+ font-size: var(--rf-text-xs);
52
39
  color: var(--rf-color-muted);
53
40
  }
54
41
  .rf-palette__swatch-contrast {
55
42
  font-family: var(--rf-font-mono, monospace);
56
- font-size: 0.7rem;
43
+ font-size: var(--rf-text-xs);
57
44
  color: var(--rf-color-muted);
58
45
  }
59
46
  .rf-palette__swatch-a11y {
60
- display: flex;
61
47
  gap: 0.5rem;
62
- font-size: 0.7rem;
63
- font-weight: 500;
48
+ font-size: var(--rf-text-xs);
49
+ font-weight: var(--rf-weight-medium);
64
50
  }
65
51
  .rf-palette__swatch-a11y--pass {
66
52
  color: var(--rf-color-success, #10b981);
@@ -71,27 +57,22 @@
71
57
 
72
58
  /* Neutral scale — horizontal gradient strip */
73
59
  .rf-palette__scale {
74
- display: flex;
75
60
  border-radius: var(--rf-radius-md, 8px);
76
- overflow: hidden;
77
61
  margin-bottom: 0.5rem;
78
62
  }
79
63
  .rf-palette__scale-stop {
80
- flex: 1;
81
64
  padding: 1.25rem 0.5rem 0.5rem;
82
- display: flex;
83
- align-items: flex-end;
84
- justify-content: center;
85
- min-height: 4rem;
86
- font-size: 0.625rem;
65
+ font-size: var(--rf-text-xs);
87
66
  font-family: var(--rf-font-mono, monospace);
88
67
  }
89
68
  .rf-palette__scale + .rf-palette__swatch-name {
90
69
  margin-top: 0.25rem;
91
- font-size: 0.8rem;
70
+ font-size: var(--rf-text-xs);
92
71
  }
93
72
 
94
73
  /* Context-aware: no outer margin when inside design-context */
95
74
  .rf-palette--in-design-context {
96
75
  margin: 0;
97
76
  }
77
+
78
+ }
@@ -0,0 +1,16 @@
1
+ @layer skin {
2
+ /* Placeholder — generated inline SVG from the `placeholder:<shape>` image-src
3
+ * scheme (SPEC-106). The SVG carries its own viewBox aspect and tints itself
4
+ * with theme tokens (surface / muted / border), so it tracks the active tint
5
+ * and dark mode for free. These rules just make it behave like a responsive
6
+ * replaced element wherever a real `<img>` would have gone. */
7
+ .rf-placeholder {
8
+ border-radius: var(--rf-radius-media);
9
+ }
10
+
11
+ /* Avatar shape reads as round. */
12
+ .rf-placeholder[data-shape="avatar"] {
13
+ border-radius: 50%;
14
+ }
15
+
16
+ }
@@ -1,25 +1,24 @@
1
+ @layer skin {
1
2
  /* Plan History — vertical timeline (mirrors .rf-timeline--vertical) */
2
3
 
3
4
  .rf-plan-history {
4
5
  margin: 2rem 0;
5
6
  }
6
7
  .rf-plan-history__heading {
7
- font-size: 1.05rem;
8
- font-weight: 700;
8
+ font-size: var(--rf-text);
9
+ font-weight: var(--rf-weight-bold);
9
10
  color: var(--rf-color-text);
10
11
  margin: 0 0 1rem;
11
12
  }
12
13
 
13
14
  /* Event list — vertical line */
14
15
  .rf-plan-history__events {
15
- list-style: none;
16
16
  padding: 0;
17
17
  margin: 0;
18
18
  }
19
19
 
20
20
  /* Each event entry — left-padded with border line */
21
21
  .rf-plan-history__event {
22
- position: relative;
23
22
  padding-left: 2rem;
24
23
  padding-bottom: 2rem;
25
24
  border-left: 2px solid var(--rf-color-border);
@@ -32,12 +31,6 @@
32
31
 
33
32
  /* Circle markers on the timeline line */
34
33
  .rf-plan-history__event::before {
35
- content: '';
36
- position: absolute;
37
- left: -0.4375rem;
38
- top: 0.25rem;
39
- width: 0.75rem;
40
- height: 0.75rem;
41
34
  border-radius: 50%;
42
35
  background: var(--rf-color-primary);
43
36
  border: 2px solid var(--rf-color-bg);
@@ -51,16 +44,15 @@
51
44
 
52
45
  /* Date + hash header */
53
46
  .rf-plan-history__date {
54
- display: inline;
55
- font-size: 0.8rem;
56
- font-weight: 600;
47
+ font-size: var(--rf-text-xs);
48
+ font-weight: var(--rf-weight-semibold);
57
49
  color: var(--rf-color-primary);
58
- letter-spacing: 0.02em;
50
+ letter-spacing: var(--rf-tracking-wide);
59
51
  margin-right: 0.5rem;
60
52
  }
61
53
  .rf-plan-history__hash {
62
54
  font-family: var(--rf-font-mono);
63
- font-size: 0.75rem;
55
+ font-size: var(--rf-text-xs);
64
56
  color: var(--rf-color-muted);
65
57
  text-decoration: none;
66
58
  }
@@ -74,15 +66,13 @@ a.rf-plan-history__hash:hover {
74
66
  margin-top: 0.25rem;
75
67
  }
76
68
  .rf-plan-history__change {
77
- display: flex;
78
- align-items: center;
79
69
  gap: 0.25rem;
80
- font-size: 0.925rem;
81
- line-height: 1.65;
70
+ font-size: var(--rf-text-sm);
71
+ line-height: var(--rf-leading-relaxed);
82
72
  color: var(--rf-color-muted);
83
73
  }
84
74
  .rf-plan-history__field {
85
- font-weight: 500;
75
+ font-weight: var(--rf-weight-medium);
86
76
  color: var(--rf-color-text);
87
77
  }
88
78
  .rf-plan-history__field::after {
@@ -95,7 +85,7 @@ a.rf-plan-history__hash:hover {
95
85
 
96
86
  /* Value badges (add/remove) */
97
87
  .rf-plan-history__value {
98
- font-size: 0.875rem;
88
+ font-size: var(--rf-text-sm);
99
89
  padding: 0.0625rem 0.375rem;
100
90
  border-radius: var(--rf-radius-sm);
101
91
  }
@@ -111,25 +101,24 @@ a.rf-plan-history__hash:hover {
111
101
 
112
102
  /* Event kind labels */
113
103
  .rf-plan-history__created {
114
- font-size: 0.925rem;
104
+ font-size: var(--rf-text-sm);
115
105
  color: var(--rf-color-muted);
116
106
  }
117
107
  .rf-plan-history__resolution,
118
108
  .rf-plan-history__content-edit {
119
- font-size: 0.925rem;
109
+ font-size: var(--rf-text-sm);
120
110
  color: var(--rf-color-muted);
121
111
  font-style: italic;
122
112
  }
123
113
 
124
114
  /* Criteria list */
125
115
  .rf-plan-history__criteria {
126
- list-style: none;
127
116
  padding: 0;
128
117
  margin: 0.25rem 0 0;
129
118
  }
130
119
  .rf-plan-history__criteria li {
131
- font-size: 0.8125rem;
132
- line-height: 1.65;
120
+ font-size: var(--rf-text-sm);
121
+ line-height: var(--rf-leading-relaxed);
133
122
  color: var(--rf-color-text);
134
123
  }
135
124
  .rf-plan-history__criteria li[data-action="checked"] {
@@ -156,24 +145,21 @@ a.rf-plan-history__hash:hover {
156
145
 
157
146
  /* Global feed (commit-grouped) */
158
147
  .rf-plan-history--global .rf-plan-history__commit-message {
159
- display: block;
160
- font-size: 1.05rem;
161
- font-weight: 700;
148
+ font-size: var(--rf-text);
149
+ font-weight: var(--rf-weight-bold);
162
150
  color: var(--rf-color-text);
163
151
  margin-top: 0.25rem;
164
152
  margin-bottom: 0.5rem;
165
153
  }
166
154
  .rf-plan-history--global .rf-plan-history__entity-summary {
167
- display: flex;
168
- align-items: baseline;
169
155
  gap: 0.5rem;
170
- font-size: 0.8125rem;
171
- line-height: 1.65;
156
+ font-size: var(--rf-text-sm);
157
+ line-height: var(--rf-leading-relaxed);
172
158
  }
173
159
  .rf-plan-history--global .rf-plan-history__entity-id {
174
- font-weight: 600;
160
+ font-weight: var(--rf-weight-semibold);
175
161
  font-family: var(--rf-font-mono);
176
- font-size: 0.75rem;
162
+ font-size: var(--rf-text-xs);
177
163
  color: var(--rf-color-primary);
178
164
  white-space: nowrap;
179
165
  }
@@ -186,12 +172,6 @@ a.rf-plan-history__hash:hover {
186
172
  .rf-plan-history__event {
187
173
  padding-left: 1.25rem;
188
174
  }
189
- .rf-plan-history__event::before {
190
- width: 0.625rem;
191
- height: 0.625rem;
192
- left: -0.375rem;
193
- }
194
- .rf-plan-history__change {
195
- flex-wrap: wrap;
196
- }
175
+ }
176
+
197
177
  }
@@ -1,22 +1,21 @@
1
+ @layer skin {
1
2
  /* plan-progress (SPEC-076 / WORK-296) — a stack of per-type blocks, each a type
2
3
  * heading + an `aggregate` composition (progress bar + status badges). The bar
3
4
  * and badge-row chrome come from the `progress` / `aggregate` / `badge` runes;
4
5
  * this file only lays out the per-type grouping. */
5
6
  .rf-plan-progress {
6
- display: flex;
7
- flex-direction: column;
8
7
  gap: var(--rf-spacing-lg, 2rem);
9
8
  }
10
9
  .rf-plan-progress__group {
11
- display: flex;
12
- flex-direction: column;
13
10
  gap: var(--rf-spacing-sm, 0.75rem);
14
11
  }
15
12
  .rf-plan-progress__heading {
16
13
  margin: 0;
17
- font-size: 0.8125rem;
18
- font-weight: 600;
14
+ font-size: var(--rf-text-sm);
15
+ font-weight: var(--rf-weight-semibold);
19
16
  text-transform: uppercase;
20
- letter-spacing: 0.05em;
17
+ letter-spacing: var(--rf-tracking-wider);
21
18
  color: var(--rf-color-muted);
22
19
  }
20
+
21
+ }
@@ -1,8 +1,9 @@
1
+ @layer skin {
1
2
  /* Plan cross-reference links */
2
3
 
3
4
  .rf-plan-ref {
4
5
  font-family: var(--rf-font-mono, ui-monospace, monospace);
5
- font-size: 0.8125rem;
6
+ font-size: var(--rf-text-sm);
6
7
  color: var(--rf-color-info, #339af0);
7
8
  text-decoration: none;
8
9
  border-bottom: 1px dashed var(--rf-color-info, #339af0);
@@ -24,3 +25,5 @@
24
25
  .rf-plan-ref[data-type="bug"]::before { content: '\1F41B'; }
25
26
  .rf-plan-ref[data-type="decision"]::before { content: '\2696\FE0F'; }
26
27
  .rf-plan-ref[data-type="milestone"]::before { content: '\1F3AF'; }
28
+
29
+ }
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* Playlist */
2
3
 
3
4
  /* Thin-edge inset model (matches `.rf-card` / `.rf-recipe`): card outer padding
@@ -34,8 +35,6 @@
34
35
 
35
36
  /* Inner header (headline + description) inside content */
36
37
  .rf-playlist__content > .rf-playlist__header {
37
- flex-direction: column;
38
- align-items: flex-start;
39
38
  gap: 0.25rem;
40
39
  margin-bottom: 1rem;
41
40
  }
@@ -44,36 +43,26 @@
44
43
  }
45
44
  .rf-playlist__content > .rf-playlist__header p {
46
45
  margin: 0;
47
- font-size: 0.925rem;
46
+ font-size: var(--rf-text-sm);
48
47
  color: var(--rf-color-muted);
49
- line-height: 1.5;
48
+ line-height: var(--rf-leading-normal);
50
49
  }
51
50
 
52
51
  /* Tracks list wrapper */
53
52
  .rf-playlist__tracks {
54
- list-style: none;
55
53
  padding: 0;
56
54
  margin: 0;
57
- counter-reset: track;
58
55
  border: 1px solid var(--rf-color-border);
59
56
  border-radius: var(--rf-radius-md);
60
- overflow: hidden;
61
57
  }
62
58
 
63
59
  /* Track items — override sequence dimension's absolute positioning */
64
60
  .rf-playlist__tracks > li {
65
- display: flex;
66
- align-items: baseline;
67
61
  gap: 0.75rem;
68
62
  padding: 0.75rem 1.25rem;
69
63
  padding-left: 1.25rem;
70
- position: static;
71
64
  transition: background 0.15s ease;
72
65
  }
73
- /* Hide meta elements from flex layout */
74
- .rf-playlist__tracks > li > meta {
75
- display: none;
76
- }
77
66
  .rf-playlist__tracks > li + li {
78
67
  border-top: 1px solid var(--rf-color-border);
79
68
  }
@@ -81,36 +70,27 @@
81
70
  background: color-mix(in srgb, var(--rf-color-border) 15%, transparent);
82
71
  }
83
72
  .rf-playlist__tracks > li::before {
84
- position: static;
85
- width: auto;
86
- height: auto;
87
- min-width: 1.5rem;
88
- font-size: 0.8rem;
73
+ font-size: var(--rf-text-xs);
89
74
  font-variant-numeric: tabular-nums;
90
75
  color: var(--rf-color-muted);
91
76
  background: none;
92
77
  border-radius: 0;
93
78
  text-align: right;
94
- flex-shrink: 0;
95
79
  }
96
80
 
97
81
  /* Track name */
98
82
  .rf-playlist__tracks [data-name="track-name"] {
99
- flex: 1;
100
- font-size: 0.9375rem;
101
- font-weight: 500;
83
+ font-size: var(--rf-text);
84
+ font-weight: var(--rf-weight-medium);
102
85
  color: var(--rf-color-text);
103
- min-width: 0;
104
- overflow: hidden;
105
86
  text-overflow: ellipsis;
106
87
  white-space: nowrap;
107
88
  }
108
89
 
109
90
  /* Track artist */
110
91
  .rf-playlist__tracks [data-name="track-artist"] {
111
- font-size: 0.8125rem;
92
+ font-size: var(--rf-text-sm);
112
93
  color: var(--rf-color-muted);
113
- flex-shrink: 0;
114
94
  }
115
95
  .rf-playlist__tracks [data-name="track-artist"]::before {
116
96
  content: '\00b7';
@@ -120,20 +100,16 @@
120
100
 
121
101
  /* Track duration — pushed right */
122
102
  .rf-playlist__tracks [data-name="track-duration"] {
123
- font-size: 0.8125rem;
103
+ font-size: var(--rf-text-sm);
124
104
  color: var(--rf-color-muted);
125
105
  font-variant-numeric: tabular-nums;
126
- flex-shrink: 0;
127
- margin-left: auto;
128
- min-width: 3rem;
129
106
  text-align: right;
130
107
  }
131
108
 
132
109
  /* Track meta (date etc.) */
133
110
  .rf-playlist__tracks [data-name="track-meta"] {
134
- font-size: 0.75rem;
111
+ font-size: var(--rf-text-xs);
135
112
  color: var(--rf-color-muted);
136
- flex-shrink: 0;
137
113
  }
138
114
  .rf-playlist__tracks [data-name="track-meta"]::before {
139
115
  content: '\00b7';
@@ -147,16 +123,6 @@
147
123
  margin-top: 0.5rem;
148
124
  }
149
125
 
150
- /* Media zone — domain-specific cover art overrides (base styles in split.css) */
151
- .rf-playlist__media img {
152
- aspect-ratio: 1;
153
- object-fit: cover;
154
- }
155
-
156
126
  /* Hide secondary columns on narrow screens */
157
- @media (max-width: 480px) {
158
- .rf-playlist__tracks [data-name="track-artist"],
159
- .rf-playlist__tracks [data-name="track-meta"] {
160
- display: none;
161
- }
127
+
162
128
  }
@@ -1,12 +1,7 @@
1
- /* Plot */
2
- .rf-plot {
3
- display: flex;
4
- flex-direction: column;
5
- }
1
+ @layer skin {
6
2
  .rf-plot > span[property="name"] {
7
- display: block;
8
- font-size: 1.5rem;
9
- font-weight: 700;
3
+ font-size: var(--rf-text-2xl);
4
+ font-weight: var(--rf-weight-bold);
10
5
  margin-bottom: 0.5rem;
11
6
  color: var(--rf-color-text);
12
7
  }
@@ -20,41 +15,33 @@
20
15
 
21
16
  /* Beats list */
22
17
  .rf-plot ol {
23
- list-style: none;
24
18
  padding-left: 0;
25
19
  margin: 1rem 0 0;
26
20
  }
27
21
 
28
22
  /* Beat — all variants use left padding with dot at left: 0 */
29
23
  .rf-beat {
30
- position: relative;
31
24
  padding: 0.625rem 0 0.625rem 2.25rem;
32
25
  }
33
26
  .rf-beat + .rf-beat {
34
27
  border-top: 1px solid var(--rf-color-border);
35
28
  }
36
29
  .rf-beat::before {
37
- content: '';
38
- position: absolute;
39
- left: 0.375rem;
40
- top: 1rem;
41
- width: 0.75rem;
42
- height: 0.75rem;
43
30
  border-radius: 50%;
44
31
  background: var(--rf-color-surface-active);
45
32
  border: 2px solid var(--rf-color-bg);
46
33
  box-shadow: 0 0 0 2px var(--rf-color-surface-active);
47
34
  }
48
35
  .rf-beat > span[data-field="label"] {
49
- font-weight: 600;
50
- font-size: 1rem;
36
+ font-weight: var(--rf-weight-semibold);
37
+ font-size: var(--rf-text);
51
38
  color: var(--rf-color-text);
52
39
  }
53
40
  .rf-beat__body {
54
41
  margin-top: 0.25rem;
55
- font-size: 0.9375rem;
42
+ font-size: var(--rf-text);
56
43
  color: var(--rf-color-muted);
57
- line-height: 1.6;
44
+ line-height: var(--rf-leading-relaxed);
58
45
  }
59
46
  .rf-beat__body p {
60
47
  margin: 0;
@@ -69,13 +56,8 @@
69
56
  border-left: 2px solid var(--rf-color-border);
70
57
  margin-left: 0.375rem;
71
58
  }
72
- .rf-plot--linear .rf-beat::before {
73
- left: -0.4375rem;
74
- top: 0.125rem;
75
- }
76
59
  .rf-plot--linear .rf-beat > span[data-field="label"] {
77
60
  line-height: 1;
78
- display: block;
79
61
  margin-top: -0.5rem;
80
62
  }
81
63
  .rf-plot--linear .rf-beat + .rf-beat {
@@ -115,3 +97,5 @@
115
97
  background: var(--rf-color-muted);
116
98
  box-shadow: 0 0 0 2px var(--rf-color-muted);
117
99
  }
100
+
101
+ }