@refrakt-md/lumina 0.5.1 → 0.7.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.
package/dist/config.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Lumina theme configuration — extends base with icon SVGs */
2
- export declare const luminaConfig: import("@refrakt-md/theme-base").ThemeConfig;
2
+ export declare const luminaConfig: import("@refrakt-md/transform").ThemeConfig;
3
3
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAC/D,eAAO,MAAM,YAAY,8CAUvB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,+DAA+D;AAC/D,eAAO,MAAM,YAAY,6CAUvB,CAAC"}
package/dist/config.js CHANGED
@@ -1,4 +1,5 @@
1
- import { baseConfig, mergeThemeConfig } from '@refrakt-md/theme-base';
1
+ import { baseConfig } from '@refrakt-md/runes';
2
+ import { mergeThemeConfig } from '@refrakt-md/transform';
2
3
  import { icons as lucideIcons } from './icons.js';
3
4
  /** Lumina theme configuration — extends base with icon SVGs */
4
5
  export const luminaConfig = mergeThemeConfig(baseConfig, {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAElD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,EAAE;IACxD,KAAK,EAAE;QACN,IAAI,EAAE;YACL,IAAI,EAAE,4SAA4S;YAClT,OAAO,EAAE,iXAAiX;YAC1X,OAAO,EAAE,uSAAuS;YAChT,KAAK,EAAE,qRAAqR;SAC5R;QACD,MAAM,EAAE,WAAW;KACnB;CACD,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAElD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,EAAE;IACxD,KAAK,EAAE;QACN,IAAI,EAAE;YACL,IAAI,EAAE,4SAA4S;YAClT,OAAO,EAAE,iXAAiX;YAC1X,OAAO,EAAE,uSAAuS;YAChT,KAAK,EAAE,qRAAqR;SAC5R;QACD,MAAM,EAAE,WAAW;KACnB;CACD,CAAC,CAAC"}
package/index.css CHANGED
@@ -17,14 +17,20 @@
17
17
  @import './styles/layouts/default.css';
18
18
  @import './styles/layouts/docs.css';
19
19
  @import './styles/layouts/blog.css';
20
+ @import './styles/layouts/on-this-page.css';
21
+ @import './styles/layouts/search.css';
22
+ @import './styles/layouts/version-switcher.css';
20
23
 
21
24
  /* Runes */
22
25
  @import './styles/runes/accordion.css';
23
26
  @import './styles/runes/annotate.css';
24
27
  @import './styles/runes/api.css';
25
28
  @import './styles/runes/bento.css';
29
+ @import './styles/runes/bond.css';
26
30
  @import './styles/runes/breadcrumb.css';
31
+ @import './styles/runes/budget.css';
27
32
  @import './styles/runes/cast.css';
33
+ @import './styles/runes/character.css';
28
34
  @import './styles/runes/changelog.css';
29
35
  @import './styles/runes/chart.css';
30
36
  @import './styles/runes/compare.css';
@@ -38,6 +44,7 @@
38
44
  @import './styles/runes/codegroup.css';
39
45
  @import './styles/runes/embed.css';
40
46
  @import './styles/runes/event.css';
47
+ @import './styles/runes/faction.css';
41
48
  @import './styles/runes/feature.css';
42
49
  @import './styles/runes/figure.css';
43
50
  @import './styles/runes/form.css';
@@ -45,13 +52,17 @@
45
52
  @import './styles/runes/hero.css';
46
53
  @import './styles/runes/hint.css';
47
54
  @import './styles/runes/howto.css';
55
+ @import './styles/runes/lore.css';
56
+ @import './styles/runes/itinerary.css';
48
57
  @import './styles/runes/map.css';
49
58
  @import './styles/runes/nav.css';
50
59
  @import './styles/runes/organization.css';
51
60
  @import './styles/runes/page-section.css';
61
+ @import './styles/runes/plot.css';
52
62
  @import './styles/runes/preview.css';
53
63
  @import './styles/runes/pricing.css';
54
64
  @import './styles/runes/sandbox.css';
65
+ @import './styles/runes/realm.css';
55
66
  @import './styles/runes/recipe.css';
56
67
  @import './styles/runes/reveal.css';
57
68
  @import './styles/runes/sidenote.css';
@@ -67,3 +78,6 @@
67
78
  @import './styles/runes/typography.css';
68
79
  @import './styles/runes/spacing.css';
69
80
  @import './styles/runes/design-context.css';
81
+ @import './styles/runes/pullquote.css';
82
+ @import './styles/runes/textblock.css';
83
+ @import './styles/runes/mediatext.css';
package/manifest.json CHANGED
@@ -9,5 +9,17 @@
9
9
  "attribute": "data-theme",
10
10
  "values": { "dark": "dark", "light": "light" },
11
11
  "systemPreference": true
12
+ },
13
+ "layouts": {
14
+ "default": {
15
+ "regions": ["header", "footer"]
16
+ },
17
+ "docs": {
18
+ "regions": ["header", "nav", "sidebar", "footer"],
19
+ "requiredRegions": ["nav"]
20
+ },
21
+ "blog": {
22
+ "regions": ["header", "sidebar", "footer"]
23
+ }
12
24
  }
13
25
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@refrakt-md/lumina",
3
3
  "description": "Lumina theme for refrakt.md — design tokens, CSS, identity transform, and framework adapters",
4
- "version": "0.5.1",
4
+ "version": "0.7.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -46,10 +46,10 @@
46
46
  "build": "tsc"
47
47
  },
48
48
  "dependencies": {
49
- "@refrakt-md/theme-base": "0.5.1",
50
- "@refrakt-md/transform": "0.5.1",
51
- "@refrakt-md/types": "0.5.1",
52
- "@refrakt-md/svelte": "0.5.1"
49
+ "@refrakt-md/runes": "0.7.0",
50
+ "@refrakt-md/transform": "0.7.0",
51
+ "@refrakt-md/types": "0.7.0",
52
+ "@refrakt-md/svelte": "0.7.0"
53
53
  },
54
54
  "peerDependencies": {
55
55
  "svelte": "^5.0.0",
@@ -7,9 +7,18 @@
7
7
  .rf-blog-header__inner {
8
8
  display: flex;
9
9
  align-items: center;
10
- justify-content: space-between;
10
+ gap: 1rem;
11
11
  padding: 1.125rem 1.5rem;
12
12
  }
13
+ .rf-blog-header__inner .rf-search-trigger {
14
+ margin-left: auto;
15
+ }
16
+ .rf-blog-header__inner p ~ p {
17
+ order: 1;
18
+ }
19
+ .rf-blog-header__inner .rf-mobile-menu-btn {
20
+ order: 2;
21
+ }
13
22
  .rf-blog-header p {
14
23
  margin: 0;
15
24
  line-height: 1;
@@ -5,9 +5,18 @@
5
5
  .rf-header__inner {
6
6
  display: flex;
7
7
  align-items: center;
8
- justify-content: space-between;
8
+ gap: 1rem;
9
9
  padding: 1.125rem 1.5rem;
10
10
  }
11
+ .rf-header__inner .rf-search-trigger {
12
+ margin-left: auto;
13
+ }
14
+ .rf-header__inner p ~ p {
15
+ order: 1;
16
+ }
17
+ .rf-header__inner .rf-mobile-menu-btn {
18
+ order: 2;
19
+ }
11
20
  .rf-header p {
12
21
  margin: 0;
13
22
  line-height: 1;
@@ -13,9 +13,18 @@
13
13
  .rf-docs-header__inner {
14
14
  display: flex;
15
15
  align-items: center;
16
- justify-content: space-between;
16
+ gap: 1rem;
17
17
  padding: 1.125rem 1.5rem;
18
18
  }
19
+ .rf-docs-header__inner .rf-search-trigger {
20
+ margin-left: auto;
21
+ }
22
+ .rf-docs-header__inner p ~ p {
23
+ order: 1;
24
+ }
25
+ .rf-docs-header__inner .rf-mobile-menu-btn {
26
+ order: 2;
27
+ }
19
28
  .rf-docs-header p {
20
29
  margin: 0;
21
30
  line-height: 1;
@@ -88,6 +97,41 @@
88
97
  padding: 0 2.5rem;
89
98
  --rf-content-padding: 2.5rem;
90
99
  }
100
+ .rf-docs-content__inner--has-toc {
101
+ display: flex;
102
+ gap: 6rem;
103
+ max-width: calc(60rem + 220px + 6rem);
104
+ }
105
+ .rf-docs-content__inner--has-toc .rf-docs-content__body {
106
+ flex: 1;
107
+ min-width: 0;
108
+ }
109
+
110
+ /* ---- "On this page" sidebar ---- */
111
+ .rf-docs-toc {
112
+ width: 220px;
113
+ flex-shrink: 0;
114
+ position: sticky;
115
+ top: 5.75rem;
116
+ align-self: flex-start;
117
+ max-height: calc(100vh - 5.75rem);
118
+ overflow-y: auto;
119
+ padding: 0 1.25rem;
120
+ }
121
+ .rf-docs-toc::-webkit-scrollbar {
122
+ width: 0;
123
+ }
124
+
125
+ /* ---- Smooth scroll with fixed-header offset ---- */
126
+ html:has(.rf-docs-header) {
127
+ scroll-behavior: smooth;
128
+ scroll-padding-top: 5rem;
129
+ }
130
+ @media (prefers-reduced-motion: reduce) {
131
+ html:has(.rf-docs-header) {
132
+ scroll-behavior: auto;
133
+ }
134
+ }
91
135
 
92
136
  /* ---- Mobile toolbar (hidden on desktop) ---- */
93
137
  .rf-docs-toolbar {
@@ -130,6 +174,17 @@
130
174
  font-weight: 500;
131
175
  }
132
176
 
177
+ /* ---- Hide TOC on medium screens ---- */
178
+ @media (max-width: 1100px) {
179
+ .rf-docs-toc {
180
+ display: none;
181
+ }
182
+ .rf-docs-content__inner--has-toc {
183
+ display: block;
184
+ max-width: 60rem;
185
+ }
186
+ }
187
+
133
188
  /* ---- Mobile overrides ---- */
134
189
  @media (max-width: 768px) {
135
190
  .rf-docs-header {
@@ -74,11 +74,13 @@
74
74
  padding: 1rem 1.5rem;
75
75
  }
76
76
 
77
+ /* Panel opens via data-open attribute (set by mobile-menu behavior) */
78
+ .rf-mobile-panel[data-open] {
79
+ display: block;
80
+ }
81
+
77
82
  @media (max-width: 768px) {
78
83
  .rf-mobile-menu-btn {
79
84
  display: block;
80
85
  }
81
- .rf-mobile-panel {
82
- display: block;
83
- }
84
86
  }
@@ -0,0 +1,48 @@
1
+ /* On This Page — TOC sidebar navigation */
2
+
3
+ .rf-on-this-page {
4
+ font-size: 0.8rem;
5
+ }
6
+
7
+ .rf-on-this-page__title {
8
+ font-size: 0.7rem;
9
+ font-weight: 600;
10
+ text-transform: uppercase;
11
+ letter-spacing: 0.05em;
12
+ color: var(--rf-color-muted, #64748b);
13
+ margin: 0 0 0.75rem;
14
+ }
15
+
16
+ .rf-on-this-page__list {
17
+ list-style: none;
18
+ margin: 0;
19
+ padding: 0;
20
+ }
21
+
22
+ .rf-on-this-page__item {
23
+ border-left: 2px solid transparent;
24
+ }
25
+
26
+ .rf-on-this-page__item[data-level="3"] {
27
+ padding-left: 0.75rem;
28
+ }
29
+
30
+ .rf-on-this-page__item a {
31
+ display: block;
32
+ padding: 0.25rem 0.75rem;
33
+ color: var(--rf-color-muted, #64748b);
34
+ text-decoration: none;
35
+ line-height: 1.4;
36
+ }
37
+
38
+ .rf-on-this-page__item a:hover {
39
+ color: var(--rf-color-text, #1a1a2e);
40
+ }
41
+
42
+ .rf-on-this-page__item[data-active] {
43
+ border-left-color: var(--rf-color-primary, #0ea5e9);
44
+ }
45
+
46
+ .rf-on-this-page__item[data-active] a {
47
+ color: var(--rf-color-primary, #0ea5e9);
48
+ }
@@ -0,0 +1,210 @@
1
+ /* Search trigger button */
2
+ .rf-search-trigger {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ gap: 0.5rem;
6
+ padding: 0.375rem 0.625rem 0.375rem 0.5rem;
7
+ border: 1px solid var(--rf-color-border);
8
+ border-radius: var(--rf-radius-full);
9
+ background: var(--rf-color-surface);
10
+ color: var(--rf-color-muted);
11
+ font-size: 0.8rem;
12
+ font-family: var(--rf-font-sans);
13
+ cursor: pointer;
14
+ transition: border-color 0.15s, color 0.15s, background 0.15s;
15
+ line-height: 1;
16
+ white-space: nowrap;
17
+ flex-shrink: 0;
18
+ }
19
+ .rf-search-trigger:hover {
20
+ border-color: var(--rf-color-primary);
21
+ color: var(--rf-color-text);
22
+ background: var(--rf-color-surface-hover);
23
+ }
24
+ .rf-search-trigger svg {
25
+ width: 16px;
26
+ height: 16px;
27
+ flex-shrink: 0;
28
+ }
29
+ .rf-search-trigger__label {
30
+ pointer-events: none;
31
+ }
32
+ .rf-search-trigger__kbd {
33
+ display: inline-flex;
34
+ align-items: center;
35
+ padding: 0.125rem 0.375rem;
36
+ border: 1px solid var(--rf-color-border);
37
+ border-radius: var(--rf-radius-sm);
38
+ background: var(--rf-color-bg);
39
+ font-family: var(--rf-font-sans);
40
+ font-size: 0.7rem;
41
+ line-height: 1.2;
42
+ color: var(--rf-color-muted);
43
+ }
44
+
45
+ /* Search dialog */
46
+ .rf-search-dialog {
47
+ position: fixed;
48
+ top: 15vh;
49
+ left: 50%;
50
+ transform: translateX(-50%);
51
+ width: min(560px, calc(100vw - 2rem));
52
+ max-height: 70vh;
53
+ margin: 0;
54
+ padding: 0;
55
+ border: 1px solid var(--rf-color-border);
56
+ border-radius: var(--rf-radius-lg);
57
+ background: var(--rf-color-bg);
58
+ box-shadow: var(--rf-shadow-lg);
59
+ overflow: hidden;
60
+ font-family: var(--rf-font-sans);
61
+ }
62
+ .rf-search-dialog[open] {
63
+ display: flex;
64
+ flex-direction: column;
65
+ }
66
+ .rf-search-dialog::backdrop {
67
+ background: rgba(0, 0, 0, 0.4);
68
+ }
69
+
70
+ /* Dialog header */
71
+ .rf-search-dialog__header {
72
+ display: flex;
73
+ align-items: center;
74
+ gap: 0.75rem;
75
+ padding: 0.875rem 1rem;
76
+ border-bottom: 1px solid var(--rf-color-border);
77
+ }
78
+ .rf-search-dialog__icon {
79
+ flex-shrink: 0;
80
+ color: var(--rf-color-muted);
81
+ }
82
+ .rf-search-dialog__input {
83
+ flex: 1;
84
+ border: none;
85
+ outline: none;
86
+ background: transparent;
87
+ font-size: 1rem;
88
+ font-family: var(--rf-font-sans);
89
+ color: var(--rf-color-text);
90
+ }
91
+ .rf-search-dialog__input::placeholder {
92
+ color: var(--rf-color-muted);
93
+ }
94
+ /* Hide native search clear button */
95
+ .rf-search-dialog__input::-webkit-search-cancel-button {
96
+ display: none;
97
+ }
98
+ .rf-search-dialog__esc {
99
+ display: inline-flex;
100
+ align-items: center;
101
+ padding: 0.125rem 0.375rem;
102
+ border: 1px solid var(--rf-color-border);
103
+ border-radius: var(--rf-radius-sm);
104
+ background: var(--rf-color-surface);
105
+ font-family: var(--rf-font-sans);
106
+ font-size: 0.7rem;
107
+ color: var(--rf-color-muted);
108
+ flex-shrink: 0;
109
+ }
110
+
111
+ /* Dialog body */
112
+ .rf-search-dialog__body {
113
+ flex: 1;
114
+ overflow-y: auto;
115
+ overscroll-behavior: contain;
116
+ }
117
+
118
+ /* Results */
119
+ .rf-search-dialog__results {
120
+ padding: 0.5rem;
121
+ }
122
+ .rf-search-result {
123
+ display: block;
124
+ padding: 0.625rem 0.75rem;
125
+ border-radius: var(--rf-radius-md);
126
+ text-decoration: none;
127
+ color: var(--rf-color-text);
128
+ cursor: pointer;
129
+ }
130
+ .rf-search-result:hover,
131
+ .rf-search-result[data-active] {
132
+ background: var(--rf-color-surface-hover);
133
+ }
134
+ .rf-search-result__title {
135
+ display: block;
136
+ font-weight: 500;
137
+ font-size: 0.875rem;
138
+ line-height: 1.4;
139
+ margin-bottom: 0.125rem;
140
+ }
141
+ .rf-search-result__excerpt {
142
+ display: block;
143
+ font-size: 0.8rem;
144
+ line-height: 1.5;
145
+ color: var(--rf-color-muted);
146
+ }
147
+ .rf-search-result__excerpt mark {
148
+ background: var(--rf-color-primary-100);
149
+ color: var(--rf-color-primary-700);
150
+ border-radius: 2px;
151
+ padding: 0 1px;
152
+ }
153
+
154
+ /* Empty / unavailable state */
155
+ .rf-search-dialog__empty {
156
+ text-align: center;
157
+ padding: 2rem 1rem;
158
+ font-size: 0.875rem;
159
+ color: var(--rf-color-muted);
160
+ }
161
+
162
+ /* Footer */
163
+ .rf-search-dialog__footer {
164
+ display: flex;
165
+ align-items: center;
166
+ gap: 1rem;
167
+ padding: 0.5rem 1rem;
168
+ border-top: 1px solid var(--rf-color-border);
169
+ font-size: 0.7rem;
170
+ color: var(--rf-color-muted);
171
+ }
172
+ .rf-search-dialog__footer kbd {
173
+ display: inline-flex;
174
+ align-items: center;
175
+ justify-content: center;
176
+ min-width: 1.25rem;
177
+ padding: 0 0.25rem;
178
+ border: 1px solid var(--rf-color-border);
179
+ border-radius: 3px;
180
+ background: var(--rf-color-surface);
181
+ font-family: var(--rf-font-sans);
182
+ font-size: 0.65rem;
183
+ line-height: 1.4;
184
+ }
185
+
186
+ /* Mobile */
187
+ @media (max-width: 768px) {
188
+ .rf-search-trigger__label,
189
+ .rf-search-trigger__kbd {
190
+ display: none;
191
+ }
192
+ .rf-search-trigger {
193
+ padding: 0.375rem;
194
+ border-radius: var(--rf-radius-sm);
195
+ }
196
+ .rf-search-dialog[open] {
197
+ top: 0;
198
+ left: 0;
199
+ right: 0;
200
+ bottom: 0;
201
+ transform: none;
202
+ width: 100%;
203
+ max-height: 100vh;
204
+ border-radius: 0;
205
+ border: none;
206
+ }
207
+ .rf-search-dialog__footer {
208
+ display: none;
209
+ }
210
+ }
@@ -0,0 +1,45 @@
1
+ /* Version Switcher — page-level version dropdown */
2
+
3
+ .rf-version-switcher {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ gap: 0.5rem;
7
+ margin-bottom: 1.5rem;
8
+ font-size: 0.85rem;
9
+ }
10
+
11
+ .rf-version-switcher__label {
12
+ color: var(--rf-color-muted);
13
+ font-weight: 500;
14
+ font-size: 0.8rem;
15
+ text-transform: uppercase;
16
+ letter-spacing: 0.03em;
17
+ }
18
+
19
+ .rf-version-switcher__select {
20
+ appearance: none;
21
+ -webkit-appearance: none;
22
+ background: var(--rf-color-surface);
23
+ border: 1px solid var(--rf-color-border);
24
+ border-radius: var(--rf-radius-sm, 0.25rem);
25
+ color: var(--rf-color-text);
26
+ font-size: 0.85rem;
27
+ font-family: inherit;
28
+ padding: 0.3rem 2rem 0.3rem 0.6rem;
29
+ cursor: pointer;
30
+ line-height: 1.4;
31
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
32
+ background-repeat: no-repeat;
33
+ background-position: right 0.5rem center;
34
+ transition: border-color 150ms ease, box-shadow 150ms ease;
35
+ }
36
+
37
+ .rf-version-switcher__select:hover {
38
+ border-color: var(--rf-color-primary);
39
+ }
40
+
41
+ .rf-version-switcher__select:focus-visible {
42
+ outline: none;
43
+ border-color: var(--rf-color-primary);
44
+ box-shadow: 0 0 0 2px var(--rf-color-primary-100, rgba(14, 165, 233, 0.15));
45
+ }
@@ -0,0 +1,77 @@
1
+ /* Bond */
2
+ .rf-bond {
3
+ display: flex;
4
+ align-items: center;
5
+ gap: 1rem;
6
+ border: 1px solid var(--rf-color-border);
7
+ border-radius: var(--rf-radius-lg);
8
+ padding: 1rem 1.5rem;
9
+ margin: 1rem 0;
10
+ }
11
+ .rf-bond > span[property="from"],
12
+ .rf-bond > span[property="to"] {
13
+ font-weight: 600;
14
+ font-size: 1rem;
15
+ color: var(--rf-color-heading);
16
+ white-space: nowrap;
17
+ }
18
+ .rf-bond__connector {
19
+ display: flex;
20
+ align-items: center;
21
+ flex-shrink: 0;
22
+ }
23
+ .rf-bond__arrow {
24
+ display: inline-block;
25
+ width: 2rem;
26
+ height: 2px;
27
+ background: var(--rf-color-border);
28
+ position: relative;
29
+ }
30
+ .rf-bond__arrow::after {
31
+ content: '';
32
+ position: absolute;
33
+ right: -1px;
34
+ top: 50%;
35
+ transform: translateY(-50%);
36
+ border: 4px solid transparent;
37
+ border-left: 6px solid var(--rf-color-border);
38
+ }
39
+ .rf-bond[data-bidirectional="true"] .rf-bond__arrow::before {
40
+ content: '';
41
+ position: absolute;
42
+ left: -1px;
43
+ top: 50%;
44
+ transform: translateY(-50%);
45
+ border: 4px solid transparent;
46
+ border-right: 6px solid var(--rf-color-border);
47
+ }
48
+ .rf-bond__body {
49
+ flex: 1;
50
+ font-size: 0.875rem;
51
+ color: var(--rf-color-muted);
52
+ }
53
+
54
+ /* Status variants */
55
+ .rf-bond--active .rf-bond__arrow,
56
+ .rf-bond--active .rf-bond__arrow::after {
57
+ border-left-color: var(--rf-color-primary);
58
+ }
59
+ .rf-bond--active .rf-bond__arrow {
60
+ background: var(--rf-color-primary);
61
+ }
62
+ .rf-bond--active[data-bidirectional="true"] .rf-bond__arrow::before {
63
+ border-right-color: var(--rf-color-primary);
64
+ }
65
+
66
+ .rf-bond[data-status="broken"] .rf-bond__arrow {
67
+ background: repeating-linear-gradient(
68
+ 90deg,
69
+ var(--rf-color-muted) 0,
70
+ var(--rf-color-muted) 4px,
71
+ transparent 4px,
72
+ transparent 8px
73
+ );
74
+ }
75
+ .rf-bond[data-status="broken"] {
76
+ opacity: 0.6;
77
+ }