@refrakt-md/lumina 0.22.0 → 0.24.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 (132) hide show
  1. package/base.css +7 -1
  2. package/contracts/structures.json +537 -0
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +7 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/tokens.d.ts.map +1 -1
  7. package/dist/tokens.js +13 -0
  8. package/dist/tokens.js.map +1 -1
  9. package/index.css +11 -1
  10. package/package.json +5 -4
  11. package/styles/base/attributes.css +6 -7
  12. package/styles/dimensions/checklist.css +6 -35
  13. package/styles/dimensions/cover.css +13 -95
  14. package/styles/dimensions/density.css +3 -0
  15. package/styles/dimensions/frame.css +3 -0
  16. package/styles/dimensions/media.css +14 -61
  17. package/styles/dimensions/metadata.css +24 -74
  18. package/styles/dimensions/motion.css +102 -0
  19. package/styles/dimensions/sections.css +10 -24
  20. package/styles/dimensions/sequence.css +14 -79
  21. package/styles/dimensions/state.css +39 -56
  22. package/styles/dimensions/substrate.css +3 -0
  23. package/styles/dimensions/surfaces.css +73 -113
  24. package/styles/elements/blockquote.css +3 -2
  25. package/styles/elements/code.css +3 -0
  26. package/styles/elements/table.css +3 -0
  27. package/styles/global.css +9 -48
  28. package/styles/layouts/blog.css +3 -64
  29. package/styles/layouts/default.css +3 -77
  30. package/styles/layouts/docs.css +3 -153
  31. package/styles/layouts/mobile.css +1 -50
  32. package/styles/layouts/on-this-page.css +3 -2
  33. package/styles/layouts/plan.css +3 -134
  34. package/styles/layouts/search.css +3 -68
  35. package/styles/layouts/split.css +24 -169
  36. package/styles/layouts/theme-toggle.css +3 -29
  37. package/styles/layouts/version-switcher.css +3 -4
  38. package/styles/runes/accordion.css +15 -58
  39. package/styles/runes/aggregate.css +3 -12
  40. package/styles/runes/annotate.css +6 -35
  41. package/styles/runes/api.css +3 -0
  42. package/styles/runes/audio.css +3 -41
  43. package/styles/runes/badge.css +3 -0
  44. package/styles/runes/bar.css +3 -0
  45. package/styles/runes/bento.css +16 -159
  46. package/styles/runes/bg.css +3 -37
  47. package/styles/runes/blog.css +3 -5
  48. package/styles/runes/bond.css +3 -23
  49. package/styles/runes/breadcrumb.css +5 -13
  50. package/styles/runes/budget.css +3 -25
  51. package/styles/runes/bug.css +3 -0
  52. package/styles/runes/card.css +24 -92
  53. package/styles/runes/cast.css +5 -22
  54. package/styles/runes/changelog.css +5 -9
  55. package/styles/runes/character.css +3 -17
  56. package/styles/runes/chart.css +35 -53
  57. package/styles/runes/codegroup.css +15 -23
  58. package/styles/runes/collection.css +5 -82
  59. package/styles/runes/compare.css +3 -14
  60. package/styles/runes/comparison.css +7 -34
  61. package/styles/runes/conversation.css +5 -27
  62. package/styles/runes/cta.css +3 -26
  63. package/styles/runes/datatable.css +25 -40
  64. package/styles/runes/decision.css +3 -0
  65. package/styles/runes/design-context.css +3 -2
  66. package/styles/runes/details.css +5 -13
  67. package/styles/runes/diagram.css +5 -13
  68. package/styles/runes/diff.css +5 -88
  69. package/styles/runes/drawer.css +1 -105
  70. package/styles/runes/embed.css +4 -12
  71. package/styles/runes/event.css +3 -1
  72. package/styles/runes/expand.css +5 -40
  73. package/styles/runes/faction.css +3 -9
  74. package/styles/runes/feature.css +4 -32
  75. package/styles/runes/figure.css +5 -24
  76. package/styles/runes/file-ref.css +3 -18
  77. package/styles/runes/form.css +3 -32
  78. package/styles/runes/gallery.css +3 -135
  79. package/styles/runes/grid.css +4 -56
  80. package/styles/runes/hero.css +13 -126
  81. package/styles/runes/hint.css +16 -41
  82. package/styles/runes/howto.css +3 -25
  83. package/styles/runes/itinerary.css +3 -32
  84. package/styles/runes/juxtapose.css +12 -87
  85. package/styles/runes/lore.css +3 -10
  86. package/styles/runes/map.css +3 -36
  87. package/styles/runes/mediatext.css +3 -44
  88. package/styles/runes/milestone.css +3 -16
  89. package/styles/runes/mockup.css +15 -108
  90. package/styles/runes/nav.css +3 -178
  91. package/styles/runes/organization.css +3 -2
  92. package/styles/runes/page-section.css +3 -4
  93. package/styles/runes/pagination.css +5 -37
  94. package/styles/runes/palette.css +3 -22
  95. package/styles/runes/placeholder.css +3 -3
  96. package/styles/runes/plan-history.css +3 -23
  97. package/styles/runes/plan-progress.css +3 -4
  98. package/styles/runes/plan-ref.css +3 -0
  99. package/styles/runes/playlist.css +2 -36
  100. package/styles/runes/plot.css +3 -19
  101. package/styles/runes/preview.css +7 -25
  102. package/styles/runes/pricing.css +7 -25
  103. package/styles/runes/progress.css +6 -25
  104. package/styles/runes/pullquote.css +3 -26
  105. package/styles/runes/realm.css +3 -9
  106. package/styles/runes/recipe.css +3 -27
  107. package/styles/runes/relationships.css +3 -34
  108. package/styles/runes/reveal.css +7 -12
  109. package/styles/runes/sandbox.css +6 -36
  110. package/styles/runes/section.css +4 -18
  111. package/styles/runes/showcase.css +3 -20
  112. package/styles/runes/sidenote.css +3 -2
  113. package/styles/runes/snippet.css +3 -0
  114. package/styles/runes/spacing.css +3 -22
  115. package/styles/runes/spec.css +3 -0
  116. package/styles/runes/steps.css +4 -36
  117. package/styles/runes/storyboard.css +2 -17
  118. package/styles/runes/swatch.css +3 -6
  119. package/styles/runes/symbol.css +6 -4
  120. package/styles/runes/tabs.css +6 -9
  121. package/styles/runes/testimonial.css +5 -6
  122. package/styles/runes/textblock.css +2 -20
  123. package/styles/runes/timeline.css +3 -21
  124. package/styles/runes/tint.css +3 -0
  125. package/styles/runes/toc.css +5 -3
  126. package/styles/runes/track.css +2 -31
  127. package/styles/runes/typography.css +3 -15
  128. package/styles/runes/work.css +3 -0
  129. package/styles/runes/xref.css +3 -1
  130. package/tokens/base.css +19 -0
  131. package/tokens/dark.css +3 -0
  132. package/styles/dimensions/guest-posture.css +0 -27
@@ -1,134 +1,63 @@
1
- /* Collection — list / grid / table / cards of registry entities (SPEC-070).
2
- *
3
- * The block is layout-agnostic; the `data-layout` attribute on the wrapper
4
- * selects the arrangement. Built-in items carry `.rf-collection__card` /
5
- * `__item`; a body template emits its own markup inside `.rf-collection__item`.
6
- */
7
-
1
+ @layer skin {
2
+ /* Collection — skin. The list/grid arrangement, card flex column, and block-item
3
+ * display reset live in @refrakt-md/skeleton (styles/runes/collection.css). */
8
4
  .rf-collection {
9
5
  margin: var(--rf-spacing-md) 0;
10
6
  }
11
-
12
- /* Preamble — rendered above items only when the query is non-empty, so a
13
- * heading/intro can live inside the rune and vanish with an empty section. */
14
7
  .rf-collection__preamble > :first-child { margin-top: 0; }
15
-
16
- /* Empty state — shown in place of items when the query yields nothing. */
17
8
  .rf-collection__empty {
18
9
  color: var(--rf-color-muted);
19
10
  font-size: 0.9375em;
20
11
  }
21
-
22
12
  .rf-collection__items {
23
- display: flex;
24
- flex-direction: column;
25
13
  gap: var(--rf-spacing-sm);
26
14
  }
27
-
28
- /* grid arranges items into responsive columns; list stays a stacked flow.
29
- * Item chrome (a card box, bare row, …) comes from the item, not the layout. */
30
15
  .rf-collection[data-layout='grid'] .rf-collection__items {
31
- display: grid;
32
- grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
33
16
  gap: var(--rf-spacing-md);
34
- align-items: stretch;
35
- }
36
-
37
- /* Uniform heights per row: grid stretches each item to the tallest in its row;
38
- * a body-template item then lets its card fill that stretched height. */
39
- .rf-collection[data-layout='grid'] .rf-collection__item {
40
- display: flex;
41
17
  }
42
- .rf-collection[data-layout='grid'] .rf-collection__item > * {
43
- flex: 1;
44
- min-width: 0;
45
- }
46
-
47
- /* Grouped grid: the grid belongs to each group (its items are the cells), not
48
- * to __items — whose children are the group blocks (heading groups) or the
49
- * accordion wrapper. Left on __items, each group becomes a single cell, i.e. a
50
- * column per group. So when __items holds groups it stacks them, and each
51
- * group becomes the grid instead, with the group title spanning every column. */
52
18
  .rf-collection[data-layout='grid'] .rf-collection__items:has(.rf-collection__group),
53
19
  .rf-collection[data-layout='grid'] .rf-collection__items:has(.rf-accordion) {
54
- display: flex;
55
- flex-direction: column;
56
20
  gap: var(--rf-spacing-md);
57
21
  }
58
22
  .rf-collection[data-layout='grid'] .rf-collection__group {
59
- display: grid;
60
- grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
61
23
  gap: var(--rf-spacing-md);
62
- align-items: stretch;
63
24
  }
64
- .rf-collection[data-layout='grid'] .rf-collection__group-title {
65
- grid-column: 1 / -1;
66
- }
67
-
68
- .rf-collection__item {
69
- min-width: 0;
70
- }
71
-
72
25
  .rf-collection__card {
73
- display: flex;
74
- flex-direction: column;
75
26
  gap: var(--rf-spacing-xs);
76
27
  padding: var(--rf-spacing-md);
77
28
  border: 1px solid var(--rf-color-border);
78
29
  border-radius: var(--rf-radius-md);
79
30
  background: var(--rf-color-surface);
80
31
  }
81
-
82
32
  .rf-collection__card:hover {
83
33
  background: var(--rf-color-surface-hover);
84
34
  }
85
-
86
35
  .rf-collection__title {
87
36
  font-weight: var(--rf-weight-semibold);
88
37
  color: var(--rf-color-text);
89
38
  text-decoration: none;
90
39
  }
91
-
92
40
  .rf-collection__title:hover {
93
41
  color: var(--rf-color-primary);
94
42
  }
95
-
96
43
  .rf-collection__field {
97
44
  font-size: 0.875em;
98
45
  color: var(--rf-color-muted);
99
46
  }
100
-
101
- /* grouping */
102
47
  .rf-collection__group {
103
48
  margin-top: var(--rf-spacing-md);
104
- display: flex;
105
- flex-direction: column;
106
49
  /* Tight default for short item rows (the built-in title link, no body). */
107
50
  gap: var(--rf-spacing-xs);
108
51
  }
109
- /* Modestly roomier when items carry a body template (block content — a card,
110
- * callout, list, …), so they don't collide. Body-template items are marked
111
- * `data-block` by the resolver; the built-in inline title rows are not.
112
- * Mirrors the rf-relationships rule. */
113
52
  .rf-collection__group:has(.rf-collection__item[data-block]) {
114
53
  gap: var(--rf-spacing-sm);
115
54
  }
116
-
117
- /* Block-content item — let the body template (card / callout / etc.) fill the
118
- * container instead of shrink-fitting. No-op in grid mode (items there are
119
- * already `display: flex` with `flex: 1` on the child). Trim the outer margins
120
- * of the template's first/last block so the group `gap` controls inter-item
121
- * spacing — works for any block content, not a wrapper element. */
122
- .rf-collection__item[data-block] {
123
- display: block;
124
- }
125
55
  .rf-collection__item[data-block] > :first-child {
126
56
  margin-top: 0;
127
57
  }
128
58
  .rf-collection__item[data-block] > :last-child {
129
59
  margin-bottom: 0;
130
60
  }
131
-
132
61
  .rf-collection__group-title {
133
62
  margin: 0 0 var(--rf-spacing-sm);
134
63
  font-size: 0.875em;
@@ -136,31 +65,25 @@
136
65
  letter-spacing: var(--rf-tracking-wider);
137
66
  color: var(--rf-color-muted);
138
67
  }
139
-
140
68
  /* table layout */
141
69
  .rf-collection__table {
142
70
  width: 100%;
143
71
  border-collapse: collapse;
144
72
  }
145
-
146
73
  .rf-collection__table th,
147
74
  .rf-collection__table td {
148
75
  padding: var(--rf-spacing-sm);
149
76
  text-align: left;
150
77
  border-bottom: 1px solid var(--rf-color-border);
151
78
  }
152
-
153
79
  .rf-collection__table th {
154
80
  font-size: 0.875em;
155
81
  text-transform: uppercase;
156
82
  letter-spacing: var(--rf-tracking-wider);
157
83
  color: var(--rf-color-muted);
158
84
  }
159
-
160
- /* Heading-template cells (`layout="table"` body) wrap their content as
161
- * markdown paragraphs, which pick up the global `p { margin-bottom: 1rem }`
162
- * and leave dead space inside each row. Drop it inside the table — table
163
- * cells don't want paragraph spacing. */
164
85
  .rf-collection__table td p {
165
86
  margin: 0;
166
87
  }
88
+
89
+ }
@@ -1,8 +1,8 @@
1
+ @layer skin {
1
2
  /* Compare */
2
3
  .rf-compare {
3
4
  border: 1px solid var(--rf-color-border);
4
5
  border-radius: var(--rf-radius-md);
5
- overflow: hidden;
6
6
  }
7
7
  .rf-compare__header {
8
8
  padding: 0.5rem 1rem;
@@ -13,18 +13,6 @@
13
13
  background: var(--rf-color-surface);
14
14
  border-bottom: 1px solid var(--rf-color-border);
15
15
  }
16
- .rf-compare--side-by-side .rf-compare__panels {
17
- display: grid;
18
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
19
- }
20
- .rf-compare--stacked .rf-compare__panels {
21
- display: flex;
22
- flex-direction: column;
23
- }
24
- .rf-compare [data-panel] {
25
- min-width: 0;
26
- overflow: auto;
27
- }
28
16
  .rf-compare--side-by-side [data-panel] + [data-panel] {
29
17
  border-left: 1px solid var(--rf-color-border);
30
18
  }
@@ -32,7 +20,6 @@
32
20
  border-top: 1px solid var(--rf-color-border);
33
21
  }
34
22
  .rf-compare [data-label] {
35
- display: block;
36
23
  padding: 0.5rem 1rem;
37
24
  font-size: var(--rf-text-xs);
38
25
  font-weight: var(--rf-weight-semibold);
@@ -50,3 +37,5 @@
50
37
  border: none;
51
38
  border-radius: 0;
52
39
  }
40
+
41
+ }
@@ -1,14 +1,10 @@
1
- /* Comparison */
1
+ @layer skin {
2
+ /* Comparison — skin. The grid passthroughs, scroll/sticky geometry, cards grid,
3
+ * card flex + badge positioning, and metadata hiding live in @refrakt-md/skeleton
4
+ * (styles/runes/comparison.css). */
2
5
  .rf-comparison {
3
6
  margin: 2rem 0;
4
7
  }
5
- .rf-comparison__grid {
6
- display: contents;
7
- }
8
- .rf-comparison-column__body,
9
- .rf-comparison-row__body {
10
- display: contents;
11
- }
12
8
  .rf-comparison__title {
13
9
  text-align: center;
14
10
  margin: 0 0 1.5rem;
@@ -16,12 +12,8 @@
16
12
  font-weight: var(--rf-weight-bold);
17
13
  color: var(--rf-color-text);
18
14
  }
19
- .rf-comparison > meta,
20
- .rf-comparison > span[property] { display: none; }
21
15
  /* Table layout */
22
16
  .rf-comparison__table-wrapper {
23
- overflow-x: auto;
24
- -webkit-overflow-scrolling: touch;
25
17
  margin: 0 -1rem;
26
18
  padding: 0 1rem;
27
19
  }
@@ -30,11 +22,6 @@
30
22
  border-collapse: collapse;
31
23
  font-size: var(--rf-text);
32
24
  }
33
- .rf-comparison__table thead {
34
- position: sticky;
35
- top: 0;
36
- z-index: 1;
37
- }
38
25
  .rf-comparison__table th,
39
26
  .rf-comparison__table td {
40
27
  padding: 0.75rem 1rem;
@@ -54,7 +41,6 @@
54
41
  border-bottom-color: var(--rf-color-primary);
55
42
  }
56
43
  .rf-comparison__recommended-badge {
57
- display: block;
58
44
  font-size: var(--rf-text-xs);
59
45
  font-weight: var(--rf-weight-semibold);
60
46
  text-transform: uppercase;
@@ -63,7 +49,6 @@
63
49
  margin-top: 0.25rem;
64
50
  }
65
51
  .rf-comparison__label-col {
66
- width: 1%;
67
52
  white-space: nowrap;
68
53
  }
69
54
  .rf-comparison__row-label {
@@ -80,7 +65,6 @@
80
65
  background: color-mix(in srgb, var(--rf-color-primary) 3%, transparent);
81
66
  }
82
67
  .rf-comparison__cell p { margin: 0; font-size: var(--rf-text-sm); }
83
- .rf-comparison__cell strong { display: none; }
84
68
  .rf-comparison__cell em {
85
69
  font-style: italic;
86
70
  color: var(--rf-color-muted);
@@ -110,7 +94,6 @@
110
94
  }
111
95
  /* Callout badge */
112
96
  .rf-comparison__callout-badge {
113
- display: inline-block;
114
97
  background: color-mix(in srgb, var(--rf-color-primary) 10%, transparent);
115
98
  color: var(--rf-color-primary);
116
99
  font-size: var(--rf-text-xs);
@@ -121,17 +104,13 @@
121
104
  .rf-comparison__callout-badge p { margin: 0; font-size: inherit; }
122
105
  /* Cards layout */
123
106
  .rf-comparison__cards {
124
- display: grid;
125
- grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
126
107
  gap: 1.5rem;
127
- align-items: start;
128
108
  }
129
109
  .rf-comparison-card {
130
110
  border: 1px solid var(--rf-color-border);
131
111
  border-radius: var(--rf-radius-md);
132
112
  padding: 1.5rem;
133
113
  background: var(--rf-color-bg);
134
- position: relative;
135
114
  transition: box-shadow 200ms ease, transform 200ms ease;
136
115
  }
137
116
  .rf-comparison-card:hover {
@@ -143,10 +122,6 @@
143
122
  transform: scale(1.02);
144
123
  }
145
124
  .rf-comparison-card__badge {
146
- position: absolute;
147
- top: -0.625rem;
148
- left: 50%;
149
- transform: translateX(-50%);
150
125
  background: var(--rf-color-primary);
151
126
  color: white;
152
127
  font-size: var(--rf-text-xs);
@@ -164,7 +139,6 @@
164
139
  color: var(--rf-color-text);
165
140
  }
166
141
  .rf-comparison-card__rows {
167
- list-style: none;
168
142
  padding: 0;
169
143
  margin: 0;
170
144
  }
@@ -173,13 +147,11 @@
173
147
  font-size: var(--rf-text-sm);
174
148
  color: var(--rf-color-muted);
175
149
  border-bottom: 1px solid var(--rf-color-border);
176
- display: flex;
177
- align-items: baseline;
178
150
  gap: 0.5rem;
179
151
  }
180
152
  .rf-comparison-card__row:last-child { border-bottom: none; }
181
153
  .rf-comparison-card__row strong { color: var(--rf-color-text); white-space: nowrap; }
182
- .rf-comparison-card__row p { margin: 0; display: inline; }
154
+ .rf-comparison-card__row p { margin: 0; }
183
155
  .rf-comparison-card__row--negative { opacity: 0.7; }
184
156
  .rf-comparison-card__row--callout {
185
157
  border-bottom: none;
@@ -203,9 +175,10 @@
203
175
  .rf-comparison-row { padding: 0.25rem 0; }
204
176
  /* Responsive */
205
177
  @media (max-width: 640px) {
206
- .rf-comparison__cards { grid-template-columns: 1fr; }
207
178
  .rf-comparison-card--highlighted { transform: none; }
208
179
  .rf-comparison__table { font-size: var(--rf-text-sm); }
209
180
  .rf-comparison__table th,
210
181
  .rf-comparison__table td { padding: 0.5rem 0.625rem; }
211
182
  }
183
+
184
+ }
@@ -1,28 +1,13 @@
1
- /* Conversation */
1
+ @layer skin {
2
+ /* Conversation — skin. The column stack, bubble flex/width/side-alignment, and the
3
+ * data-carrier hides live in @refrakt-md/skeleton (styles/runes/conversation.css). */
2
4
  .rf-conversation {
3
- display: flex;
4
- flex-direction: column;
5
5
  gap: 1rem;
6
6
  max-width: 40rem;
7
7
  }
8
8
  .rf-conversation__messages {
9
- display: flex;
10
- flex-direction: column;
11
9
  gap: 1rem;
12
10
  }
13
- .rf-conversation-message {
14
- display: flex;
15
- flex-direction: column;
16
- max-width: 80%;
17
- }
18
- .rf-conversation-message--left {
19
- align-self: flex-start;
20
- align-items: flex-start;
21
- }
22
- .rf-conversation-message--right {
23
- align-self: flex-end;
24
- align-items: flex-end;
25
- }
26
11
  .rf-conversation-message__speaker {
27
12
  font-size: var(--rf-text-xs);
28
13
  font-weight: var(--rf-weight-semibold);
@@ -47,12 +32,5 @@
47
32
  }
48
33
  .rf-conversation-message__body p { margin: 0; }
49
34
  .rf-conversation-message__body p + p { margin-top: 0.5rem; }
50
- /* The speaker name lives inline-bold inside the bubble (the explicit form
51
- * authors it that way, and the named-speakers form injects it the same way),
52
- * so the property-carrier span is data only — hide it. Same for the meta
53
- * tags the engine consumes. `data-field` is the post-engine attribute set by
54
- * createComponentRenderable. */
55
- .rf-conversation-message > span[data-field="speaker"],
56
- .rf-conversation-message > meta[data-field] { display: none; }
57
- .rf-conversation-message__body > span[data-field],
58
- .rf-conversation-message__body > meta { display: none; }
35
+
36
+ }
@@ -1,4 +1,6 @@
1
- /* Call to Action */
1
+ @layer skin {
2
+ /* Call to Action — skin. The preamble/eyebrow/button-row layout + mobile stack
3
+ * live in @refrakt-md/skeleton (styles/runes/cta.css). */
2
4
  .rf-cta {
3
5
  padding: 3.5rem 2rem 3rem;
4
6
  }
@@ -8,8 +10,6 @@
8
10
  text-align: center;
9
11
  }
10
12
  .rf-cta__preamble {
11
- flex-direction: column;
12
- align-items: center;
13
13
  gap: 0.25rem;
14
14
  margin-bottom: 1.5rem;
15
15
  }
@@ -25,8 +25,6 @@
25
25
  }
26
26
  /* Pill-badge variant when eyebrow contains a link */
27
27
  .rf-cta .rf-cta__eyebrow:has(a) {
28
- display: inline-block;
29
- position: relative;
30
28
  padding: 0.25rem 0.875rem;
31
29
  border: 1px solid var(--rf-color-border);
32
30
  border-radius: var(--rf-radius-full);
@@ -45,9 +43,6 @@
45
43
  text-decoration: none;
46
44
  }
47
45
  .rf-cta .rf-cta__eyebrow:has(a) a::before {
48
- content: '';
49
- position: absolute;
50
- inset: 0;
51
46
  border-radius: inherit;
52
47
  }
53
48
  .rf-cta__image {
@@ -78,11 +73,7 @@
78
73
  line-height: var(--rf-leading-relaxed);
79
74
  }
80
75
  .rf-cta ul {
81
- display: flex;
82
76
  gap: 0.75rem;
83
- justify-content: center;
84
- flex-wrap: wrap;
85
- list-style: none;
86
77
  padding: 0;
87
78
  margin: 0;
88
79
  }
@@ -92,8 +83,6 @@
92
83
  }
93
84
  .rf-cta li a,
94
85
  .rf-cta nav a {
95
- display: inline-flex;
96
- align-items: center;
97
86
  padding: 0.625rem 1.5rem;
98
87
  border-radius: var(--rf-radius-sm);
99
88
  text-decoration: none;
@@ -143,16 +132,4 @@
143
132
  max-width: none;
144
133
  }
145
134
 
146
- /* Mobile: stack action buttons full-width so multi-button CTAs line up */
147
- @media (max-width: 640px) {
148
- .rf-cta ul {
149
- flex-direction: column;
150
- align-items: stretch;
151
- }
152
- .rf-cta li a,
153
- .rf-cta nav a {
154
- justify-content: center;
155
- width: 100%;
156
- box-sizing: border-box;
157
- }
158
135
  }
@@ -1,15 +1,21 @@
1
- /* DataTable */
1
+ @layer skin {
2
+ /* DataTable — skin. The toolbar/pagination flex + input width live in
3
+ * @refrakt-md/skeleton (styles/runes/datatable.css). The table chrome (header
4
+ * strip, cell padding, row borders, hover) stays here. */
5
+
6
+ /* The sunken surface chrome (fill + border + container radius) stays, but the
7
+ * elevation padding is dropped: the toolbar, table, and pagination each carry
8
+ * their own rhythm and sit flush with the surface edge. */
9
+ .rf-datatable {
10
+ padding: 0;
11
+ }
2
12
  .rf-datatable__toolbar {
3
- display: flex;
4
- justify-content: flex-end;
5
- padding: 0.5rem 0.75rem;
6
- background: var(--rf-color-surface);
13
+ padding: var(--rf-spacing-sm);
7
14
  }
8
15
  .rf-datatable__input {
9
- width: 14rem;
10
- padding: 0.35rem 0.625rem;
16
+ padding: var(--rf-spacing-snug);
11
17
  border: 1px solid var(--rf-color-border);
12
- border-radius: var(--rf-radius-sm);
18
+ border-radius: var(--rf-radius-media);
13
19
  font-size: var(--rf-text-xs);
14
20
  font-family: var(--rf-font-sans);
15
21
  background: var(--rf-color-bg);
@@ -20,31 +26,12 @@
20
26
  border-color: var(--rf-color-primary);
21
27
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--rf-color-primary) 15%, transparent);
22
28
  }
23
- .rf-datatable__content .rf-datatable__table {
24
- border: none;
25
- border-radius: 0;
26
- margin: 0;
27
- overflow: visible;
28
- }
29
- .rf-datatable__content .rf-datatable__table th {
30
- background: var(--rf-color-surface);
31
- }
32
- .rf-datatable__content .rf-datatable__table th:first-child,
33
- .rf-datatable__content .rf-datatable__table th:last-child {
34
- border-radius: 0;
35
- }
36
- .rf-datatable__content table {
29
+ .rf-datatable__table {
37
30
  width: 100%;
38
31
  border-collapse: collapse;
39
32
  margin: 0;
40
33
  }
41
- .rf-datatable__content .rf-table-wrapper {
42
- margin: 0;
43
- border: none;
44
- border-radius: 0;
45
- overflow: visible;
46
- }
47
- .rf-datatable__content th {
34
+ .rf-datatable__table th {
48
35
  text-align: left;
49
36
  padding: 0.75rem 1rem;
50
37
  font-size: var(--rf-text-xs);
@@ -52,33 +39,29 @@
52
39
  text-transform: uppercase;
53
40
  letter-spacing: var(--rf-tracking-wider);
54
41
  color: var(--rf-color-muted);
55
- background: var(--rf-color-surface);
56
42
  }
57
- .rf-datatable__content th[style*="cursor"]:hover {
43
+ /* Sortable headers (the behavior sets inline cursor:pointer on them). */
44
+ .rf-datatable__table th[style*="cursor"]:hover {
58
45
  color: var(--rf-color-text);
59
46
  }
60
- .rf-datatable__content .sort-indicator {
47
+ .rf-datatable__sort-indicator {
61
48
  font-size: var(--rf-text-xs);
62
49
  opacity: 0.7;
63
50
  }
64
- .rf-datatable__content td {
51
+ .rf-datatable__table td {
65
52
  padding: 0.75rem 1rem;
66
53
  border-bottom: 1px solid var(--rf-color-border);
67
54
  font-size: var(--rf-text-sm);
68
55
  }
69
- .rf-datatable__content tr:last-child td {
56
+ .rf-datatable__table tr:last-child td {
70
57
  border-bottom: none;
71
58
  }
72
- .rf-datatable__content tr:hover td {
59
+ .rf-datatable__table tr:hover td {
73
60
  background: var(--rf-color-surface-hover);
74
61
  }
75
62
  .rf-datatable__pagination {
76
- display: flex;
77
- align-items: center;
78
- justify-content: flex-end;
79
63
  gap: 0.75rem;
80
- padding: 0.5rem 0.75rem;
81
- background: var(--rf-color-surface);
64
+ padding: var(--rf-spacing-sm);
82
65
  }
83
66
  .rf-datatable__page-btn {
84
67
  padding: 0.25rem 0.5rem;
@@ -103,3 +86,5 @@
103
86
  font-size: var(--rf-text-xs);
104
87
  color: var(--rf-color-muted);
105
88
  }
89
+
90
+ }
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* Decision */
2
3
 
3
4
  /* SPEC-079: eyebrow + metadata zone names replace header-primary /
@@ -28,3 +29,5 @@
28
29
  .rf-decision__body > section:first-child {
29
30
  margin-top: 0.75rem;
30
31
  }
32
+
33
+ }
@@ -1,3 +1,4 @@
1
+ @layer skin {
1
2
  /* Design Context — unified token card wrapper */
2
3
  .rf-design-context__title {
3
4
  font-size: var(--rf-text-xl);
@@ -5,8 +6,6 @@
5
6
  margin-bottom: 1rem;
6
7
  }
7
8
  .rf-design-context__sections {
8
- display: flex;
9
- flex-direction: column;
10
9
  gap: 1.5rem;
11
10
  }
12
11
 
@@ -21,3 +20,5 @@
21
20
  border-radius: 0;
22
21
  padding: 0;
23
22
  }
23
+
24
+ }
@@ -1,33 +1,23 @@
1
- /* Details */
2
- .rf-details {
3
- }
1
+ @layer skin {
2
+ /* Details — skin. The summary flex, marker hide, disclosure-marker push, and the
3
+ * open-rotate live in @refrakt-md/skeleton (styles/runes/details.css). */
4
4
  .rf-details__summary {
5
- display: flex;
6
- align-items: center;
7
5
  gap: 0.5rem;
8
6
  padding: 0.75rem 0;
9
7
  font-weight: var(--rf-weight-semibold);
10
8
  font-size: var(--rf-text-sm);
11
9
  cursor: pointer;
12
10
  user-select: none;
13
- list-style: none;
14
11
  transition: background-color 200ms ease;
15
12
  }
16
- .rf-details__summary::-webkit-details-marker { display: none; }
17
- .rf-details__summary::marker { display: none; content: ''; }
18
13
  .rf-details__summary:hover {
19
14
  color: var(--rf-color-primary);
20
15
  }
21
16
  .rf-details__summary::after {
22
17
  content: '▸';
23
- flex-shrink: 0;
24
- margin-left: auto;
25
18
  color: var(--rf-color-muted);
26
19
  transition: transform 200ms ease;
27
20
  }
28
- .rf-details[open] .rf-details__summary::after {
29
- transform: rotate(90deg);
30
- }
31
21
  .rf-details__body {
32
22
  padding: 0 0 1rem;
33
23
  font-size: var(--rf-text-sm);
@@ -36,3 +26,5 @@
36
26
  .rf-details__body p:last-child {
37
27
  margin-bottom: 0;
38
28
  }
29
+
30
+ }
@@ -1,31 +1,21 @@
1
- /* Diagram */
1
+ @layer skin {
2
+ /* Diagram — skin. The block/clip, scrollable container, and responsive SVG live in
3
+ * @refrakt-md/skeleton (styles/runes/diagram.css). */
2
4
  .rf-diagram {
3
- display: block;
4
5
  border-radius: var(--rf-radius-lg);
5
6
  padding: 1.5rem;
6
7
  text-align: center;
7
- overflow: hidden;
8
8
  }
9
9
  .rf-diagram__title {
10
10
  font-weight: var(--rf-weight-semibold);
11
11
  font-size: var(--rf-text);
12
12
  margin-bottom: 1rem;
13
13
  }
14
- .rf-diagram__container {
15
- display: flex;
16
- justify-content: center;
17
- overflow-x: auto;
18
- }
19
- .rf-diagram__container svg {
20
- max-width: 100%;
21
- height: auto;
22
- }
23
14
  .rf-diagram__source {
24
15
  text-align: left;
25
16
  font-size: var(--rf-text-sm);
26
17
  margin: 0;
27
18
  }
28
-
29
19
  /* Mermaid SVG overrides */
30
20
  .rf-diagram__container .label {
31
21
  font-family: var(--rf-font-sans) !important;
@@ -38,3 +28,5 @@
38
28
  fill: var(--rf-color-muted) !important;
39
29
  stroke: var(--rf-color-muted) !important;
40
30
  }
31
+
32
+ }