@refrakt-md/lumina 0.22.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 (130) 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.map +1 -1
  6. package/dist/tokens.js +2 -0
  7. package/dist/tokens.js.map +1 -1
  8. package/index.css +10 -1
  9. package/package.json +5 -4
  10. package/styles/base/attributes.css +6 -7
  11. package/styles/dimensions/checklist.css +6 -35
  12. package/styles/dimensions/cover.css +13 -95
  13. package/styles/dimensions/density.css +3 -0
  14. package/styles/dimensions/frame.css +3 -0
  15. package/styles/dimensions/media.css +14 -61
  16. package/styles/dimensions/metadata.css +24 -74
  17. package/styles/dimensions/sections.css +10 -24
  18. package/styles/dimensions/sequence.css +14 -79
  19. package/styles/dimensions/state.css +39 -56
  20. package/styles/dimensions/substrate.css +3 -0
  21. package/styles/dimensions/surfaces.css +73 -113
  22. package/styles/elements/blockquote.css +3 -2
  23. package/styles/elements/code.css +3 -0
  24. package/styles/elements/table.css +3 -0
  25. package/styles/global.css +9 -48
  26. package/styles/layouts/blog.css +3 -64
  27. package/styles/layouts/default.css +3 -77
  28. package/styles/layouts/docs.css +3 -153
  29. package/styles/layouts/mobile.css +1 -50
  30. package/styles/layouts/on-this-page.css +3 -2
  31. package/styles/layouts/plan.css +3 -134
  32. package/styles/layouts/search.css +3 -68
  33. package/styles/layouts/split.css +24 -169
  34. package/styles/layouts/theme-toggle.css +3 -29
  35. package/styles/layouts/version-switcher.css +3 -4
  36. package/styles/runes/accordion.css +15 -58
  37. package/styles/runes/aggregate.css +3 -12
  38. package/styles/runes/annotate.css +6 -35
  39. package/styles/runes/api.css +3 -0
  40. package/styles/runes/audio.css +3 -41
  41. package/styles/runes/badge.css +3 -0
  42. package/styles/runes/bar.css +3 -0
  43. package/styles/runes/bento.css +16 -159
  44. package/styles/runes/bg.css +3 -37
  45. package/styles/runes/blog.css +3 -5
  46. package/styles/runes/bond.css +3 -23
  47. package/styles/runes/breadcrumb.css +5 -13
  48. package/styles/runes/budget.css +3 -25
  49. package/styles/runes/bug.css +3 -0
  50. package/styles/runes/card.css +24 -92
  51. package/styles/runes/cast.css +5 -22
  52. package/styles/runes/changelog.css +5 -9
  53. package/styles/runes/character.css +3 -17
  54. package/styles/runes/chart.css +10 -52
  55. package/styles/runes/codegroup.css +15 -23
  56. package/styles/runes/collection.css +5 -82
  57. package/styles/runes/compare.css +3 -14
  58. package/styles/runes/comparison.css +7 -34
  59. package/styles/runes/conversation.css +5 -27
  60. package/styles/runes/cta.css +3 -26
  61. package/styles/runes/datatable.css +25 -40
  62. package/styles/runes/decision.css +3 -0
  63. package/styles/runes/design-context.css +3 -2
  64. package/styles/runes/details.css +5 -13
  65. package/styles/runes/diagram.css +5 -13
  66. package/styles/runes/diff.css +5 -88
  67. package/styles/runes/drawer.css +1 -105
  68. package/styles/runes/embed.css +4 -12
  69. package/styles/runes/event.css +3 -1
  70. package/styles/runes/expand.css +5 -40
  71. package/styles/runes/faction.css +3 -9
  72. package/styles/runes/feature.css +4 -32
  73. package/styles/runes/figure.css +5 -24
  74. package/styles/runes/file-ref.css +3 -18
  75. package/styles/runes/form.css +3 -32
  76. package/styles/runes/gallery.css +3 -135
  77. package/styles/runes/grid.css +4 -56
  78. package/styles/runes/hero.css +13 -126
  79. package/styles/runes/hint.css +16 -41
  80. package/styles/runes/howto.css +3 -25
  81. package/styles/runes/itinerary.css +3 -32
  82. package/styles/runes/juxtapose.css +12 -87
  83. package/styles/runes/lore.css +3 -10
  84. package/styles/runes/map.css +3 -36
  85. package/styles/runes/mediatext.css +3 -44
  86. package/styles/runes/milestone.css +3 -16
  87. package/styles/runes/mockup.css +3 -108
  88. package/styles/runes/nav.css +3 -178
  89. package/styles/runes/organization.css +3 -2
  90. package/styles/runes/page-section.css +3 -4
  91. package/styles/runes/pagination.css +5 -37
  92. package/styles/runes/palette.css +3 -22
  93. package/styles/runes/placeholder.css +3 -3
  94. package/styles/runes/plan-history.css +3 -23
  95. package/styles/runes/plan-progress.css +3 -4
  96. package/styles/runes/plan-ref.css +3 -0
  97. package/styles/runes/playlist.css +2 -36
  98. package/styles/runes/plot.css +3 -19
  99. package/styles/runes/preview.css +3 -28
  100. package/styles/runes/pricing.css +7 -25
  101. package/styles/runes/progress.css +6 -25
  102. package/styles/runes/pullquote.css +3 -26
  103. package/styles/runes/realm.css +3 -9
  104. package/styles/runes/recipe.css +3 -27
  105. package/styles/runes/relationships.css +3 -34
  106. package/styles/runes/reveal.css +7 -12
  107. package/styles/runes/sandbox.css +6 -36
  108. package/styles/runes/section.css +4 -18
  109. package/styles/runes/showcase.css +3 -20
  110. package/styles/runes/sidenote.css +3 -2
  111. package/styles/runes/snippet.css +3 -0
  112. package/styles/runes/spacing.css +3 -22
  113. package/styles/runes/spec.css +3 -0
  114. package/styles/runes/steps.css +4 -36
  115. package/styles/runes/storyboard.css +2 -17
  116. package/styles/runes/swatch.css +3 -6
  117. package/styles/runes/symbol.css +6 -4
  118. package/styles/runes/tabs.css +6 -9
  119. package/styles/runes/testimonial.css +5 -6
  120. package/styles/runes/textblock.css +2 -20
  121. package/styles/runes/timeline.css +3 -21
  122. package/styles/runes/tint.css +3 -0
  123. package/styles/runes/toc.css +5 -3
  124. package/styles/runes/track.css +2 -31
  125. package/styles/runes/typography.css +3 -15
  126. package/styles/runes/work.css +3 -0
  127. package/styles/runes/xref.css +3 -1
  128. package/tokens/base.css +13 -0
  129. package/tokens/dark.css +3 -0
  130. package/styles/dimensions/guest-posture.css +0 -27
@@ -1,10 +1,7 @@
1
- /* Steps */
2
- .rf-steps {
3
- counter-reset: step;
4
- }
1
+ @layer skin {
2
+ /* Steps — skin. The counter mechanism, step item layout, badge box placement, and
3
+ * media-position flip live in @refrakt-md/skeleton (styles/runes/steps.css). */
5
4
  .rf-steps__preamble {
6
- flex-direction: column;
7
- align-items: flex-start;
8
5
  gap: 0.25rem;
9
6
  margin-bottom: 1.5rem;
10
7
  }
@@ -17,8 +14,6 @@
17
14
  margin: 0 0 0.5rem;
18
15
  }
19
16
  .rf-steps__eyebrow:has(a) {
20
- display: inline-block;
21
- position: relative;
22
17
  padding: 0.25rem 0.875rem;
23
18
  border: 1px solid var(--rf-color-border);
24
19
  border-radius: var(--rf-radius-full);
@@ -30,7 +25,7 @@
30
25
  }
31
26
  .rf-steps__eyebrow:has(a):hover { border-color: var(--rf-color-muted); }
32
27
  .rf-steps__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: var(--rf-weight-semibold); text-decoration: none; }
33
- .rf-steps__eyebrow:has(a) a::before { content: ''; position: absolute; inset: 0; border-radius: inherit; }
28
+ .rf-steps__eyebrow:has(a) a::before { border-radius: inherit; }
34
29
  .rf-steps__headline {
35
30
  margin-top: 0;
36
31
  }
@@ -42,36 +37,21 @@
42
37
  margin-bottom: 1rem;
43
38
  }
44
39
  .rf-steps ol {
45
- list-style: none;
46
40
  padding-left: 0;
47
41
  margin: 0;
48
42
  }
49
- .rf-step__content {
50
- display: contents;
51
- }
52
43
 
53
44
  /* Individual step — borderless, matching recipe */
54
45
  .rf-step {
55
- counter-increment: step;
56
- position: relative;
57
46
  padding: 0.625rem 0 0.625rem 2.25rem;
58
47
  }
59
48
  .rf-step + .rf-step {
60
49
  border-top: 1px solid var(--rf-color-border);
61
50
  }
62
51
  .rf-step::before {
63
- content: counter(step);
64
- position: absolute;
65
- left: 0;
66
- top: 0.625rem;
67
- width: 1.5rem;
68
- height: 1.5rem;
69
52
  background: var(--rf-color-surface);
70
53
  color: var(--rf-color-primary);
71
54
  border-radius: var(--rf-radius-full);
72
- display: flex;
73
- align-items: center;
74
- justify-content: center;
75
55
  font-weight: var(--rf-weight-bold);
76
56
  font-size: var(--rf-text-xs);
77
57
  font-variant-numeric: tabular-nums;
@@ -83,7 +63,6 @@
83
63
  .rf-step h5,
84
64
  .rf-step h6,
85
65
  .rf-step strong {
86
- display: block;
87
66
  margin-top: 0;
88
67
  margin-bottom: 0.375rem;
89
68
  }
@@ -99,17 +78,6 @@
99
78
  }
100
79
  .rf-step__media {
101
80
  border-radius: var(--rf-radius-md);
102
- overflow: hidden;
103
81
  }
104
82
 
105
- /* BUG-001 — content-first DOM inverts the shared media-first stacked contract
106
- * (layouts/split.css): counter it so the labels are truthful. `bottom` (the
107
- * default) is plain block flow — media after the content, the historical
108
- * look; an explicit `top` flips the visual order without touching the DOM. */
109
- .rf-step[data-media-position="bottom"] {
110
- display: block;
111
- }
112
- .rf-step[data-media-position="top"] {
113
- display: flex;
114
- flex-direction: column-reverse;
115
83
  }
@@ -1,14 +1,12 @@
1
+ @layer skin {
1
2
  /* Storyboard */
2
3
  .rf-storyboard__panels {
3
- display: grid;
4
- grid-template-columns: repeat(var(--sb-columns, 3), 1fr);
5
4
  gap: 1rem;
6
5
  }
7
6
  /* Clean style */
8
7
  .rf-storyboard--clean .rf-storyboard-panel {
9
8
  border: 1px solid var(--rf-color-border);
10
9
  border-radius: var(--rf-radius-md);
11
- overflow: hidden;
12
10
  }
13
11
  .rf-storyboard--clean .rf-storyboard-panel__body {
14
12
  padding: 0.75rem;
@@ -17,7 +15,6 @@
17
15
  .rf-storyboard--comic .rf-storyboard-panel {
18
16
  border: 3px solid var(--rf-color-text);
19
17
  border-radius: 0.25rem;
20
- overflow: hidden;
21
18
  transform: rotate(-0.5deg);
22
19
  }
23
20
  .rf-storyboard--comic .rf-storyboard-panel:nth-child(even) {
@@ -45,18 +42,6 @@
45
42
  color: var(--rf-color-muted);
46
43
  margin: 0.5rem 0 0;
47
44
  }
48
- /* Shared image styles */
49
- .rf-storyboard-panel img {
50
- width: 100%;
51
- height: auto;
52
- display: block;
53
- }
54
- .rf-storyboard-panel__body > span[property],
55
- .rf-storyboard-panel__body > meta { display: none; }
56
45
  .rf-storyboard-panel__body p:last-child { margin-bottom: 0; }
57
- @media (max-width: 768px) {
58
- .rf-storyboard__panels { grid-template-columns: repeat(2, 1fr) !important; }
59
- }
60
- @media (max-width: 480px) {
61
- .rf-storyboard__panels { grid-template-columns: 1fr !important; }
46
+
62
47
  }
@@ -1,7 +1,6 @@
1
+ @layer skin {
1
2
  /* Swatch — inline color chip */
2
3
  .rf-swatch {
3
- display: inline-flex;
4
- align-items: center;
5
4
  gap: 0.375rem;
6
5
  vertical-align: middle;
7
6
  border: 1px solid rgba(0, 0, 0, 0.12);
@@ -10,12 +9,8 @@
10
9
  margin: 0 0.15em;
11
10
  }
12
11
  .rf-swatch__chip {
13
- display: inline-block;
14
- width: 0.875em;
15
- height: 0.875em;
16
12
  border-radius: 50%;
17
13
  border: 1px solid rgba(0, 0, 0, 0.1);
18
- flex-shrink: 0;
19
14
  }
20
15
  .rf-swatch__label {
21
16
  font-weight: var(--rf-weight-medium);
@@ -26,3 +21,5 @@
26
21
  font-family: var(--rf-font-mono, monospace);
27
22
  vertical-align: middle;
28
23
  }
24
+
25
+ }
@@ -1,4 +1,7 @@
1
- /* Symbol */
1
+ @layer skin {
2
+ /* Symbol — skin. The list display resets live in @refrakt-md/skeleton
3
+ * (styles/runes/symbol.css); the signature-bar geometry comes from the shared
4
+ * [data-zone-layout="bar"]. */
2
5
 
3
6
  /* SPEC-080: signature bar (kind/lang chips + source link). Geometry +
4
7
  * the source link's right-push come from [data-zone-layout="bar"]; the
@@ -30,7 +33,6 @@
30
33
  margin: 1rem 0;
31
34
  }
32
35
  .rf-symbol__body > div > ul {
33
- list-style: none;
34
36
  padding-left: 0;
35
37
  margin: 1rem 0;
36
38
  }
@@ -45,7 +47,6 @@
45
47
  .rf-symbol__body > div > ul > li > ul {
46
48
  margin-top: 0.375rem;
47
49
  padding-left: 1.25rem;
48
- list-style: none;
49
50
  }
50
51
  .rf-symbol__body > div > ul > li > ul > li {
51
52
  padding: 0.25rem 0;
@@ -106,7 +107,6 @@
106
107
  margin: 0.75rem 0;
107
108
  }
108
109
  .rf-symbol-member ul {
109
- list-style: none;
110
110
  padding-left: 0;
111
111
  margin: 0.75rem 0;
112
112
  }
@@ -124,3 +124,5 @@
124
124
  .rf-symbol-member blockquote::before {
125
125
  content: none;
126
126
  }
127
+
128
+ }
@@ -1,4 +1,6 @@
1
- /* Tabs */
1
+ @layer skin {
2
+ /* Tabs — skin. The eyebrow stretched-link, the scrollable tab strip, and the tab
3
+ * flex live in @refrakt-md/skeleton (styles/runes/tabs.css). */
2
4
  .rf-tabs__preamble {
3
5
  margin-bottom: 1.5rem;
4
6
  }
@@ -11,8 +13,6 @@
11
13
  margin: 0 0 0.5rem;
12
14
  }
13
15
  .rf-tabs__eyebrow:has(a) {
14
- display: inline-block;
15
- position: relative;
16
16
  padding: 0.25rem 0.875rem;
17
17
  border: 1px solid var(--rf-color-border);
18
18
  border-radius: var(--rf-radius-full);
@@ -24,7 +24,7 @@
24
24
  }
25
25
  .rf-tabs__eyebrow:has(a):hover { border-color: var(--rf-color-muted); }
26
26
  .rf-tabs__eyebrow:has(a) a { color: var(--rf-color-primary); font-weight: var(--rf-weight-semibold); text-decoration: none; }
27
- .rf-tabs__eyebrow:has(a) a::before { content: ''; position: absolute; inset: 0; border-radius: inherit; }
27
+ .rf-tabs__eyebrow:has(a) a::before { border-radius: inherit; }
28
28
  .rf-tabs__headline {
29
29
  margin-top: 0;
30
30
  }
@@ -38,11 +38,7 @@
38
38
 
39
39
  /* Tab bar — clean bottom line, no background */
40
40
  .rf-tabs__tabs {
41
- display: flex;
42
41
  border-bottom: 1px solid var(--rf-color-border);
43
- overflow-x: auto;
44
- overflow-y: hidden;
45
- -webkit-overflow-scrolling: touch;
46
42
  }
47
43
  .rf-tabs__panels {
48
44
  padding: 0;
@@ -51,7 +47,6 @@
51
47
 
52
48
  /* Tab buttons */
53
49
  .rf-tab {
54
- flex: 0 0 auto;
55
50
  padding: 0.625rem 1.25rem;
56
51
  font-size: var(--rf-text-sm);
57
52
  font-weight: var(--rf-weight-medium);
@@ -86,3 +81,5 @@
86
81
  .rf-tab-panel pre {
87
82
  margin: 0;
88
83
  }
84
+
85
+ }
@@ -1,4 +1,6 @@
1
- /* Testimonial */
1
+ @layer skin {
2
+ /* Testimonial — skin. The author block display + avatar box (size/crop) live in
3
+ * @refrakt-md/skeleton (styles/runes/testimonial.css). */
2
4
  .rf-testimonial {
3
5
  border-radius: var(--rf-radius-lg);
4
6
  padding: 1.75rem 2rem;
@@ -28,22 +30,19 @@
28
30
  margin: 0;
29
31
  }
30
32
  .rf-testimonial__author-name {
31
- display: block;
32
33
  font-weight: var(--rf-weight-bold);
33
34
  font-style: normal;
34
35
  font-size: var(--rf-text-sm);
35
36
  color: var(--rf-color-text);
36
37
  }
37
38
  .rf-testimonial__author-role {
38
- display: block;
39
39
  margin-top: 0.125rem;
40
40
  font-size: var(--rf-text-sm);
41
41
  color: var(--rf-color-muted);
42
42
  }
43
43
  .rf-testimonial :is(img, .rf-placeholder) {
44
- width: 48px;
45
- height: 48px;
46
44
  border-radius: 50%;
47
- object-fit: cover;
48
45
  margin-top: 0.75rem;
49
46
  }
47
+
48
+ }
@@ -1,11 +1,7 @@
1
- /* TextBlock */
2
- .rf-textblock__body {
3
- display: block;
4
- }
1
+ @layer skin {
5
2
 
6
3
  /* Drop cap — decorative first letter */
7
4
  .rf-textblock--dropcap .rf-textblock__body > p:first-child::first-letter {
8
- float: left;
9
5
  font-size: 3.5em;
10
6
  font-weight: var(--rf-weight-bold);
11
7
  line-height: 0.8;
@@ -25,17 +21,14 @@
25
21
 
26
22
  /* Multi-column text flow */
27
23
  .rf-textblock[data-columns="2"] .rf-textblock__body {
28
- column-count: 2;
29
24
  column-gap: 2rem;
30
25
  column-rule: 1px solid var(--rf-color-border);
31
26
  }
32
27
  .rf-textblock[data-columns="3"] .rf-textblock__body {
33
- column-count: 3;
34
28
  column-gap: 2rem;
35
29
  column-rule: 1px solid var(--rf-color-border);
36
30
  }
37
31
  .rf-textblock[data-columns="4"] .rf-textblock__body {
38
- column-count: 4;
39
32
  column-gap: 2rem;
40
33
  column-rule: 1px solid var(--rf-color-border);
41
34
  }
@@ -46,16 +39,5 @@
46
39
  .rf-textblock--justify .rf-textblock__body { text-align: justify; }
47
40
 
48
41
  /* Responsive — columns collapse on smaller screens */
49
- @media (max-width: 768px) {
50
- .rf-textblock[data-columns="3"] .rf-textblock__body,
51
- .rf-textblock[data-columns="4"] .rf-textblock__body {
52
- column-count: 2;
53
- }
54
- }
55
- @media (max-width: 480px) {
56
- .rf-textblock[data-columns="2"] .rf-textblock__body,
57
- .rf-textblock[data-columns="3"] .rf-textblock__body,
58
- .rf-textblock[data-columns="4"] .rf-textblock__body {
59
- column-count: 1;
60
- }
42
+
61
43
  }
@@ -1,20 +1,16 @@
1
+ @layer skin {
1
2
  /* Timeline */
2
3
  .rf-timeline {
3
4
  margin: 2rem 0;
4
5
  }
5
6
  .rf-timeline ol {
6
- list-style: none;
7
7
  padding: 0;
8
8
  margin: 0;
9
9
  }
10
- .rf-timeline-entry {
11
- position: relative;
12
- }
13
10
  .rf-timeline-entry:last-child {
14
11
  padding-bottom: 0;
15
12
  }
16
13
  .rf-timeline-entry > time {
17
- display: block;
18
14
  font-size: var(--rf-text-xs);
19
15
  font-weight: var(--rf-weight-semibold);
20
16
  color: var(--rf-color-primary);
@@ -22,7 +18,6 @@
22
18
  margin-bottom: 0.25rem;
23
19
  }
24
20
  .rf-timeline-entry > span {
25
- display: block;
26
21
  font-size: var(--rf-text);
27
22
  font-weight: var(--rf-weight-bold);
28
23
  color: var(--rf-color-text);
@@ -48,12 +43,6 @@
48
43
  border-left-color: transparent;
49
44
  }
50
45
  .rf-timeline--vertical .rf-timeline-entry::before {
51
- content: '';
52
- position: absolute;
53
- left: -0.4375rem;
54
- top: 0.25rem;
55
- width: 0.75rem;
56
- height: 0.75rem;
57
46
  border-radius: 50%;
58
47
  background: var(--rf-color-primary);
59
48
  border: 2px solid var(--rf-color-bg);
@@ -62,25 +51,18 @@
62
51
 
63
52
  /* Horizontal timeline */
64
53
  .rf-timeline--horizontal ol {
65
- display: flex;
66
54
  gap: 2rem;
67
- overflow-x: auto;
68
55
  padding: 2rem 0 1rem;
69
56
  }
70
57
  .rf-timeline--horizontal .rf-timeline-entry {
71
- min-width: 12rem;
72
58
  padding-top: 1.5rem;
73
59
  border-top: 2px solid var(--rf-color-border);
74
60
  }
75
61
  .rf-timeline--horizontal .rf-timeline-entry::before {
76
- content: '';
77
- position: absolute;
78
- top: -0.4375rem;
79
- left: 0.5rem;
80
- width: 0.75rem;
81
- height: 0.75rem;
82
62
  border-radius: 50%;
83
63
  background: var(--rf-color-primary);
84
64
  border: 2px solid var(--rf-color-bg);
85
65
  box-shadow: 0 0 0 2px var(--rf-color-primary);
86
66
  }
67
+
68
+ }
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* Tint Rune — Colour Token Bridge
2
3
  *
3
4
  * Maps --tint-* custom properties (set by the identity transform) to
@@ -247,3 +248,5 @@
247
248
  --rf-color-primary: var(--tint-primary, var(--cs-accent));
248
249
  --rf-color-border: var(--tint-border, var(--cs-border));
249
250
  }
251
+
252
+ }
@@ -1,4 +1,6 @@
1
- /* Table of Contents */
1
+ @layer skin {
2
+ /* Table of Contents — skin. The list reset + the inline-block link live in
3
+ * @refrakt-md/skeleton (styles/runes/toc.css). */
2
4
  .rf-toc {
3
5
  padding: 1.25rem 1.5rem;
4
6
  border-left: 3px solid var(--rf-color-primary);
@@ -15,7 +17,6 @@
15
17
  }
16
18
  .rf-toc ul,
17
19
  .rf-toc ol {
18
- list-style: none;
19
20
  padding-left: 0;
20
21
  margin: 0;
21
22
  }
@@ -32,7 +33,6 @@
32
33
  color: var(--rf-color-text);
33
34
  text-decoration: none;
34
35
  font-size: var(--rf-text-sm);
35
- display: inline-block;
36
36
  padding: 0.2rem 0;
37
37
  transition: color 150ms ease;
38
38
  }
@@ -40,3 +40,5 @@
40
40
  color: var(--rf-color-primary);
41
41
  text-decoration: none;
42
42
  }
43
+
44
+ }
@@ -1,11 +1,9 @@
1
+ @layer skin {
1
2
  /* Track */
2
3
  .rf-track {
3
- display: flex;
4
- align-items: center;
5
4
  gap: 0.75rem;
6
5
  padding: 0.75rem 1.25rem;
7
6
  transition: background 0.15s ease;
8
- counter-increment: track;
9
7
  }
10
8
  .rf-track + .rf-track {
11
9
  border-top: 1px solid var(--rf-color-border);
@@ -14,22 +12,16 @@
14
12
  background: color-mix(in srgb, var(--rf-color-border) 15%, transparent);
15
13
  }
16
14
  .rf-track::before {
17
- content: counter(track);
18
- min-width: 1.5rem;
19
15
  font-size: var(--rf-text-xs);
20
16
  color: var(--rf-color-primary);
21
17
  text-align: right;
22
- flex-shrink: 0;
23
18
  }
24
19
 
25
20
  /* Track name — primary text, takes remaining space */
26
21
  .rf-track__track-name {
27
- flex: 1;
28
22
  font-size: var(--rf-text);
29
23
  font-weight: var(--rf-weight-medium);
30
24
  color: var(--rf-color-text);
31
- min-width: 0;
32
- overflow: hidden;
33
25
  text-overflow: ellipsis;
34
26
  white-space: nowrap;
35
27
  }
@@ -38,7 +30,6 @@
38
30
  .rf-track__track-artist {
39
31
  font-size: var(--rf-text-sm);
40
32
  color: var(--rf-color-muted);
41
- flex-shrink: 0;
42
33
  }
43
34
  .rf-track__track-artist::before {
44
35
  content: '\00b7';
@@ -51,9 +42,6 @@
51
42
  font-size: var(--rf-text-sm);
52
43
  color: var(--rf-color-muted);
53
44
  font-variant-numeric: tabular-nums;
54
- flex-shrink: 0;
55
- margin-left: auto;
56
- min-width: 3rem;
57
45
  text-align: right;
58
46
  }
59
47
 
@@ -61,7 +49,6 @@
61
49
  .rf-track__track-meta {
62
50
  font-size: var(--rf-text-xs);
63
51
  color: var(--rf-color-muted);
64
- flex-shrink: 0;
65
52
  }
66
53
  .rf-track__track-meta::before {
67
54
  content: '\00b7';
@@ -71,7 +58,6 @@
71
58
 
72
59
  /* Description — full width below the row */
73
60
  .rf-track__track-description {
74
- flex-basis: 100%;
75
61
  font-size: var(--rf-text-sm);
76
62
  color: var(--rf-color-muted);
77
63
  line-height: var(--rf-leading-normal);
@@ -81,16 +67,9 @@
81
67
  margin: 0;
82
68
  }
83
69
 
84
- /* Wrap when description is present */
85
- .rf-track:has(.rf-track__track-description) {
86
- flex-wrap: wrap;
87
- }
88
-
89
70
  /* Cue points (lyrics / chapters) */
90
71
  .rf-track [data-name="lyrics"],
91
72
  .rf-track [data-name="chapters"] {
92
- flex-basis: 100%;
93
- list-style: none;
94
73
  padding: 0.5rem 0 0;
95
74
  margin: 0;
96
75
  font-size: var(--rf-text-sm);
@@ -103,7 +82,6 @@
103
82
  margin: 0;
104
83
  }
105
84
  .rf-track [data-name="chapters"] li {
106
- display: flex;
107
85
  gap: 0.75rem;
108
86
  padding: 0.25rem 0;
109
87
  }
@@ -114,15 +92,8 @@
114
92
  .rf-track [data-name="chapter-time"] {
115
93
  color: var(--rf-color-muted);
116
94
  font-variant-numeric: tabular-nums;
117
- margin-left: auto;
118
95
  }
119
96
 
120
97
  /* Hide secondary columns on narrow screens */
121
- @media (max-width: 480px) {
122
- .rf-track__track-artist {
123
- display: none;
124
- }
125
- .rf-track__track-meta {
126
- display: none;
127
- }
98
+
128
99
  }
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* Typography — font specimen display */
2
3
  .rf-typography__title {
3
4
  font-size: var(--rf-text-lg);
@@ -5,8 +6,6 @@
5
6
  margin-bottom: 1rem;
6
7
  }
7
8
  .rf-typography__specimens {
8
- display: flex;
9
- flex-direction: column;
10
9
  gap: 2rem;
11
10
  }
12
11
  .rf-typography__specimen {
@@ -14,8 +13,6 @@
14
13
  padding: 0;
15
14
  }
16
15
  .rf-typography__specimen-header {
17
- display: flex;
18
- align-items: baseline;
19
16
  gap: 0.75rem;
20
17
  margin-bottom: 1.25rem;
21
18
  padding-bottom: 0.75rem;
@@ -36,38 +33,27 @@
36
33
  color: var(--rf-color-muted);
37
34
  }
38
35
  .rf-typography__sizes {
39
- display: flex;
40
- flex-direction: column;
41
36
  gap: 0.5rem;
42
37
  margin-bottom: 1rem;
43
38
  }
44
39
  .rf-typography__size-sample {
45
- display: flex;
46
- align-items: baseline;
47
40
  gap: 1rem;
48
41
  line-height: var(--rf-leading-snug);
49
- overflow: hidden;
50
42
  text-overflow: ellipsis;
51
43
  white-space: nowrap;
52
44
  }
53
45
  .rf-typography__size-label {
54
- flex-shrink: 0;
55
46
  font-size: var(--rf-text-xs);
56
47
  font-family: var(--rf-font-mono, monospace);
57
48
  color: var(--rf-color-muted);
58
- min-width: 3rem;
59
49
  text-align: right;
60
50
  }
61
51
  .rf-typography__weights {
62
- display: flex;
63
52
  gap: 1.5rem;
64
- flex-wrap: wrap;
65
53
  padding-top: 1rem;
66
54
  border-top: 1px solid var(--rf-color-border, #e5e7eb);
67
55
  }
68
56
  .rf-typography__weight-sample {
69
- display: flex;
70
- flex-direction: column;
71
57
  gap: 0.25rem;
72
58
  }
73
59
  .rf-typography__weight-label {
@@ -98,3 +84,5 @@
98
84
  .rf-typography--in-design-context .rf-typography__specimen + .rf-typography__specimen {
99
85
  padding-top: 1.5rem;
100
86
  }
87
+
88
+ }
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* Work */
2
3
 
3
4
  /* SPEC-080: eyebrow / metadata / tags are projected blocks placed at the
@@ -44,3 +45,5 @@
44
45
  [data-complexity="moderate"] .rf-work__metadata [data-field="complexity"] dd::after { content: ' ●●●'; }
45
46
  [data-complexity="complex"] .rf-work__metadata [data-field="complexity"] dd::after { content: ' ●●●●'; }
46
47
  [data-complexity="unknown"] .rf-work__metadata [data-field="complexity"] dd::after { content: ' ?'; }
48
+
49
+ }
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* Xref — inline cross-reference link */
2
3
 
3
4
  .rf-xref {
@@ -13,7 +14,6 @@
13
14
  }
14
15
  .rf-xref--external::after {
15
16
  content: '\2197'; /* ↗ */
16
- display: inline-block;
17
17
  margin-inline-start: 0.15em;
18
18
  font-size: 0.85em;
19
19
  vertical-align: 0.05em;
@@ -26,3 +26,5 @@
26
26
  color: var(--rf-color-muted);
27
27
  cursor: help;
28
28
  }
29
+
30
+ }
package/tokens/base.css CHANGED
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* GENERATED from src/tokens.ts by scripts/generate-tokens.mjs — do not edit by hand.
2
3
  * Edit the `luminaTokens` source and rebuild; a drift test guards this file. */
3
4
 
@@ -63,6 +64,8 @@
63
64
  --rf-radius-full: 9999px;
64
65
  --rf-spacing-xs: 0.25rem;
65
66
  --rf-spacing-sm: 0.5rem;
67
+ --rf-spacing-snug: 0.75rem;
68
+ --rf-spacing-cozy: 1rem;
66
69
  --rf-spacing-md: 1.5rem;
67
70
  --rf-spacing-lg: 2rem;
68
71
  --rf-spacing-xl: 3rem;
@@ -108,3 +111,13 @@
108
111
  --rf-color-inline-code-bg: #e6e5e3;
109
112
  --rf-surface-inset-shift: 0.04;
110
113
  }
114
+
115
+ :root {
116
+ --rf-icon-hint-note: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%2F%3E%3Cline%20x1%3D%2212%22%20y1%3D%2216%22%20x2%3D%2212%22%20y2%3D%2212%22%2F%3E%3Cline%20x1%3D%2212%22%20y1%3D%228%22%20x2%3D%2212.01%22%20y2%3D%228%22%2F%3E%3C%2Fsvg%3E");
117
+ --rf-icon-hint-warning: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M10.29%203.86L1.82%2018a2%202%200%200%200%201.71%203h16.94a2%202%200%200%200%201.71-3L13.71%203.86a2%202%200%200%200-3.42%200z%22%2F%3E%3Cline%20x1%3D%2212%22%20y1%3D%229%22%20x2%3D%2212%22%20y2%3D%2213%22%2F%3E%3Cline%20x1%3D%2212%22%20y1%3D%2217%22%20x2%3D%2212.01%22%20y2%3D%2217%22%2F%3E%3C%2Fsvg%3E");
118
+ --rf-icon-hint-caution: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%2F%3E%3Cline%20x1%3D%2215%22%20y1%3D%229%22%20x2%3D%229%22%20y2%3D%2215%22%2F%3E%3Cline%20x1%3D%229%22%20y1%3D%229%22%20x2%3D%2215%22%20y2%3D%2215%22%2F%3E%3C%2Fsvg%3E");
119
+ --rf-icon-hint-check: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M22%2011.08V12a10%2010%200%201%201-5.93-9.14%22%2F%3E%3Cpolyline%20points%3D%2222%204%2012%2014.01%209%2011.01%22%2F%3E%3C%2Fsvg%3E");
120
+ --rf-icon-accordion-chevron: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22black%22%20stroke-width%3D%222.5%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpolyline%20points%3D%229%2018%2015%2012%209%206%22%2F%3E%3C%2Fsvg%3E");
121
+ }
122
+
123
+ }
package/tokens/dark.css CHANGED
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* GENERATED from src/tokens.ts by scripts/generate-tokens.mjs — do not edit by hand.
2
3
  * Edit the `luminaTokens` source and rebuild; a drift test guards this file. */
3
4
 
@@ -122,3 +123,5 @@
122
123
  --rf-surface-inset-shift: 0.06;
123
124
  }
124
125
  }
126
+
127
+ }