@pagenary/publisher 2026.5.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 (147) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +337 -0
  3. package/bin/pagenary.mjs +116 -0
  4. package/build.config.json +5 -0
  5. package/package.json +66 -0
  6. package/scripts/build-site.js +87 -0
  7. package/scripts/build-tenants.js +3569 -0
  8. package/scripts/build.js +99 -0
  9. package/scripts/generate-sections.js +41 -0
  10. package/scripts/lib/seo-generator.js +558 -0
  11. package/scripts/lint-content.js +62 -0
  12. package/scripts/seo-smoke.js +94 -0
  13. package/scripts/serve.js +142 -0
  14. package/site/app.js +1 -0
  15. package/site/index.html +57 -0
  16. package/site/lib/categories.js +1 -0
  17. package/site/lib/export.js +1 -0
  18. package/site/lib/manifest-utils.js +1 -0
  19. package/site/lib/router.js +1 -0
  20. package/site/lib/search.js +1 -0
  21. package/site/llms.txt +22 -0
  22. package/site/manifest.js +132 -0
  23. package/site/mermaid-init.js +1 -0
  24. package/site/pages/api.html +339 -0
  25. package/site/pages/architecture.html +303 -0
  26. package/site/pages/deployment.html +282 -0
  27. package/site/pages/developer-guide.html +157 -0
  28. package/site/pages/extending.html +135 -0
  29. package/site/pages/quickstart.html +318 -0
  30. package/site/pages/seo-strategy.html +121 -0
  31. package/site/pages/tenant-config.html +519 -0
  32. package/site/pages/welcome.html +116 -0
  33. package/site/robots.txt +10 -0
  34. package/site/sections/api.js +3 -0
  35. package/site/sections/architecture.js +3 -0
  36. package/site/sections/deployment.js +3 -0
  37. package/site/sections/developer-guide.js +3 -0
  38. package/site/sections/extending.js +3 -0
  39. package/site/sections/quickstart.js +3 -0
  40. package/site/sections/section-templates.js +1 -0
  41. package/site/sections/seo-strategy.js +3 -0
  42. package/site/sections/tenant-config.js +3 -0
  43. package/site/sections/welcome.js +3 -0
  44. package/site/seo.js +1 -0
  45. package/site/sitemap.xml +63 -0
  46. package/site/styles.css +1982 -0
  47. package/site/syntax-highlight.js +1 -0
  48. package/src/app.js +988 -0
  49. package/src/index.html +56 -0
  50. package/src/lib/categories.js +55 -0
  51. package/src/lib/export.js +195 -0
  52. package/src/lib/manifest-utils.js +69 -0
  53. package/src/lib/router.js +44 -0
  54. package/src/lib/search.js +151 -0
  55. package/src/manifest.js +246 -0
  56. package/src/mermaid-init.js +207 -0
  57. package/src/sections/archive-future-roadmap.js +7 -0
  58. package/src/sections/archive-initiative-alpha.js +7 -0
  59. package/src/sections/archive-milestone-records.js +7 -0
  60. package/src/sections/archive-timeline-overview.js +7 -0
  61. package/src/sections/core-technology-compliance-frameworks.js +7 -0
  62. package/src/sections/core-technology-coordination-model.js +7 -0
  63. package/src/sections/core-technology-data-definitions.js +7 -0
  64. package/src/sections/core-technology-hardware-integration.js +7 -0
  65. package/src/sections/core-technology-integrity-controls.js +7 -0
  66. package/src/sections/core-technology-network-topology.js +7 -0
  67. package/src/sections/core-technology-operator-requirements.js +7 -0
  68. package/src/sections/core-technology-overview.js +7 -0
  69. package/src/sections/core-technology-service-interfaces.js +7 -0
  70. package/src/sections/core-technology-synchronization-strategy.js +7 -0
  71. package/src/sections/core-technology-system-foundation.js +7 -0
  72. package/src/sections/developers-api-credentials.js +7 -0
  73. package/src/sections/developers-api-operations.js +7 -0
  74. package/src/sections/developers-api-reference.js +7 -0
  75. package/src/sections/developers-api-websocket.js +7 -0
  76. package/src/sections/developers-automation-blueprints.js +7 -0
  77. package/src/sections/developers-automation-modules.js +7 -0
  78. package/src/sections/developers-automation-patterns.js +7 -0
  79. package/src/sections/developers-deployment-playbook.js +7 -0
  80. package/src/sections/developers-overview.js +7 -0
  81. package/src/sections/developers-scheduling-patterns.js +7 -0
  82. package/src/sections/developers-sdk-go.js +7 -0
  83. package/src/sections/developers-sdk-javascript.js +7 -0
  84. package/src/sections/developers-sdk-python.js +7 -0
  85. package/src/sections/developers-sdk-rust.js +7 -0
  86. package/src/sections/developers-sdks.js +7 -0
  87. package/src/sections/developers-solution-examples.js +7 -0
  88. package/src/sections/developers-testing-framework.js +7 -0
  89. package/src/sections/getting-started-architecture-basics.js +7 -0
  90. package/src/sections/getting-started-introduction.js +7 -0
  91. package/src/sections/getting-started-performance-overview.js +7 -0
  92. package/src/sections/governance-community-initiatives.js +7 -0
  93. package/src/sections/governance-dao-overview.js +7 -0
  94. package/src/sections/governance-multi-token.js +7 -0
  95. package/src/sections/governance-overview.js +7 -0
  96. package/src/sections/governance-proposal-process.js +7 -0
  97. package/src/sections/governance-proposals.js +7 -0
  98. package/src/sections/governance-structure.js +7 -0
  99. package/src/sections/governance-token-distribution.js +7 -0
  100. package/src/sections/governance-treasury.js +7 -0
  101. package/src/sections/operations-environment-prep.js +7 -0
  102. package/src/sections/operations-getting-started.js +7 -0
  103. package/src/sections/operations-incentives-guide.js +7 -0
  104. package/src/sections/operations-incentives-strategies.js +7 -0
  105. package/src/sections/operations-incentives.js +7 -0
  106. package/src/sections/operations-infrastructure.js +7 -0
  107. package/src/sections/operations-monitoring.js +7 -0
  108. package/src/sections/operations-overview.js +7 -0
  109. package/src/sections/operations-performance.js +7 -0
  110. package/src/sections/operations-power-infrastructure.js +7 -0
  111. package/src/sections/operations-setup-guide.js +7 -0
  112. package/src/sections/operations-sync-setup.js +7 -0
  113. package/src/sections/products-flagship-solution.js +7 -0
  114. package/src/sections/products-solution-library.js +7 -0
  115. package/src/sections/resources-brand-assets.js +7 -0
  116. package/src/sections/resources-faq.js +7 -0
  117. package/src/sections/resources-glossary.js +7 -0
  118. package/src/sections/resources-research-papers.js +7 -0
  119. package/src/sections/section-templates.js +873 -0
  120. package/src/sections/security-audits.js +7 -0
  121. package/src/sections/security-best-practices.js +7 -0
  122. package/src/sections/security-bug-bounty.js +7 -0
  123. package/src/sections/security-incident-response.js +7 -0
  124. package/src/sections/security-overview.js +7 -0
  125. package/src/sections/technical-architecture.js +7 -0
  126. package/src/sections/technical-whitepaper.js +7 -0
  127. package/src/sections/tutorial-automation-bot.js +7 -0
  128. package/src/sections/tutorial-build-first-integration.js +7 -0
  129. package/src/sections/tutorial-deploy-automation.js +7 -0
  130. package/src/sections/tutorial-event-driven-experience.js +7 -0
  131. package/src/sections/tutorial-operations-onboarding.js +7 -0
  132. package/src/sections/tutorial-systems-integration.js +7 -0
  133. package/src/sections/tutorials-overview.js +7 -0
  134. package/src/sections/use-case-connected-devices.js +7 -0
  135. package/src/sections/use-case-digital-auctions.js +7 -0
  136. package/src/sections/use-case-financial-automation.js +7 -0
  137. package/src/sections/use-case-interactive-media.js +7 -0
  138. package/src/sections/use-case-realtime-execution.js +7 -0
  139. package/src/sections/use-case-research-analytics.js +7 -0
  140. package/src/sections/use-case-supply-operations.js +7 -0
  141. package/src/sections/use-cases-overview.js +7 -0
  142. package/src/sections/welcome-overview.js +7 -0
  143. package/src/seo.js +90 -0
  144. package/src/styles.css +1982 -0
  145. package/src/syntax-highlight.js +90 -0
  146. package/tenants.json.example +68 -0
  147. package/tenants.schema.json +231 -0
@@ -0,0 +1,1982 @@
1
+ :root {
2
+ color-scheme: light;
3
+ --surface: #ffffff;
4
+ --surface-rgb: 255, 255, 255;
5
+ --ink: #0b0b0b;
6
+ --muted: #5a5a5a;
7
+ --accent: #111111;
8
+ --grid-line: rgba(0, 0, 0, 0.08);
9
+ --font-body: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
10
+ --font-mono: 'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
11
+ --step: clamp(1.6rem, 1.5vw + 1.2rem, 2.2rem);
12
+ --highlight-bg: rgba(255, 214, 126, 0.45);
13
+ --highlight-border: rgba(0, 0, 0, 0.35);
14
+ }
15
+
16
+ * {
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ html, body {
21
+ margin: 0;
22
+ background: var(--surface);
23
+ color: var(--ink);
24
+ font-family: var(--font-body);
25
+ min-height: 100%;
26
+ }
27
+
28
+ body {
29
+ display: grid;
30
+ grid-template-rows: auto 1fr auto;
31
+ min-height: 100vh;
32
+ height: 100vh;
33
+ overflow: hidden;
34
+ }
35
+
36
+ a {
37
+ color: inherit;
38
+ text-decoration: none;
39
+ }
40
+
41
+ a:hover,
42
+ a:focus {
43
+ text-decoration: underline;
44
+ }
45
+
46
+ .skip-link {
47
+ position: absolute;
48
+ left: -999px;
49
+ top: auto;
50
+ width: 1px;
51
+ height: 1px;
52
+ overflow: hidden;
53
+ }
54
+
55
+ .skip-link:focus {
56
+ position: fixed;
57
+ left: 1rem;
58
+ top: 1rem;
59
+ width: auto;
60
+ height: auto;
61
+ padding: 0.5rem 0.75rem;
62
+ background: var(--ink);
63
+ color: var(--surface);
64
+ letter-spacing: 0.08em;
65
+ }
66
+
67
+ .shell {
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: space-between;
71
+ padding: 1.5rem clamp(1.5rem, 4vw, 4rem);
72
+ border-bottom: 1px solid var(--grid-line);
73
+ }
74
+
75
+ .topbar {
76
+ position: sticky;
77
+ top: 0;
78
+ z-index: 5;
79
+ backdrop-filter: blur(6px);
80
+ background: rgba(var(--surface-rgb), 0.92);
81
+ }
82
+
83
+ .top-actions {
84
+ display: inline-flex;
85
+ gap: 0.75rem;
86
+ }
87
+
88
+ .ghost-button {
89
+ display: inline-flex;
90
+ align-items: center;
91
+ gap: 0.4rem;
92
+ border: 1px solid var(--grid-line);
93
+ background: transparent;
94
+ padding: 0.4rem 0.75rem;
95
+ font-size: 0.82rem;
96
+ letter-spacing: 0.08em;
97
+ text-transform: uppercase;
98
+ cursor: pointer;
99
+ border-radius: 999px;
100
+ transition: background 150ms ease, border-color 150ms ease, color 150ms ease;
101
+ }
102
+
103
+ .ghost-button:hover,
104
+ .ghost-button:focus-visible {
105
+ background: rgba(0, 0, 0, 0.08);
106
+ border-color: rgba(0, 0, 0, 0.3);
107
+ }
108
+
109
+ .ghost-label {
110
+ font-size: 0.72rem;
111
+ letter-spacing: 0.2em;
112
+ text-transform: uppercase;
113
+ color: var(--muted);
114
+ }
115
+
116
+ .brand {
117
+ display: flex;
118
+ align-items: baseline;
119
+ gap: 0.3rem;
120
+ font-size: clamp(1.2rem, 2vw, 1.6rem);
121
+ letter-spacing: 0.16em;
122
+ text-transform: uppercase;
123
+ }
124
+
125
+ .brand-mark {
126
+ font-weight: 600;
127
+ }
128
+
129
+ .brand-sub {
130
+ font-weight: 300;
131
+ color: var(--muted);
132
+ }
133
+
134
+
135
+ .layout {
136
+ display: grid;
137
+ grid-template-columns: minmax(15rem, 20rem) minmax(0, 1fr);
138
+ min-height: 0;
139
+ height: 100%;
140
+ overflow: hidden;
141
+ }
142
+
143
+ .sidebar {
144
+ border-right: 1px solid var(--grid-line);
145
+ background: rgba(var(--surface-rgb), 0.7);
146
+ position: relative;
147
+ overflow: hidden;
148
+ }
149
+
150
+ .sidebar-inner {
151
+ height: 100%;
152
+ padding: clamp(1.5rem, 3vw, 2.25rem) clamp(1.25rem, 3vw, 2rem);
153
+ display: grid;
154
+ gap: 1.25rem;
155
+ overflow-y: auto;
156
+ scrollbar-width: thin;
157
+ }
158
+
159
+ .nav {
160
+ display: grid;
161
+ gap: 0.75rem;
162
+ }
163
+
164
+ .nav-title {
165
+ font-size: 0.82rem;
166
+ letter-spacing: 0.12em;
167
+ text-transform: uppercase;
168
+ }
169
+
170
+ .nav-summary {
171
+ font-size: 0.78rem;
172
+ color: var(--muted);
173
+ line-height: 1.5;
174
+ }
175
+
176
+ .nav-leaf,
177
+ .nav-item,
178
+ .nav-parent {
179
+ all: unset;
180
+ display: grid;
181
+ gap: 0.35rem;
182
+ border: 1px solid transparent;
183
+ cursor: pointer;
184
+ transition: border-color 160ms ease, background 160ms ease;
185
+ text-align: left;
186
+ }
187
+
188
+ .nav-leaf {
189
+ padding: 0.65rem 0.9rem 0.75rem 1.1rem;
190
+ border-left: 2px solid transparent;
191
+ }
192
+
193
+ .nav-item {
194
+ padding: 0.6rem 0.75rem 0.6rem 1.4rem;
195
+ border-left: 2px solid transparent;
196
+ }
197
+
198
+ .nav-parent {
199
+ padding: 0.8rem 0.75rem 0.8rem 1.1rem;
200
+ border-left: 2px solid transparent;
201
+ position: relative;
202
+ display: grid;
203
+ grid-template-columns: 1fr auto;
204
+ grid-template-rows: auto auto;
205
+ align-items: center;
206
+ }
207
+
208
+ .nav-parent > .nav-summary {
209
+ grid-column: 1 / -1;
210
+ }
211
+
212
+ .nav-parent .nav-title {
213
+ font-size: 0.95rem;
214
+ font-weight: 600;
215
+ letter-spacing: 0.2em;
216
+ }
217
+
218
+ .nav-parent::after {
219
+ content: '\25BE';
220
+ font-size: 0.75rem;
221
+ color: var(--muted);
222
+ transform: rotate(-90deg);
223
+ transition: transform 160ms ease;
224
+ }
225
+
226
+ /* Parent with content - title navigates, arrow expands */
227
+ .nav-parent-with-content {
228
+ grid-template-columns: 1fr auto;
229
+ grid-template-rows: auto auto;
230
+ }
231
+
232
+ .nav-parent-with-content .nav-summary {
233
+ grid-column: 1 / -1;
234
+ }
235
+
236
+ .nav-parent-with-content::after {
237
+ display: none; /* Hide default arrow, use custom toggle */
238
+ }
239
+
240
+ .nav-parent-with-content .nav-title-link {
241
+ font-size: 0.95rem;
242
+ font-weight: 600;
243
+ letter-spacing: 0.2em;
244
+ cursor: pointer;
245
+ text-decoration: none;
246
+ }
247
+
248
+ .nav-parent-with-content .nav-title-link:hover {
249
+ text-decoration: underline;
250
+ }
251
+
252
+ .nav-parent-with-content .nav-expand-toggle {
253
+ display: flex;
254
+ align-items: center;
255
+ justify-content: center;
256
+ width: 1.5rem;
257
+ height: 1.5rem;
258
+ cursor: pointer;
259
+ border-radius: 3px;
260
+ }
261
+
262
+ .nav-parent-with-content .nav-expand-toggle::after {
263
+ content: '\25BE';
264
+ font-size: 0.75rem;
265
+ color: var(--muted);
266
+ transform: rotate(-90deg);
267
+ transition: transform 160ms ease;
268
+ }
269
+
270
+ .nav-parent-with-content .nav-expand-toggle:hover {
271
+ background: rgba(var(--ink-rgb), 0.1);
272
+ }
273
+
274
+ .nav-group.expanded .nav-parent-with-content .nav-expand-toggle::after {
275
+ transform: rotate(0deg);
276
+ }
277
+
278
+ .nav-group {
279
+ display: grid;
280
+ gap: 0.4rem;
281
+ }
282
+
283
+ .nav-sublist {
284
+ display: none;
285
+ gap: 0.35rem;
286
+ padding-left: 0.75rem;
287
+ border-left: 1px dashed var(--grid-line);
288
+ }
289
+
290
+ .nav-group.expanded .nav-sublist {
291
+ display: grid;
292
+ }
293
+
294
+ /* Nested nav groups (3-level hierarchy) */
295
+ .nav-group-nested {
296
+ margin-left: 0.5rem;
297
+ padding-left: 0.5rem;
298
+ border-left: 1px solid rgba(var(--ink-rgb), 0.1);
299
+ }
300
+
301
+ .nav-parent-nested {
302
+ font-size: 0.85rem;
303
+ padding: 0.35rem 0.5rem;
304
+ opacity: 0.85;
305
+ white-space: nowrap;
306
+ }
307
+
308
+ .nav-sublist-nested {
309
+ display: none;
310
+ gap: 0.25rem;
311
+ padding-left: 0.25rem;
312
+ }
313
+
314
+ .nav-group-nested.expanded .nav-sublist-nested {
315
+ display: grid;
316
+ }
317
+
318
+ .nav-item-nested {
319
+ font-size: 0.8rem;
320
+ padding: 0.3rem 0.5rem;
321
+ }
322
+
323
+ .nav-item-nested .nav-summary {
324
+ font-size: 0.7rem;
325
+ }
326
+
327
+ /* Deep nav groups (4-level hierarchy) */
328
+ .nav-group-deep {
329
+ margin-left: 0.5rem;
330
+ padding-left: 0.5rem;
331
+ border-left: 1px solid rgba(var(--ink-rgb), 0.08);
332
+ }
333
+
334
+ .nav-parent-deep {
335
+ font-size: 0.8rem;
336
+ padding: 0.3rem 0.5rem;
337
+ opacity: 0.8;
338
+ }
339
+
340
+ .nav-sublist-deep {
341
+ display: none;
342
+ gap: 0.2rem;
343
+ padding-left: 0.25rem;
344
+ }
345
+
346
+ .nav-group-deep.expanded .nav-sublist-deep {
347
+ display: grid;
348
+ }
349
+
350
+ .nav-item-deep {
351
+ font-size: 0.75rem;
352
+ padding: 0.25rem 0.5rem;
353
+ }
354
+
355
+ .nav-item-deep .nav-summary {
356
+ font-size: 0.65rem;
357
+ }
358
+
359
+ /* Ultra-deep nav groups (5-level hierarchy) */
360
+ .nav-group-ultra {
361
+ margin-left: 0.4rem;
362
+ padding-left: 0.4rem;
363
+ border-left: 1px solid rgba(var(--ink-rgb), 0.06);
364
+ }
365
+
366
+ .nav-parent-ultra {
367
+ font-size: 0.75rem;
368
+ padding: 0.25rem 0.4rem;
369
+ opacity: 0.75;
370
+ }
371
+
372
+ .nav-sublist-ultra {
373
+ display: none;
374
+ gap: 0.15rem;
375
+ padding-left: 0.2rem;
376
+ }
377
+
378
+ .nav-group-ultra.expanded .nav-sublist-ultra {
379
+ display: grid;
380
+ }
381
+
382
+ .nav-item-ultra {
383
+ font-size: 0.7rem;
384
+ padding: 0.2rem 0.4rem;
385
+ }
386
+
387
+ .nav-item-ultra .nav-summary {
388
+ font-size: 0.6rem;
389
+ }
390
+
391
+ .nav-base:hover,
392
+ .nav-base:focus-visible {
393
+ border-color: var(--grid-line);
394
+ border-left-color: var(--ink);
395
+ background: rgba(0, 0, 0, 0.03);
396
+ }
397
+
398
+ .nav-base[aria-current="page"] {
399
+ border-color: var(--grid-line);
400
+ border-left-color: var(--ink);
401
+ background: rgba(0, 0, 0, 0.05);
402
+ }
403
+
404
+ /* External links in nav */
405
+ .nav-external {
406
+ all: unset;
407
+ display: grid;
408
+ gap: 0.35rem;
409
+ padding: 0.65rem 0.9rem 0.75rem 1.1rem;
410
+ border: 1px solid transparent;
411
+ border-left: 2px solid transparent;
412
+ cursor: pointer;
413
+ transition: border-color 160ms ease, background 160ms ease;
414
+ text-align: left;
415
+ text-decoration: none;
416
+ color: inherit;
417
+ }
418
+
419
+ .nav-external:hover,
420
+ .nav-external:focus-visible {
421
+ border-color: var(--grid-line);
422
+ border-left-color: var(--ink);
423
+ background: rgba(0, 0, 0, 0.03);
424
+ }
425
+
426
+ .nav-external .nav-title {
427
+ display: inline-flex;
428
+ align-items: center;
429
+ gap: 0.35em;
430
+ }
431
+
432
+ .nav-external-icon {
433
+ font-size: 0.7em;
434
+ color: var(--muted);
435
+ opacity: 0.7;
436
+ transition: opacity 160ms ease;
437
+ }
438
+
439
+ .nav-external:hover .nav-external-icon {
440
+ opacity: 1;
441
+ }
442
+
443
+ /* Press release and content type indicators */
444
+ .nav-type-press-release .nav-title {
445
+ display: inline-flex;
446
+ align-items: center;
447
+ gap: 0.4em;
448
+ }
449
+
450
+ .nav-type-icon {
451
+ font-size: 0.65em;
452
+ color: var(--muted);
453
+ opacity: 0;
454
+ transition: opacity 160ms ease;
455
+ }
456
+
457
+ .nav-type-press-release .nav-type-icon::before {
458
+ content: '\25C9'; /* Unicode circle with dot - subtle signal indicator */
459
+ }
460
+
461
+ .nav-type-press-release:hover .nav-type-icon,
462
+ .nav-type-press-release:focus-visible .nav-type-icon {
463
+ opacity: 0.7;
464
+ }
465
+
466
+ mark.hl {
467
+ background: var(--highlight-bg);
468
+ border-bottom: 1px solid var(--highlight-border);
469
+ padding: 0 0.12rem;
470
+ border-radius: 0.15rem;
471
+ }
472
+
473
+ /* External CTA link styling */
474
+ .external-cta {
475
+ display: inline-flex;
476
+ align-items: center;
477
+ gap: 0.5em;
478
+ padding: 0.75rem 1.25rem;
479
+ margin-top: 1.5rem;
480
+ border: 1px solid var(--ink);
481
+ background: transparent;
482
+ color: var(--ink);
483
+ font-size: 0.95rem;
484
+ font-weight: 500;
485
+ text-decoration: none;
486
+ transition: background 160ms ease, color 160ms ease;
487
+ }
488
+
489
+ .external-cta:hover,
490
+ .external-cta:focus {
491
+ background: var(--ink);
492
+ color: var(--surface);
493
+ text-decoration: none;
494
+ }
495
+
496
+ /* External link indicator in content */
497
+ .doc-content a[target="_blank"]::after {
498
+ content: " \2197";
499
+ font-size: 0.75em;
500
+ opacity: 0.6;
501
+ }
502
+
503
+ .doc-content a.external-cta[target="_blank"]::after {
504
+ content: none;
505
+ }
506
+
507
+ .cmd {
508
+ position: fixed;
509
+ inset: 0;
510
+ display: grid;
511
+ place-items: center;
512
+ background: rgba(var(--surface-rgb), 0.65);
513
+ backdrop-filter: blur(8px);
514
+ padding: 1.5rem;
515
+ }
516
+
517
+ .cmd[hidden] {
518
+ display: none;
519
+ }
520
+
521
+ .cmd-surface {
522
+ width: min(580px, 100%);
523
+ background: var(--surface);
524
+ border: 1px solid var(--grid-line);
525
+ box-shadow: 0 18px 42px rgba(0, 0, 0, 0.12);
526
+ display: grid;
527
+ gap: 1rem;
528
+ padding: 1.25rem 1.25rem 1rem;
529
+ }
530
+
531
+ .cmd-header {
532
+ display: grid;
533
+ gap: 0.6rem;
534
+ }
535
+
536
+ .cmd-title {
537
+ font-size: 0.74rem;
538
+ letter-spacing: 0.16em;
539
+ text-transform: uppercase;
540
+ color: var(--muted);
541
+ }
542
+
543
+ .cmd-input {
544
+ border: 1px solid var(--grid-line);
545
+ background: rgba(0, 0, 0, 0.02);
546
+ padding: 0.65rem 0.85rem;
547
+ font: inherit;
548
+ font-size: 0.95rem;
549
+ outline: none;
550
+ }
551
+
552
+ .cmd-input:focus {
553
+ border-color: rgba(0, 0, 0, 0.35);
554
+ background: rgba(0, 0, 0, 0.04);
555
+ }
556
+
557
+ .cmd-list {
558
+ list-style: none;
559
+ margin: 0;
560
+ padding: 0;
561
+ max-height: 16rem;
562
+ overflow-y: auto;
563
+ border-top: 1px dashed var(--grid-line);
564
+ }
565
+
566
+ .cmd-item {
567
+ padding: 0.75rem;
568
+ border-bottom: 1px dashed rgba(0, 0, 0, 0.08);
569
+ display: grid;
570
+ gap: 0.3rem;
571
+ cursor: pointer;
572
+ }
573
+
574
+ .cmd-item:last-child {
575
+ border-bottom: none;
576
+ }
577
+
578
+ .cmd-item[aria-selected="true"],
579
+ .cmd-item:hover {
580
+ background: rgba(0, 0, 0, 0.05);
581
+ }
582
+
583
+ .cmd-item-title {
584
+ font-size: 0.88rem;
585
+ letter-spacing: 0.08em;
586
+ text-transform: uppercase;
587
+ }
588
+
589
+ .cmd-item-summary {
590
+ font-size: 0.75rem;
591
+ color: var(--muted);
592
+ }
593
+
594
+ .cmd-item-group {
595
+ font-size: 0.65rem;
596
+ color: var(--muted);
597
+ background: rgba(0, 0, 0, 0.08);
598
+ padding: 0.15rem 0.4rem;
599
+ border-radius: 3px;
600
+ margin-right: 0.5rem;
601
+ text-transform: none;
602
+ letter-spacing: normal;
603
+ font-weight: 500;
604
+ }
605
+
606
+ .cmd-loading {
607
+ color: var(--muted);
608
+ font-style: italic;
609
+ text-align: center;
610
+ }
611
+
612
+ .canvas {
613
+ padding: clamp(2rem, 5vw, 5.5rem) clamp(1.5rem, 7vw, 7rem);
614
+ display: grid;
615
+ gap: 2.5rem;
616
+ min-height: 0;
617
+ height: 100%;
618
+ overflow-y: auto;
619
+ scrollbar-gutter: stable;
620
+ scrollbar-width: thin;
621
+ }
622
+
623
+ /* Custom scrollbar styling - minimal black line aesthetic */
624
+ .canvas::-webkit-scrollbar {
625
+ width: 6px;
626
+ }
627
+
628
+ .canvas::-webkit-scrollbar-track {
629
+ background: transparent;
630
+ }
631
+
632
+ .canvas::-webkit-scrollbar-thumb {
633
+ background: var(--ink);
634
+ border-radius: 3px;
635
+ }
636
+
637
+ .canvas::-webkit-scrollbar-thumb:hover {
638
+ background: var(--muted);
639
+ }
640
+
641
+ .doc-content {
642
+ display: grid;
643
+ gap: 1.75rem;
644
+ line-height: 1.7;
645
+ max-width: 78ch;
646
+ }
647
+
648
+ .doc-content h1,
649
+ .doc-content h2,
650
+ .doc-content h3,
651
+ .doc-content h4,
652
+ .doc-content h5,
653
+ .doc-content h6 {
654
+ font-weight: 500;
655
+ letter-spacing: 0.08em;
656
+ text-transform: uppercase;
657
+ margin: 0;
658
+ }
659
+
660
+ .doc-content h1 { font-size: clamp(1.6rem, 1.6vw + 1.4rem, 2.2rem); }
661
+ .doc-content h2 { font-size: clamp(1.3rem, 1.3vw + 1.1rem, 1.6rem); }
662
+ .doc-content h3 { font-size: clamp(1.1rem, 1vw + 0.95rem, 1.3rem); }
663
+ .doc-content h4 { font-size: 1rem; }
664
+
665
+ .doc-content p {
666
+ margin: 0;
667
+ color: var(--ink);
668
+ }
669
+
670
+ .doc-content ul,
671
+ .doc-content ol {
672
+ margin: 0;
673
+ padding-left: 1.4rem;
674
+ display: grid;
675
+ gap: 0.5rem;
676
+ }
677
+
678
+ .doc-content li {
679
+ line-height: 1.6;
680
+ }
681
+
682
+ .doc-content pre {
683
+ background: rgba(0, 0, 0, 0.04);
684
+ padding: 1rem 1.25rem;
685
+ border-radius: 0.5rem;
686
+ overflow-x: auto;
687
+ border: 1px solid rgba(0, 0, 0, 0.08);
688
+ font-family: var(--font-mono);
689
+ font-size: 0.85rem;
690
+ line-height: 1.5;
691
+ }
692
+
693
+ .doc-content code {
694
+ font-family: var(--font-mono);
695
+ background: rgba(0, 0, 0, 0.05);
696
+ padding: 0.1rem 0.3rem;
697
+ border-radius: 0.25rem;
698
+ }
699
+
700
+ .doc-content pre code {
701
+ background: transparent;
702
+ padding: 0;
703
+ }
704
+
705
+ .doc-content table {
706
+ width: 100%;
707
+ border-collapse: collapse;
708
+ font-size: 0.9rem;
709
+ }
710
+
711
+ .doc-content th,
712
+ .doc-content td {
713
+ border: 1px solid rgba(0, 0, 0, 0.12);
714
+ padding: 0.65rem 0.75rem;
715
+ text-align: left;
716
+ }
717
+
718
+ .doc-content th {
719
+ background: rgba(0, 0, 0, 0.04);
720
+ font-weight: 600;
721
+ }
722
+
723
+ .doc-content blockquote {
724
+ border-left: 3px solid rgba(0, 0, 0, 0.2);
725
+ padding-left: 1rem;
726
+ color: var(--muted);
727
+ }
728
+
729
+ .doc-content hr {
730
+ border: none;
731
+ border-bottom: 1px solid var(--ink);
732
+ margin: 2rem 0;
733
+ }
734
+
735
+ .section-header {
736
+ display: grid;
737
+ gap: 0.75rem;
738
+ }
739
+
740
+ .section-header h1 {
741
+ font-size: var(--step);
742
+ font-weight: 500;
743
+ letter-spacing: 0.08em;
744
+ text-transform: uppercase;
745
+ }
746
+
747
+ .section-header p {
748
+ color: var(--muted);
749
+ max-width: 54ch;
750
+ line-height: 1.6;
751
+ }
752
+
753
+ .card-grid {
754
+ display: grid;
755
+ gap: 1.5rem;
756
+ grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
757
+ }
758
+
759
+ .card {
760
+ border: 1px solid var(--grid-line);
761
+ padding: 1.5rem;
762
+ display: grid;
763
+ gap: 0.75rem;
764
+ background: rgba(var(--surface-rgb), 0.75);
765
+ backdrop-filter: blur(2px);
766
+ }
767
+
768
+ .card h2 {
769
+ font-size: 1rem;
770
+ letter-spacing: 0.1em;
771
+ text-transform: uppercase;
772
+ }
773
+
774
+ .card p {
775
+ color: var(--muted);
776
+ margin: 0;
777
+ line-height: 1.5;
778
+ }
779
+
780
+ /* Link grid for icon-based link cards */
781
+ .link-grid {
782
+ display: grid;
783
+ gap: 1rem;
784
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
785
+ margin: 1.5rem 0;
786
+ }
787
+
788
+ .link-card {
789
+ display: flex;
790
+ align-items: center;
791
+ gap: 1rem;
792
+ padding: 1rem 1.25rem;
793
+ border: 1px solid var(--grid-line);
794
+ text-decoration: none;
795
+ color: inherit;
796
+ transition: border-color 160ms ease, background 160ms ease;
797
+ }
798
+
799
+ .link-card:hover {
800
+ border-color: var(--ink);
801
+ background: rgba(0, 0, 0, 0.03);
802
+ text-decoration: none;
803
+ }
804
+
805
+ .link-icon {
806
+ width: 32px;
807
+ height: 32px;
808
+ flex-shrink: 0;
809
+ }
810
+
811
+ .link-title {
812
+ font-weight: 600;
813
+ display: block;
814
+ }
815
+
816
+ .link-desc {
817
+ font-size: 0.85rem;
818
+ color: var(--muted);
819
+ display: block;
820
+ }
821
+
822
+ .footnote {
823
+ border-top: 1px solid var(--grid-line);
824
+ font-size: 0.85rem;
825
+ gap: 1rem;
826
+ }
827
+
828
+ .divider {
829
+ flex: 1;
830
+ border-bottom: 1px dashed var(--grid-line);
831
+ }
832
+
833
+ /* Mobile Menu Toggle Button */
834
+ .mobile-menu-toggle {
835
+ display: none;
836
+ position: relative;
837
+ width: 40px;
838
+ height: 40px;
839
+ padding: 0;
840
+ border: 1px solid var(--grid-line);
841
+ background: transparent;
842
+ cursor: pointer;
843
+ transition: background 0.2s;
844
+ }
845
+
846
+ .mobile-menu-toggle:hover {
847
+ background: rgba(0, 0, 0, 0.05);
848
+ }
849
+
850
+
851
+ .menu-icon {
852
+ display: block;
853
+ position: absolute;
854
+ top: 50%;
855
+ left: 50%;
856
+ width: 20px;
857
+ height: 2px;
858
+ background: var(--ink);
859
+ transform: translate(-55%, -50%);
860
+ transition: background 0.3s;
861
+ }
862
+
863
+ .menu-icon::before,
864
+ .menu-icon::after {
865
+ content: '';
866
+ position: absolute;
867
+ top: 0;
868
+ left: 50%;
869
+ width: 20px;
870
+ height: 2px;
871
+ background: var(--ink);
872
+ transform: translateX(-52%);
873
+ transform-origin: center;
874
+ transition: transform 0.3s, top 0.3s;
875
+ }
876
+
877
+ .menu-icon::before {
878
+ top: -6px;
879
+ }
880
+
881
+ .menu-icon::after {
882
+ top: 6px;
883
+ }
884
+
885
+ .mobile-menu-toggle[aria-expanded="true"] .menu-icon {
886
+ background: transparent;
887
+ }
888
+
889
+ .mobile-menu-toggle[aria-expanded="true"] .menu-icon::before {
890
+ transform: translateX(-52%) rotate(45deg);
891
+ top: 0;
892
+ }
893
+
894
+ .mobile-menu-toggle[aria-expanded="true"] .menu-icon::after {
895
+ transform: translateX(-52%) rotate(-45deg);
896
+ top: 0;
897
+ }
898
+
899
+ /* Tablet and Mobile Styles */
900
+ @media (max-width: 960px) {
901
+ body {
902
+ overflow-x: hidden;
903
+ }
904
+
905
+ body.menu-open {
906
+ overflow: hidden;
907
+ }
908
+
909
+ .mobile-menu-toggle {
910
+ display: block;
911
+ }
912
+
913
+ .topbar {
914
+ padding: 1rem;
915
+ gap: 1rem;
916
+ position: relative;
917
+ z-index: 100;
918
+ }
919
+
920
+ .brand {
921
+ flex: 1;
922
+ font-size: 1.2rem;
923
+ }
924
+
925
+ .layout {
926
+ grid-template-columns: 1fr;
927
+ height: calc(100vh - 120px);
928
+ position: relative;
929
+ }
930
+
931
+ .sidebar {
932
+ position: fixed;
933
+ top: 60px;
934
+ left: -100%;
935
+ width: 85%;
936
+ max-width: 320px;
937
+ height: calc(100vh - 60px);
938
+ background: white;
939
+ border-right: 2px solid var(--ink);
940
+ z-index: 99;
941
+ transition: left 0.3s ease;
942
+ overflow-y: auto;
943
+ }
944
+
945
+ .sidebar.mobile-open {
946
+ left: 0;
947
+ }
948
+
949
+ .sidebar-inner {
950
+ height: 100%;
951
+ padding: 1.5rem;
952
+ overflow-y: auto;
953
+ }
954
+
955
+ .nav {
956
+ display: grid;
957
+ gap: 0.5rem;
958
+ }
959
+
960
+ .nav-group {
961
+ margin-bottom: 0.5rem;
962
+ }
963
+
964
+ .nav-sublist {
965
+ padding-left: 1rem;
966
+ }
967
+
968
+ .canvas {
969
+ padding: 1.5rem 0.65rem;
970
+ height: 100%;
971
+ overflow-y: auto;
972
+ overflow-x: hidden;
973
+ max-width: 100%;
974
+ min-width: 0;
975
+ scrollbar-gutter: unset;
976
+ }
977
+
978
+ /* Minimal mobile scrollbar */
979
+ .canvas::-webkit-scrollbar {
980
+ width: 3px;
981
+ }
982
+
983
+ .canvas::-webkit-scrollbar-track {
984
+ background: transparent;
985
+ }
986
+
987
+ .canvas::-webkit-scrollbar-thumb {
988
+ background: rgba(0, 0, 0, 0.3);
989
+ border-radius: 2px;
990
+ }
991
+
992
+ .section {
993
+ max-width: 100%;
994
+ min-width: 0;
995
+ overflow-x: hidden;
996
+ }
997
+
998
+ .ghost-label {
999
+ display: none;
1000
+ }
1001
+
1002
+ .ghost-button {
1003
+ padding: 0.6rem;
1004
+ min-width: auto;
1005
+ }
1006
+
1007
+ .ghost-icon {
1008
+ font-size: 1.2rem;
1009
+ }
1010
+
1011
+ /* Content adjustments */
1012
+ .content {
1013
+ font-size: 0.95rem;
1014
+ max-width: 100%;
1015
+ overflow-wrap: break-word;
1016
+ word-wrap: break-word;
1017
+ }
1018
+
1019
+ .doc-content {
1020
+ padding-right: 1rem;
1021
+ max-width: 100%;
1022
+ min-width: 0;
1023
+ overflow-wrap: break-word;
1024
+ word-break: break-word;
1025
+ }
1026
+
1027
+ .doc-content table {
1028
+ display: block;
1029
+ overflow-x: auto;
1030
+ max-width: 100%;
1031
+ }
1032
+
1033
+ .doc-content pre {
1034
+ max-width: 100%;
1035
+ }
1036
+
1037
+ .content h2 {
1038
+ font-size: 1.4rem;
1039
+ }
1040
+
1041
+ .content h3 {
1042
+ font-size: 1.2rem;
1043
+ }
1044
+
1045
+ .card-grid {
1046
+ grid-template-columns: 1fr;
1047
+ gap: 1rem;
1048
+ }
1049
+
1050
+ .card {
1051
+ max-width: 100%;
1052
+ overflow: hidden;
1053
+ }
1054
+
1055
+ pre {
1056
+ font-size: 0.85rem;
1057
+ overflow-x: auto;
1058
+ max-width: calc(100vw - 3rem);
1059
+ margin-left: -0.5rem;
1060
+ margin-right: -0.5rem;
1061
+ padding: 1rem 0.75rem;
1062
+ }
1063
+
1064
+ table {
1065
+ display: block;
1066
+ overflow-x: auto;
1067
+ max-width: 100%;
1068
+ }
1069
+
1070
+ /* Prevent images from causing overflow */
1071
+ img {
1072
+ max-width: 100%;
1073
+ height: auto;
1074
+ }
1075
+
1076
+ /* Command palette mobile */
1077
+ .cmd-surface {
1078
+ width: 95%;
1079
+ max-width: 400px;
1080
+ max-height: 80vh;
1081
+ }
1082
+
1083
+ /* Footer mobile */
1084
+ .footnote {
1085
+ flex-direction: column;
1086
+ gap: 0.5rem;
1087
+ padding: 1rem;
1088
+ text-align: center;
1089
+ font-size: 0.8rem;
1090
+ }
1091
+
1092
+ .divider {
1093
+ display: none;
1094
+ }
1095
+
1096
+ /* Special content elements - ensure responsive sizing */
1097
+ .mermaid-diagram {
1098
+ margin: 1rem 0;
1099
+ }
1100
+
1101
+ .mermaid-content {
1102
+ max-height: 50vh;
1103
+ }
1104
+
1105
+ .mermaid-content svg {
1106
+ min-width: 500px;
1107
+ }
1108
+
1109
+ .arch-diagram,
1110
+ .spec-table {
1111
+ display: block;
1112
+ overflow-x: auto;
1113
+ -webkit-overflow-scrolling: touch;
1114
+ max-width: 100%;
1115
+ }
1116
+
1117
+ .content-box .box-content {
1118
+ font-size: 0.7rem;
1119
+ line-height: 1.4;
1120
+ max-height: 50vh;
1121
+ padding: 0.75rem;
1122
+ }
1123
+
1124
+ /* HTML blocks with embedded tables/diagrams */
1125
+ .html-block {
1126
+ margin: 1rem 0;
1127
+ border: 1px solid var(--grid-line);
1128
+ border-radius: 6px;
1129
+ padding: 0;
1130
+ }
1131
+
1132
+ .html-block .arch-diagram {
1133
+ min-width: 450px;
1134
+ border: none;
1135
+ border-radius: 0;
1136
+ }
1137
+
1138
+ .html-block .arch-diagram caption {
1139
+ border-radius: 6px 6px 0 0;
1140
+ }
1141
+
1142
+ /* Ensure all SVGs scale properly */
1143
+ svg {
1144
+ max-width: 100%;
1145
+ height: auto;
1146
+ }
1147
+
1148
+ /* Feature grids and lists */
1149
+ .feature-grid,
1150
+ .feature-list {
1151
+ display: block;
1152
+ }
1153
+
1154
+ .feature-grid > *,
1155
+ .feature-list > * {
1156
+ margin-bottom: 1rem;
1157
+ }
1158
+
1159
+ /* HTML blocks with custom content */
1160
+ .html-block {
1161
+ max-width: 100%;
1162
+ overflow-x: auto;
1163
+ }
1164
+
1165
+ /* Bottom navigation responsive */
1166
+ .bottom-nav {
1167
+ display: flex;
1168
+ flex-direction: column;
1169
+ gap: 0.5rem;
1170
+ align-items: stretch;
1171
+ }
1172
+
1173
+ .bottom-nav .bottom-nav-item {
1174
+ max-width: 100%;
1175
+ width: 100%;
1176
+ margin: 0;
1177
+ position: relative;
1178
+ }
1179
+
1180
+ .bottom-nav .bottom-nav-prev,
1181
+ .bottom-nav .bottom-nav-next {
1182
+ margin-left: 0;
1183
+ margin-right: 0;
1184
+ }
1185
+
1186
+ .bottom-nav .bottom-nav-chevron {
1187
+ position: absolute;
1188
+ top: 50%;
1189
+ transform: translateY(-50%);
1190
+ display: flex;
1191
+ align-items: center;
1192
+ justify-content: center;
1193
+ width: 24px;
1194
+ font-size: 1.1rem;
1195
+ color: var(--muted);
1196
+ pointer-events: none;
1197
+ }
1198
+
1199
+ .bottom-nav .bottom-nav-prev .bottom-nav-chevron {
1200
+ left: 0.5rem;
1201
+ }
1202
+
1203
+ .bottom-nav .bottom-nav-next .bottom-nav-chevron {
1204
+ right: 0.5rem;
1205
+ }
1206
+
1207
+ .bottom-nav .bottom-nav-link {
1208
+ display: block;
1209
+ width: 100%;
1210
+ text-align: center;
1211
+ white-space: normal;
1212
+ padding: 0.6rem 2rem;
1213
+ font-size: 0.85rem;
1214
+ }
1215
+
1216
+ .bottom-nav .bottom-nav-spacer {
1217
+ display: none;
1218
+ }
1219
+ }
1220
+
1221
+ /* Small mobile screens */
1222
+ @media (max-width: 480px) {
1223
+ .topbar {
1224
+ padding: 0.75rem;
1225
+ }
1226
+
1227
+ .brand {
1228
+ font-size: 1rem;
1229
+ letter-spacing: 0.1em;
1230
+ }
1231
+
1232
+ .brand-sub {
1233
+ display: none;
1234
+ }
1235
+
1236
+ .sidebar {
1237
+ width: 90%;
1238
+ }
1239
+
1240
+ .canvas {
1241
+ padding: 1rem 0.75rem;
1242
+ }
1243
+
1244
+ .doc-content {
1245
+ padding-right: 0.5rem;
1246
+ }
1247
+
1248
+ pre {
1249
+ max-width: calc(100vw - 2rem);
1250
+ margin-left: -0.25rem;
1251
+ margin-right: -0.25rem;
1252
+ padding: 0.75rem 0.5rem;
1253
+ font-size: 0.8rem;
1254
+ }
1255
+
1256
+ .content h1 {
1257
+ font-size: 1.5rem;
1258
+ }
1259
+
1260
+ .content h2 {
1261
+ font-size: 1.25rem;
1262
+ }
1263
+
1264
+ .content h3 {
1265
+ font-size: 1.1rem;
1266
+ }
1267
+
1268
+ /* Export modal mobile */
1269
+ .export-loading-modal {
1270
+ width: 95%;
1271
+ max-width: 400px;
1272
+ padding: 2rem 1.5rem;
1273
+ }
1274
+
1275
+ .export-loading-title {
1276
+ font-size: 1rem;
1277
+ }
1278
+
1279
+ .export-loading-subtitle {
1280
+ font-size: 0.8rem;
1281
+ }
1282
+
1283
+ /* Command palette even smaller */
1284
+ .cmd-surface {
1285
+ width: 100%;
1286
+ border-radius: 0;
1287
+ max-height: 100vh;
1288
+ height: 100vh;
1289
+ }
1290
+ }
1291
+
1292
+ @media print {
1293
+ mark.hl {
1294
+ background: transparent;
1295
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
1296
+ }
1297
+ }
1298
+
1299
+ /* Export Options Modal */
1300
+ .export-options-overlay {
1301
+ position: fixed;
1302
+ top: 0;
1303
+ left: 0;
1304
+ right: 0;
1305
+ bottom: 0;
1306
+ background: rgba(var(--surface-rgb), 0.9);
1307
+ z-index: 9998;
1308
+ display: flex;
1309
+ align-items: center;
1310
+ justify-content: center;
1311
+ opacity: 0;
1312
+ transition: opacity 0.2s ease;
1313
+ }
1314
+
1315
+ .export-options-overlay.active {
1316
+ opacity: 1;
1317
+ }
1318
+
1319
+ .export-options-modal {
1320
+ background: white;
1321
+ border: 2px solid #000;
1322
+ padding: 2rem;
1323
+ width: 340px;
1324
+ box-shadow: 8px 8px 0 rgba(0, 0, 0, 0.1);
1325
+ }
1326
+
1327
+ .export-options-header {
1328
+ font-size: 0.85rem;
1329
+ font-weight: 600;
1330
+ letter-spacing: 0.2em;
1331
+ text-transform: uppercase;
1332
+ margin-bottom: 1.5rem;
1333
+ text-align: center;
1334
+ font-family: var(--font-mono);
1335
+ }
1336
+
1337
+ .export-options-buttons {
1338
+ display: flex;
1339
+ flex-direction: column;
1340
+ gap: 0.75rem;
1341
+ margin-bottom: 1rem;
1342
+ }
1343
+
1344
+ .export-option-btn {
1345
+ display: flex;
1346
+ flex-direction: column;
1347
+ align-items: flex-start;
1348
+ padding: 1rem 1.25rem;
1349
+ border: 1px solid var(--grid-line);
1350
+ background: transparent;
1351
+ cursor: pointer;
1352
+ text-align: left;
1353
+ transition: border-color 160ms ease, background 160ms ease;
1354
+ }
1355
+
1356
+ .export-option-btn:hover {
1357
+ border-color: var(--ink);
1358
+ background: rgba(0, 0, 0, 0.02);
1359
+ }
1360
+
1361
+ .export-option-title {
1362
+ font-weight: 600;
1363
+ font-size: 0.95rem;
1364
+ margin-bottom: 0.25rem;
1365
+ }
1366
+
1367
+ .export-option-desc {
1368
+ font-size: 0.8rem;
1369
+ color: var(--muted);
1370
+ }
1371
+
1372
+ .export-cancel-btn {
1373
+ width: 100%;
1374
+ padding: 0.75rem;
1375
+ border: none;
1376
+ background: transparent;
1377
+ color: var(--muted);
1378
+ cursor: pointer;
1379
+ font-size: 0.85rem;
1380
+ transition: color 160ms ease;
1381
+ }
1382
+
1383
+ .export-cancel-btn:hover {
1384
+ color: var(--ink);
1385
+ }
1386
+
1387
+ /* Export Loading Overlay */
1388
+ .export-loading-overlay {
1389
+ position: fixed;
1390
+ top: 0;
1391
+ left: 0;
1392
+ right: 0;
1393
+ bottom: 0;
1394
+ background: rgba(var(--surface-rgb), 0.98);
1395
+ z-index: 9999;
1396
+ display: flex;
1397
+ align-items: center;
1398
+ justify-content: center;
1399
+ opacity: 0;
1400
+ transition: opacity 0.3s ease;
1401
+ }
1402
+
1403
+ .export-loading-overlay.active {
1404
+ opacity: 1;
1405
+ }
1406
+
1407
+ .export-loading-modal {
1408
+ background: white;
1409
+ border: 2px solid #000;
1410
+ padding: 3rem;
1411
+ width: 630px;
1412
+ box-shadow:
1413
+ 8px 8px 0 rgba(0, 0, 0, 0.1),
1414
+ 16px 16px 0 rgba(0, 0, 0, 0.05);
1415
+ position: relative;
1416
+ overflow: hidden;
1417
+ }
1418
+
1419
+ .export-loading-header {
1420
+ margin-bottom: 2rem;
1421
+ text-align: center;
1422
+ }
1423
+
1424
+ .export-loading-title {
1425
+ font-size: 1.2rem;
1426
+ font-weight: 600;
1427
+ letter-spacing: 0.2em;
1428
+ text-transform: uppercase;
1429
+ margin-bottom: 0.5rem;
1430
+ font-family: var(--font-mono);
1431
+ }
1432
+
1433
+ .export-loading-subtitle {
1434
+ color: var(--muted);
1435
+ font-size: 0.9rem;
1436
+ letter-spacing: 0.05em;
1437
+ }
1438
+
1439
+ .export-loading-progress {
1440
+ margin-bottom: 2rem;
1441
+ }
1442
+
1443
+ .export-loading-bar {
1444
+ height: 4px;
1445
+ background: rgba(0, 0, 0, 0.1);
1446
+ margin-bottom: 1rem;
1447
+ position: relative;
1448
+ overflow: hidden;
1449
+ }
1450
+
1451
+ .export-loading-fill {
1452
+ height: 100%;
1453
+ background: #000;
1454
+ width: 0%;
1455
+ transition: width 0.3s ease;
1456
+ position: relative;
1457
+ }
1458
+
1459
+ .export-loading-fill::after {
1460
+ content: '';
1461
+ position: absolute;
1462
+ top: 0;
1463
+ right: 0;
1464
+ bottom: 0;
1465
+ width: 20px;
1466
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3));
1467
+ animation: shimmer 1s infinite;
1468
+ }
1469
+
1470
+ @keyframes shimmer {
1471
+ 0% { transform: translateX(-20px); }
1472
+ 100% { transform: translateX(20px); }
1473
+ }
1474
+
1475
+ .export-loading-status-container {
1476
+ min-height: 20px;
1477
+ display: flex;
1478
+ align-items: center;
1479
+ }
1480
+
1481
+ .export-loading-status {
1482
+ font-size: 0.85rem;
1483
+ color: var(--muted);
1484
+ font-family: var(--font-mono);
1485
+ white-space: nowrap;
1486
+ overflow: hidden;
1487
+ text-overflow: ellipsis;
1488
+ width: 100%;
1489
+ }
1490
+
1491
+ .export-loading-scanner {
1492
+ position: absolute;
1493
+ top: 0;
1494
+ left: 0;
1495
+ right: 0;
1496
+ height: 2px;
1497
+ overflow: hidden;
1498
+ opacity: 0.3;
1499
+ }
1500
+
1501
+ .scanner-line {
1502
+ position: absolute;
1503
+ width: 100px;
1504
+ height: 100%;
1505
+ background: linear-gradient(90deg,
1506
+ transparent,
1507
+ rgba(0, 0, 0, 0.8) 20%,
1508
+ rgba(0, 0, 0, 0.8) 80%,
1509
+ transparent);
1510
+ animation: scan 2s infinite linear;
1511
+ }
1512
+
1513
+ @keyframes scan {
1514
+ 0% { transform: translateX(-100px); }
1515
+ 100% { transform: translateX(calc(100% + 100px)); }
1516
+ }
1517
+
1518
+ /* Cyberpunk grid effect for modal */
1519
+ .export-loading-modal::before {
1520
+ content: '';
1521
+ position: absolute;
1522
+ top: 0;
1523
+ left: 0;
1524
+ right: 0;
1525
+ bottom: 0;
1526
+ background-image:
1527
+ linear-gradient(rgba(0, 0, 0, 0.03) 1px, transparent 1px),
1528
+ linear-gradient(90deg, rgba(0, 0, 0, 0.03) 1px, transparent 1px);
1529
+ background-size: 20px 20px;
1530
+ pointer-events: none;
1531
+ }
1532
+
1533
+ .export-loading-modal::after {
1534
+ content: '';
1535
+ position: absolute;
1536
+ top: -2px;
1537
+ left: -2px;
1538
+ right: -2px;
1539
+ bottom: -2px;
1540
+ background: linear-gradient(45deg,
1541
+ transparent 30%,
1542
+ rgba(0, 0, 0, 0.1) 50%,
1543
+ transparent 70%);
1544
+ animation: borderPulse 3s infinite;
1545
+ z-index: -1;
1546
+ }
1547
+
1548
+ @keyframes borderPulse {
1549
+ 0%, 100% { opacity: 0.3; }
1550
+ 50% { opacity: 0.6; }
1551
+ }
1552
+
1553
+ /* ─────────────────────────────────────────────────────────
1554
+ Mermaid Diagram Styles
1555
+ ───────────────────────────────────────────────────────── */
1556
+
1557
+ .mermaid-diagram {
1558
+ display: flex;
1559
+ flex-direction: column;
1560
+ margin: 1.5rem 0;
1561
+ background: var(--surface);
1562
+ border: 1px solid var(--grid-line);
1563
+ border-radius: 6px;
1564
+ overflow: hidden;
1565
+ }
1566
+
1567
+ .mermaid-controls {
1568
+ display: flex;
1569
+ gap: 0.25rem;
1570
+ padding: 0.5rem;
1571
+ background: rgba(0, 0, 0, 0.03);
1572
+ border-bottom: 1px solid var(--grid-line);
1573
+ }
1574
+
1575
+ .mermaid-btn {
1576
+ width: 28px;
1577
+ height: 28px;
1578
+ display: flex;
1579
+ align-items: center;
1580
+ justify-content: center;
1581
+ background: white;
1582
+ border: 1px solid var(--grid-line);
1583
+ border-radius: 4px;
1584
+ cursor: pointer;
1585
+ font-size: 1rem;
1586
+ font-weight: 500;
1587
+ color: var(--ink);
1588
+ transition: background 0.15s, border-color 0.15s;
1589
+ }
1590
+
1591
+ .mermaid-btn:hover {
1592
+ background: rgba(0, 0, 0, 0.05);
1593
+ border-color: var(--ink);
1594
+ }
1595
+
1596
+ .mermaid-btn:active {
1597
+ background: rgba(0, 0, 0, 0.1);
1598
+ }
1599
+
1600
+ .mermaid-content {
1601
+ overflow: auto;
1602
+ -webkit-overflow-scrolling: touch;
1603
+ padding: 1rem;
1604
+ max-height: 70vh;
1605
+ }
1606
+
1607
+ .mermaid-content svg {
1608
+ display: block;
1609
+ transition: transform 0.15s ease;
1610
+ }
1611
+
1612
+ .mermaid-diagram svg {
1613
+ max-width: none;
1614
+ height: auto;
1615
+ }
1616
+
1617
+
1618
+ /* Hide mermaid code blocks before rendering to prevent FOUC */
1619
+ pre:has(code.language-mermaid) {
1620
+ opacity: 0.5;
1621
+ position: relative;
1622
+ }
1623
+
1624
+ pre:has(code.language-mermaid)::after {
1625
+ content: 'Loading diagram...';
1626
+ position: absolute;
1627
+ top: 50%;
1628
+ left: 50%;
1629
+ transform: translate(-50%, -50%);
1630
+ font-size: 0.875rem;
1631
+ color: var(--muted);
1632
+ }
1633
+
1634
+ /* Error state for failed diagram renders */
1635
+ .mermaid-error-message {
1636
+ padding: 0.5rem 1rem;
1637
+ margin-bottom: 0.5rem;
1638
+ background: rgba(229, 57, 53, 0.1);
1639
+ border-left: 3px solid #e53935;
1640
+ color: #c62828;
1641
+ font-size: 0.875rem;
1642
+ border-radius: 0 4px 4px 0;
1643
+ }
1644
+
1645
+ .mermaid-error {
1646
+ border-left: 3px solid #e53935;
1647
+ background: rgba(229, 57, 53, 0.05);
1648
+ }
1649
+
1650
+ /* ─────────────────────────────────────────────────────────
1651
+ Content Box / Panel Styles
1652
+ Usage: ```box or ```box:Title
1653
+ ───────────────────────────────────────────────────────── */
1654
+
1655
+ .content-box {
1656
+ margin: 1.5rem 0;
1657
+ border: 1px solid var(--grid-line);
1658
+ border-radius: 6px;
1659
+ background: var(--surface);
1660
+ overflow: hidden;
1661
+ min-height: 50px;
1662
+ }
1663
+
1664
+ .content-box .box-title {
1665
+ padding: 0.75rem 1rem;
1666
+ font-weight: 600;
1667
+ font-size: 0.9rem;
1668
+ background: rgba(0, 0, 0, 0.03);
1669
+ border-bottom: 1px solid var(--grid-line);
1670
+ color: var(--ink);
1671
+ }
1672
+
1673
+ .content-box .box-content {
1674
+ margin: 0;
1675
+ padding: 1rem;
1676
+ font-family: var(--font-mono);
1677
+ font-size: 0.85rem;
1678
+ line-height: 1.5;
1679
+ white-space: pre;
1680
+ overflow-x: auto;
1681
+ background: transparent !important;
1682
+ border: none !important;
1683
+ border-radius: 0 !important;
1684
+ display: block !important;
1685
+ visibility: visible !important;
1686
+ color: var(--ink) !important;
1687
+ min-height: 20px;
1688
+ }
1689
+
1690
+ /* Override doc-content pre styles for box-content */
1691
+ .doc-content .content-box pre.box-content {
1692
+ background: transparent;
1693
+ border: none;
1694
+ border-radius: 0;
1695
+ padding: 1rem;
1696
+ }
1697
+
1698
+ /* ─────────────────────────────────────────────────────────
1699
+ HTML Block Styles
1700
+ Usage: ```html - renders raw HTML
1701
+ ───────────────────────────────────────────────────────── */
1702
+
1703
+ .html-block {
1704
+ margin: 1.5rem 0;
1705
+ overflow-x: auto;
1706
+ -webkit-overflow-scrolling: touch;
1707
+ }
1708
+
1709
+ /* Architecture diagram table styling */
1710
+ .arch-diagram {
1711
+ width: max-content;
1712
+ min-width: 100%;
1713
+ border-collapse: collapse;
1714
+ border: 2px solid var(--ink);
1715
+ font-family: var(--font-body);
1716
+ font-size: 0.9rem;
1717
+ }
1718
+
1719
+ .arch-diagram caption {
1720
+ font-weight: 700;
1721
+ font-size: 1.1rem;
1722
+ padding: 0.75rem;
1723
+ background: var(--ink);
1724
+ color: var(--surface);
1725
+ caption-side: top;
1726
+ }
1727
+
1728
+ .arch-diagram td {
1729
+ padding: 0.75rem;
1730
+ vertical-align: top;
1731
+ border: 1px solid var(--grid-line);
1732
+ }
1733
+
1734
+ .arch-diagram .component {
1735
+ background: rgba(0, 0, 0, 0.03);
1736
+ border: 1px solid var(--grid-line);
1737
+ border-radius: 4px;
1738
+ padding: 0.75rem;
1739
+ text-align: center;
1740
+ }
1741
+
1742
+ .arch-diagram .component-title {
1743
+ font-weight: 600;
1744
+ margin-bottom: 0.25rem;
1745
+ }
1746
+
1747
+ .arch-diagram .component-desc {
1748
+ font-size: 0.8rem;
1749
+ color: var(--muted);
1750
+ }
1751
+
1752
+ /* Specification table styling */
1753
+ .spec-table {
1754
+ width: 100%;
1755
+ border-collapse: collapse;
1756
+ margin: 1rem 0;
1757
+ font-size: 0.9rem;
1758
+ }
1759
+
1760
+ .spec-table th,
1761
+ .spec-table td {
1762
+ padding: 0.75rem 1rem;
1763
+ text-align: left;
1764
+ border: 1px solid var(--grid-line);
1765
+ }
1766
+
1767
+ .spec-table th {
1768
+ background: rgba(0, 0, 0, 0.05);
1769
+ font-weight: 600;
1770
+ }
1771
+
1772
+ .spec-table tr:nth-child(even) {
1773
+ background: rgba(0, 0, 0, 0.02);
1774
+ }
1775
+
1776
+ .spec-table td:first-child {
1777
+ width: 40%;
1778
+ }
1779
+
1780
+ .spec-table td:last-child {
1781
+ font-family: var(--font-mono);
1782
+ font-size: 0.85rem;
1783
+ }
1784
+
1785
+ /* Layer stack diagram styling */
1786
+ .layer-stack {
1787
+ display: flex;
1788
+ flex-direction: column;
1789
+ margin: 1.5rem 0;
1790
+ border: 2px solid var(--ink);
1791
+ border-radius: 6px;
1792
+ overflow: hidden;
1793
+ }
1794
+
1795
+ .layer-stack .layer {
1796
+ padding: 1rem 1.25rem;
1797
+ text-align: center;
1798
+ border-bottom: 1px solid var(--grid-line);
1799
+ }
1800
+
1801
+ .layer-stack .layer:last-child {
1802
+ border-bottom: none;
1803
+ }
1804
+
1805
+ .layer-stack .layer:first-child {
1806
+ background: rgba(0, 0, 0, 0.02);
1807
+ }
1808
+
1809
+ .layer-stack .layer:nth-child(2) {
1810
+ background: rgba(0, 0, 0, 0.04);
1811
+ }
1812
+
1813
+ .layer-stack .layer:nth-child(3) {
1814
+ background: rgba(0, 0, 0, 0.06);
1815
+ }
1816
+
1817
+ .layer-stack .layer-title {
1818
+ font-weight: 600;
1819
+ font-size: 1rem;
1820
+ margin-bottom: 0.25rem;
1821
+ }
1822
+
1823
+ .layer-stack .layer-desc,
1824
+ .layer-stack .layer-detail {
1825
+ font-size: 0.85rem;
1826
+ color: var(--muted);
1827
+ }
1828
+
1829
+ .arch-diagram .full-width {
1830
+ background: rgba(0, 0, 0, 0.05);
1831
+ }
1832
+
1833
+ /* ─────────────────────────────────────────────────────────
1834
+ Bottom Page Navigation (Prev/Next)
1835
+ ───────────────────────────────────────────────────────── */
1836
+
1837
+ .bottom-nav {
1838
+ display: flex;
1839
+ justify-content: space-between;
1840
+ gap: 1rem;
1841
+ margin-top: 3rem;
1842
+ padding-top: 2rem;
1843
+ border-top: 1px solid var(--grid-line);
1844
+ }
1845
+
1846
+ .bottom-nav.mobile-only {
1847
+ display: none;
1848
+ }
1849
+
1850
+ @media (max-width: 960px) {
1851
+ .bottom-nav.mobile-only {
1852
+ display: flex;
1853
+ }
1854
+ }
1855
+
1856
+ .bottom-nav-item {
1857
+ display: flex;
1858
+ align-items: center;
1859
+ gap: 0.5rem;
1860
+ max-width: 48%;
1861
+ }
1862
+
1863
+ .bottom-nav-prev {
1864
+ flex-direction: row;
1865
+ }
1866
+
1867
+ .bottom-nav-next {
1868
+ flex-direction: row;
1869
+ margin-left: auto;
1870
+ }
1871
+
1872
+ .bottom-nav-chevron {
1873
+ font-size: 1.5rem;
1874
+ font-weight: 300;
1875
+ color: var(--muted);
1876
+ line-height: 1;
1877
+ }
1878
+
1879
+ .bottom-nav-link {
1880
+ padding: 0.75rem 1rem;
1881
+ border: 1px solid var(--grid-line);
1882
+ border-radius: 6px;
1883
+ text-decoration: none;
1884
+ color: var(--ink);
1885
+ font-weight: 500;
1886
+ font-size: 0.9rem;
1887
+ white-space: nowrap;
1888
+ overflow: hidden;
1889
+ text-overflow: ellipsis;
1890
+ transition: border-color 0.15s, background 0.15s;
1891
+ }
1892
+
1893
+ .bottom-nav-link:hover {
1894
+ border-color: var(--ink);
1895
+ background: rgba(0, 0, 0, 0.03);
1896
+ }
1897
+
1898
+ .bottom-nav-spacer {
1899
+ flex: 1;
1900
+ }
1901
+
1902
+ /* ─────────────────────────────────────────────────────────
1903
+ Syntax Highlighting (Light theme)
1904
+ ───────────────────────────────────────────────────────── */
1905
+
1906
+ pre.highlighted {
1907
+ background: rgba(0, 0, 0, 0.03);
1908
+ color: var(--ink);
1909
+ }
1910
+
1911
+ pre.highlighted code {
1912
+ color: var(--ink);
1913
+ }
1914
+
1915
+ /* Tokens */
1916
+ .token.comment,
1917
+ .token.prolog,
1918
+ .token.doctype,
1919
+ .token.cdata {
1920
+ color: #6a737d;
1921
+ font-style: italic;
1922
+ }
1923
+
1924
+ .token.punctuation {
1925
+ color: #24292e;
1926
+ }
1927
+
1928
+ .token.property,
1929
+ .token.tag,
1930
+ .token.constant,
1931
+ .token.symbol,
1932
+ .token.deleted {
1933
+ color: #d73a49;
1934
+ }
1935
+
1936
+ .token.boolean,
1937
+ .token.number {
1938
+ color: #005cc5;
1939
+ }
1940
+
1941
+ .token.selector,
1942
+ .token.attr-name,
1943
+ .token.string,
1944
+ .token.char,
1945
+ .token.builtin,
1946
+ .token.inserted {
1947
+ color: #22863a;
1948
+ }
1949
+
1950
+ .token.operator,
1951
+ .token.entity,
1952
+ .token.url,
1953
+ .language-css .token.string,
1954
+ .style .token.string {
1955
+ color: #d73a49;
1956
+ }
1957
+
1958
+ .token.atrule,
1959
+ .token.attr-value,
1960
+ .token.keyword {
1961
+ color: #d73a49;
1962
+ }
1963
+
1964
+ .token.function,
1965
+ .token.class-name {
1966
+ color: #6f42c1;
1967
+ }
1968
+
1969
+ .token.regex,
1970
+ .token.important,
1971
+ .token.variable {
1972
+ color: #e36209;
1973
+ }
1974
+
1975
+ .token.important,
1976
+ .token.bold {
1977
+ font-weight: bold;
1978
+ }
1979
+
1980
+ .token.italic {
1981
+ font-style: italic;
1982
+ }