@refrakt-md/lumina 0.9.4 → 0.9.6

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 (48) hide show
  1. package/contracts/structures.json +17 -6
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js.map +1 -0
  4. package/dist/icons.d.ts.map +1 -0
  5. package/dist/icons.js.map +1 -0
  6. package/dist/{layouts/index.d.ts → layouts.d.ts} +1 -1
  7. package/dist/layouts.d.ts.map +1 -0
  8. package/dist/{layouts/index.js → layouts.js} +1 -1
  9. package/dist/layouts.js.map +1 -0
  10. package/dist/transform.d.ts.map +1 -0
  11. package/dist/transform.js.map +1 -0
  12. package/index.css +5 -0
  13. package/package.json +10 -10
  14. package/styles/dimensions/checklist.css +2 -2
  15. package/styles/layouts/docs.css +1 -7
  16. package/styles/layouts/plan.css +435 -0
  17. package/styles/runes/annotate.css +9 -13
  18. package/styles/runes/budget.css +3 -2
  19. package/styles/runes/bug.css +24 -10
  20. package/styles/runes/codegroup.css +1 -0
  21. package/styles/runes/decision.css +23 -9
  22. package/styles/runes/diagram.css +15 -1
  23. package/styles/runes/embed.css +1 -0
  24. package/styles/runes/event.css +1 -1
  25. package/styles/runes/juxtapose.css +14 -13
  26. package/styles/runes/mediatext.css +9 -1
  27. package/styles/runes/milestone.css +22 -8
  28. package/styles/runes/plan-entity-tabs.css +88 -0
  29. package/styles/runes/plan-history.css +197 -0
  30. package/styles/runes/plan-ref.css +26 -0
  31. package/styles/runes/plan-relationships.css +40 -0
  32. package/styles/runes/spec.css +21 -7
  33. package/styles/runes/work.css +29 -15
  34. package/dist/layouts/index.d.ts.map +0 -1
  35. package/dist/layouts/index.js.map +0 -1
  36. package/dist/src/config.d.ts.map +0 -1
  37. package/dist/src/config.js.map +0 -1
  38. package/dist/src/icons.d.ts.map +0 -1
  39. package/dist/src/icons.js.map +0 -1
  40. package/dist/src/transform.d.ts.map +0 -1
  41. package/dist/src/transform.js.map +0 -1
  42. package/layouts/index.ts +0 -13
  43. /package/dist/{src/config.d.ts → config.d.ts} +0 -0
  44. /package/dist/{src/config.js → config.js} +0 -0
  45. /package/dist/{src/icons.d.ts → icons.d.ts} +0 -0
  46. /package/dist/{src/icons.js → icons.js} +0 -0
  47. /package/dist/{src/transform.d.ts → transform.d.ts} +0 -0
  48. /package/dist/{src/transform.js → transform.js} +0 -0
@@ -47,7 +47,7 @@
47
47
  align-items: center;
48
48
  margin-bottom: 0.5rem;
49
49
  }
50
- .rf-budget-category--estimate .rf-budget-category__header::after {
50
+ .rf-budget-category--estimate .rf-budget-category__subtotal::before {
51
51
  content: 'est.';
52
52
  font-size: 0.6875rem;
53
53
  font-weight: 600;
@@ -57,7 +57,8 @@
57
57
  background: var(--rf-color-warning-bg);
58
58
  padding: 0.0625rem 0.375rem;
59
59
  border-radius: var(--rf-radius-full);
60
- margin-left: 0.5rem;
60
+ margin-right: 0.5rem;
61
+ vertical-align: middle;
61
62
  }
62
63
  .rf-budget-category__label {
63
64
  font-size: 0.9375rem;
@@ -1,4 +1,26 @@
1
1
  /* Bug */
2
+
3
+ /* Primary badges: ID left, status right */
4
+ .rf-bug__header-primary {
5
+ justify-content: space-between;
6
+ margin-bottom: 0.75rem;
7
+ }
8
+
9
+ /* Preamble: title + optional description between badge groups */
10
+ .rf-bug__preamble {
11
+ margin-bottom: 0.75rem;
12
+ }
13
+ .rf-bug__title h1,
14
+ .rf-bug__title h2,
15
+ .rf-bug__title h3 {
16
+ margin-top: 0;
17
+ }
18
+
19
+ /* Secondary badges: pill row below preamble */
20
+ .rf-bug__header-secondary {
21
+ margin-bottom: 1.5rem;
22
+ }
23
+
2
24
  .rf-bug__assignee-badge {
3
25
  margin-left: auto;
4
26
  }
@@ -7,19 +29,11 @@
7
29
  font-size: 0.925rem;
8
30
  line-height: 1.65;
9
31
  }
10
- .rf-bug__body > header {
11
- margin-bottom: 0.75rem;
12
- }
13
- .rf-bug__body > header h1,
14
- .rf-bug__body > header h2,
15
- .rf-bug__body > header h3 {
16
- margin-top: 0;
17
- }
18
- .rf-bug__body > div > section {
32
+ .rf-bug__body > section {
19
33
  margin-top: 1rem;
20
34
  padding-top: 0.75rem;
21
35
  border-top: 1px solid var(--rf-color-border);
22
36
  }
23
- .rf-bug__body > div > section:first-child {
37
+ .rf-bug__body > section:first-child {
24
38
  margin-top: 0.75rem;
25
39
  }
@@ -30,6 +30,7 @@
30
30
  font-family: var(--rf-font-mono);
31
31
  font-size: 0.8rem;
32
32
  font-weight: normal;
33
+ color: inherit;
33
34
  opacity: 0.7;
34
35
  }
35
36
  .rf-codegroup ul {
@@ -1,21 +1,35 @@
1
1
  /* Decision */
2
- .rf-decision__body {
3
- font-size: 0.925rem;
4
- line-height: 1.65;
2
+
3
+ /* Primary badges: ID left, status right */
4
+ .rf-decision__header-primary {
5
+ justify-content: space-between;
6
+ margin-bottom: 0.75rem;
5
7
  }
6
- .rf-decision__body > header {
8
+
9
+ /* Preamble: title + optional description between badge groups */
10
+ .rf-decision__preamble {
7
11
  margin-bottom: 0.75rem;
8
12
  }
9
- .rf-decision__body > header h1,
10
- .rf-decision__body > header h2,
11
- .rf-decision__body > header h3 {
13
+ .rf-decision__title h1,
14
+ .rf-decision__title h2,
15
+ .rf-decision__title h3 {
12
16
  margin-top: 0;
13
17
  }
14
- .rf-decision__body > div > section {
18
+
19
+ /* Secondary badges: pill row below preamble */
20
+ .rf-decision__header-secondary {
21
+ margin-bottom: 1.5rem;
22
+ }
23
+
24
+ .rf-decision__body {
25
+ font-size: 0.925rem;
26
+ line-height: 1.65;
27
+ }
28
+ .rf-decision__body > section {
15
29
  margin-top: 1rem;
16
30
  padding-top: 0.75rem;
17
31
  border-top: 1px solid var(--rf-color-border);
18
32
  }
19
- .rf-decision__body > div > section:first-child {
33
+ .rf-decision__body > section:first-child {
20
34
  margin-top: 0.75rem;
21
35
  }
@@ -1,9 +1,10 @@
1
1
  /* Diagram */
2
2
  .rf-diagram {
3
- border: 1px solid var(--rf-color-border);
3
+ display: block;
4
4
  border-radius: var(--rf-radius-lg);
5
5
  padding: 1.5rem;
6
6
  text-align: center;
7
+ overflow: hidden;
7
8
  }
8
9
  .rf-diagram__title {
9
10
  font-weight: 600;
@@ -24,3 +25,16 @@
24
25
  font-size: 0.875rem;
25
26
  margin: 0;
26
27
  }
28
+
29
+ /* Mermaid SVG overrides */
30
+ .rf-diagram__container .label {
31
+ font-family: var(--rf-font-sans) !important;
32
+ color: var(--rf-color-text) !important;
33
+ }
34
+ .rf-diagram__container .edgeLabel {
35
+ background-color: var(--rf-color-surface) !important;
36
+ }
37
+ .rf-diagram__container .marker {
38
+ fill: var(--rf-color-muted) !important;
39
+ stroke: var(--rf-color-muted) !important;
40
+ }
@@ -1,5 +1,6 @@
1
1
  /* Embed */
2
2
  .rf-embed {
3
+ margin: 0;
3
4
  padding: 0;
4
5
  }
5
6
  .rf-embed__wrapper {
@@ -14,7 +14,7 @@
14
14
  font-weight: 500;
15
15
  font-size: 0.875rem;
16
16
  text-decoration: none;
17
- margin-left: auto;
17
+ margin-top: 1.5rem;
18
18
  }
19
19
  .rf-event__register:hover {
20
20
  background: var(--rf-color-primary-hover);
@@ -122,35 +122,36 @@
122
122
  /* ─── Toggle bar (injected by behavior) ─── */
123
123
  .rf-juxtapose__toggle-bar {
124
124
  display: flex;
125
- gap: 0.25rem;
126
- padding: 0.25rem;
125
+ gap: 0.125rem;
126
+ padding: 0.125rem;
127
127
  margin-bottom: 0.75rem;
128
- background: var(--rf-color-surface);
129
- border: 1px solid var(--rf-color-border);
130
- border-radius: var(--rf-radius-md);
128
+ background: var(--rf-color-surface-active);
129
+ border-radius: var(--rf-radius-full);
131
130
  width: fit-content;
132
131
  }
133
132
 
134
- .rf-juxtapose__toggle-btn {
135
- padding: 0.375rem 1rem;
133
+ .rf-juxtapose__toggle-btn,
134
+ .rf-juxtapose__toggle-btn[data-state] {
135
+ padding: 0.25rem 0.75rem;
136
136
  border: none;
137
- border-radius: var(--rf-radius-sm);
137
+ border-radius: var(--rf-radius-full);
138
138
  background: transparent;
139
139
  color: var(--rf-color-muted);
140
- font-size: 0.875rem;
140
+ font-size: 0.75rem;
141
141
  font-weight: 500;
142
142
  cursor: pointer;
143
- transition: background 0.15s, color 0.15s;
143
+ transition: background 150ms ease, color 150ms ease;
144
144
  }
145
145
 
146
146
  .rf-juxtapose__toggle-btn:hover {
147
147
  color: var(--rf-color-text);
148
148
  }
149
149
 
150
- .rf-juxtapose__toggle-btn--active {
151
- background: var(--rf-color-bg, #fff);
150
+ .rf-juxtapose__toggle-btn--active,
151
+ .rf-juxtapose__toggle-btn[data-state="active"] {
152
+ background: var(--rf-color-bg);
152
153
  color: var(--rf-color-text);
153
- box-shadow: var(--rf-shadow-sm);
154
+ box-shadow: var(--rf-shadow-xs);
154
155
  }
155
156
 
156
157
  /* ─── Fade variant cursor hint ─── */
@@ -36,9 +36,17 @@
36
36
 
37
37
  /* Wrap mode — float-based text wrapping */
38
38
  .rf-mediatext[data-wrap="true"] .rf-mediatext__media {
39
- max-width: 50%;
40
39
  margin-bottom: 1rem;
41
40
  }
41
+ .rf-mediatext[data-ratio="1:1"][data-wrap="true"] .rf-mediatext__media {
42
+ max-width: 50%;
43
+ }
44
+ .rf-mediatext[data-ratio="1:2"][data-wrap="true"] .rf-mediatext__media {
45
+ max-width: 33.333%;
46
+ }
47
+ .rf-mediatext[data-ratio="2:1"][data-wrap="true"] .rf-mediatext__media {
48
+ max-width: 66.666%;
49
+ }
42
50
  .rf-mediatext--left[data-wrap="true"] .rf-mediatext__media {
43
51
  float: left;
44
52
  margin-right: 2rem;
@@ -1,4 +1,26 @@
1
1
  /* Milestone */
2
+
3
+ /* Primary badges: name left, status right */
4
+ .rf-milestone__header-primary {
5
+ justify-content: space-between;
6
+ margin-bottom: 0.75rem;
7
+ }
8
+
9
+ /* Preamble: title + optional description between badge groups */
10
+ .rf-milestone__preamble {
11
+ margin-bottom: 0.75rem;
12
+ }
13
+ .rf-milestone__title h1,
14
+ .rf-milestone__title h2,
15
+ .rf-milestone__title h3 {
16
+ margin-top: 0;
17
+ }
18
+
19
+ /* Secondary badges: pill row below preamble */
20
+ .rf-milestone__header-secondary {
21
+ margin-bottom: 1.5rem;
22
+ }
23
+
2
24
  .rf-milestone__target-badge {
3
25
  margin-left: auto;
4
26
  }
@@ -6,14 +28,6 @@
6
28
  font-size: 0.925rem;
7
29
  line-height: 1.65;
8
30
  }
9
- .rf-milestone__body > header {
10
- margin-bottom: 0.75rem;
11
- }
12
- .rf-milestone__body > header h1,
13
- .rf-milestone__body > header h2,
14
- .rf-milestone__body > header h3 {
15
- margin-top: 0;
16
- }
17
31
  .rf-milestone__body ul {
18
32
  padding-left: 1.5rem;
19
33
  }
@@ -0,0 +1,88 @@
1
+ /* Plan Entity Tabs — page-level tab navigation for spec/work/bug/decision pages */
2
+
3
+ .rf-plan-entity-tabs {
4
+ margin-block-start: var(--rf-spacing-lg, 1.5rem);
5
+ }
6
+
7
+ /* Tab bar — underline style matching the core tabs rune */
8
+ .rf-plan-entity-tabs__tabs {
9
+ display: flex;
10
+ border-bottom: 1px solid var(--rf-color-border, #dee2e6);
11
+ gap: 0;
12
+ }
13
+
14
+ /* Tab buttons */
15
+ .rf-plan-entity-tabs__tab {
16
+ flex: 0 0 auto;
17
+ padding: 0.625rem 1.25rem;
18
+ font-size: 0.875rem;
19
+ font-weight: 500;
20
+ font-family: inherit;
21
+ color: var(--rf-color-muted, #868e96);
22
+ background: none;
23
+ border: none;
24
+ border-bottom: 2px solid transparent;
25
+ cursor: pointer;
26
+ transition: color 200ms ease, border-color 200ms ease;
27
+ white-space: nowrap;
28
+ }
29
+
30
+ .rf-plan-entity-tabs__tab:hover {
31
+ color: var(--rf-color-text, #212529);
32
+ }
33
+
34
+ .rf-plan-entity-tabs__tab--active,
35
+ .rf-plan-entity-tabs__tab[data-state="active"] {
36
+ color: var(--rf-color-primary, #228be6);
37
+ border-bottom-color: var(--rf-color-primary, #228be6);
38
+ font-weight: 600;
39
+ }
40
+
41
+ /* Panels container */
42
+ .rf-plan-entity-tabs__panels {
43
+ padding: 0;
44
+ margin: 0;
45
+ }
46
+
47
+ /* Individual panel */
48
+ .rf-plan-entity-tabs__panel {
49
+ padding-block-start: var(--rf-spacing-lg, 1.5rem);
50
+ }
51
+
52
+ .rf-plan-entity-tabs__panel > *:first-child {
53
+ margin-top: 0;
54
+ }
55
+
56
+ .rf-plan-entity-tabs__panel > *:last-child {
57
+ margin-bottom: 0;
58
+ }
59
+
60
+ /* When inside entity tabs, relationships and history sections don't need
61
+ their own heading — the tab label provides the context */
62
+ .rf-plan-entity-tabs__panel .rf-plan-relationships__heading,
63
+ .rf-plan-entity-tabs__panel .rf-plan-history__heading {
64
+ display: none;
65
+ }
66
+
67
+ /* Remove top margin, padding, and border from relationships/history sections when inside a tab panel */
68
+ .rf-plan-entity-tabs__panel .rf-plan-relationships,
69
+ .rf-plan-entity-tabs__panel .rf-plan-history {
70
+ margin-block-start: 0;
71
+ padding-block-start: 0;
72
+ border-block-start: none;
73
+ }
74
+
75
+ /* ---- TOC dimming when non-Overview tab is active ---- */
76
+
77
+ /* Desktop TOC: dim when a non-overview tab is active */
78
+ :has([data-active-tab]:not([data-active-tab="overview"])) .rf-plan-toc {
79
+ opacity: 0.3;
80
+ pointer-events: none;
81
+ transition: opacity 200ms ease;
82
+ }
83
+
84
+ :has([data-active-tab="overview"]) .rf-plan-toc {
85
+ opacity: 1;
86
+ pointer-events: auto;
87
+ transition: opacity 200ms ease;
88
+ }
@@ -0,0 +1,197 @@
1
+ /* Plan History — vertical timeline (mirrors .rf-timeline--vertical) */
2
+
3
+ .rf-plan-history {
4
+ margin: 2rem 0;
5
+ }
6
+ .rf-plan-history__heading {
7
+ font-size: 1.05rem;
8
+ font-weight: 700;
9
+ color: var(--rf-color-text);
10
+ margin: 0 0 1rem;
11
+ }
12
+
13
+ /* Event list — vertical line */
14
+ .rf-plan-history__events {
15
+ list-style: none;
16
+ padding: 0;
17
+ margin: 0;
18
+ }
19
+
20
+ /* Each event entry — left-padded with border line */
21
+ .rf-plan-history__event {
22
+ position: relative;
23
+ padding-left: 2rem;
24
+ padding-bottom: 2rem;
25
+ border-left: 2px solid var(--rf-color-border);
26
+ margin-left: 0.375rem;
27
+ }
28
+ .rf-plan-history__event:last-child {
29
+ border-left-color: transparent;
30
+ padding-bottom: 0;
31
+ }
32
+
33
+ /* Circle markers on the timeline line */
34
+ .rf-plan-history__event::before {
35
+ content: '';
36
+ position: absolute;
37
+ left: -0.4375rem;
38
+ top: 0.25rem;
39
+ width: 0.75rem;
40
+ height: 0.75rem;
41
+ border-radius: 50%;
42
+ background: var(--rf-color-primary);
43
+ border: 2px solid var(--rf-color-bg);
44
+ box-shadow: 0 0 0 2px var(--rf-color-primary);
45
+ }
46
+
47
+ /* Open circle for creation events */
48
+ .rf-plan-history__event[data-kind="created"]::before {
49
+ background: var(--rf-color-bg);
50
+ }
51
+
52
+ /* Date + hash header */
53
+ .rf-plan-history__date {
54
+ display: inline;
55
+ font-size: 0.8rem;
56
+ font-weight: 600;
57
+ color: var(--rf-color-primary);
58
+ letter-spacing: 0.02em;
59
+ margin-right: 0.5rem;
60
+ }
61
+ .rf-plan-history__hash {
62
+ font-family: var(--rf-font-mono);
63
+ font-size: 0.75rem;
64
+ color: var(--rf-color-muted);
65
+ text-decoration: none;
66
+ }
67
+ a.rf-plan-history__hash:hover {
68
+ color: var(--rf-color-primary);
69
+ text-decoration: underline;
70
+ }
71
+
72
+ /* Changes block */
73
+ .rf-plan-history__changes {
74
+ margin-top: 0.25rem;
75
+ }
76
+ .rf-plan-history__change {
77
+ display: flex;
78
+ align-items: center;
79
+ gap: 0.25rem;
80
+ font-size: 0.925rem;
81
+ line-height: 1.65;
82
+ color: var(--rf-color-muted);
83
+ }
84
+ .rf-plan-history__field {
85
+ font-weight: 500;
86
+ color: var(--rf-color-text);
87
+ }
88
+ .rf-plan-history__field::after {
89
+ content: ':';
90
+ }
91
+ .rf-plan-history__arrow {
92
+ color: var(--rf-color-muted);
93
+ margin-inline: 0.125rem;
94
+ }
95
+
96
+ /* Value badges (add/remove) */
97
+ .rf-plan-history__value {
98
+ font-size: 0.875rem;
99
+ padding: 0.0625rem 0.375rem;
100
+ border-radius: var(--rf-radius-sm);
101
+ }
102
+ .rf-plan-history__value[data-type="add"] {
103
+ background: var(--rf-color-success-bg);
104
+ color: var(--rf-color-success);
105
+ }
106
+ .rf-plan-history__value[data-type="remove"] {
107
+ background: var(--rf-color-danger-bg);
108
+ color: var(--rf-color-danger);
109
+ text-decoration: line-through;
110
+ }
111
+
112
+ /* Event kind labels */
113
+ .rf-plan-history__created {
114
+ font-size: 0.925rem;
115
+ color: var(--rf-color-muted);
116
+ }
117
+ .rf-plan-history__resolution,
118
+ .rf-plan-history__content-edit {
119
+ font-size: 0.925rem;
120
+ color: var(--rf-color-muted);
121
+ font-style: italic;
122
+ }
123
+
124
+ /* Criteria list */
125
+ .rf-plan-history__criteria {
126
+ list-style: none;
127
+ padding: 0;
128
+ margin: 0.25rem 0 0;
129
+ }
130
+ .rf-plan-history__criteria li {
131
+ font-size: 0.8125rem;
132
+ line-height: 1.65;
133
+ color: var(--rf-color-text);
134
+ }
135
+ .rf-plan-history__criteria li[data-action="checked"] {
136
+ color: var(--rf-color-success);
137
+ }
138
+ .rf-plan-history__criteria li[data-action="unchecked"] {
139
+ color: var(--rf-color-danger);
140
+ }
141
+ .rf-plan-history__criteria li[data-action="removed"] {
142
+ color: var(--rf-color-danger);
143
+ text-decoration: line-through;
144
+ }
145
+
146
+ /* Collapse / empty */
147
+ .rf-plan-history__more {
148
+ color: var(--rf-color-muted);
149
+ font-style: italic;
150
+ cursor: pointer;
151
+ }
152
+ .rf-plan-history__empty {
153
+ color: var(--rf-color-muted);
154
+ font-style: italic;
155
+ }
156
+
157
+ /* Global feed (commit-grouped) */
158
+ .rf-plan-history--global .rf-plan-history__commit-message {
159
+ display: block;
160
+ font-size: 1.05rem;
161
+ font-weight: 700;
162
+ color: var(--rf-color-text);
163
+ margin-top: 0.25rem;
164
+ margin-bottom: 0.5rem;
165
+ }
166
+ .rf-plan-history--global .rf-plan-history__entity-summary {
167
+ display: flex;
168
+ align-items: baseline;
169
+ gap: 0.5rem;
170
+ font-size: 0.8125rem;
171
+ line-height: 1.65;
172
+ }
173
+ .rf-plan-history--global .rf-plan-history__entity-id {
174
+ font-weight: 600;
175
+ font-family: var(--rf-font-mono);
176
+ font-size: 0.75rem;
177
+ color: var(--rf-color-primary);
178
+ white-space: nowrap;
179
+ }
180
+ .rf-plan-history--global .rf-plan-history__entity-changes {
181
+ color: var(--rf-color-muted);
182
+ }
183
+
184
+ /* Responsive */
185
+ @media (max-width: 640px) {
186
+ .rf-plan-history__event {
187
+ padding-left: 1.25rem;
188
+ }
189
+ .rf-plan-history__event::before {
190
+ width: 0.625rem;
191
+ height: 0.625rem;
192
+ left: -0.375rem;
193
+ }
194
+ .rf-plan-history__change {
195
+ flex-wrap: wrap;
196
+ }
197
+ }
@@ -0,0 +1,26 @@
1
+ /* Plan cross-reference links */
2
+
3
+ .rf-plan-ref {
4
+ font-family: var(--rf-font-mono, ui-monospace, monospace);
5
+ font-size: 0.8125rem;
6
+ color: var(--rf-color-info, #339af0);
7
+ text-decoration: none;
8
+ border-bottom: 1px dashed var(--rf-color-info, #339af0);
9
+ padding-inline: 0.25rem;
10
+ }
11
+
12
+ .rf-plan-ref:hover {
13
+ background: var(--rf-color-info-bg, #e7f5ff);
14
+ border-radius: var(--rf-radius-sm, 0.25rem);
15
+ border-bottom-color: transparent;
16
+ }
17
+
18
+ .rf-plan-ref::before {
19
+ margin-inline-end: 0.25rem;
20
+ }
21
+
22
+ .rf-plan-ref[data-type="spec"]::before { content: '\1F4CB'; }
23
+ .rf-plan-ref[data-type="work"]::before { content: '\1F527'; }
24
+ .rf-plan-ref[data-type="bug"]::before { content: '\1F41B'; }
25
+ .rf-plan-ref[data-type="decision"]::before { content: '\2696\FE0F'; }
26
+ .rf-plan-ref[data-type="milestone"]::before { content: '\1F3AF'; }
@@ -0,0 +1,40 @@
1
+ /* Plan relationships section */
2
+
3
+ .rf-plan-relationships {
4
+ margin-top: 2rem;
5
+ padding-top: 1.5rem;
6
+ border-top: 1px solid var(--rf-color-border, #dee2e6);
7
+ }
8
+
9
+ .rf-plan-relationships__heading {
10
+ font-size: 1.125rem;
11
+ font-weight: 600;
12
+ color: var(--rf-color-text, #212529);
13
+ margin: 0 0 1rem;
14
+ }
15
+
16
+ .rf-plan-relationships__group {
17
+ margin-bottom: 1rem;
18
+ }
19
+
20
+ .rf-plan-relationships__group-title {
21
+ font-size: 0.8125rem;
22
+ font-weight: 600;
23
+ text-transform: uppercase;
24
+ letter-spacing: 0.04em;
25
+ color: var(--rf-color-muted, #6c757d);
26
+ margin: 0 0 0.375rem;
27
+ }
28
+
29
+ .rf-plan-relationships__group[data-kind="blocked-by"] .rf-plan-relationships__group-title {
30
+ color: var(--rf-color-danger, #ff6b6b);
31
+ }
32
+
33
+ .rf-plan-relationships__group[data-kind="blocks"] .rf-plan-relationships__group-title {
34
+ color: var(--rf-color-warning, #f59f00);
35
+ }
36
+
37
+ .rf-plan-relationships__cards {
38
+ display: flex;
39
+ flex-direction: column;
40
+ }
@@ -1,16 +1,30 @@
1
1
  /* Spec */
2
- .rf-spec__body {
3
- font-size: 0.925rem;
4
- line-height: 1.65;
2
+
3
+ /* Primary badges: ID left, status right */
4
+ .rf-spec__header-primary {
5
+ justify-content: space-between;
6
+ margin-bottom: 0.75rem;
5
7
  }
6
- .rf-spec__body > header {
8
+
9
+ /* Preamble: title + optional summary between badge groups */
10
+ .rf-spec__preamble {
7
11
  margin-bottom: 0.75rem;
8
12
  }
9
- .rf-spec__body > header h1,
10
- .rf-spec__body > header h2,
11
- .rf-spec__body > header h3 {
13
+ .rf-spec__title h1,
14
+ .rf-spec__title h2,
15
+ .rf-spec__title h3 {
12
16
  margin-top: 0;
13
17
  }
18
+
19
+ /* Secondary badges: pill row below preamble */
20
+ .rf-spec__header-secondary {
21
+ margin-bottom: 1.5rem;
22
+ }
23
+
24
+ .rf-spec__body {
25
+ font-size: 0.925rem;
26
+ line-height: 1.65;
27
+ }
14
28
  .rf-spec__body blockquote {
15
29
  border-left: 3px solid var(--rf-color-border);
16
30
  padding: 0.5rem 1rem;