mhproto 0.8.0-preview.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 (124) hide show
  1. package/CONTRIBUTING.md +62 -0
  2. package/LICENSE +21 -0
  3. package/README.md +53 -0
  4. package/THIRD_PARTY_NOTICES.md +40 -0
  5. package/bin/mhproto.mjs +248 -0
  6. package/doc/context-design.md +43 -0
  7. package/doc/context-measurements.json +28 -0
  8. package/doc/guide.md +138 -0
  9. package/doc/publishing.md +93 -0
  10. package/doc/release-notes.md +23 -0
  11. package/doc/release-review-2026-10-02.md +127 -0
  12. package/doc/release-review.md +68 -0
  13. package/doc/viewer-design.md +80 -0
  14. package/package.json +69 -0
  15. package/skills/mhproto-discover/SKILL.md +14 -0
  16. package/skills/mhproto-implement/SKILL.md +14 -0
  17. package/skills/mhproto-reconcile/SKILL.md +14 -0
  18. package/skills/mhproto-specify/SKILL.md +16 -0
  19. package/skills/mhproto-specify/references/format.md +20 -0
  20. package/skills/mhproto-verify/SKILL.md +14 -0
  21. package/src/config.mjs +202 -0
  22. package/src/context.mjs +228 -0
  23. package/src/core.mjs +471 -0
  24. package/src/node-reporter.mjs +15 -0
  25. package/src/paths.mjs +51 -0
  26. package/src/server.mjs +290 -0
  27. package/src/verify.mjs +149 -0
  28. package/src/visuals.mjs +189 -0
  29. package/viewer/app.js +1463 -0
  30. package/viewer/diff.js +245 -0
  31. package/viewer/index.html +51 -0
  32. package/viewer/style.css +1003 -0
  33. package/viewer/vendor/LICENSE +21 -0
  34. package/viewer/vendor/NOTICE.txt +3372 -0
  35. package/viewer/vendor/README.md +75 -0
  36. package/viewer/vendor/build-evidence.json +2775 -0
  37. package/viewer/vendor/bundled-audit.json +88 -0
  38. package/viewer/vendor/bundled-packages.json +84 -0
  39. package/viewer/vendor/embedded-notices.txt +33 -0
  40. package/viewer/vendor/license-inventory.json +1456 -0
  41. package/viewer/vendor/licenses/braintree__sanitize-url-7.1.2.txt +21 -0
  42. package/viewer/vendor/licenses/chevrotain-13.2.0.txt +202 -0
  43. package/viewer/vendor/licenses/chevrotain-allstar-0.5.0.txt +16 -0
  44. package/viewer/vendor/licenses/chevrotain__cst-dts-gen-13.2.0.txt +202 -0
  45. package/viewer/vendor/licenses/chevrotain__gast-13.2.0.txt +202 -0
  46. package/viewer/vendor/licenses/chevrotain__regexp-to-ast-13.2.0.txt +202 -0
  47. package/viewer/vendor/licenses/chevrotain__utils-13.2.0.txt +202 -0
  48. package/viewer/vendor/licenses/cose-base-1.0.3.txt +21 -0
  49. package/viewer/vendor/licenses/cose-base-2.2.0.txt +21 -0
  50. package/viewer/vendor/licenses/cytoscape-3.34.3.txt +19 -0
  51. package/viewer/vendor/licenses/cytoscape-cose-bilkent-4.1.0.txt +21 -0
  52. package/viewer/vendor/licenses/cytoscape-fcose-2.2.0.txt +19 -0
  53. package/viewer/vendor/licenses/d3-7.9.0.txt +13 -0
  54. package/viewer/vendor/licenses/d3-array-2.12.1.txt +27 -0
  55. package/viewer/vendor/licenses/d3-array-3.2.4.txt +13 -0
  56. package/viewer/vendor/licenses/d3-axis-3.0.0.txt +13 -0
  57. package/viewer/vendor/licenses/d3-brush-3.0.0.txt +13 -0
  58. package/viewer/vendor/licenses/d3-chord-3.0.1.txt +13 -0
  59. package/viewer/vendor/licenses/d3-color-3.1.0.txt +13 -0
  60. package/viewer/vendor/licenses/d3-contour-4.0.2.txt +13 -0
  61. package/viewer/vendor/licenses/d3-delaunay-6.0.4.txt +14 -0
  62. package/viewer/vendor/licenses/d3-dispatch-3.0.1.txt +13 -0
  63. package/viewer/vendor/licenses/d3-drag-3.0.0.txt +13 -0
  64. package/viewer/vendor/licenses/d3-dsv-3.0.1.txt +13 -0
  65. package/viewer/vendor/licenses/d3-ease-3.0.1.txt +28 -0
  66. package/viewer/vendor/licenses/d3-fetch-3.0.1.txt +13 -0
  67. package/viewer/vendor/licenses/d3-force-3.0.0.txt +13 -0
  68. package/viewer/vendor/licenses/d3-format-3.1.2.txt +13 -0
  69. package/viewer/vendor/licenses/d3-geo-3.1.1.txt +34 -0
  70. package/viewer/vendor/licenses/d3-hierarchy-3.1.2.txt +13 -0
  71. package/viewer/vendor/licenses/d3-interpolate-3.0.1.txt +13 -0
  72. package/viewer/vendor/licenses/d3-path-1.0.9.txt +27 -0
  73. package/viewer/vendor/licenses/d3-path-3.1.0.txt +13 -0
  74. package/viewer/vendor/licenses/d3-polygon-3.0.1.txt +13 -0
  75. package/viewer/vendor/licenses/d3-quadtree-3.0.1.txt +13 -0
  76. package/viewer/vendor/licenses/d3-random-3.0.1.txt +13 -0
  77. package/viewer/vendor/licenses/d3-sankey-0.12.3.txt +27 -0
  78. package/viewer/vendor/licenses/d3-scale-4.0.2.txt +13 -0
  79. package/viewer/vendor/licenses/d3-scale-chromatic-3.1.0.txt +28 -0
  80. package/viewer/vendor/licenses/d3-selection-3.0.0.txt +13 -0
  81. package/viewer/vendor/licenses/d3-shape-1.3.7.txt +27 -0
  82. package/viewer/vendor/licenses/d3-shape-3.2.0.txt +13 -0
  83. package/viewer/vendor/licenses/d3-time-3.1.0.txt +13 -0
  84. package/viewer/vendor/licenses/d3-time-format-4.1.0.txt +13 -0
  85. package/viewer/vendor/licenses/d3-timer-3.0.1.txt +13 -0
  86. package/viewer/vendor/licenses/d3-transition-3.0.1.txt +13 -0
  87. package/viewer/vendor/licenses/d3-zoom-3.0.0.txt +13 -0
  88. package/viewer/vendor/licenses/dagre-d3-es-7.0.14.txt +23 -0
  89. package/viewer/vendor/licenses/dayjs-1.11.23.txt +21 -0
  90. package/viewer/vendor/licenses/delaunator-5.1.0.txt +15 -0
  91. package/viewer/vendor/licenses/dompurify-3.4.16.txt +202 -0
  92. package/viewer/vendor/licenses/elk-source-notice.txt +11 -0
  93. package/viewer/vendor/licenses/elkjs-0.9.3.txt +264 -0
  94. package/viewer/vendor/licenses/embedded-and-node-notices.txt +45 -0
  95. package/viewer/vendor/licenses/es-toolkit-1.52.0-1.txt +39 -0
  96. package/viewer/vendor/licenses/es-toolkit-1.52.0.txt +21 -0
  97. package/viewer/vendor/licenses/fastdom-1.0.12.txt +221 -0
  98. package/viewer/vendor/licenses/iconify__utils-3.1.7.txt +21 -0
  99. package/viewer/vendor/licenses/internmap-1.0.1.txt +13 -0
  100. package/viewer/vendor/licenses/internmap-2.0.3.txt +13 -0
  101. package/viewer/vendor/licenses/js-yaml-4.3.2.txt +21 -0
  102. package/viewer/vendor/licenses/katex-0.16.47.txt +21 -0
  103. package/viewer/vendor/licenses/khroma-2.1.0.txt +21 -0
  104. package/viewer/vendor/licenses/langium-4.4.0.txt +16 -0
  105. package/viewer/vendor/licenses/layout-base-1.0.2.txt +21 -0
  106. package/viewer/vendor/licenses/layout-base-2.0.1.txt +21 -0
  107. package/viewer/vendor/licenses/lodash-es-4.18.1.txt +47 -0
  108. package/viewer/vendor/licenses/marked-16.4.2.txt +44 -0
  109. package/viewer/vendor/licenses/mermaid-12.1.0.txt +21 -0
  110. package/viewer/vendor/licenses/mermaid-js__parser-2.0.1.txt +21 -0
  111. package/viewer/vendor/licenses/path-browserify-1.0.1.txt +20 -0
  112. package/viewer/vendor/licenses/robust-predicates-3.0.3.txt +24 -0
  113. package/viewer/vendor/licenses/roughjs-4.6.6.txt +21 -0
  114. package/viewer/vendor/licenses/stylis-4.4.0.txt +21 -0
  115. package/viewer/vendor/licenses/ts-dedent-2.3.0.txt +21 -0
  116. package/viewer/vendor/licenses/upsetjs__venn.js-2.0.0.txt +22 -0
  117. package/viewer/vendor/licenses/uuid-14.0.2.txt +9 -0
  118. package/viewer/vendor/licenses/vscode-jsonrpc-9.0.3.txt +11 -0
  119. package/viewer/vendor/licenses/vscode-languageserver-protocol-3.18.4.txt +11 -0
  120. package/viewer/vendor/licenses/vscode-languageserver-textdocument-1.0.15.txt +11 -0
  121. package/viewer/vendor/licenses/vscode-languageserver-types-3.18.4.txt +11 -0
  122. package/viewer/vendor/licenses/vscode-uri-3.1.0.txt +9 -0
  123. package/viewer/vendor/manifest.json +21 -0
  124. package/viewer/vendor/mermaid.min.js +7729 -0
@@ -0,0 +1,1003 @@
1
+ :root {
2
+ color-scheme: light;
3
+ --ink: #141414;
4
+ --muted: #666;
5
+ --line: #e9e9e9;
6
+ --link: #2458ca;
7
+ --visited: #7543a6;
8
+ --error: #b42318;
9
+ font:
10
+ 14px/1.65 -apple-system,
11
+ BlinkMacSystemFont,
12
+ 'Segoe UI',
13
+ sans-serif;
14
+ background: white;
15
+ color: var(--ink);
16
+ }
17
+ * {
18
+ box-sizing: border-box;
19
+ }
20
+ body {
21
+ margin: 0;
22
+ background: white;
23
+ }
24
+ a {
25
+ color: var(--link);
26
+ text-decoration: none;
27
+ }
28
+ a:visited {
29
+ color: var(--visited);
30
+ }
31
+ a:hover {
32
+ text-decoration: underline;
33
+ text-underline-offset: 3px;
34
+ }
35
+ button,
36
+ input {
37
+ font: inherit;
38
+ }
39
+ button {
40
+ cursor: pointer;
41
+ }
42
+ a:focus-visible,
43
+ button:focus-visible,
44
+ input:focus-visible,
45
+ summary:focus-visible {
46
+ outline: 2px solid var(--link);
47
+ outline-offset: 4px;
48
+ }
49
+ [hidden] {
50
+ display: none !important;
51
+ }
52
+ .sidebar {
53
+ position: fixed;
54
+ inset: 0 auto 0 0;
55
+ width: 214px;
56
+ padding: 32px 26px;
57
+ border-right: 1px solid var(--line);
58
+ display: flex;
59
+ flex-direction: column;
60
+ background: white;
61
+ }
62
+ .brand {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: 12px;
66
+ color: var(--ink) !important;
67
+ width: fit-content;
68
+ }
69
+ .brand-mark {
70
+ font:
71
+ 600 27px ui-monospace,
72
+ SFMono-Regular,
73
+ Consolas,
74
+ monospace;
75
+ letter-spacing: -1.5px;
76
+ }
77
+ .brand > span:last-child {
78
+ font-size: 14px;
79
+ font-weight: 550;
80
+ }
81
+ .brand:hover {
82
+ text-decoration: none;
83
+ }
84
+ .nav-label {
85
+ font-size: 11px;
86
+ color: var(--muted);
87
+ margin: 38px 0 10px;
88
+ }
89
+ .project-name {
90
+ font-size: 14px;
91
+ font-weight: 500;
92
+ }
93
+ #features {
94
+ display: flex;
95
+ flex-direction: column;
96
+ gap: 12px;
97
+ font-size: 13px;
98
+ }
99
+ #features a.active {
100
+ color: var(--link);
101
+ }
102
+ .sidebar-footer {
103
+ margin-top: auto;
104
+ font-size: 12px;
105
+ display: flex;
106
+ flex-direction: column;
107
+ gap: 12px;
108
+ }
109
+ .sidebar-footer span {
110
+ font-size: 10px;
111
+ color: var(--muted);
112
+ }
113
+ main {
114
+ margin-left: 214px;
115
+ width: min(1114px, calc(100% - 214px));
116
+ padding: 26px 50px 32px;
117
+ }
118
+ .search-row {
119
+ position: sticky;
120
+ top: 0;
121
+ z-index: 2;
122
+ display: flex;
123
+ align-items: center;
124
+ background: white;
125
+ padding: 0 0 18px;
126
+ margin: 0 0 28px;
127
+ border-bottom: 1px solid var(--line);
128
+ }
129
+ #search {
130
+ border: 0;
131
+ outline-offset: 2px;
132
+ background: white;
133
+ width: 100%;
134
+ padding: 11px 28px 11px 0;
135
+ font-size: 13px;
136
+ color: var(--ink);
137
+ }
138
+ #search::placeholder {
139
+ color: #777;
140
+ }
141
+ .search-row kbd {
142
+ position: absolute;
143
+ right: 2px;
144
+ font-size: 11px;
145
+ color: var(--muted);
146
+ border: 1px solid var(--line);
147
+ border-radius: 3px;
148
+ padding: 0 5px;
149
+ }
150
+ h1 {
151
+ font-size: 30px;
152
+ line-height: 1.2;
153
+ font-weight: 600;
154
+ letter-spacing: -0.8px;
155
+ margin: 0 0 14px;
156
+ }
157
+ h2 {
158
+ font-size: 18px;
159
+ font-weight: 550;
160
+ letter-spacing: -0.25px;
161
+ margin: 38px 0 18px;
162
+ }
163
+ h3 {
164
+ font-size: 14px;
165
+ font-weight: 550;
166
+ margin: 25px 0 10px;
167
+ }
168
+ p {
169
+ margin: 0 0 15px;
170
+ }
171
+ .description {
172
+ font-size: 14px;
173
+ line-height: 1.8;
174
+ max-width: 750px;
175
+ margin-bottom: 18px;
176
+ }
177
+ .feature-url {
178
+ display: flex;
179
+ align-items: baseline;
180
+ gap: 14px;
181
+ font-size: 12px;
182
+ color: var(--muted);
183
+ margin: 0 0 34px;
184
+ }
185
+ .feature-url code {
186
+ font-size: 12px;
187
+ color: var(--ink);
188
+ }
189
+ .back {
190
+ font-size: 12px;
191
+ display: inline-block;
192
+ margin: 0 0 22px;
193
+ }
194
+ .endpoint-heading {
195
+ display: flex;
196
+ align-items: baseline;
197
+ flex-wrap: wrap;
198
+ gap: 13px;
199
+ margin: 0 0 10px;
200
+ }
201
+ .endpoint-heading a {
202
+ font:
203
+ 13px ui-monospace,
204
+ SFMono-Regular,
205
+ Consolas,
206
+ monospace;
207
+ overflow-wrap: anywhere;
208
+ }
209
+ .method {
210
+ display: inline-block;
211
+ flex-shrink: 0;
212
+ font:
213
+ 600 10px ui-monospace,
214
+ SFMono-Regular,
215
+ Consolas,
216
+ monospace;
217
+ letter-spacing: 0.2px;
218
+ padding: 3px 7px;
219
+ border-radius: 3px;
220
+ vertical-align: middle;
221
+ }
222
+ .method.get {
223
+ color: #197047;
224
+ background: #f0f8f3;
225
+ }
226
+ .method.post {
227
+ color: #7543a6;
228
+ background: #f7f2fa;
229
+ }
230
+ .method.put {
231
+ color: #91620e;
232
+ background: #fff9eb;
233
+ }
234
+ .method.patch {
235
+ color: #91620e;
236
+ background: #fff9eb;
237
+ }
238
+ .method.delete {
239
+ color: var(--error);
240
+ background: #fff4f2;
241
+ }
242
+ .endpoint {
243
+ border-top: 1px solid var(--line);
244
+ padding: 23px 0 28px;
245
+ }
246
+ .endpoint-summary {
247
+ font-size: 13px;
248
+ color: var(--muted);
249
+ margin: 0 0 15px;
250
+ }
251
+ .io-grid {
252
+ display: grid;
253
+ grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr);
254
+ gap: 30px;
255
+ }
256
+ .io-heading {
257
+ font-size: 11px;
258
+ color: var(--muted);
259
+ font-weight: 400;
260
+ margin: 0 0 10px;
261
+ }
262
+ .io-heading strong {
263
+ font-weight: 500;
264
+ color: var(--ink);
265
+ }
266
+ .request-part {
267
+ font-size: 10px;
268
+ color: var(--muted);
269
+ margin: 12px 0 5px;
270
+ }
271
+ .request-part:first-child {
272
+ margin-top: 0;
273
+ }
274
+ .signature {
275
+ font:
276
+ 11px/1.85 ui-monospace,
277
+ SFMono-Regular,
278
+ Consolas,
279
+ monospace;
280
+ color: var(--ink);
281
+ overflow-wrap: anywhere;
282
+ }
283
+ .signature-body {
284
+ padding-left: 15px;
285
+ border-left: 1px solid var(--line);
286
+ margin-left: 3px;
287
+ }
288
+ .field {
289
+ margin: 2px 0;
290
+ }
291
+ .field-name {
292
+ font-weight: 500;
293
+ }
294
+ .field-type {
295
+ color: #555;
296
+ }
297
+ .field-constraint {
298
+ font:
299
+ 10px/1.6 -apple-system,
300
+ BlinkMacSystemFont,
301
+ 'Segoe UI',
302
+ sans-serif;
303
+ color: var(--muted);
304
+ margin-left: 8px;
305
+ }
306
+ .inline-object {
307
+ margin: 2px 0;
308
+ }
309
+ .inline-object > summary {
310
+ cursor: pointer;
311
+ list-style: none;
312
+ padding-right: 8px;
313
+ }
314
+ .inline-object > summary::-webkit-details-marker {
315
+ display: none;
316
+ }
317
+ .object-pill {
318
+ display: inline-block;
319
+ background: #fff8d5;
320
+ color: #38311c;
321
+ padding: 0 5px;
322
+ border: 1px solid #f0e7be;
323
+ border-radius: 3px;
324
+ }
325
+ .inline-object[open] > summary .object-pill {
326
+ background: #fffdf0;
327
+ }
328
+ .inline-object > div {
329
+ margin: 5px 0 7px 13px;
330
+ }
331
+ .inline-object .field-note {
332
+ font:
333
+ 11px/1.65 -apple-system,
334
+ BlinkMacSystemFont,
335
+ 'Segoe UI',
336
+ sans-serif;
337
+ color: var(--muted);
338
+ }
339
+ .behaviour-preview {
340
+ font-size: 12px;
341
+ line-height: 1.8;
342
+ margin: 15px 0 0;
343
+ color: #555;
344
+ }
345
+ .behaviour-preview b {
346
+ font-weight: 500;
347
+ color: var(--ink);
348
+ }
349
+ .rule-list {
350
+ list-style: none;
351
+ padding: 0;
352
+ margin: 0;
353
+ }
354
+ .rule-list > li {
355
+ margin: 0;
356
+ padding: 15px 0;
357
+ border-bottom: 1px solid var(--line);
358
+ scroll-margin-top: 95px;
359
+ }
360
+ .rule-list > li:last-child {
361
+ border-bottom: 0;
362
+ }
363
+ .rule-text {
364
+ font-size: 13px;
365
+ line-height: 1.8;
366
+ white-space: pre-line;
367
+ }
368
+ .rule-id {
369
+ font:
370
+ 10px ui-monospace,
371
+ SFMono-Regular,
372
+ Consolas,
373
+ monospace;
374
+ color: var(--muted);
375
+ display: block;
376
+ margin-top: 7px;
377
+ }
378
+ .rule-id:visited {
379
+ color: var(--visited);
380
+ }
381
+ .endpoint-title {
382
+ font:
383
+ 500 21px/1.5 ui-monospace,
384
+ SFMono-Regular,
385
+ Consolas,
386
+ monospace;
387
+ letter-spacing: -0.4px;
388
+ overflow-wrap: anywhere;
389
+ }
390
+ .endpoint-title .method {
391
+ margin-right: 8px;
392
+ }
393
+ .page-actions {
394
+ display: flex;
395
+ gap: 18px;
396
+ font-size: 12px;
397
+ margin: 18px 0 28px;
398
+ }
399
+ .text-button {
400
+ padding: 0;
401
+ border: 0;
402
+ background: none;
403
+ color: var(--link);
404
+ font-size: 12px;
405
+ }
406
+ .section-note {
407
+ font-size: 12px;
408
+ color: var(--muted);
409
+ line-height: 1.8;
410
+ }
411
+ .disclosure {
412
+ border-top: 1px solid var(--line);
413
+ padding: 14px 0;
414
+ margin: 0;
415
+ }
416
+ .disclosure > summary {
417
+ cursor: pointer;
418
+ font-size: 12px;
419
+ }
420
+ .disclosure > div {
421
+ margin-top: 16px;
422
+ }
423
+ .check-list {
424
+ list-style: none;
425
+ padding: 0;
426
+ margin: 0;
427
+ }
428
+ .check-list > li {
429
+ display: flex;
430
+ gap: 18px;
431
+ justify-content: space-between;
432
+ border-bottom: 1px solid var(--line);
433
+ padding: 12px 0;
434
+ font-size: 12px;
435
+ }
436
+ .check-list > li:last-child {
437
+ border: 0;
438
+ }
439
+ .check-status {
440
+ font-size: 11px;
441
+ color: var(--muted);
442
+ white-space: nowrap;
443
+ }
444
+ .failing,
445
+ .error {
446
+ color: var(--error);
447
+ }
448
+ .table {
449
+ border-collapse: collapse;
450
+ width: 100%;
451
+ font-size: 12px;
452
+ }
453
+ .table th,
454
+ .table td {
455
+ text-align: left;
456
+ vertical-align: top;
457
+ border-bottom: 1px solid var(--line);
458
+ padding: 12px 16px 12px 0;
459
+ }
460
+ .table th {
461
+ font-size: 10px;
462
+ font-weight: 400;
463
+ color: var(--muted);
464
+ }
465
+ .table tr:last-child td {
466
+ border: 0;
467
+ }
468
+ .scenario {
469
+ border-top: 1px solid var(--line);
470
+ padding: 18px 0;
471
+ }
472
+ .scenario h3 {
473
+ margin: 0 0 12px;
474
+ }
475
+ .scenario-line {
476
+ display: grid;
477
+ grid-template-columns: 44px 1fr;
478
+ gap: 12px;
479
+ font-size: 12px;
480
+ margin: 7px 0;
481
+ }
482
+ .scenario-line b {
483
+ font-size: 10px;
484
+ font-weight: 400;
485
+ color: var(--muted);
486
+ }
487
+ figure.diagram {
488
+ margin: 28px 0 36px;
489
+ }
490
+ figure.diagram figcaption {
491
+ font-size: 12px;
492
+ font-weight: 500;
493
+ margin-bottom: 14px;
494
+ }
495
+ .diagram-canvas {
496
+ width: 100%;
497
+ overflow: auto;
498
+ min-height: 40px;
499
+ text-align: center;
500
+ }
501
+ .diagram-canvas svg {
502
+ max-width: 100%;
503
+ height: auto;
504
+ }
505
+ .diagram-source {
506
+ margin-top: 10px;
507
+ color: var(--muted);
508
+ font-size: 10px;
509
+ }
510
+ .diagram-source summary {
511
+ cursor: pointer;
512
+ }
513
+ .diagram-error {
514
+ font-size: 12px;
515
+ color: var(--muted);
516
+ text-align: left;
517
+ padding: 15px 0;
518
+ }
519
+ pre {
520
+ font:
521
+ 11px/1.8 ui-monospace,
522
+ SFMono-Regular,
523
+ Consolas,
524
+ monospace;
525
+ white-space: pre-wrap;
526
+ overflow-wrap: anywhere;
527
+ padding: 15px;
528
+ background: #fafafa;
529
+ border: 1px solid var(--line);
530
+ max-height: 420px;
531
+ overflow: auto;
532
+ }
533
+ code {
534
+ font:
535
+ 11px ui-monospace,
536
+ SFMono-Regular,
537
+ Consolas,
538
+ monospace;
539
+ }
540
+ .empty {
541
+ font-size: 13px;
542
+ color: var(--muted);
543
+ padding: 20px 0;
544
+ }
545
+ .empty strong {
546
+ display: block;
547
+ color: var(--ink);
548
+ font-weight: 500;
549
+ margin-bottom: 6px;
550
+ }
551
+ .search-result {
552
+ padding: 17px 0;
553
+ border-bottom: 1px solid var(--line);
554
+ }
555
+ .search-result > a {
556
+ display: block;
557
+ font-size: 13px;
558
+ }
559
+ .search-result > p {
560
+ font-size: 12px;
561
+ color: var(--muted);
562
+ margin: 5px 0 0;
563
+ }
564
+ .page-footer {
565
+ display: flex;
566
+ justify-content: space-between;
567
+ gap: 16px;
568
+ border-top: 1px solid var(--line);
569
+ padding-top: 16px;
570
+ margin-top: 38px;
571
+ color: var(--muted);
572
+ font-size: 10px;
573
+ }
574
+ .source-path {
575
+ font:
576
+ 11px ui-monospace,
577
+ SFMono-Regular,
578
+ Consolas,
579
+ monospace;
580
+ overflow-wrap: anywhere;
581
+ }
582
+ .sr-only {
583
+ position: absolute;
584
+ width: 1px;
585
+ height: 1px;
586
+ padding: 0;
587
+ margin: -1px;
588
+ overflow: hidden;
589
+ clip: rect(0, 0, 0, 0);
590
+ white-space: nowrap;
591
+ border: 0;
592
+ }
593
+ @media (max-width: 1100px) {
594
+ main {
595
+ padding: 24px 34px;
596
+ }
597
+ .io-grid {
598
+ gap: 23px;
599
+ }
600
+ }
601
+ @media (max-width: 760px) {
602
+ .sidebar {
603
+ position: static;
604
+ inset: auto;
605
+ width: 100%;
606
+ padding: 17px 23px;
607
+ border-right: 0;
608
+ border-bottom: 1px solid var(--line);
609
+ display: grid;
610
+ grid-template-columns: auto 1fr;
611
+ gap: 8px 25px;
612
+ }
613
+ .brand {
614
+ grid-row: span 2;
615
+ }
616
+ .brand > span:last-child,
617
+ .sidebar .nav-label,
618
+ .sidebar-footer span {
619
+ display: none;
620
+ }
621
+ .project-name {
622
+ font-size: 11px;
623
+ color: var(--muted);
624
+ }
625
+ #features {
626
+ font-size: 12px;
627
+ }
628
+ .sidebar-footer {
629
+ grid-column: 2;
630
+ position: absolute;
631
+ right: 24px;
632
+ top: 18px;
633
+ }
634
+ main {
635
+ margin: 0;
636
+ width: 100%;
637
+ padding: 18px 24px;
638
+ }
639
+ .search-row {
640
+ margin-bottom: 24px;
641
+ }
642
+ h1 {
643
+ font-size: 27px;
644
+ }
645
+ .io-grid {
646
+ grid-template-columns: 1fr;
647
+ gap: 20px;
648
+ }
649
+ .endpoint {
650
+ padding: 22px 0;
651
+ }
652
+ .endpoint-heading a {
653
+ font-size: 12px;
654
+ }
655
+ .endpoint-title {
656
+ font-size: 17px;
657
+ }
658
+ .table td,
659
+ .table th {
660
+ padding-right: 10px;
661
+ }
662
+ .search-row kbd {
663
+ display: none;
664
+ }
665
+ .check-list > li {
666
+ gap: 10px;
667
+ }
668
+ .page-footer {
669
+ flex-wrap: wrap;
670
+ }
671
+ }
672
+
673
+ .attachment-block {
674
+ font: inherit;
675
+ }
676
+ .attachment-zone > .add-visual {
677
+ display: inline-flex;
678
+ align-items: center;
679
+ justify-content: center;
680
+ vertical-align: baseline;
681
+ width: 22px;
682
+ height: 22px;
683
+ margin-left: 6px;
684
+ font-size: 15px;
685
+ line-height: 1;
686
+ opacity: 0;
687
+ pointer-events: none;
688
+ }
689
+ .attachment-zone:hover > .add-visual,
690
+ .attachment-zone:focus-within > .add-visual {
691
+ opacity: 1;
692
+ pointer-events: auto;
693
+ }
694
+ .visual-context {
695
+ display: block;
696
+ font-size: 10px;
697
+ color: var(--muted);
698
+ margin-bottom: 4px;
699
+ }
700
+ .visual-gallery {
701
+ display: flex;
702
+ flex-wrap: wrap;
703
+ gap: 18px;
704
+ margin: 10px 0;
705
+ }
706
+ .visual {
707
+ margin: 0;
708
+ max-width: 320px;
709
+ }
710
+ .visual img {
711
+ display: block;
712
+ width: auto;
713
+ max-width: 100%;
714
+ max-height: 210px;
715
+ object-fit: contain;
716
+ border: 1px solid var(--line);
717
+ margin-bottom: 8px;
718
+ }
719
+ .visual figcaption {
720
+ font-size: 11px;
721
+ color: var(--muted);
722
+ margin-top: 4px;
723
+ }
724
+ .visual-editor {
725
+ max-width: 440px;
726
+ margin: 12px 0;
727
+ padding: 18px;
728
+ border: 1px solid var(--line);
729
+ border-radius: 4px;
730
+ background: white;
731
+ }
732
+ .visual-form label {
733
+ display: block;
734
+ margin-bottom: 12px;
735
+ font-size: 12px;
736
+ }
737
+ .visual-form input {
738
+ display: block;
739
+ width: 100%;
740
+ padding: 7px 9px;
741
+ border: 1px solid #ddd;
742
+ border-radius: 3px;
743
+ margin-top: 4px;
744
+ background: white;
745
+ font-size: 12px;
746
+ }
747
+ .visual-form input[type='file'] {
748
+ border: 0;
749
+ padding: 0;
750
+ }
751
+ .visual-form .section-note {
752
+ font-size: 11px;
753
+ }
754
+ .visual-actions {
755
+ display: flex;
756
+ gap: 18px;
757
+ margin-top: 16px;
758
+ }
759
+ .visual-message {
760
+ margin: 12px 0 0;
761
+ }
762
+ .visual-message:empty {
763
+ display: none;
764
+ }
765
+ @media (hover: none) {
766
+ .attachment-zone > .add-visual {
767
+ opacity: 1;
768
+ pointer-events: auto;
769
+ }
770
+ }
771
+ .type-link {
772
+ font: inherit;
773
+ }
774
+ .type-usage-group h3 {
775
+ font-size: 13px;
776
+ font-weight: 500;
777
+ margin: 22px 0 6px;
778
+ }
779
+ .type-usage-list,
780
+ .type-parent-list {
781
+ list-style: none;
782
+ margin: 0;
783
+ padding: 0;
784
+ }
785
+ .type-usage-list li {
786
+ display: flex;
787
+ align-items: baseline;
788
+ flex-wrap: wrap;
789
+ gap: 8px 12px;
790
+ padding: 10px 0;
791
+ border-bottom: 1px solid var(--line);
792
+ font-size: 12px;
793
+ }
794
+ .type-usage-list li > a {
795
+ font:
796
+ 11px ui-monospace,
797
+ SFMono-Regular,
798
+ Consolas,
799
+ monospace;
800
+ overflow-wrap: anywhere;
801
+ }
802
+ .type-usage-list li > .section-note {
803
+ font-size: 11px;
804
+ margin-left: auto;
805
+ }
806
+ .type-parent-list li {
807
+ display: flex;
808
+ align-items: baseline;
809
+ flex-wrap: wrap;
810
+ gap: 6px 16px;
811
+ padding: 9px 0;
812
+ font-size: 12px;
813
+ }
814
+ .type-parent-list .section-note {
815
+ font-size: 11px;
816
+ }
817
+ .type-source {
818
+ font-size: 10px;
819
+ margin-top: 28px;
820
+ overflow-wrap: anywhere;
821
+ }
822
+ @media (max-width: 760px) {
823
+ .type-usage-list li > .section-note {
824
+ margin-left: 0;
825
+ width: 100%;
826
+ padding-left: 48px;
827
+ }
828
+ }
829
+ .comparison-bar {
830
+ display: flex;
831
+ align-items: baseline;
832
+ flex-wrap: wrap;
833
+ gap: 8px 18px;
834
+ padding: 10px 0;
835
+ margin-bottom: 24px;
836
+ border-bottom: 1px solid var(--line);
837
+ font-size: 11px;
838
+ color: var(--muted);
839
+ }
840
+ .comparison-bar button {
841
+ margin-left: auto;
842
+ }
843
+ .change-badge,
844
+ .change-status {
845
+ font:
846
+ 10px system-ui,
847
+ sans-serif;
848
+ display: inline-block;
849
+ padding: 2px 6px;
850
+ border-radius: 3px;
851
+ }
852
+ .change-badge {
853
+ margin-left: 12px;
854
+ vertical-align: middle;
855
+ }
856
+ .change-badge.added,
857
+ .change-status.added,
858
+ [data-change='added'] > .field-change,
859
+ [data-change='added'] > summary > .field-change {
860
+ background: #eef8ee;
861
+ }
862
+ .change-badge.changed,
863
+ .change-status.changed,
864
+ [data-change='changed'] > .field-change,
865
+ [data-change='changed'] > summary > .field-change {
866
+ background: #fff7d6;
867
+ }
868
+ .change-status.removed,
869
+ [data-change='removed'] > .field-change {
870
+ background: #fbefef;
871
+ }
872
+ .change-link.added {
873
+ border-bottom: 2px solid #c9e5c9;
874
+ }
875
+ .change-link.changed {
876
+ border-bottom: 2px solid #ecdba0;
877
+ }
878
+ .field-change {
879
+ font:
880
+ 9px system-ui,
881
+ sans-serif;
882
+ margin-left: 10px;
883
+ padding: 1px 4px;
884
+ white-space: nowrap;
885
+ color: #555;
886
+ }
887
+ [data-change='removed'] > .field-name,
888
+ [data-change='removed'] > .field-type {
889
+ text-decoration: line-through;
890
+ color: var(--muted);
891
+ }
892
+ .change-counts {
893
+ font-size: 12px;
894
+ margin: 22px 0;
895
+ }
896
+ .baseline-picker {
897
+ max-width: 640px;
898
+ }
899
+ .baseline-file {
900
+ display: block;
901
+ font-size: 12px;
902
+ }
903
+ .baseline-file input {
904
+ display: block;
905
+ margin: 12px 0;
906
+ font-size: 12px;
907
+ max-width: 100%;
908
+ }
909
+ .comparison-error:empty {
910
+ display: none;
911
+ }
912
+ .changes-filter {
913
+ display: flex;
914
+ align-items: center;
915
+ gap: 12px;
916
+ font-size: 12px;
917
+ margin: 25px 0;
918
+ }
919
+ .changes-filter select {
920
+ background: white;
921
+ border: 1px solid #ddd;
922
+ border-radius: 3px;
923
+ padding: 6px 10px;
924
+ font: inherit;
925
+ }
926
+ .changes-list {
927
+ list-style: none;
928
+ margin: 0;
929
+ padding: 0;
930
+ }
931
+ .changes-list > li {
932
+ display: grid;
933
+ grid-template-columns: 65px 1fr;
934
+ gap: 16px;
935
+ align-items: baseline;
936
+ padding: 16px 0;
937
+ border-bottom: 1px solid var(--line);
938
+ }
939
+ .change-status {
940
+ justify-self: start;
941
+ }
942
+ .changes-list a {
943
+ font-size: 13px;
944
+ }
945
+ .change-kind {
946
+ font-size: 10px;
947
+ color: var(--muted);
948
+ margin-left: 12px;
949
+ }
950
+ .changes-list p {
951
+ margin: 5px 0 0;
952
+ font-size: 11px;
953
+ }
954
+ .diff-table-wrap {
955
+ overflow-x: auto;
956
+ }
957
+ .diff-table {
958
+ table-layout: fixed;
959
+ width: 100%;
960
+ margin-top: 28px;
961
+ }
962
+ .diff-table th:first-child {
963
+ width: 24%;
964
+ }
965
+ .diff-table th[scope='row'] {
966
+ font-weight: 400;
967
+ overflow-wrap: anywhere;
968
+ vertical-align: top;
969
+ }
970
+ .diff-table th[scope='row'] .field-change {
971
+ display: block;
972
+ margin: 6px 0 0;
973
+ padding: 0;
974
+ }
975
+ .diff-table td {
976
+ vertical-align: top;
977
+ }
978
+ .diff-table pre {
979
+ white-space: pre-wrap;
980
+ overflow-wrap: anywhere;
981
+ background: transparent;
982
+ border: 0;
983
+ padding: 0;
984
+ margin: 0;
985
+ max-height: none;
986
+ font-size: 11px;
987
+ }
988
+ .diff-table th,
989
+ .diff-table td {
990
+ border-bottom: 1px solid var(--line);
991
+ }
992
+ @media (max-width: 760px) {
993
+ .diff-table {
994
+ min-width: 570px;
995
+ }
996
+ .comparison-bar button {
997
+ margin-left: 0;
998
+ }
999
+ .change-kind {
1000
+ display: block;
1001
+ margin: 5px 0 0;
1002
+ }
1003
+ }