@refrakt-md/lumina 0.8.5 → 0.9.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 (80) hide show
  1. package/base.css +10 -0
  2. package/contracts/structures.json +92 -47
  3. package/index.css +20 -0
  4. package/package.json +6 -6
  5. package/styles/dimensions/checklist.css +81 -0
  6. package/styles/dimensions/density.css +51 -0
  7. package/styles/dimensions/media.css +62 -0
  8. package/styles/dimensions/metadata.css +161 -0
  9. package/styles/dimensions/sections.css +77 -0
  10. package/styles/dimensions/sequence.css +129 -0
  11. package/styles/dimensions/state.css +57 -0
  12. package/styles/dimensions/surfaces.css +88 -0
  13. package/styles/global.css +1 -1
  14. package/styles/layouts/docs.css +28 -2
  15. package/styles/layouts/split.css +159 -3
  16. package/styles/runes/accordion.css +1 -2
  17. package/styles/runes/annotate.css +0 -3
  18. package/styles/runes/api.css +0 -4
  19. package/styles/runes/audio.css +0 -3
  20. package/styles/runes/backlog.css +61 -0
  21. package/styles/runes/bento.css +4 -5
  22. package/styles/runes/blog.css +3 -7
  23. package/styles/runes/budget.css +3 -19
  24. package/styles/runes/bug.css +25 -0
  25. package/styles/runes/cast.css +0 -3
  26. package/styles/runes/character.css +5 -43
  27. package/styles/runes/chart.css +0 -2
  28. package/styles/runes/codegroup.css +2 -2
  29. package/styles/runes/compare.css +0 -1
  30. package/styles/runes/conversation.css +0 -1
  31. package/styles/runes/cta.css +6 -3
  32. package/styles/runes/datatable.css +0 -3
  33. package/styles/runes/decision-log.css +46 -0
  34. package/styles/runes/decision.css +21 -0
  35. package/styles/runes/design-context.css +0 -1
  36. package/styles/runes/details.css +0 -1
  37. package/styles/runes/diagram.css +0 -1
  38. package/styles/runes/diff.css +0 -1
  39. package/styles/runes/embed.css +0 -1
  40. package/styles/runes/event.css +0 -3
  41. package/styles/runes/faction.css +79 -48
  42. package/styles/runes/feature.css +10 -10
  43. package/styles/runes/figure.css +0 -3
  44. package/styles/runes/form.css +0 -1
  45. package/styles/runes/gallery.css +0 -1
  46. package/styles/runes/grid.css +0 -3
  47. package/styles/runes/hero.css +13 -4
  48. package/styles/runes/hint.css +0 -7
  49. package/styles/runes/howto.css +7 -18
  50. package/styles/runes/itinerary.css +0 -2
  51. package/styles/runes/juxtapose.css +0 -4
  52. package/styles/runes/lore.css +0 -20
  53. package/styles/runes/mediatext.css +0 -3
  54. package/styles/runes/milestone.css +106 -0
  55. package/styles/runes/mockup.css +0 -1
  56. package/styles/runes/organization.css +0 -3
  57. package/styles/runes/palette.css +0 -3
  58. package/styles/runes/plan-activity.css +87 -0
  59. package/styles/runes/plan-progress.css +69 -0
  60. package/styles/runes/playlist.css +101 -83
  61. package/styles/runes/plot.css +0 -23
  62. package/styles/runes/preview.css +9 -17
  63. package/styles/runes/pricing.css +4 -1
  64. package/styles/runes/realm.css +80 -46
  65. package/styles/runes/recipe.css +7 -89
  66. package/styles/runes/reveal.css +1 -4
  67. package/styles/runes/sandbox.css +0 -1
  68. package/styles/runes/spacing.css +0 -3
  69. package/styles/runes/spec.css +20 -0
  70. package/styles/runes/steps.css +4 -2
  71. package/styles/runes/storyboard.css +0 -3
  72. package/styles/runes/symbol.css +0 -39
  73. package/styles/runes/tabs.css +1 -4
  74. package/styles/runes/testimonial.css +0 -2
  75. package/styles/runes/textblock.css +0 -3
  76. package/styles/runes/toc.css +0 -1
  77. package/styles/runes/track.css +16 -5
  78. package/styles/runes/typography.css +0 -3
  79. package/styles/runes/work.css +35 -0
  80. package/styles/runes/xref.css +12 -0
@@ -0,0 +1,69 @@
1
+ /* Plan Progress */
2
+ .rf-plan-progress {
3
+ background: var(--rf-color-surface);
4
+ border: 1px solid var(--rf-color-border);
5
+ border-radius: var(--rf-radius-md);
6
+ padding: 0.75rem 1.25rem;
7
+ }
8
+ .rf-plan-progress__row {
9
+ display: flex;
10
+ align-items: baseline;
11
+ gap: 0.5rem;
12
+ padding-block: 0.25rem;
13
+ }
14
+ .rf-plan-progress__row + .rf-plan-progress__row {
15
+ border-block-start: 1px solid var(--rf-color-border);
16
+ }
17
+ .rf-plan-progress__label {
18
+ font-weight: 600;
19
+ font-size: 0.8125rem;
20
+ color: var(--rf-color-text);
21
+ min-width: 8rem;
22
+ }
23
+ .rf-plan-progress__counts {
24
+ display: flex;
25
+ flex-wrap: wrap;
26
+ gap: 0.25rem 0.5rem;
27
+ }
28
+ .rf-plan-progress__count {
29
+ font-size: 0.75rem;
30
+ padding: 0.125rem 0.5rem;
31
+ border-radius: var(--rf-radius-sm);
32
+ white-space: nowrap;
33
+ }
34
+
35
+ /* Status-colored counts */
36
+ .rf-plan-progress__count[data-status="done"],
37
+ .rf-plan-progress__count[data-status="fixed"],
38
+ .rf-plan-progress__count[data-status="accepted"],
39
+ .rf-plan-progress__count[data-status="active"],
40
+ .rf-plan-progress__count[data-status="complete"] {
41
+ color: var(--rf-color-success);
42
+ background: var(--rf-color-success-bg);
43
+ }
44
+ .rf-plan-progress__count[data-status="in-progress"],
45
+ .rf-plan-progress__count[data-status="confirmed"],
46
+ .rf-plan-progress__count[data-status="review"] {
47
+ color: var(--rf-color-warning);
48
+ background: var(--rf-color-warning-bg);
49
+ }
50
+ .rf-plan-progress__count[data-status="ready"],
51
+ .rf-plan-progress__count[data-status="reported"],
52
+ .rf-plan-progress__count[data-status="proposed"],
53
+ .rf-plan-progress__count[data-status="planning"] {
54
+ color: var(--rf-color-info);
55
+ background: var(--rf-color-info-bg);
56
+ }
57
+ .rf-plan-progress__count[data-status="blocked"] {
58
+ color: var(--rf-color-danger);
59
+ background: var(--rf-color-danger-bg);
60
+ }
61
+ .rf-plan-progress__count[data-status="draft"],
62
+ .rf-plan-progress__count[data-status="pending"],
63
+ .rf-plan-progress__count[data-status="superseded"],
64
+ .rf-plan-progress__count[data-status="deprecated"],
65
+ .rf-plan-progress__count[data-status="wontfix"],
66
+ .rf-plan-progress__count[data-status="duplicate"] {
67
+ color: var(--rf-color-muted);
68
+ background: var(--rf-color-surface-active);
69
+ }
@@ -1,52 +1,112 @@
1
1
  /* Playlist */
2
- .rf-playlist {
3
- margin: 1.5rem 0;
4
- }
5
2
 
6
- /* Header: title + description */
7
- .rf-playlist__header {
8
- display: flex;
3
+ /* Inner header (headline + description) inside content */
4
+ .rf-playlist__content > .rf-playlist__header {
9
5
  flex-direction: column;
10
- gap: 0.5rem;
11
- padding: 0 0 1rem;
12
- }
13
- .rf-playlist__header h1,
14
- .rf-playlist__header h2,
15
- .rf-playlist__header h3,
16
- .rf-playlist__header h4,
17
- .rf-playlist__header h5,
18
- .rf-playlist__header h6 {
6
+ align-items: flex-start;
7
+ gap: 0.25rem;
8
+ margin-bottom: 1rem;
9
+ }
10
+ .rf-playlist__headline {
19
11
  margin: 0;
20
- font-size: 1.25rem;
21
- font-weight: 700;
22
- color: var(--rf-color-text);
23
12
  }
24
- .rf-playlist__header p {
13
+ .rf-playlist__content > .rf-playlist__header p {
25
14
  margin: 0;
26
- font-size: 0.875rem;
15
+ font-size: 0.925rem;
27
16
  color: var(--rf-color-muted);
28
17
  line-height: 1.5;
29
18
  }
30
19
 
31
- /* Type badge */
32
- .rf-playlist__type-badge {
33
- display: inline-block;
34
- font-size: 0.7rem;
35
- font-weight: 600;
36
- text-transform: uppercase;
37
- letter-spacing: 0.05em;
38
- padding: 0.125rem 0.5rem;
39
- border-radius: var(--rf-radius-full);
40
- color: var(--rf-color-primary);
41
- background: color-mix(in srgb, var(--rf-color-primary) 10%, transparent);
42
- width: fit-content;
43
- }
44
-
45
20
  /* Tracks list wrapper */
46
21
  .rf-playlist__tracks {
47
22
  list-style: none;
48
23
  padding: 0;
49
- margin: 0.5rem 0 0;
24
+ margin: 0;
25
+ counter-reset: track;
26
+ border: 1px solid var(--rf-color-border);
27
+ border-radius: var(--rf-radius-md);
28
+ overflow: hidden;
29
+ }
30
+
31
+ /* Track items — override sequence dimension's absolute positioning */
32
+ .rf-playlist__tracks > li {
33
+ display: flex;
34
+ align-items: baseline;
35
+ gap: 0.75rem;
36
+ padding: 0.75rem 1.25rem;
37
+ padding-left: 1.25rem;
38
+ position: static;
39
+ transition: background 0.15s ease;
40
+ }
41
+ /* Hide meta elements from flex layout */
42
+ .rf-playlist__tracks > li > meta {
43
+ display: none;
44
+ }
45
+ .rf-playlist__tracks > li + li {
46
+ border-top: 1px solid var(--rf-color-border);
47
+ }
48
+ .rf-playlist__tracks > li:hover {
49
+ background: color-mix(in srgb, var(--rf-color-border) 15%, transparent);
50
+ }
51
+ .rf-playlist__tracks > li::before {
52
+ position: static;
53
+ width: auto;
54
+ height: auto;
55
+ min-width: 1.5rem;
56
+ font-size: 0.8rem;
57
+ font-variant-numeric: tabular-nums;
58
+ color: var(--rf-color-muted);
59
+ background: none;
60
+ border-radius: 0;
61
+ text-align: right;
62
+ flex-shrink: 0;
63
+ }
64
+
65
+ /* Track name */
66
+ .rf-playlist__tracks [data-name="track-name"] {
67
+ flex: 1;
68
+ font-size: 0.9375rem;
69
+ font-weight: 500;
70
+ color: var(--rf-color-text);
71
+ min-width: 0;
72
+ overflow: hidden;
73
+ text-overflow: ellipsis;
74
+ white-space: nowrap;
75
+ }
76
+
77
+ /* Track artist */
78
+ .rf-playlist__tracks [data-name="track-artist"] {
79
+ font-size: 0.8125rem;
80
+ color: var(--rf-color-muted);
81
+ flex-shrink: 0;
82
+ }
83
+ .rf-playlist__tracks [data-name="track-artist"]::before {
84
+ content: '\00b7';
85
+ margin-right: 0.5rem;
86
+ opacity: 0.5;
87
+ }
88
+
89
+ /* Track duration — pushed right */
90
+ .rf-playlist__tracks [data-name="track-duration"] {
91
+ font-size: 0.8125rem;
92
+ color: var(--rf-color-muted);
93
+ font-variant-numeric: tabular-nums;
94
+ flex-shrink: 0;
95
+ margin-left: auto;
96
+ min-width: 3rem;
97
+ text-align: right;
98
+ }
99
+
100
+ /* Track meta (date etc.) */
101
+ .rf-playlist__tracks [data-name="track-meta"] {
102
+ font-size: 0.75rem;
103
+ color: var(--rf-color-muted);
104
+ flex-shrink: 0;
105
+ }
106
+ .rf-playlist__tracks [data-name="track-meta"]::before {
107
+ content: '\00b7';
108
+ margin-right: 0.5rem;
109
+ opacity: 0.5;
50
110
  }
51
111
 
52
112
  /* Player area */
@@ -55,58 +115,16 @@
55
115
  margin-top: 0.5rem;
56
116
  }
57
117
 
58
- /* Media zone — cover art */
59
- .rf-playlist__media {
60
- border-radius: var(--rf-radius-lg);
61
- overflow: hidden;
62
- }
118
+ /* Media zone — domain-specific cover art overrides (base styles in split.css) */
63
119
  .rf-playlist__media img {
64
- display: block;
65
- width: 100%;
66
- height: auto;
67
- border-radius: var(--rf-radius-lg);
68
120
  aspect-ratio: 1;
69
121
  object-fit: cover;
70
122
  }
71
123
 
72
- /* Split layout shared */
73
- .rf-playlist[data-layout="split"],
74
- .rf-playlist[data-layout="split-reverse"] {
75
- display: grid;
76
- grid-template-columns: var(--split-ratio, 1fr 1fr);
77
- gap: var(--split-gap, 2rem);
78
- align-items: var(--split-valign, start);
79
- }
80
- /* Split: content left (col 1), media right (col 2) — DOM order is media first */
81
- .rf-playlist[data-layout="split"] > .rf-playlist__content {
82
- grid-column: 1;
83
- grid-row: 2;
84
- }
85
- .rf-playlist[data-layout="split"] > .rf-playlist__media {
86
- grid-column: 2;
87
- grid-row: 2;
88
- }
89
- /* Split-reverse: media left (col 1), content right (col 2) — matches DOM order */
90
- /* Type badge spans full width in split layouts */
91
- .rf-playlist[data-layout="split"] > .rf-playlist__type-badge,
92
- .rf-playlist[data-layout="split-reverse"] > .rf-playlist__type-badge {
93
- grid-column: 1 / -1;
94
- }
95
- /* Collapse to single column on small screens */
96
- @media (max-width: 640px) {
97
- .rf-playlist[data-layout="split"],
98
- .rf-playlist[data-layout="split-reverse"] {
99
- grid-template-columns: 1fr;
100
- }
101
- .rf-playlist[data-layout="split"] > .rf-playlist__content,
102
- .rf-playlist[data-layout="split"] > .rf-playlist__media {
103
- grid-column: auto;
104
- grid-row: auto;
124
+ /* Hide secondary columns on narrow screens */
125
+ @media (max-width: 480px) {
126
+ .rf-playlist__tracks [data-name="track-artist"],
127
+ .rf-playlist__tracks [data-name="track-meta"] {
128
+ display: none;
105
129
  }
106
130
  }
107
-
108
- /* Split layout media gets subtle depth */
109
- .rf-playlist[data-layout="split"] .rf-playlist__media img,
110
- .rf-playlist[data-layout="split-reverse"] .rf-playlist__media img {
111
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
112
- }
@@ -1,6 +1,5 @@
1
1
  /* Plot */
2
2
  .rf-plot {
3
- margin: 1.5rem 0;
4
3
  display: flex;
5
4
  flex-direction: column;
6
5
  }
@@ -10,30 +9,8 @@
10
9
  font-weight: 700;
11
10
  margin-bottom: 0.5rem;
12
11
  color: var(--rf-color-heading);
13
- order: -1;
14
12
  }
15
13
 
16
- /* Meta bar — surface strip */
17
- .rf-plot__badge {
18
- display: flex;
19
- flex-wrap: wrap;
20
- gap: 0.75rem 1.25rem;
21
- align-items: center;
22
- background: var(--rf-color-surface);
23
- border-radius: var(--rf-radius-md);
24
- padding: 0.625rem 1rem;
25
- margin-bottom: 1rem;
26
- }
27
- .rf-plot__type-badge,
28
- .rf-plot__structure-badge {
29
- font-size: 0.8125rem;
30
- font-weight: 500;
31
- text-transform: capitalize;
32
- color: var(--rf-color-muted);
33
- }
34
- .rf-plot__type-badge::before { content: 'Type: '; font-weight: 400; opacity: 0.65; }
35
- .rf-plot__structure-badge::before { content: 'Structure: '; font-weight: 400; opacity: 0.65; }
36
-
37
14
  /* Description */
38
15
  .rf-plot > p {
39
16
  color: var(--rf-color-muted);
@@ -3,19 +3,6 @@
3
3
  margin: 2rem 0;
4
4
  }
5
5
 
6
- /* Width variants */
7
- @container (min-width: 1008px) {
8
- .rf-preview[data-width="wide"] {
9
- width: calc(100% + 8rem);
10
- margin-left: -4rem;
11
- max-width: 76rem;
12
- }
13
- }
14
- .rf-preview[data-width="full"] {
15
- width: 100vw;
16
- margin-left: calc(-50vw + 50%);
17
- }
18
-
19
6
  /* Toolbar — transparent, controls float above the canvas */
20
7
  .rf-preview__toolbar {
21
8
  display: flex;
@@ -79,7 +66,7 @@
79
66
  box-shadow: var(--rf-shadow-xs);
80
67
  }
81
68
 
82
- /* Canvas — bordered frame for the preview content */
69
+ /* Canvas — framed area for the preview content */
83
70
  .rf-preview__canvas {
84
71
  padding: 2rem 2.5rem;
85
72
  background: var(--rf-color-bg);
@@ -170,7 +157,7 @@
170
157
  }
171
158
 
172
159
  /* Small containers: edge-to-edge bleed */
173
- @container (max-width: 1008px) {
160
+ @container (max-width: 1280px) {
174
161
  .rf-preview__toolbar {
175
162
  padding: 0.25rem var(--rf-content-padding, 1.5rem) 0.5rem;
176
163
  }
@@ -182,7 +169,12 @@
182
169
  }
183
170
  .rf-preview__source {
184
171
  border-radius: 0;
185
- border-left: none;
186
- border-right: none;
172
+ }
173
+ /* Break out of feature's padding-inline to reach viewport edges */
174
+ .rf-preview--in-feature {
175
+ margin-inline: calc(-1 * var(--rf-content-gutter, 1.5rem));
176
+ }
177
+ .rf-preview--in-feature .rf-preview__toolbar {
178
+ padding-inline: var(--rf-content-gutter, 1.5rem);
187
179
  }
188
180
  }
@@ -3,7 +3,10 @@
3
3
  padding: 2rem 0;
4
4
  }
5
5
  .rf-pricing > header,
6
- .rf-pricing__header {
6
+ .rf-pricing__preamble {
7
+ flex-direction: column;
8
+ align-items: flex-start;
9
+ gap: 0.25rem;
7
10
  text-align: center;
8
11
  margin-bottom: 2rem;
9
12
  }
@@ -1,41 +1,12 @@
1
1
  /* Realm */
2
2
  .rf-realm {
3
- margin: 1.5rem 0;
4
3
  display: flex;
5
4
  flex-direction: column;
6
5
  }
7
6
 
8
- /* Badge barsurface strip */
9
- .rf-realm__badge {
10
- display: flex;
11
- flex-wrap: wrap;
12
- gap: 0.75rem 1.25rem;
13
- align-items: center;
14
- background: var(--rf-color-surface);
15
- border-radius: var(--rf-radius-md);
16
- padding: 0.625rem 1rem;
17
- margin-bottom: 1rem;
18
- }
19
- .rf-realm__type-badge,
20
- .rf-realm__scale-badge {
21
- font-size: 0.8125rem;
22
- font-weight: 500;
23
- text-transform: capitalize;
24
- color: var(--rf-color-muted);
25
- }
26
- .rf-realm__type-badge::before { content: 'Type: '; font-weight: 400; opacity: 0.65; }
27
- .rf-realm__scale-badge::before { content: 'Scale: '; font-weight: 400; opacity: 0.65; }
28
-
29
- /* Scene image */
7
+ /* Scene imagebase styles deferred to shared [data-section="media"] in split.css */
30
8
  .rf-realm__scene {
31
- border-radius: var(--rf-radius-lg);
32
- overflow: hidden;
33
- }
34
- .rf-realm__scene img {
35
- display: block;
36
- width: 100%;
37
- height: auto;
38
- border-radius: var(--rf-radius-lg);
9
+ margin-bottom: var(--rf-spacing-md);
39
10
  }
40
11
 
41
12
  /* Content */
@@ -54,7 +25,6 @@
54
25
  font-weight: 700;
55
26
  margin-bottom: 0.5rem;
56
27
  color: var(--rf-color-heading);
57
- order: -1;
58
28
  }
59
29
 
60
30
  /* Realm Section */
@@ -62,9 +32,11 @@
62
32
  padding: 0.75rem 0;
63
33
  border-top: 1px solid var(--rf-color-border);
64
34
  }
65
- .rf-realm-section__header {
66
- font-size: 1.125rem;
67
- font-weight: 600;
35
+ .rf-realm-section__name {
36
+ display: block;
37
+ font-size: 1.25rem;
38
+ font-weight: 700;
39
+ line-height: 1.3;
68
40
  margin-bottom: 0.5rem;
69
41
  color: var(--rf-color-heading);
70
42
  }
@@ -78,41 +50,103 @@
78
50
  .rf-realm[data-layout="split-reverse"] {
79
51
  display: grid;
80
52
  grid-template-columns: var(--split-ratio, 1fr 1fr);
81
- gap: var(--split-gap, 2rem);
53
+ column-gap: var(--split-gap, 2rem);
82
54
  align-items: var(--split-valign, start);
83
55
  }
84
- /* Name and badge span full width at the top */
85
- .rf-realm[data-layout="split"] > span[property="name"],
86
- .rf-realm[data-layout="split-reverse"] > span[property="name"] {
87
- grid-column: 1 / -1;
56
+ /* Split: badge + name + content left (col 1), scene right (col 2) */
57
+ .rf-realm[data-layout="split"] > .rf-realm__badge {
58
+ grid-column: 1;
88
59
  grid-row: 1;
89
60
  }
90
- .rf-realm[data-layout="split"] > .rf-realm__badge,
91
- .rf-realm[data-layout="split-reverse"] > .rf-realm__badge {
92
- grid-column: 1 / -1;
61
+ .rf-realm[data-layout="split"] > span[property="name"] {
62
+ grid-column: 1;
93
63
  grid-row: 2;
94
64
  }
95
- /* Split: content left (col 1), scene right (col 2) */
96
65
  .rf-realm[data-layout="split"] > .rf-realm__content {
97
66
  grid-column: 1;
98
67
  grid-row: 3;
99
68
  }
100
69
  .rf-realm[data-layout="split"] > .rf-realm__scene {
70
+ grid-column: 2;
71
+ grid-row: 1 / 4;
72
+ }
73
+ /* Split-reverse: scene left (col 1), badge + name + content right (col 2) */
74
+ .rf-realm[data-layout="split-reverse"] > .rf-realm__badge {
75
+ grid-column: 2;
76
+ grid-row: 1;
77
+ }
78
+ .rf-realm[data-layout="split-reverse"] > span[property="name"] {
79
+ grid-column: 2;
80
+ grid-row: 2;
81
+ }
82
+ .rf-realm[data-layout="split-reverse"] > .rf-realm__content {
101
83
  grid-column: 2;
102
84
  grid-row: 3;
103
85
  }
104
- /* Split-reverse: scene left (col 1), content right (col 2) — matches DOM order */
86
+ .rf-realm[data-layout="split-reverse"] > .rf-realm__scene {
87
+ grid-column: 1;
88
+ grid-row: 1 / 4;
89
+ margin: 0;
90
+ }
105
91
  /* Collapse to single column on small screens */
106
92
  @media (max-width: 640px) {
107
93
  .rf-realm[data-layout="split"],
108
94
  .rf-realm[data-layout="split-reverse"] {
109
95
  grid-template-columns: 1fr;
110
96
  }
97
+ .rf-realm[data-layout="split"] > .rf-realm__badge,
98
+ .rf-realm[data-layout="split"] > span[property="name"],
111
99
  .rf-realm[data-layout="split"] > .rf-realm__content,
112
- .rf-realm[data-layout="split"] > .rf-realm__scene {
100
+ .rf-realm[data-layout="split"] > .rf-realm__scene,
101
+ .rf-realm[data-layout="split-reverse"] > .rf-realm__badge,
102
+ .rf-realm[data-layout="split-reverse"] > span[property="name"],
103
+ .rf-realm[data-layout="split-reverse"] > .rf-realm__content,
104
+ .rf-realm[data-layout="split-reverse"] > .rf-realm__scene {
105
+ grid-column: auto;
106
+ grid-row: auto;
107
+ }
108
+ /* Only add margin when NOT in full-bleed media-position mode (shared split.css handles that) */
109
+ .rf-realm[data-layout="split"]:not([data-media-position="top"]) > .rf-realm__scene,
110
+ .rf-realm[data-layout="split-reverse"]:not([data-media-position="top"]) > .rf-realm__scene {
111
+ margin-bottom: var(--rf-spacing-md);
112
+ }
113
+ }
114
+ /* Reset grid placement when data-collapse triggers single-column from shared split.css */
115
+ @media (max-width: 640px) {
116
+ .rf-realm[data-collapse="sm"] > .rf-realm__badge,
117
+ .rf-realm[data-collapse="sm"] > span[property="name"],
118
+ .rf-realm[data-collapse="sm"] > .rf-realm__content,
119
+ .rf-realm[data-collapse="sm"] > .rf-realm__scene {
113
120
  grid-column: auto;
114
121
  grid-row: auto;
115
122
  }
123
+ .rf-realm[data-collapse="sm"]:not([data-media-position="top"]) > .rf-realm__scene {
124
+ margin-bottom: var(--rf-spacing-md);
125
+ }
126
+ }
127
+ @media (max-width: 768px) {
128
+ .rf-realm[data-collapse="md"] > .rf-realm__badge,
129
+ .rf-realm[data-collapse="md"] > span[property="name"],
130
+ .rf-realm[data-collapse="md"] > .rf-realm__content,
131
+ .rf-realm[data-collapse="md"] > .rf-realm__scene {
132
+ grid-column: auto;
133
+ grid-row: auto;
134
+ }
135
+ .rf-realm[data-collapse="md"]:not([data-media-position="top"]) > .rf-realm__scene {
136
+ margin-bottom: var(--rf-spacing-md);
137
+ }
138
+ }
139
+ @media (max-width: 1024px) {
140
+ .rf-realm[data-collapse="lg"] > .rf-realm__badge,
141
+ .rf-realm[data-collapse="lg"] > span[property="name"],
142
+ .rf-realm[data-collapse="lg"] > .rf-realm__content,
143
+ .rf-realm[data-collapse="lg"] > .rf-realm__scene {
144
+ grid-column: auto;
145
+ grid-row: auto;
146
+ }
147
+ .rf-realm[data-collapse="lg"]:not([data-media-position="top"]) > .rf-realm__scene {
148
+ margin-bottom: var(--rf-spacing-md);
149
+ }
116
150
  }
117
151
 
118
152
  /* Split layout scene gets subtle depth */
@@ -1,14 +1,5 @@
1
1
  /* Recipe — editorial cookbook aesthetic */
2
2
 
3
- /* Root: no border box, just flow spacing */
4
- .rf-recipe {
5
- margin: 1.5rem 0;
6
- }
7
-
8
- /* Header */
9
- .rf-recipe__header {
10
- margin-bottom: 1.25rem;
11
- }
12
3
  .rf-recipe .rf-recipe__eyebrow {
13
4
  font-size: 0.8rem;
14
5
  font-weight: 600;
@@ -30,31 +21,6 @@
30
21
  margin-bottom: 1rem;
31
22
  }
32
23
 
33
- /* Meta bar — soft surface strip instead of bordered divider */
34
- .rf-recipe__meta {
35
- display: flex;
36
- flex-wrap: wrap;
37
- gap: 0.75rem 1.25rem;
38
- align-items: center;
39
- background: var(--rf-color-surface);
40
- border-radius: var(--rf-radius-md);
41
- padding: 0.625rem 1rem;
42
- margin-bottom: 1.5rem;
43
- }
44
- .rf-recipe__meta-item {
45
- font-size: 0.8125rem;
46
- color: var(--rf-color-muted);
47
- font-weight: 400;
48
- }
49
-
50
- /* Difficulty — plain text, same style as other meta items */
51
- .rf-recipe__badge {
52
- font-size: 0.8125rem;
53
- font-weight: 400;
54
- text-transform: capitalize;
55
- color: var(--rf-color-muted);
56
- }
57
-
58
24
  /* Content wrapper */
59
25
  .rf-recipe__content {
60
26
  display: flex;
@@ -65,6 +31,7 @@
65
31
  /* Ingredients — surfaced zone with custom markers */
66
32
  .rf-recipe__content ul {
67
33
  background: var(--rf-color-surface);
34
+ border: 1px solid var(--rf-color-border);
68
35
  border-radius: var(--rf-radius-md);
69
36
  padding: 1.25rem 1.25rem 1.25rem 2.5rem;
70
37
  list-style: disc;
@@ -112,6 +79,11 @@
112
79
  border-radius: var(--rf-radius-full);
113
80
  }
114
81
 
82
+ .rf-recipe__content ol > li > p,
83
+ .rf-recipe__content ul > li > p {
84
+ margin: 0;
85
+ }
86
+
115
87
  /* Tips — callout accent like hint */
116
88
  .rf-recipe__content blockquote {
117
89
  border-left: 2px solid var(--rf-color-primary);
@@ -128,61 +100,7 @@
128
100
  margin: 0;
129
101
  }
130
102
 
131
- /* Media zone */
132
- .rf-recipe__media {
133
- border-radius: var(--rf-radius-lg);
134
- overflow: hidden;
135
- }
103
+ /* Media zone — domain-specific overrides (base styles in split.css) */
136
104
  .rf-recipe__media img {
137
- display: block;
138
- width: 100%;
139
- height: auto;
140
105
  border-radius: var(--rf-radius-lg);
141
106
  }
142
-
143
- /* Split layout — shared */
144
- .rf-recipe[data-layout="split"],
145
- .rf-recipe[data-layout="split-reverse"] {
146
- display: grid;
147
- gap: var(--split-gap, 2rem);
148
- align-items: var(--split-valign, start);
149
- }
150
- /* Both use the same column template */
151
- .rf-recipe[data-layout="split"],
152
- .rf-recipe[data-layout="split-reverse"] {
153
- grid-template-columns: var(--split-ratio, 1fr 1fr);
154
- }
155
- /* Split: content left (col 1), media right (col 2) — DOM order is media first,
156
- so explicit placement is needed */
157
- .rf-recipe[data-layout="split"] > .rf-recipe__content {
158
- grid-column: 1;
159
- grid-row: 2;
160
- }
161
- .rf-recipe[data-layout="split"] > .rf-recipe__media {
162
- grid-column: 2;
163
- grid-row: 2;
164
- }
165
- /* Split-reverse: media left (col 1), content right (col 2) — matches DOM order */
166
- /* Meta bar spans full width in split layouts */
167
- .rf-recipe[data-layout="split"] > .rf-recipe__meta,
168
- .rf-recipe[data-layout="split-reverse"] > .rf-recipe__meta {
169
- grid-column: 1 / -1;
170
- }
171
- /* Collapse to single column on small screens */
172
- @media (max-width: 640px) {
173
- .rf-recipe[data-layout="split"],
174
- .rf-recipe[data-layout="split-reverse"] {
175
- grid-template-columns: 1fr;
176
- }
177
- .rf-recipe[data-layout="split"] > .rf-recipe__content,
178
- .rf-recipe[data-layout="split"] > .rf-recipe__media {
179
- grid-column: auto;
180
- grid-row: auto;
181
- }
182
- }
183
-
184
- /* Split layout media gets subtle depth */
185
- .rf-recipe[data-layout="split"] .rf-recipe__media img,
186
- .rf-recipe[data-layout="split-reverse"] .rf-recipe__media img {
187
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
188
- }
@@ -1,8 +1,5 @@
1
1
  /* Reveal */
2
- .rf-reveal {
3
- margin: 1.5rem 0;
4
- }
5
- .rf-reveal__header {
2
+ .rf-reveal__preamble {
6
3
  margin-bottom: 1.5rem;
7
4
  }
8
5
  .rf-reveal__eyebrow {