space-data-module-sdk 0.8.14 → 0.8.16

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 (125) hide show
  1. package/bin/space-data-module.js +91 -0
  2. package/docs/_shell/consumer-assets.html +5 -0
  3. package/docs/browser-wasmedge-isomorphic.html +261 -0
  4. package/docs/byo-wasm-quickstart.html +226 -0
  5. package/docs/byo-wasm-quickstart.md +204 -0
  6. package/docs/conformance.html +156 -0
  7. package/docs/conformance.md +92 -0
  8. package/docs/emception-shared-memory-verdict.md +209 -0
  9. package/docs/events-abi.html +313 -0
  10. package/docs/events-abi.md +530 -0
  11. package/docs/families/analytics.html +178 -0
  12. package/docs/families/analytics.md +104 -0
  13. package/docs/families/attitude.html +157 -0
  14. package/docs/families/attitude.md +36 -0
  15. package/docs/families/behavior.html +157 -0
  16. package/docs/families/behavior.md +36 -0
  17. package/docs/families/breakup.html +157 -0
  18. package/docs/families/breakup.md +36 -0
  19. package/docs/families/conjunction.html +186 -0
  20. package/docs/families/conjunction.md +121 -0
  21. package/docs/families/data-source.html +318 -0
  22. package/docs/families/effects.html +157 -0
  23. package/docs/families/effects.md +36 -0
  24. package/docs/families/environment.html +170 -0
  25. package/docs/families/environment.md +73 -0
  26. package/docs/families/estimation.html +190 -0
  27. package/docs/families/estimation.md +128 -0
  28. package/docs/families/gnc.html +157 -0
  29. package/docs/families/gnc.md +36 -0
  30. package/docs/families/maneuver.html +209 -0
  31. package/docs/families/maneuver.md +206 -0
  32. package/docs/families/obstruction.html +191 -0
  33. package/docs/families/obstruction.md +96 -0
  34. package/docs/families/propagator.html +333 -0
  35. package/docs/families/propulsion.html +157 -0
  36. package/docs/families/propulsion.md +36 -0
  37. package/docs/families/reentry.html +157 -0
  38. package/docs/families/reentry.md +36 -0
  39. package/docs/families/rf.html +193 -0
  40. package/docs/families/rf.md +136 -0
  41. package/docs/families/scheduler.html +157 -0
  42. package/docs/families/scheduler.md +36 -0
  43. package/docs/families/sensor.html +157 -0
  44. package/docs/families/sensor.md +36 -0
  45. package/docs/families/signature.html +157 -0
  46. package/docs/families/signature.md +36 -0
  47. package/docs/flatsql-host-contract.html +176 -0
  48. package/docs/flatsql-streaming-standard.html +375 -0
  49. package/docs/gpu-module-abi.html +233 -0
  50. package/docs/harness-family-matrix.md +135 -0
  51. package/docs/index.html +216 -85
  52. package/docs/isomorphic-pthreads.html +228 -0
  53. package/docs/isomorphic-pthreads.md +84 -0
  54. package/docs/isomorphic-sdn-runtime-plan.html +274 -0
  55. package/docs/language-runtime-matrix.html +182 -0
  56. package/docs/llms.txt +86 -0
  57. package/docs/module-bundle-runtime-plan.html +146 -0
  58. package/docs/module-publication-standard.html +503 -0
  59. package/docs/node-red-default-node-parity.html +201 -0
  60. package/docs/propagator-abi.md +73 -21
  61. package/docs/protect-and-sign.html +181 -0
  62. package/docs/protect-and-sign.md +120 -0
  63. package/docs/protocol-installation.html +296 -0
  64. package/docs/publication-submission.html +158 -0
  65. package/docs/publication-submission.md +78 -0
  66. package/docs/secrets-capability.html +206 -0
  67. package/docs/styles.css +860 -167
  68. package/docs/testing-harness.html +408 -0
  69. package/docs/tri-runtime-parity-gate.html +182 -0
  70. package/docs/tri-runtime-parity.html +203 -0
  71. package/include/orbpro/orbpro_event_runner.h +951 -0
  72. package/include/orbpro/orbpro_events_abi.h +565 -0
  73. package/include/orbpro/orbpro_propagator_abi.h +17 -0
  74. package/package.json +15 -5
  75. package/schemas/orbpro/Events.fbs +501 -0
  76. package/schemas/orbpro/Propagator.fbs +72 -9
  77. package/schemas/orbpro/reference-frame-crosswalk.json +108 -0
  78. package/schemas/orbpro/reference-frame.lock.json +98 -0
  79. package/src/browser.js +13 -0
  80. package/src/conformance/abiDriver.js +225 -0
  81. package/src/conformance/index.js +151 -0
  82. package/src/conformance/propagatorSuite.js +526 -0
  83. package/src/conformance/selfTest.js +275 -0
  84. package/src/conformance/selfTestCorpus.js +68 -0
  85. package/src/conformance/twoBodyReference.js +132 -0
  86. package/src/generated/orbpro/events-abi.js +206 -0
  87. package/src/generated/orbpro/events-abi.ts +319 -0
  88. package/src/generated/orbpro/propagator/reference-frame.js +17 -0
  89. package/src/generated/orbpro/propagator/reference-frame.ts +91 -1
  90. package/src/generated/orbpro/propagator-abi.js +17 -0
  91. package/src/generated/orbpro/propagator-abi.ts +17 -0
  92. package/src/generated/spacedatastandards/plg/CCT.d.ts +94 -0
  93. package/src/generated/spacedatastandards/plg/CCT.d.ts.map +1 -0
  94. package/src/generated/spacedatastandards/plg/CCT.js +208 -0
  95. package/src/generated/spacedatastandards/plg/CCT.ts +281 -0
  96. package/src/generated/spacedatastandards/plg/CCTCategory.d.ts +98 -0
  97. package/src/generated/spacedatastandards/plg/CCTCategory.d.ts.map +1 -0
  98. package/src/generated/spacedatastandards/plg/CCTCategory.js +177 -0
  99. package/src/generated/spacedatastandards/plg/CCTCategory.ts +269 -0
  100. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts +54 -0
  101. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts.map +1 -0
  102. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.js +106 -0
  103. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.ts +144 -0
  104. package/src/generated/spacedatastandards/plg/PLG.d.ts +46 -2
  105. package/src/generated/spacedatastandards/plg/PLG.d.ts.map +1 -1
  106. package/src/generated/spacedatastandards/plg/PLG.js +78 -5
  107. package/src/generated/spacedatastandards/plg/PLG.ts +90 -5
  108. package/src/generated/spacedatastandards/plg/capabilityClass.d.ts +181 -0
  109. package/src/generated/spacedatastandards/plg/capabilityClass.d.ts.map +1 -0
  110. package/src/generated/spacedatastandards/plg/capabilityClass.js +183 -0
  111. package/src/generated/spacedatastandards/plg/capabilityClass.ts +208 -0
  112. package/src/generated/spacedatastandards/plg/main.d.ts +4 -0
  113. package/src/generated/spacedatastandards/plg/main.d.ts.map +1 -1
  114. package/src/generated/spacedatastandards/plg/main.js +4 -0
  115. package/src/generated/spacedatastandards/plg/main.ts +4 -0
  116. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts +40 -2
  117. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts.map +1 -1
  118. package/src/generated/spacedatastandards/plg/pluginCategory.js +40 -2
  119. package/src/generated/spacedatastandards/plg/pluginCategory.ts +40 -2
  120. package/src/host/browserModuleHarness.js +8 -0
  121. package/src/host/wasiThreadHost.js +189 -14
  122. package/src/index.d.ts +18 -1
  123. package/src/testing/isomorphicHarness.js +233 -0
  124. package/src/transport/index.js +16 -0
  125. package/src/transport/records.js +1015 -3
package/docs/styles.css CHANGED
@@ -1,288 +1,981 @@
1
+ /* Space Data Module SDK — developer documentation.
2
+ One design system for every page under /docs.
3
+ Generated pages are produced by scripts/build-docs.mjs; this stylesheet is
4
+ authored by hand and is the single source of visual truth. */
5
+
6
+ /* ---------------------------------------------------------------- tokens */
7
+
1
8
  :root {
2
- color-scheme: dark;
3
- --bg: #05070a;
4
- --surface: rgba(15, 19, 25, 0.82);
5
- --surface-strong: rgba(22, 27, 35, 0.92);
6
- --line: rgba(255, 255, 255, 0.12);
7
- --line-strong: rgba(255, 255, 255, 0.2);
8
- --text: #f5f5f7;
9
- --muted: #a1a1aa;
10
- --subtle: #747782;
11
- --blue: #58a6ff;
12
- --green: #42d392;
13
- --amber: #f2cc60;
14
- --sdn-stack-footer-height: 40px;
9
+ /* Shared SDN stack header contract — do not rename or remove. */
15
10
  --sdn-stack-header-height: 52px;
16
11
  --sdn-stack-header-brand-size: 15px;
17
12
  --sdn-stack-header-link-size: 14px;
18
13
  --sdn-stack-header-action-size: 13px;
19
14
  --sdn-stack-header-mobile-link-size: 16px;
20
- font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
15
+
16
+ --font-text: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display",
17
+ system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
18
+ --font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Monaco,
19
+ "Cascadia Mono", "Roboto Mono", monospace;
20
+
21
+ /* Type scale — body is 17px/1.6 by directive. */
22
+ --size-body: 17px;
23
+ --size-small: 15px;
24
+ --size-micro: 13px;
25
+ --size-code: 15px;
26
+ --leading-body: 1.6;
27
+
28
+ /* Near-monochrome light palette with one accent. */
29
+ --ink: #1d1d1f;
30
+ --ink-secondary: #4a4a4f;
31
+ --ink-tertiary: #6e6e73;
32
+ --ink-quaternary: #86868b;
33
+ --surface: #ffffff;
34
+ --surface-raised: #ffffff;
35
+ --surface-sunken: #f5f5f7;
36
+ --surface-code: #f5f5f7;
37
+ --surface-hover: rgba(0, 0, 0, 0.04);
38
+ --hairline: rgba(0, 0, 0, 0.11);
39
+ --hairline-strong: rgba(0, 0, 0, 0.18);
40
+ --accent: #0071e3;
41
+ --accent-ink: #0058b0;
42
+ --accent-wash: rgba(0, 113, 227, 0.09);
43
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.05), 0 8px 24px rgba(0, 0, 0, 0.05);
44
+
45
+ --status-shipped-ink: #146c2e;
46
+ --status-shipped-wash: rgba(20, 108, 46, 0.11);
47
+ --status-experimental-ink: #8a5300;
48
+ --status-experimental-wash: rgba(138, 83, 0, 0.12);
49
+ --status-designed-ink: #0058b0;
50
+ --status-designed-wash: rgba(0, 88, 176, 0.11);
51
+ --status-planned-ink: #6e6e73;
52
+ --status-planned-wash: rgba(110, 110, 115, 0.12);
53
+
54
+ --measure: 46rem;
55
+ --sidebar-width: 17.5rem;
56
+ --rail-width: 14rem;
57
+ --gutter: clamp(1.25rem, 4vw, 3rem);
58
+ --radius: 12px;
59
+ --radius-small: 7px;
60
+ }
61
+
62
+ @media (prefers-color-scheme: dark) {
63
+ :root:not([data-theme="light"]) {
64
+ --ink: #f5f5f7;
65
+ --ink-secondary: #c7c7cc;
66
+ --ink-tertiary: #98989d;
67
+ --ink-quaternary: #7c7c82;
68
+ --surface: #0b0b0d;
69
+ --surface-raised: #131316;
70
+ --surface-sunken: #17171a;
71
+ --surface-code: #16161a;
72
+ --surface-hover: rgba(255, 255, 255, 0.06);
73
+ --hairline: rgba(255, 255, 255, 0.13);
74
+ --hairline-strong: rgba(255, 255, 255, 0.22);
75
+ --accent: #4da3ff;
76
+ --accent-ink: #7cbcff;
77
+ --accent-wash: rgba(77, 163, 255, 0.14);
78
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.5), 0 12px 32px rgba(0, 0, 0, 0.45);
79
+
80
+ --status-shipped-ink: #6fd48a;
81
+ --status-shipped-wash: rgba(111, 212, 138, 0.14);
82
+ --status-experimental-ink: #e8b262;
83
+ --status-experimental-wash: rgba(232, 178, 98, 0.14);
84
+ --status-designed-ink: #7cbcff;
85
+ --status-designed-wash: rgba(124, 188, 255, 0.14);
86
+ --status-planned-ink: #98989d;
87
+ --status-planned-wash: rgba(152, 152, 157, 0.14);
88
+ }
21
89
  }
22
90
 
23
- * {
91
+ :root[data-theme="dark"] {
92
+ --ink: #f5f5f7;
93
+ --ink-secondary: #c7c7cc;
94
+ --ink-tertiary: #98989d;
95
+ --ink-quaternary: #7c7c82;
96
+ --surface: #0b0b0d;
97
+ --surface-raised: #131316;
98
+ --surface-sunken: #17171a;
99
+ --surface-code: #16161a;
100
+ --surface-hover: rgba(255, 255, 255, 0.06);
101
+ --hairline: rgba(255, 255, 255, 0.13);
102
+ --hairline-strong: rgba(255, 255, 255, 0.22);
103
+ --accent: #4da3ff;
104
+ --accent-ink: #7cbcff;
105
+ --accent-wash: rgba(77, 163, 255, 0.14);
106
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.5), 0 12px 32px rgba(0, 0, 0, 0.45);
107
+
108
+ --status-shipped-ink: #6fd48a;
109
+ --status-shipped-wash: rgba(111, 212, 138, 0.14);
110
+ --status-experimental-ink: #e8b262;
111
+ --status-experimental-wash: rgba(232, 178, 98, 0.14);
112
+ --status-designed-ink: #7cbcff;
113
+ --status-designed-wash: rgba(124, 188, 255, 0.14);
114
+ --status-planned-ink: #98989d;
115
+ --status-planned-wash: rgba(152, 152, 157, 0.14);
116
+ }
117
+
118
+ /* ------------------------------------------------------------- baseline */
119
+
120
+ *,
121
+ *::before,
122
+ *::after {
24
123
  box-sizing: border-box;
25
124
  }
26
125
 
126
+ html {
127
+ -webkit-text-size-adjust: 100%;
128
+ scroll-behavior: smooth;
129
+ scroll-padding-top: 5rem;
130
+ }
131
+
27
132
  body {
28
133
  margin: 0;
29
- min-height: 100vh;
30
- background:
31
- radial-gradient(circle at 16% 18%, rgba(88, 166, 255, 0.16), transparent 30rem),
32
- radial-gradient(circle at 84% 20%, rgba(66, 211, 146, 0.12), transparent 28rem),
33
- linear-gradient(180deg, rgba(255, 255, 255, 0.035), transparent 20rem),
34
- var(--bg);
35
- color: var(--text);
134
+ background: var(--surface);
135
+ color: var(--ink);
136
+ font-family: var(--font-text);
137
+ font-size: var(--size-body);
138
+ line-height: var(--leading-body);
139
+ letter-spacing: -0.011em;
140
+ -webkit-font-smoothing: antialiased;
141
+ -moz-osx-font-smoothing: grayscale;
142
+ padding-bottom: calc(var(--sdn-stack-footer-height, 0px) + 2rem);
36
143
  }
37
144
 
38
145
  a {
39
- color: inherit;
146
+ color: var(--accent);
40
147
  text-decoration: none;
41
148
  }
42
149
 
150
+ a:hover {
151
+ text-decoration: underline;
152
+ text-underline-offset: 3px;
153
+ }
154
+
155
+ :focus-visible {
156
+ outline: 2px solid var(--accent);
157
+ outline-offset: 3px;
158
+ border-radius: 4px;
159
+ }
160
+
161
+ img,
162
+ svg {
163
+ max-width: 100%;
164
+ height: auto;
165
+ }
166
+
167
+ .visually-hidden {
168
+ position: absolute;
169
+ width: 1px;
170
+ height: 1px;
171
+ margin: -1px;
172
+ padding: 0;
173
+ overflow: hidden;
174
+ clip: rect(0 0 0 0);
175
+ white-space: nowrap;
176
+ border: 0;
177
+ }
178
+
179
+ .skip-link {
180
+ position: absolute;
181
+ left: -9999px;
182
+ top: 0;
183
+ z-index: 60;
184
+ background: var(--surface-raised);
185
+ color: var(--ink);
186
+ padding: 0.75rem 1.25rem;
187
+ border: 1px solid var(--hairline);
188
+ border-radius: var(--radius-small);
189
+ }
190
+
191
+ .skip-link:focus {
192
+ left: 1rem;
193
+ top: 1rem;
194
+ }
195
+
196
+ /* --------------------------------------------------------- site header */
197
+
43
198
  .site-header {
44
- position: fixed;
199
+ position: sticky;
45
200
  top: 0;
46
- left: 0;
47
- right: 0;
48
- z-index: 1000;
201
+ z-index: 40;
49
202
  display: flex;
50
203
  align-items: center;
51
204
  justify-content: space-between;
205
+ gap: 1rem;
52
206
  height: var(--sdn-stack-header-height, 52px);
53
- padding: 0 max(16px, calc((100vw - 1180px) / 2));
54
- border-bottom: 1px solid var(--line);
55
- background: rgba(5, 7, 10, 0.88);
56
- backdrop-filter: blur(18px);
207
+ padding: 0 var(--gutter);
208
+ background: color-mix(in srgb, var(--surface) 82%, transparent);
209
+ backdrop-filter: saturate(180%) blur(20px);
210
+ -webkit-backdrop-filter: saturate(180%) blur(20px);
211
+ border-bottom: 1px solid var(--hairline);
57
212
  }
58
213
 
59
214
  .site-brand {
60
- color: var(--text);
215
+ color: var(--ink);
61
216
  font-size: var(--sdn-stack-header-brand-size, 15px);
62
- font-weight: 800;
217
+ font-weight: 600;
218
+ letter-spacing: -0.01em;
63
219
  }
64
220
 
65
- .stack-button {
66
- display: inline-flex;
221
+ .site-brand:hover {
222
+ text-decoration: none;
223
+ color: var(--ink);
224
+ }
225
+
226
+ .header-links {
227
+ display: flex;
67
228
  align-items: center;
68
- justify-content: center;
69
- min-height: 30px;
70
- padding: 0 14px;
71
- border: 1px solid rgba(88, 166, 255, 0.42);
72
- border-radius: 8px;
73
- background: rgba(88, 166, 255, 0.16);
74
- color: var(--text);
229
+ gap: 1.5rem;
230
+ }
231
+
232
+ .header-links a {
233
+ color: var(--ink-secondary);
75
234
  font-size: var(--sdn-stack-header-link-size, 14px);
76
- font-weight: 800;
235
+ font-weight: 400;
77
236
  }
78
237
 
79
- main {
80
- width: min(1180px, calc(100vw - 32px));
81
- margin: 0 auto;
82
- padding: 88px 0 calc(var(--sdn-stack-footer-height, 40px) + 72px);
238
+ .header-links a:hover {
239
+ color: var(--ink);
240
+ text-decoration: none;
83
241
  }
84
242
 
85
- .hero {
243
+ .stack-button {
244
+ color: var(--ink-secondary);
245
+ font-size: var(--sdn-stack-header-action-size, 13px);
246
+ }
247
+
248
+ .nav-toggle {
249
+ display: none;
250
+ appearance: none;
251
+ background: transparent;
252
+ border: 1px solid var(--hairline);
253
+ border-radius: var(--radius-small);
254
+ color: var(--ink-secondary);
255
+ font: inherit;
256
+ font-size: var(--size-micro);
257
+ padding: 0.25rem 0.65rem;
258
+ cursor: pointer;
259
+ }
260
+
261
+ /* ----------------------------------------------------------- page shell */
262
+
263
+ .shell {
86
264
  display: grid;
87
- grid-template-columns: minmax(0, 0.92fr) minmax(320px, 1.08fr);
88
- gap: 32px;
89
- align-items: center;
90
- min-height: calc(100vh - 128px);
265
+ grid-template-columns: var(--sidebar-width) minmax(0, 1fr) var(--rail-width);
266
+ gap: clamp(1.5rem, 4vw, 4rem);
267
+ max-width: 96rem;
268
+ margin: 0 auto;
269
+ padding: 0 var(--gutter);
270
+ align-items: start;
91
271
  }
92
272
 
93
- .hero-copy {
94
- min-width: 0;
273
+ .shell.no-rail {
274
+ grid-template-columns: var(--sidebar-width) minmax(0, 1fr);
95
275
  }
96
276
 
97
- .eyebrow {
98
- margin: 0 0 10px;
99
- color: var(--green);
100
- font-size: 12px;
101
- font-weight: 800;
102
- letter-spacing: 0;
277
+ .shell.wide {
278
+ grid-template-columns: minmax(0, 1fr);
279
+ max-width: 76rem;
280
+ }
281
+
282
+ /* --------------------------------------------------------- sidebar nav */
283
+
284
+ .sidebar {
285
+ position: sticky;
286
+ top: calc(var(--sdn-stack-header-height, 52px) + 1.5rem);
287
+ max-height: calc(100vh - var(--sdn-stack-header-height, 52px) - 3rem);
288
+ overflow-y: auto;
289
+ overscroll-behavior: contain;
290
+ padding: 2.5rem 0 3rem;
291
+ font-size: var(--size-small);
292
+ scrollbar-width: thin;
293
+ }
294
+
295
+ .sidebar h2 {
296
+ margin: 2rem 0 0.6rem;
297
+ font-size: 11px;
298
+ font-weight: 600;
299
+ letter-spacing: 0.07em;
103
300
  text-transform: uppercase;
301
+ color: var(--ink-quaternary);
104
302
  }
105
303
 
106
- h1,
107
- h2,
108
- p {
304
+ .sidebar h2:first-child {
109
305
  margin-top: 0;
110
306
  }
111
307
 
112
- h1 {
113
- max-width: 10ch;
114
- margin-bottom: 18px;
115
- font-size: clamp(48px, 8vw, 92px);
116
- line-height: 0.92;
117
- letter-spacing: 0;
308
+ .sidebar ul {
309
+ list-style: none;
310
+ margin: 0;
311
+ padding: 0;
312
+ }
313
+
314
+ .sidebar li + li {
315
+ margin-top: 1px;
316
+ }
317
+
318
+ .sidebar a {
319
+ display: flex;
320
+ align-items: baseline;
321
+ justify-content: space-between;
322
+ gap: 0.5rem;
323
+ padding: 0.34rem 0.6rem;
324
+ margin-left: -0.6rem;
325
+ border-radius: var(--radius-small);
326
+ color: var(--ink-secondary);
327
+ line-height: 1.35;
328
+ }
329
+
330
+ .sidebar a:hover {
331
+ background: var(--surface-hover);
332
+ color: var(--ink);
333
+ text-decoration: none;
334
+ }
335
+
336
+ .sidebar a[aria-current="page"] {
337
+ background: var(--accent-wash);
338
+ color: var(--accent-ink);
339
+ font-weight: 590;
340
+ }
341
+
342
+ .sidebar .tag {
343
+ flex: none;
344
+ font-size: 9.5px;
345
+ font-weight: 620;
346
+ letter-spacing: 0.06em;
347
+ text-transform: uppercase;
348
+ color: var(--status-planned-ink);
349
+ opacity: 0.85;
350
+ }
351
+
352
+ .sidebar .tag-shipped {
353
+ color: var(--status-shipped-ink);
354
+ }
355
+
356
+ .sidebar .tag-experimental {
357
+ color: var(--status-experimental-ink);
358
+ }
359
+
360
+ .sidebar .tag-designed {
361
+ color: var(--status-designed-ink);
362
+ }
363
+
364
+ /* --------------------------------------------------------------- article */
365
+
366
+ .doc {
367
+ min-width: 0;
368
+ padding: 3.5rem 0 6rem;
369
+ }
370
+
371
+ .doc > * {
372
+ max-width: var(--measure);
373
+ }
374
+
375
+ .breadcrumb {
376
+ font-size: var(--size-micro);
377
+ color: var(--ink-tertiary);
378
+ margin: 0 0 1rem;
379
+ letter-spacing: 0.01em;
380
+ }
381
+
382
+ .breadcrumb a {
383
+ color: var(--ink-tertiary);
384
+ }
385
+
386
+ .doc h1 {
387
+ font-size: clamp(2.1rem, 1.4rem + 2.2vw, 3rem);
388
+ line-height: 1.08;
389
+ letter-spacing: -0.022em;
390
+ font-weight: 660;
391
+ margin: 0 0 1.25rem;
392
+ }
393
+
394
+ .doc h2 {
395
+ font-size: 1.6rem;
396
+ line-height: 1.2;
397
+ letter-spacing: -0.018em;
398
+ font-weight: 620;
399
+ margin: 3.5rem 0 1rem;
400
+ padding-top: 2rem;
401
+ border-top: 1px solid var(--hairline);
402
+ }
403
+
404
+ .doc h3 {
405
+ font-size: 1.22rem;
406
+ line-height: 1.3;
407
+ letter-spacing: -0.014em;
408
+ font-weight: 620;
409
+ margin: 2.5rem 0 0.75rem;
410
+ }
411
+
412
+ .doc h4 {
413
+ font-size: 1.02rem;
414
+ font-weight: 620;
415
+ margin: 2rem 0 0.6rem;
416
+ }
417
+
418
+ .doc h2 + h3 {
419
+ margin-top: 1.5rem;
420
+ }
421
+
422
+ .doc p {
423
+ margin: 0 0 1.25rem;
424
+ color: var(--ink-secondary);
425
+ }
426
+
427
+ .doc .lede {
428
+ font-size: 1.3rem;
429
+ line-height: 1.45;
430
+ letter-spacing: -0.016em;
431
+ color: var(--ink-secondary);
432
+ margin-bottom: 2rem;
433
+ }
434
+
435
+ .doc ul,
436
+ .doc ol {
437
+ margin: 0 0 1.25rem;
438
+ padding-left: 1.5rem;
439
+ color: var(--ink-secondary);
440
+ }
441
+
442
+ .doc li {
443
+ margin-bottom: 0.5rem;
444
+ }
445
+
446
+ .doc li > ul,
447
+ .doc li > ol {
448
+ margin-top: 0.5rem;
449
+ margin-bottom: 0.25rem;
450
+ }
451
+
452
+ .doc strong {
453
+ color: var(--ink);
454
+ font-weight: 620;
455
+ }
456
+
457
+ .doc hr {
458
+ border: 0;
459
+ border-top: 1px solid var(--hairline);
460
+ margin: 3rem 0;
461
+ }
462
+
463
+ .doc blockquote {
464
+ margin: 0 0 1.5rem;
465
+ padding: 0.9rem 1.25rem;
466
+ border-left: 3px solid var(--accent);
467
+ background: var(--accent-wash);
468
+ border-radius: 0 var(--radius-small) var(--radius-small) 0;
469
+ color: var(--ink-secondary);
470
+ }
471
+
472
+ .doc blockquote p:last-child {
473
+ margin-bottom: 0;
474
+ }
475
+
476
+ .anchor {
477
+ float: left;
478
+ margin-left: -1.15rem;
479
+ width: 1.15rem;
480
+ color: var(--ink-quaternary);
481
+ opacity: 0;
482
+ font-weight: 400;
483
+ transition: opacity 120ms ease;
484
+ }
485
+
486
+ h2:hover .anchor,
487
+ h3:hover .anchor,
488
+ h4:hover .anchor,
489
+ .anchor:focus {
490
+ opacity: 1;
491
+ text-decoration: none;
492
+ }
493
+
494
+ /* ------------------------------------------------------------------ code */
495
+
496
+ code,
497
+ kbd,
498
+ samp {
499
+ font-family: var(--font-mono);
500
+ font-size: 0.9em;
501
+ font-variant-ligatures: none;
502
+ }
503
+
504
+ :not(pre) > code {
505
+ background: var(--surface-code);
506
+ border: 1px solid var(--hairline);
507
+ border-radius: 5px;
508
+ padding: 0.1em 0.36em;
509
+ color: var(--ink);
510
+ white-space: nowrap;
511
+ }
512
+
513
+ .codeblock {
514
+ max-width: none;
515
+ margin: 0 0 1.75rem;
516
+ background: var(--surface-code);
517
+ border: 1px solid var(--hairline);
518
+ border-radius: var(--radius);
519
+ overflow: hidden;
520
+ }
521
+
522
+ .codeblock-head {
523
+ display: flex;
524
+ align-items: center;
525
+ justify-content: space-between;
526
+ padding: 0.5rem 1.1rem;
527
+ border-bottom: 1px solid var(--hairline);
528
+ font-size: 11px;
529
+ font-weight: 600;
530
+ letter-spacing: 0.06em;
531
+ text-transform: uppercase;
532
+ color: var(--ink-quaternary);
533
+ }
534
+
535
+ .codeblock pre {
536
+ margin: 0;
537
+ padding: 1.1rem 1.25rem;
538
+ overflow-x: auto;
539
+ font-size: var(--size-code);
540
+ line-height: 1.55;
541
+ color: var(--ink);
542
+ tab-size: 2;
543
+ }
544
+
545
+ .codeblock pre code {
546
+ background: none;
547
+ border: 0;
548
+ padding: 0;
549
+ font-size: inherit;
550
+ white-space: pre;
551
+ }
552
+
553
+ /* ---------------------------------------------------------------- tables */
554
+
555
+ .table-wrap {
556
+ max-width: none;
557
+ margin: 0 0 1.75rem;
558
+ overflow-x: auto;
559
+ border: 1px solid var(--hairline);
560
+ border-radius: var(--radius);
561
+ }
562
+
563
+ .table-wrap table {
564
+ width: 100%;
565
+ border-collapse: collapse;
566
+ font-size: var(--size-small);
567
+ }
568
+
569
+ .table-wrap th,
570
+ .table-wrap td {
571
+ text-align: left;
572
+ vertical-align: top;
573
+ padding: 0.7rem 1rem;
574
+ border-bottom: 1px solid var(--hairline);
575
+ color: var(--ink-secondary);
576
+ }
577
+
578
+ .table-wrap th {
579
+ color: var(--ink);
580
+ font-weight: 600;
581
+ white-space: nowrap;
582
+ background: var(--surface-sunken);
583
+ }
584
+
585
+ .table-wrap tr:last-child td {
586
+ border-bottom: 0;
587
+ }
588
+
589
+ .table-wrap code {
590
+ white-space: nowrap;
591
+ }
592
+
593
+ /* -------------------------------------------------------------- on this page */
594
+
595
+ .rail {
596
+ position: sticky;
597
+ top: calc(var(--sdn-stack-header-height, 52px) + 1.5rem);
598
+ max-height: calc(100vh - var(--sdn-stack-header-height, 52px) - 3rem);
599
+ overflow-y: auto;
600
+ padding: 3.9rem 0 3rem;
601
+ font-size: var(--size-micro);
602
+ }
603
+
604
+ .rail h2 {
605
+ margin: 0 0 0.7rem;
606
+ font-size: 11px;
607
+ font-weight: 600;
608
+ letter-spacing: 0.07em;
609
+ text-transform: uppercase;
610
+ color: var(--ink-quaternary);
611
+ }
612
+
613
+ .rail ul {
614
+ list-style: none;
615
+ margin: 0;
616
+ padding: 0;
617
+ border-left: 1px solid var(--hairline);
618
+ }
619
+
620
+ .rail a {
621
+ display: block;
622
+ padding: 0.28rem 0 0.28rem 0.85rem;
623
+ margin-left: -1px;
624
+ border-left: 2px solid transparent;
625
+ color: var(--ink-tertiary);
626
+ line-height: 1.4;
627
+ }
628
+
629
+ .rail a:hover {
630
+ color: var(--ink);
631
+ text-decoration: none;
632
+ }
633
+
634
+ .rail .depth-3 {
635
+ padding-left: 1.7rem;
636
+ }
637
+
638
+ /* -------------------------------------------------------------- status pills */
639
+
640
+ .pill {
641
+ display: inline-flex;
642
+ align-items: center;
643
+ gap: 0.4rem;
644
+ border-radius: 999px;
645
+ padding: 0.16rem 0.66rem;
646
+ font-size: 11px;
647
+ font-weight: 620;
648
+ letter-spacing: 0.06em;
649
+ text-transform: uppercase;
650
+ white-space: nowrap;
651
+ background: var(--status-planned-wash);
652
+ color: var(--status-planned-ink);
653
+ }
654
+
655
+ .pill-shipped {
656
+ background: var(--status-shipped-wash);
657
+ color: var(--status-shipped-ink);
658
+ }
659
+
660
+ .pill-experimental {
661
+ background: var(--status-experimental-wash);
662
+ color: var(--status-experimental-ink);
663
+ }
664
+
665
+ .pill-designed {
666
+ background: var(--status-designed-wash);
667
+ color: var(--status-designed-ink);
668
+ }
669
+
670
+ .pill-planned {
671
+ background: var(--status-planned-wash);
672
+ color: var(--status-planned-ink);
673
+ }
674
+
675
+ .doc-meta {
676
+ display: flex;
677
+ flex-wrap: wrap;
678
+ align-items: center;
679
+ gap: 0.75rem;
680
+ margin: 0 0 2rem;
681
+ font-size: var(--size-micro);
682
+ color: var(--ink-tertiary);
683
+ }
684
+
685
+ /* ------------------------------------------------------------- playground */
686
+
687
+ .playground {
688
+ max-width: none;
689
+ margin: 3rem 0;
690
+ padding: 2rem;
691
+ border: 1px dashed var(--hairline-strong);
692
+ border-radius: var(--radius);
693
+ background: var(--surface-sunken);
694
+ text-align: center;
695
+ }
696
+
697
+ .playground h2 {
698
+ border: 0;
699
+ padding: 0;
700
+ margin: 0 0 0.4rem;
701
+ font-size: 1.05rem;
702
+ }
703
+
704
+ .playground p {
705
+ margin: 0 auto;
706
+ max-width: 34rem;
707
+ font-size: var(--size-small);
708
+ color: var(--ink-tertiary);
709
+ }
710
+
711
+ /* --------------------------------------------------------------- landing */
712
+
713
+ .hero {
714
+ max-width: 60rem;
715
+ margin: 0 auto;
716
+ padding: 5rem var(--gutter) 3rem;
717
+ text-align: center;
718
+ }
719
+
720
+ .eyebrow {
721
+ margin: 0 0 0.75rem;
722
+ font-size: 12px;
723
+ font-weight: 620;
724
+ letter-spacing: 0.09em;
725
+ text-transform: uppercase;
726
+ color: var(--accent);
118
727
  }
119
728
 
120
- .lede {
121
- max-width: 60ch;
122
- color: var(--muted);
123
- font-size: 18px;
124
- line-height: 1.65;
729
+ .hero h1 {
730
+ font-size: clamp(2.4rem, 1.4rem + 3.4vw, 3.75rem);
731
+ line-height: 1.06;
732
+ letter-spacing: -0.026em;
733
+ font-weight: 660;
734
+ margin: 0 0 1.25rem;
735
+ }
736
+
737
+ .hero .lede {
738
+ font-size: clamp(1.15rem, 1rem + 0.7vw, 1.4rem);
739
+ line-height: 1.45;
740
+ letter-spacing: -0.016em;
741
+ color: var(--ink-secondary);
742
+ margin: 0 auto 2rem;
743
+ max-width: 44rem;
125
744
  }
126
745
 
127
746
  .actions {
128
747
  display: flex;
129
748
  flex-wrap: wrap;
130
- gap: 10px;
131
- margin-top: 28px;
749
+ gap: 0.75rem;
750
+ justify-content: center;
132
751
  }
133
752
 
134
753
  .button {
135
754
  display: inline-flex;
136
755
  align-items: center;
137
- justify-content: center;
138
- min-height: 42px;
139
- padding: 0 16px;
140
- border: 1px solid var(--line);
141
- border-radius: 8px;
142
- background: rgba(255, 255, 255, 0.06);
143
- color: var(--text);
144
- font-size: 14px;
145
- font-weight: 700;
756
+ border-radius: 980px;
757
+ padding: 0.62rem 1.35rem;
758
+ font-size: var(--size-small);
759
+ font-weight: 500;
760
+ border: 1px solid var(--hairline-strong);
761
+ color: var(--ink);
762
+ background: transparent;
146
763
  }
147
764
 
148
765
  .button:hover {
149
- border-color: var(--line-strong);
150
- background: rgba(255, 255, 255, 0.1);
766
+ background: var(--surface-hover);
767
+ text-decoration: none;
151
768
  }
152
769
 
153
770
  .button.primary {
154
- border-color: rgba(88, 166, 255, 0.46);
155
- background: rgba(88, 166, 255, 0.2);
771
+ background: var(--accent);
772
+ border-color: var(--accent);
773
+ color: #fff;
156
774
  }
157
775
 
158
- .architecture {
159
- margin: 0;
160
- border: 1px solid var(--line);
161
- border-radius: 8px;
162
- background: var(--surface);
163
- box-shadow: 0 28px 80px rgba(0, 0, 0, 0.36);
164
- overflow: hidden;
776
+ .button.primary:hover {
777
+ filter: brightness(1.08);
165
778
  }
166
779
 
167
- .architecture img {
168
- display: block;
169
- width: 100%;
170
- height: auto;
171
- background: #0d1117;
780
+ .section {
781
+ max-width: 76rem;
782
+ margin: 0 auto;
783
+ padding: 3.5rem var(--gutter);
784
+ border-top: 1px solid var(--hairline);
172
785
  }
173
786
 
174
- .quick-grid {
175
- display: grid;
176
- grid-template-columns: repeat(4, minmax(0, 1fr));
177
- gap: 12px;
178
- margin: 28px 0 72px;
787
+ .section-head {
788
+ max-width: 46rem;
789
+ margin: 0 0 2rem;
179
790
  }
180
791
 
181
- .quick-grid article {
182
- min-width: 0;
183
- border: 1px solid var(--line);
184
- border-radius: 8px;
185
- background: var(--surface);
186
- padding: 18px;
792
+ .section-head h2 {
793
+ font-size: 1.75rem;
794
+ line-height: 1.2;
795
+ letter-spacing: -0.02em;
796
+ font-weight: 620;
797
+ margin: 0 0 0.6rem;
187
798
  }
188
799
 
189
- .quick-grid h2 {
190
- margin-bottom: 8px;
191
- font-size: 16px;
800
+ .section-head p {
801
+ margin: 0;
802
+ color: var(--ink-secondary);
192
803
  }
193
804
 
194
- .quick-grid p {
195
- margin-bottom: 0;
196
- color: var(--muted);
197
- font-size: 14px;
198
- line-height: 1.55;
805
+ .family-group {
806
+ margin-bottom: 3rem;
199
807
  }
200
808
 
201
- .docs-list,
202
- .stack-list {
809
+ .family-group > h3 {
810
+ margin: 0 0 0.25rem;
811
+ font-size: 12px;
812
+ font-weight: 620;
813
+ letter-spacing: 0.09em;
814
+ text-transform: uppercase;
815
+ color: var(--ink-quaternary);
816
+ }
817
+
818
+ .family-group > p {
819
+ margin: 0 0 1.25rem;
820
+ max-width: 46rem;
821
+ font-size: var(--size-small);
822
+ color: var(--ink-tertiary);
823
+ }
824
+
825
+ .card-grid {
203
826
  display: grid;
204
- grid-template-columns: minmax(220px, 0.34fr) minmax(0, 0.66fr);
205
- gap: 28px;
206
- align-items: start;
207
- border-top: 1px solid var(--line);
208
- padding-top: 36px;
827
+ grid-template-columns: repeat(auto-fill, minmax(16.5rem, 1fr));
828
+ gap: 1rem;
209
829
  }
210
830
 
211
- .stack-list {
212
- margin-top: 72px;
831
+ .card {
832
+ display: block;
833
+ padding: 1.25rem 1.35rem;
834
+ border: 1px solid var(--hairline);
835
+ border-radius: var(--radius);
836
+ background: var(--surface-raised);
837
+ color: inherit;
838
+ transition: border-color 140ms ease, transform 140ms ease, box-shadow 140ms ease;
213
839
  }
214
840
 
215
- .section-head h2 {
841
+ a.card:hover {
842
+ text-decoration: none;
843
+ border-color: var(--hairline-strong);
844
+ transform: translateY(-1px);
845
+ box-shadow: var(--shadow-card);
846
+ }
847
+
848
+ .card-head {
849
+ display: flex;
850
+ align-items: center;
851
+ justify-content: space-between;
852
+ gap: 0.75rem;
853
+ margin-bottom: 0.5rem;
854
+ }
855
+
856
+ .card-head h4 {
216
857
  margin: 0;
217
- font-size: 28px;
858
+ font-size: 1.05rem;
859
+ font-weight: 620;
860
+ letter-spacing: -0.012em;
861
+ color: var(--ink);
862
+ }
863
+
864
+ .card p {
865
+ margin: 0;
866
+ font-size: var(--size-small);
867
+ line-height: 1.5;
868
+ color: var(--ink-tertiary);
218
869
  }
219
870
 
220
871
  .link-list {
221
872
  display: grid;
222
- gap: 10px;
873
+ grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
874
+ gap: 0.5rem;
223
875
  }
224
876
 
225
877
  .link-list a {
226
- display: grid;
227
- gap: 6px;
228
- border: 1px solid var(--line);
229
- border-radius: 8px;
230
- background: var(--surface-strong);
231
- padding: 18px;
878
+ display: block;
879
+ padding: 0.9rem 1.1rem;
880
+ border-radius: var(--radius-small);
881
+ border: 1px solid transparent;
882
+ color: inherit;
232
883
  }
233
884
 
234
885
  .link-list a:hover {
235
- border-color: rgba(88, 166, 255, 0.52);
236
- }
237
-
238
- .link-list a.active {
239
- border-color: rgba(88, 166, 255, 0.52);
240
- background: rgba(88, 166, 255, 0.14);
886
+ text-decoration: none;
887
+ background: var(--surface-sunken);
888
+ border-color: var(--hairline);
241
889
  }
242
890
 
243
891
  .link-list span {
244
- color: var(--text);
245
- font-weight: 760;
892
+ display: block;
893
+ font-weight: 590;
894
+ color: var(--ink);
895
+ letter-spacing: -0.01em;
246
896
  }
247
897
 
248
898
  .link-list small {
249
- color: var(--muted);
250
- font-size: 13px;
899
+ display: block;
900
+ margin-top: 0.15rem;
901
+ font-size: var(--size-micro);
251
902
  line-height: 1.45;
903
+ color: var(--ink-tertiary);
904
+ }
905
+
906
+ .link-list a.active span {
907
+ color: var(--accent-ink);
908
+ }
909
+
910
+ /* ---------------------------------------------------------------- footer */
911
+
912
+ .doc-footer {
913
+ max-width: var(--measure);
914
+ margin-top: 4rem;
915
+ padding-top: 1.5rem;
916
+ border-top: 1px solid var(--hairline);
917
+ font-size: var(--size-micro);
918
+ color: var(--ink-tertiary);
919
+ }
920
+
921
+ .site-footer {
922
+ max-width: 76rem;
923
+ margin: 0 auto;
924
+ padding: 2.5rem var(--gutter) 4rem;
925
+ border-top: 1px solid var(--hairline);
926
+ font-size: var(--size-micro);
927
+ color: var(--ink-tertiary);
928
+ }
929
+
930
+ /* ------------------------------------------------------------ responsive */
931
+
932
+ @media (max-width: 1180px) {
933
+ .shell {
934
+ grid-template-columns: var(--sidebar-width) minmax(0, 1fr);
935
+ }
936
+
937
+ .rail {
938
+ display: none;
939
+ }
252
940
  }
253
941
 
254
942
  @media (max-width: 860px) {
255
- main {
256
- width: min(100vw - 24px, 1180px);
257
- padding-top: 72px;
943
+ .shell,
944
+ .shell.no-rail {
945
+ grid-template-columns: minmax(0, 1fr);
946
+ }
947
+
948
+ .nav-toggle {
949
+ display: inline-block;
258
950
  }
259
951
 
260
- .hero,
261
- .docs-list,
262
- .stack-list {
263
- grid-template-columns: 1fr;
952
+ .sidebar {
953
+ position: static;
954
+ max-height: none;
955
+ overflow: visible;
956
+ padding: 1.5rem 0 0;
957
+ border-bottom: 1px solid var(--hairline);
264
958
  }
265
959
 
266
- .hero {
267
- min-height: auto;
960
+ .sidebar[hidden] {
961
+ display: none;
268
962
  }
269
963
 
270
- h1 {
271
- max-width: 11ch;
964
+ .doc {
965
+ padding-top: 2.25rem;
272
966
  }
273
967
 
274
- .quick-grid {
275
- grid-template-columns: repeat(2, minmax(0, 1fr));
968
+ .header-links a:not(.stack-button) {
969
+ display: none;
276
970
  }
277
971
  }
278
972
 
279
- @media (max-width: 560px) {
280
- .quick-grid {
281
- grid-template-columns: 1fr;
973
+ @media (prefers-reduced-motion: reduce) {
974
+ html {
975
+ scroll-behavior: auto;
282
976
  }
283
977
 
284
- .actions {
285
- flex-direction: column;
286
- align-items: stretch;
978
+ * {
979
+ transition: none !important;
287
980
  }
288
981
  }