@refrakt-md/lumina 0.4.0 → 0.5.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 (71) hide show
  1. package/base.css +16 -0
  2. package/contracts/structures.json +1317 -3
  3. package/dist/config.d.ts +2 -3
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +4 -229
  6. package/dist/config.js.map +1 -1
  7. package/dist/transform.d.ts +2 -0
  8. package/dist/transform.d.ts.map +1 -1
  9. package/dist/transform.js +2 -0
  10. package/dist/transform.js.map +1 -1
  11. package/index.css +11 -0
  12. package/package.json +18 -11
  13. package/styles/elements/blockquote.css +8 -4
  14. package/styles/global.css +0 -7
  15. package/styles/layouts/blog.css +255 -0
  16. package/styles/layouts/default.css +11 -3
  17. package/styles/layouts/docs.css +67 -13
  18. package/styles/layouts/mobile.css +84 -0
  19. package/styles/runes/bento.css +2 -0
  20. package/styles/runes/codegroup.css +7 -2
  21. package/styles/runes/design-context.css +25 -0
  22. package/styles/runes/feature.css +20 -14
  23. package/styles/runes/form.css +1 -2
  24. package/styles/runes/grid.css +25 -7
  25. package/styles/runes/hero.css +15 -0
  26. package/styles/runes/map.css +113 -0
  27. package/styles/runes/palette.css +86 -0
  28. package/styles/runes/preview.css +187 -0
  29. package/styles/runes/sandbox.css +23 -0
  30. package/styles/runes/spacing.css +105 -0
  31. package/styles/runes/steps.css +7 -1
  32. package/styles/runes/swatch.css +28 -0
  33. package/styles/runes/symbol.css +164 -0
  34. package/styles/runes/tabs.css +6 -0
  35. package/styles/runes/testimonial.css +2 -3
  36. package/styles/runes/timeline.css +43 -24
  37. package/styles/runes/typography.css +91 -0
  38. package/svelte/elements.ts +1 -0
  39. package/{sveltekit → svelte}/index.ts +0 -8
  40. package/svelte/layouts/BlogLayout.svelte +173 -0
  41. package/svelte/layouts/DefaultLayout.svelte +67 -0
  42. package/svelte/layouts/DocsLayout.svelte +155 -0
  43. package/{sveltekit → svelte}/manifest.json +1 -1
  44. package/svelte/registry.ts +2 -0
  45. package/svelte/tokens.css +6 -0
  46. package/sveltekit/components/Accordion.svelte +0 -26
  47. package/sveltekit/components/Bento.svelte +0 -50
  48. package/sveltekit/components/Chart.svelte +0 -121
  49. package/sveltekit/components/CodeGroup.svelte +0 -88
  50. package/sveltekit/components/Comparison.svelte +0 -209
  51. package/sveltekit/components/DataTable.svelte +0 -154
  52. package/sveltekit/components/Details.svelte +0 -23
  53. package/sveltekit/components/Diagram.svelte +0 -45
  54. package/sveltekit/components/Embed.svelte +0 -36
  55. package/sveltekit/components/Form.svelte +0 -194
  56. package/sveltekit/components/Grid.svelte +0 -42
  57. package/sveltekit/components/Nav.svelte +0 -62
  58. package/sveltekit/components/Pricing.svelte +0 -20
  59. package/sveltekit/components/Reveal.svelte +0 -62
  60. package/sveltekit/components/Storyboard.svelte +0 -41
  61. package/sveltekit/components/Tabs.svelte +0 -75
  62. package/sveltekit/components/Testimonial.svelte +0 -26
  63. package/sveltekit/elements/Blockquote.svelte +0 -37
  64. package/sveltekit/elements/Pre.svelte +0 -77
  65. package/sveltekit/elements/Table.svelte +0 -40
  66. package/sveltekit/elements.ts +0 -11
  67. package/sveltekit/layouts/BlogLayout.svelte +0 -382
  68. package/sveltekit/layouts/DefaultLayout.svelte +0 -70
  69. package/sveltekit/layouts/DocsLayout.svelte +0 -133
  70. package/sveltekit/registry.ts +0 -59
  71. package/sveltekit/tokens.css +0 -71
@@ -0,0 +1,255 @@
1
+ /* Blog layout */
2
+
3
+ /* ---- Header ---- */
4
+ .rf-blog-header {
5
+ border-bottom: 1px solid var(--rf-color-border);
6
+ }
7
+ .rf-blog-header__inner {
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: space-between;
11
+ padding: 0.875rem 1.5rem;
12
+ }
13
+ .rf-blog-header p {
14
+ margin: 0;
15
+ line-height: 1;
16
+ }
17
+ .rf-blog-header a {
18
+ display: inline-block;
19
+ color: inherit;
20
+ text-decoration: none;
21
+ }
22
+ .rf-blog-header a:hover {
23
+ text-decoration: none;
24
+ }
25
+ .rf-blog-header img {
26
+ display: block;
27
+ height: 1.5rem;
28
+ width: auto;
29
+ }
30
+ .rf-blog-header__inner p ~ p {
31
+ font-size: 0.85rem;
32
+ }
33
+ .rf-blog-header__inner p ~ p a {
34
+ margin-left: 1.5rem;
35
+ color: var(--rf-color-muted);
36
+ }
37
+ .rf-blog-header__inner p ~ p a:hover {
38
+ color: var(--rf-color-text);
39
+ }
40
+
41
+ /* ---- Layout container ---- */
42
+ .rf-blog {
43
+ max-width: 72rem;
44
+ margin: 0 auto;
45
+ padding: 2.5rem 1.5rem 4rem;
46
+ }
47
+ .rf-blog--has-sidebar {
48
+ display: grid;
49
+ grid-template-columns: 1fr 16rem;
50
+ gap: 3rem;
51
+ align-items: start;
52
+ }
53
+
54
+ /* ---- Blog index ---- */
55
+ .rf-blog-index {
56
+ max-width: 42rem;
57
+ }
58
+ .rf-blog-index__title {
59
+ font-size: 2.25rem;
60
+ font-weight: 800;
61
+ line-height: 1.15;
62
+ letter-spacing: -0.02em;
63
+ margin: 0 0 1rem;
64
+ color: var(--rf-color-text);
65
+ }
66
+ .rf-blog-index__body {
67
+ margin-bottom: 2rem;
68
+ line-height: 1.8;
69
+ color: var(--rf-color-muted);
70
+ }
71
+ .rf-blog-index__body:empty {
72
+ display: none;
73
+ }
74
+ .rf-blog-index__posts {
75
+ display: flex;
76
+ flex-direction: column;
77
+ gap: 1.5rem;
78
+ }
79
+
80
+ /* ---- Post card ---- */
81
+ .rf-blog-card {
82
+ display: block;
83
+ padding: 1.5rem;
84
+ border: 1px solid var(--rf-color-border);
85
+ border-radius: var(--rf-radius-md, 0.5rem);
86
+ text-decoration: none;
87
+ color: inherit;
88
+ transition: border-color 0.15s, box-shadow 0.15s;
89
+ }
90
+ .rf-blog-card:hover {
91
+ border-color: var(--rf-color-text);
92
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
93
+ text-decoration: none;
94
+ }
95
+ .rf-blog-card__title {
96
+ font-size: 1.35rem;
97
+ font-weight: 700;
98
+ margin: 0 0 0.5rem;
99
+ color: var(--rf-color-text);
100
+ }
101
+ .rf-blog-card__meta {
102
+ display: flex;
103
+ align-items: center;
104
+ gap: 0.75rem;
105
+ font-size: 0.85rem;
106
+ color: var(--rf-color-muted);
107
+ margin-bottom: 0.5rem;
108
+ }
109
+ .rf-blog-card__author::before {
110
+ content: '\00b7';
111
+ margin-right: 0.75rem;
112
+ }
113
+ .rf-blog-card__desc {
114
+ margin: 0 0 0.75rem;
115
+ font-size: 0.95rem;
116
+ line-height: 1.6;
117
+ color: var(--rf-color-muted);
118
+ }
119
+ .rf-blog-card__tags {
120
+ display: flex;
121
+ flex-wrap: wrap;
122
+ gap: 0.5rem;
123
+ margin-bottom: 0.75rem;
124
+ }
125
+ .rf-blog-card__link {
126
+ font-size: 0.85rem;
127
+ font-weight: 600;
128
+ color: var(--rf-color-primary, var(--rf-color-text));
129
+ }
130
+
131
+ /* ---- Article ---- */
132
+ .rf-blog-article {
133
+ max-width: 42rem;
134
+ }
135
+ .rf-blog-article__header {
136
+ margin-bottom: 2.5rem;
137
+ padding-bottom: 1.5rem;
138
+ border-bottom: 1px solid var(--rf-color-border);
139
+ }
140
+ .rf-blog-article__title {
141
+ font-size: 2.25rem;
142
+ font-weight: 800;
143
+ line-height: 1.15;
144
+ letter-spacing: -0.02em;
145
+ margin: 0 0 1rem;
146
+ color: var(--rf-color-text);
147
+ }
148
+ .rf-blog-article__meta {
149
+ display: flex;
150
+ align-items: center;
151
+ gap: 0.75rem;
152
+ font-size: 0.9rem;
153
+ color: var(--rf-color-muted);
154
+ }
155
+ .rf-blog-article__meta time {
156
+ font-weight: 500;
157
+ }
158
+ .rf-blog-article__author::before {
159
+ content: '\00b7';
160
+ margin-right: 0.75rem;
161
+ }
162
+ .rf-blog-article__tags {
163
+ display: flex;
164
+ flex-wrap: wrap;
165
+ gap: 0.5rem;
166
+ margin-top: 0.75rem;
167
+ }
168
+ .rf-blog-article__tag {
169
+ font-size: 0.75rem;
170
+ font-weight: 500;
171
+ padding: 0.2rem 0.6rem;
172
+ border-radius: 9999px;
173
+ background: var(--rf-color-surface);
174
+ color: var(--rf-color-muted);
175
+ border: 1px solid var(--rf-color-border);
176
+ }
177
+
178
+ /* ---- Article body typography ---- */
179
+ .rf-blog-article__body {
180
+ line-height: 1.8;
181
+ }
182
+ .rf-blog-article__body h2 {
183
+ margin-top: 2.5rem;
184
+ }
185
+ .rf-blog-article__body h3 {
186
+ margin-top: 2rem;
187
+ }
188
+ .rf-blog-article__body p {
189
+ margin-bottom: 1.25rem;
190
+ }
191
+ .rf-blog-article__body img {
192
+ border-radius: var(--rf-radius-md);
193
+ margin: 1.5rem 0;
194
+ }
195
+
196
+ /* ---- Sidebar ---- */
197
+ .rf-blog-sidebar {
198
+ position: sticky;
199
+ top: 2.5rem;
200
+ font-size: 0.85rem;
201
+ color: var(--rf-color-muted);
202
+ }
203
+ .rf-blog-sidebar h2,
204
+ .rf-blog-sidebar h3,
205
+ .rf-blog-sidebar h4 {
206
+ font-size: 0.75rem;
207
+ font-weight: 600;
208
+ text-transform: uppercase;
209
+ letter-spacing: 0.05em;
210
+ color: var(--rf-color-muted);
211
+ margin-top: 0;
212
+ margin-bottom: 0.5rem;
213
+ }
214
+ .rf-blog-sidebar ul {
215
+ list-style: none;
216
+ padding: 0;
217
+ margin: 0;
218
+ }
219
+ .rf-blog-sidebar li {
220
+ padding: 0.25rem 0;
221
+ }
222
+ .rf-blog-sidebar a {
223
+ color: var(--rf-color-muted);
224
+ text-decoration: none;
225
+ }
226
+ .rf-blog-sidebar a:hover {
227
+ color: var(--rf-color-text);
228
+ }
229
+
230
+ /* ---- Footer ---- */
231
+ .rf-blog-footer {
232
+ border-top: 1px solid var(--rf-color-border);
233
+ padding: 2rem 1.5rem;
234
+ text-align: center;
235
+ font-size: 0.85rem;
236
+ color: var(--rf-color-muted);
237
+ }
238
+
239
+ /* ---- Mobile ---- */
240
+ @media (max-width: 768px) {
241
+ .rf-blog-header__inner p ~ p {
242
+ display: none;
243
+ }
244
+ .rf-blog--has-sidebar {
245
+ grid-template-columns: 1fr;
246
+ }
247
+ .rf-blog-article__title {
248
+ font-size: 1.75rem;
249
+ }
250
+ .rf-blog-sidebar {
251
+ position: static;
252
+ border-top: 1px solid var(--rf-color-border);
253
+ padding-top: 1.5rem;
254
+ }
255
+ }
@@ -25,14 +25,14 @@
25
25
  height: 1.5rem;
26
26
  width: auto;
27
27
  }
28
- .rf-header__inner p:last-child:not(:first-child) {
28
+ .rf-header__inner p ~ p {
29
29
  font-size: 0.85rem;
30
30
  }
31
- .rf-header__inner p:last-child:not(:first-child) a {
31
+ .rf-header__inner p ~ p a {
32
32
  margin-left: 1.5rem;
33
33
  color: var(--rf-color-muted);
34
34
  }
35
- .rf-header__inner p:last-child:not(:first-child) a:hover {
35
+ .rf-header__inner p ~ p a:hover {
36
36
  color: var(--rf-color-text);
37
37
  }
38
38
  .rf-page-content {
@@ -42,4 +42,12 @@
42
42
  margin: 0 auto;
43
43
  padding-left: 1.5rem;
44
44
  padding-right: 1.5rem;
45
+ --rf-content-padding: 1.5rem;
46
+ container-type: inline-size;
47
+ }
48
+
49
+ @media (max-width: 768px) {
50
+ .rf-header__inner p ~ p {
51
+ display: none;
52
+ }
45
53
  }
@@ -1,11 +1,13 @@
1
1
  /* Docs layout */
2
+
3
+ /* ---- Fixed header ---- */
2
4
  .rf-docs-header {
3
5
  position: fixed;
4
6
  top: 0;
5
7
  left: 0;
6
8
  right: 0;
7
9
  z-index: 10;
8
- background: var(--rf-color-bg);
10
+ background: var(--rf-color-bg, #fff);
9
11
  border-bottom: 1px solid var(--rf-color-border);
10
12
  }
11
13
  .rf-docs-header__inner {
@@ -31,17 +33,18 @@
31
33
  height: 1.5rem;
32
34
  width: auto;
33
35
  }
34
- .rf-docs-header__inner p:last-child:not(:first-child) {
36
+ .rf-docs-header__inner p ~ p {
35
37
  font-size: 0.85rem;
36
38
  }
37
- .rf-docs-header__inner p:last-child:not(:first-child) a {
39
+ .rf-docs-header__inner p ~ p a {
38
40
  margin-left: 1.5rem;
39
41
  color: var(--rf-color-muted);
40
42
  }
41
- .rf-docs-header__inner p:last-child:not(:first-child) a:hover {
43
+ .rf-docs-header__inner p ~ p a:hover {
42
44
  color: var(--rf-color-text);
43
45
  }
44
- /* Sidebar */
46
+
47
+ /* ---- Fixed sidebar ---- */
45
48
  .rf-docs-sidebar {
46
49
  position: fixed;
47
50
  left: 0;
@@ -51,16 +54,18 @@
51
54
  overflow-y: auto;
52
55
  padding: 1.5rem;
53
56
  border-right: 1px solid var(--rf-color-border);
54
- background: var(--rf-color-bg);
57
+ background: var(--rf-color-bg, #fff);
55
58
  z-index: 5;
56
59
  }
57
60
  .rf-docs-sidebar::-webkit-scrollbar {
58
61
  width: 0;
59
62
  }
60
- /* Content area */
63
+
64
+ /* ---- Content area ---- */
61
65
  .rf-docs-content {
62
66
  padding-top: 5rem;
63
67
  padding-bottom: 4rem;
68
+ container-type: inline-size;
64
69
  }
65
70
  .rf-docs-content--has-nav {
66
71
  margin-left: 240px;
@@ -69,18 +74,66 @@
69
74
  max-width: 60rem;
70
75
  margin: 0 auto;
71
76
  padding: 0 2.5rem;
77
+ --rf-content-padding: 2.5rem;
72
78
  }
73
- /* Mobile */
79
+
80
+ /* ---- Mobile toolbar (hidden on desktop) ---- */
81
+ .rf-docs-toolbar {
82
+ display: none;
83
+ align-items: center;
84
+ gap: 0.75rem;
85
+ padding: 0.625rem 1rem;
86
+ border-bottom: 1px solid var(--rf-color-border);
87
+ background: var(--rf-color-bg, #fff);
88
+ }
89
+ .rf-docs-toolbar__hamburger {
90
+ background: none;
91
+ border: none;
92
+ padding: 0.25rem;
93
+ cursor: pointer;
94
+ color: var(--rf-color-muted);
95
+ line-height: 0;
96
+ flex-shrink: 0;
97
+ }
98
+ .rf-docs-toolbar__hamburger:hover {
99
+ color: var(--rf-color-text);
100
+ }
101
+ .rf-docs-toolbar__breadcrumb {
102
+ font-size: 0.8rem;
103
+ color: var(--rf-color-muted);
104
+ min-width: 0;
105
+ overflow: hidden;
106
+ text-overflow: ellipsis;
107
+ white-space: nowrap;
108
+ }
109
+ .rf-docs-breadcrumb-category {
110
+ color: var(--rf-color-muted);
111
+ }
112
+ .rf-docs-breadcrumb-sep {
113
+ margin: 0 0.35rem;
114
+ color: var(--rf-color-border);
115
+ }
116
+ .rf-docs-breadcrumb-page {
117
+ color: var(--rf-color-text);
118
+ font-weight: 500;
119
+ }
120
+
121
+ /* ---- Mobile overrides ---- */
74
122
  @media (max-width: 768px) {
75
123
  .rf-docs-header {
76
124
  position: static;
77
125
  }
126
+ .rf-docs-header__inner p ~ p {
127
+ display: none;
128
+ }
129
+ .rf-docs-toolbar {
130
+ display: flex;
131
+ }
132
+ .rf-mobile-panel--nav {
133
+ top: 5.5rem;
134
+ }
78
135
  .rf-docs-sidebar {
79
- position: static;
80
- width: auto;
81
- border-right: none;
82
- border-bottom: 1px solid var(--rf-color-border);
83
- padding: 1rem 1.5rem;
136
+ display: none;
84
137
  }
85
138
  .rf-docs-content {
86
139
  padding-top: 2rem;
@@ -90,5 +143,6 @@
90
143
  }
91
144
  .rf-docs-content__inner {
92
145
  padding: 0 1.5rem;
146
+ --rf-content-padding: 1.5rem;
93
147
  }
94
148
  }
@@ -0,0 +1,84 @@
1
+ /* Shared mobile UI — menu button, fullscreen panel, close */
2
+
3
+ /* ---- Mobile menu button (hidden on desktop) ---- */
4
+ .rf-mobile-menu-btn {
5
+ display: none;
6
+ background: none;
7
+ border: none;
8
+ padding: 0.25rem;
9
+ cursor: pointer;
10
+ color: var(--rf-color-muted);
11
+ line-height: 0;
12
+ }
13
+ .rf-mobile-menu-btn:hover {
14
+ color: var(--rf-color-text);
15
+ }
16
+
17
+ /* ---- Fullscreen mobile panel ---- */
18
+ .rf-mobile-panel {
19
+ display: none;
20
+ position: fixed;
21
+ inset: 0;
22
+ z-index: 100;
23
+ background: var(--rf-color-bg, #fff);
24
+ overflow-y: auto;
25
+ -webkit-overflow-scrolling: touch;
26
+ }
27
+ .rf-mobile-panel__header {
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: space-between;
31
+ padding: 0.875rem 1.5rem;
32
+ border-bottom: 1px solid var(--rf-color-border);
33
+ }
34
+ .rf-mobile-panel__title {
35
+ font-size: 0.85rem;
36
+ font-weight: 600;
37
+ text-transform: uppercase;
38
+ letter-spacing: 0.05em;
39
+ color: var(--rf-color-muted);
40
+ }
41
+ .rf-mobile-panel__close {
42
+ background: none;
43
+ border: none;
44
+ padding: 0.25rem;
45
+ cursor: pointer;
46
+ color: var(--rf-color-muted);
47
+ line-height: 0;
48
+ }
49
+ .rf-mobile-panel__close:hover {
50
+ color: var(--rf-color-text);
51
+ }
52
+ .rf-mobile-panel__nav {
53
+ padding: 1.5rem;
54
+ }
55
+ .rf-mobile-panel__nav p {
56
+ margin: 0;
57
+ }
58
+ .rf-mobile-panel__nav img {
59
+ display: none;
60
+ }
61
+ .rf-mobile-panel__nav a {
62
+ display: block;
63
+ padding: 0.75rem 0;
64
+ font-size: 1.1rem;
65
+ color: var(--rf-color-text);
66
+ text-decoration: none;
67
+ border-bottom: 1px solid var(--rf-color-border);
68
+ }
69
+ .rf-mobile-panel__nav a:hover {
70
+ color: var(--rf-color-primary, var(--rf-color-text));
71
+ text-decoration: none;
72
+ }
73
+ .rf-mobile-panel__body {
74
+ padding: 1rem 1.5rem;
75
+ }
76
+
77
+ @media (max-width: 768px) {
78
+ .rf-mobile-menu-btn {
79
+ display: block;
80
+ }
81
+ .rf-mobile-panel {
82
+ display: block;
83
+ }
84
+ }
@@ -4,6 +4,8 @@
4
4
  }
5
5
  .rf-bento__grid {
6
6
  display: grid;
7
+ grid-template-columns: repeat(var(--bento-columns, 4), 1fr);
8
+ gap: var(--bento-gap, 1rem);
7
9
  }
8
10
  .rf-bento-cell {
9
11
  border: 1px solid var(--rf-color-border);
@@ -31,6 +31,11 @@
31
31
  font-size: 0.8rem;
32
32
  opacity: 0.7;
33
33
  }
34
+ .rf-codegroup ul {
35
+ list-style: none;
36
+ padding: 0;
37
+ margin: 0;
38
+ }
34
39
  .rf-codegroup__tabs {
35
40
  display: flex;
36
41
  background: rgba(255, 255, 255, 0.03);
@@ -58,7 +63,7 @@
58
63
  color: rgba(255, 255, 255, 0.95);
59
64
  border-bottom-color: var(--rf-color-primary);
60
65
  }
61
- .rf-codegroup__content pre {
66
+ .rf-codegroup pre {
62
67
  margin: 0;
63
68
  padding: 1rem 1.25rem;
64
69
  overflow-x: auto;
@@ -66,7 +71,7 @@
66
71
  border: none;
67
72
  border-radius: 0;
68
73
  }
69
- .rf-codegroup__content code {
74
+ .rf-codegroup code {
70
75
  font-family: var(--rf-font-mono);
71
76
  font-size: 0.85rem;
72
77
  }
@@ -0,0 +1,25 @@
1
+ /* Design Context — unified token card wrapper */
2
+ .rf-design-context {
3
+ margin: 1.5rem 0;
4
+ border: 1px solid var(--rf-color-border, #e5e7eb);
5
+ border-radius: 0.75rem;
6
+ overflow: hidden;
7
+ }
8
+ .rf-design-context__title {
9
+ font-size: 1.125rem;
10
+ font-weight: 600;
11
+ padding: 1rem 1.25rem;
12
+ border-bottom: 1px solid var(--rf-color-border, #e5e7eb);
13
+ background: var(--rf-color-bg-muted, #f9fafb);
14
+ }
15
+ .rf-design-context__sections {
16
+ display: flex;
17
+ flex-direction: column;
18
+ }
19
+ .rf-design-context__sections > * {
20
+ padding: 1.25rem;
21
+ margin: 0;
22
+ }
23
+ .rf-design-context__sections > * + * {
24
+ border-top: 1px dashed var(--rf-color-border, #e5e7eb);
25
+ }
@@ -2,48 +2,54 @@
2
2
  .rf-feature {
3
3
  padding: 2.5rem 0 2rem;
4
4
  }
5
- .rf-feature__main {
5
+ .rf-feature__body {
6
6
  display: contents;
7
7
  }
8
8
  .rf-feature h2 {
9
9
  text-align: center;
10
10
  margin-bottom: 2rem;
11
11
  }
12
+ .rf-feature dl {
13
+ display: grid;
14
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
15
+ gap: 1.5rem;
16
+ margin: 0;
17
+ }
12
18
  .rf-feature--split {
13
19
  display: grid;
14
20
  align-items: center;
21
+ grid-template-columns: 1fr 1fr;
15
22
  gap: 3rem;
16
23
  }
24
+ .rf-feature--split .rf-feature__body {
25
+ display: block;
26
+ }
17
27
  .rf-feature--split h2 {
18
28
  text-align: left;
19
29
  }
20
30
  .rf-feature--split dl {
21
31
  display: block;
22
32
  }
23
- .rf-feature dl {
24
- display: grid;
25
- grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
26
- gap: 1.5rem;
27
- margin: 0;
33
+ .rf-feature--split .rf-feature-definition {
34
+ border: none;
35
+ background: none;
36
+ padding: 0.75rem 0;
37
+ }
38
+ .rf-feature--mirror .rf-feature__showcase {
39
+ order: -1;
28
40
  }
29
41
  .rf-feature-definition {
30
42
  padding: 1.75rem;
31
43
  border-radius: var(--rf-radius-md);
32
44
  border: 1px solid var(--rf-color-border);
33
45
  background: var(--rf-color-bg);
34
- box-shadow: var(--rf-shadow-sm);
35
- transition: box-shadow 200ms ease, border-color 200ms ease, transform 200ms ease;
36
- }
37
- .rf-feature-definition:hover {
38
- box-shadow: var(--rf-shadow-lg);
39
- border-color: var(--rf-color-surface-active);
40
- transform: translateY(-2px);
41
46
  }
42
47
  .rf-feature-definition dt {
43
48
  font-weight: 650;
44
49
  font-size: 1.05rem;
45
- margin-bottom: 0.5rem;
50
+ margin-bottom: 0.75rem;
46
51
  letter-spacing: -0.01em;
52
+ color: var(--rf-color-text);
47
53
  }
48
54
  .rf-feature-definition dd {
49
55
  margin: 0;
@@ -11,8 +11,7 @@
11
11
  flex-direction: column;
12
12
  gap: 1.25rem;
13
13
  }
14
- .rf-form meta,
15
- .rf-form span[property] { display: none; }
14
+ .rf-form meta { display: none; }
16
15
  /* Honeypot */
17
16
  .rf-form__hp {
18
17
  position: absolute;
@@ -1,13 +1,31 @@
1
1
  /* Grid */
2
2
  .rf-grid {
3
+ margin: 1.5rem 0;
4
+ }
5
+ .rf-grid [data-layout="grid"] {
3
6
  display: grid;
4
7
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
5
8
  gap: 1.5rem;
6
- margin: 1.5rem 0;
7
- }
8
- .rf-grid__item p:first-child {
9
- margin-top: 0;
10
- }
11
- .rf-grid__item p:last-child {
12
- margin-bottom: 0;
13
9
  }
10
+ /* Explicit column counts override auto-fit */
11
+ .rf-grid [data-columns="1"] { grid-template-columns: 1fr; }
12
+ .rf-grid [data-columns="2"] { grid-template-columns: repeat(2, 1fr); }
13
+ .rf-grid [data-columns="3"] { grid-template-columns: repeat(3, 1fr); }
14
+ .rf-grid [data-columns="4"] { grid-template-columns: repeat(4, 1fr); }
15
+ .rf-grid [data-columns="5"] { grid-template-columns: repeat(5, 1fr); }
16
+ .rf-grid [data-columns="6"] { grid-template-columns: repeat(6, 1fr); }
17
+ /* Flow */
18
+ .rf-grid [data-flow="column"] { grid-auto-flow: column; }
19
+ .rf-grid [data-flow="dense"] { grid-auto-flow: dense; }
20
+ .rf-grid [data-flow="row dense"] { grid-auto-flow: row dense; }
21
+ .rf-grid [data-flow="column dense"] { grid-auto-flow: column dense; }
22
+ /* Spans */
23
+ .rf-grid [data-colspan="2"] { grid-column: span 2; }
24
+ .rf-grid [data-colspan="3"] { grid-column: span 3; }
25
+ .rf-grid [data-colspan="4"] { grid-column: span 4; }
26
+ .rf-grid [data-rowspan="2"] { grid-row: span 2; }
27
+ .rf-grid [data-rowspan="3"] { grid-row: span 3; }
28
+ .rf-grid [data-rowspan="4"] { grid-row: span 4; }
29
+ /* Item styling */
30
+ .rf-grid [data-name="item"] p:first-child { margin-top: 0; }
31
+ .rf-grid [data-name="item"] p:last-child { margin-bottom: 0; }