@brett_lamy/docstream 1.2.4 → 1.4.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 (216) hide show
  1. package/README.md +76 -14
  2. package/dist/assets.d.ts +3 -0
  3. package/dist/assets.d.ts.map +1 -0
  4. package/dist/assets.js +20 -0
  5. package/dist/assets.js.map +1 -0
  6. package/dist/demo/DemoViewer.d.ts +64 -0
  7. package/dist/demo/DemoViewer.d.ts.map +1 -0
  8. package/dist/demo/DemoViewer.js +426 -0
  9. package/dist/demo/DemoViewer.js.map +1 -0
  10. package/dist/demo/context.d.ts +14 -0
  11. package/dist/demo/context.d.ts.map +1 -0
  12. package/dist/demo/context.js +25 -0
  13. package/dist/demo/context.js.map +1 -0
  14. package/dist/demo/glob.d.ts +60 -0
  15. package/dist/demo/glob.d.ts.map +1 -0
  16. package/dist/demo/glob.js +158 -0
  17. package/dist/demo/glob.js.map +1 -0
  18. package/dist/demo/index.d.ts +10 -0
  19. package/dist/demo/index.d.ts.map +1 -0
  20. package/dist/demo/index.js +6 -0
  21. package/dist/demo/index.js.map +1 -0
  22. package/dist/demo/markdown.d.ts +60 -0
  23. package/dist/demo/markdown.d.ts.map +1 -0
  24. package/dist/demo/markdown.js +181 -0
  25. package/dist/demo/markdown.js.map +1 -0
  26. package/dist/demo/surface.d.ts +11 -0
  27. package/dist/demo/surface.d.ts.map +1 -0
  28. package/dist/demo/surface.js +69 -0
  29. package/dist/demo/surface.js.map +1 -0
  30. package/dist/demo/types.d.ts +91 -0
  31. package/dist/demo/types.d.ts.map +1 -0
  32. package/dist/demo/types.js +2 -0
  33. package/dist/demo/types.js.map +1 -0
  34. package/dist/docs/CollapsibleCode.d.ts +14 -0
  35. package/dist/docs/CollapsibleCode.d.ts.map +1 -0
  36. package/dist/docs/CollapsibleCode.js +19 -0
  37. package/dist/docs/CollapsibleCode.js.map +1 -0
  38. package/dist/docs/DocsRenderer.d.ts +49 -0
  39. package/dist/docs/DocsRenderer.d.ts.map +1 -0
  40. package/dist/docs/DocsRenderer.js +277 -0
  41. package/dist/docs/DocsRenderer.js.map +1 -0
  42. package/dist/docs/HighlightedCode.d.ts +6 -0
  43. package/dist/docs/HighlightedCode.d.ts.map +1 -0
  44. package/dist/docs/HighlightedCode.js +40 -0
  45. package/dist/docs/HighlightedCode.js.map +1 -0
  46. package/dist/docs/Mermaid.d.ts +7 -0
  47. package/dist/docs/Mermaid.d.ts.map +1 -0
  48. package/dist/docs/Mermaid.js +39 -0
  49. package/dist/docs/Mermaid.js.map +1 -0
  50. package/dist/docs/PageActions.d.ts +33 -0
  51. package/dist/docs/PageActions.d.ts.map +1 -0
  52. package/dist/docs/PageActions.js +115 -0
  53. package/dist/docs/PageActions.js.map +1 -0
  54. package/dist/docs/controls.d.ts +29 -0
  55. package/dist/docs/controls.d.ts.map +1 -0
  56. package/dist/docs/controls.js +46 -0
  57. package/dist/docs/controls.js.map +1 -0
  58. package/dist/docs/copy.d.ts +24 -0
  59. package/dist/docs/copy.d.ts.map +1 -0
  60. package/dist/docs/copy.js +62 -0
  61. package/dist/docs/copy.js.map +1 -0
  62. package/dist/docs/math.d.ts +3 -0
  63. package/dist/docs/math.d.ts.map +1 -0
  64. package/dist/docs/math.js +12 -0
  65. package/dist/docs/math.js.map +1 -0
  66. package/dist/docs/reference.d.ts +27 -0
  67. package/dist/docs/reference.d.ts.map +1 -0
  68. package/dist/docs/reference.js +73 -0
  69. package/dist/docs/reference.js.map +1 -0
  70. package/dist/docs/tabs-sync.d.ts +5 -0
  71. package/dist/docs/tabs-sync.d.ts.map +1 -0
  72. package/dist/docs/tabs-sync.js +58 -0
  73. package/dist/docs/tabs-sync.js.map +1 -0
  74. package/dist/gitbook/ast.d.ts +506 -0
  75. package/dist/gitbook/ast.d.ts.map +1 -0
  76. package/dist/gitbook/ast.js +8 -0
  77. package/dist/gitbook/ast.js.map +1 -0
  78. package/dist/gitbook/attrs.d.ts +14 -0
  79. package/dist/gitbook/attrs.d.ts.map +1 -0
  80. package/dist/gitbook/attrs.js +36 -0
  81. package/dist/gitbook/attrs.js.map +1 -0
  82. package/dist/gitbook/flatten.d.ts +14 -0
  83. package/dist/gitbook/flatten.d.ts.map +1 -0
  84. package/dist/gitbook/flatten.js +45 -0
  85. package/dist/gitbook/flatten.js.map +1 -0
  86. package/dist/gitbook/index.d.ts +10 -0
  87. package/dist/gitbook/index.d.ts.map +1 -0
  88. package/dist/gitbook/index.js +8 -0
  89. package/dist/gitbook/index.js.map +1 -0
  90. package/dist/gitbook/inline.d.ts +28 -0
  91. package/dist/gitbook/inline.d.ts.map +1 -0
  92. package/dist/gitbook/inline.js +956 -0
  93. package/dist/gitbook/inline.js.map +1 -0
  94. package/dist/gitbook/outline.d.ts +16 -0
  95. package/dist/gitbook/outline.d.ts.map +1 -0
  96. package/dist/gitbook/outline.js +44 -0
  97. package/dist/gitbook/outline.js.map +1 -0
  98. package/dist/gitbook/package-managers.d.ts +12 -0
  99. package/dist/gitbook/package-managers.d.ts.map +1 -0
  100. package/dist/gitbook/package-managers.js +93 -0
  101. package/dist/gitbook/package-managers.js.map +1 -0
  102. package/dist/gitbook/parse.d.ts +44 -0
  103. package/dist/gitbook/parse.d.ts.map +1 -0
  104. package/dist/gitbook/parse.js +1113 -0
  105. package/dist/gitbook/parse.js.map +1 -0
  106. package/dist/gitbook/serialize.d.ts +23 -0
  107. package/dist/gitbook/serialize.d.ts.map +1 -0
  108. package/dist/gitbook/serialize.js +498 -0
  109. package/dist/gitbook/serialize.js.map +1 -0
  110. package/dist/index.d.ts +34 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +24 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/openapi/OpenApiOperation.d.ts +6 -0
  115. package/dist/openapi/OpenApiOperation.d.ts.map +1 -0
  116. package/dist/openapi/OpenApiOperation.js +112 -0
  117. package/dist/openapi/OpenApiOperation.js.map +1 -0
  118. package/dist/playground/InlineDemoPreview.d.ts +24 -0
  119. package/dist/playground/InlineDemoPreview.d.ts.map +1 -0
  120. package/dist/playground/InlineDemoPreview.js +48 -0
  121. package/dist/playground/InlineDemoPreview.js.map +1 -0
  122. package/dist/playground/PlaygroundStreamdown.d.ts +16 -0
  123. package/dist/playground/PlaygroundStreamdown.d.ts.map +1 -0
  124. package/dist/playground/PlaygroundStreamdown.js +22 -0
  125. package/dist/playground/PlaygroundStreamdown.js.map +1 -0
  126. package/dist/playground/ReactCodePreview.d.ts +64 -0
  127. package/dist/playground/ReactCodePreview.d.ts.map +1 -0
  128. package/dist/playground/ReactCodePreview.js +108 -0
  129. package/dist/playground/ReactCodePreview.js.map +1 -0
  130. package/dist/playground/filesystem.d.ts +27 -0
  131. package/dist/playground/filesystem.d.ts.map +1 -0
  132. package/dist/playground/filesystem.js +65 -0
  133. package/dist/playground/filesystem.js.map +1 -0
  134. package/dist/playground/index.d.ts +9 -0
  135. package/dist/playground/index.d.ts.map +1 -0
  136. package/dist/playground/index.js +7 -0
  137. package/dist/playground/index.js.map +1 -0
  138. package/dist/playground/project.d.ts +57 -0
  139. package/dist/playground/project.d.ts.map +1 -0
  140. package/dist/playground/project.js +137 -0
  141. package/dist/playground/project.js.map +1 -0
  142. package/dist/replay/NativeReplay.d.ts +9 -0
  143. package/dist/replay/NativeReplay.d.ts.map +1 -0
  144. package/dist/replay/NativeReplay.js +173 -0
  145. package/dist/replay/NativeReplay.js.map +1 -0
  146. package/dist/replay/ReplayPreview.d.ts +33 -0
  147. package/dist/replay/ReplayPreview.d.ts.map +1 -0
  148. package/dist/replay/ReplayPreview.js +91 -0
  149. package/dist/replay/ReplayPreview.js.map +1 -0
  150. package/dist/replay/index.d.ts +5 -0
  151. package/dist/replay/index.d.ts.map +1 -0
  152. package/dist/replay/index.js +4 -0
  153. package/dist/replay/index.js.map +1 -0
  154. package/dist/replay/sanitize.d.ts +4 -0
  155. package/dist/replay/sanitize.d.ts.map +1 -0
  156. package/dist/replay/sanitize.js +86 -0
  157. package/dist/replay/sanitize.js.map +1 -0
  158. package/dist/replay/url.d.ts +8 -0
  159. package/dist/replay/url.d.ts.map +1 -0
  160. package/dist/replay/url.js +41 -0
  161. package/dist/replay/url.js.map +1 -0
  162. package/dist/source/SourcePreview.d.ts +13 -0
  163. package/dist/source/SourcePreview.d.ts.map +1 -0
  164. package/dist/source/SourcePreview.js +47 -0
  165. package/dist/source/SourcePreview.js.map +1 -0
  166. package/dist/source/client.d.ts +7 -0
  167. package/dist/source/client.d.ts.map +1 -0
  168. package/dist/source/client.js +52 -0
  169. package/dist/source/client.js.map +1 -0
  170. package/dist/source/index.d.ts +6 -0
  171. package/dist/source/index.d.ts.map +1 -0
  172. package/dist/source/index.js +3 -0
  173. package/dist/source/index.js.map +1 -0
  174. package/dist/source/types.d.ts +33 -0
  175. package/dist/source/types.d.ts.map +1 -0
  176. package/dist/source/types.js +2 -0
  177. package/dist/source/types.js.map +1 -0
  178. package/dist/streamdown.d.ts +19 -0
  179. package/dist/streamdown.d.ts.map +1 -0
  180. package/dist/streamdown.js +15 -0
  181. package/dist/streamdown.js.map +1 -0
  182. package/dist/styles.css +2441 -0
  183. package/dist/video/VideoEmbed.d.ts +17 -0
  184. package/dist/video/VideoEmbed.d.ts.map +1 -0
  185. package/dist/video/VideoEmbed.js +12 -0
  186. package/dist/video/VideoEmbed.js.map +1 -0
  187. package/dist/video/index.d.ts +3 -0
  188. package/dist/video/index.d.ts.map +1 -0
  189. package/dist/video/index.js +2 -0
  190. package/dist/video/index.js.map +1 -0
  191. package/dist/vite/index.d.ts +21 -0
  192. package/dist/vite/index.d.ts.map +1 -0
  193. package/dist/vite/index.js +137 -0
  194. package/dist/vite/index.js.map +1 -0
  195. package/dist/viz/VizEmbed.d.ts +18 -0
  196. package/dist/viz/VizEmbed.d.ts.map +1 -0
  197. package/dist/viz/VizEmbed.js +12 -0
  198. package/dist/viz/VizEmbed.js.map +1 -0
  199. package/dist/viz/index.d.ts +4 -0
  200. package/dist/viz/index.d.ts.map +1 -0
  201. package/dist/viz/index.js +3 -0
  202. package/dist/viz/index.js.map +1 -0
  203. package/package.json +70 -34
  204. package/src/demo/types.ts +2 -2
  205. package/src/docs/DocsRenderer.tsx +31 -7
  206. package/src/docs/Mermaid.tsx +5 -3
  207. package/src/docs/math.ts +3 -0
  208. package/src/index.ts +10 -28
  209. package/src/playground/PlaygroundStreamdown.tsx +28 -61
  210. package/src/playground/filesystem.ts +10 -190
  211. package/src/playground/index.ts +4 -0
  212. package/src/playground/project.ts +194 -0
  213. package/src/replay/NativeReplay.tsx +236 -0
  214. package/src/replay/ReplayPreview.tsx +7 -226
  215. package/src/styles.css +91 -1
  216. package/src/replay/styles.css +0 -87
@@ -0,0 +1,2441 @@
1
+
2
+ [data-docstream],
3
+ .docs-article {
4
+ --gb-panel: var(--card, #ffffff);
5
+ --gb-panel-foreground: var(--card-foreground, #18181b);
6
+ --gb-muted: var(--muted, #f4f4f5);
7
+ --gb-muted-foreground: var(--muted-foreground, #71717a);
8
+ --gb-border: var(--border, #e4e4e7);
9
+ --gb-accent: var(--accent, #f4f4f5);
10
+ --gb-accent-foreground: var(--accent-foreground, #18181b);
11
+ --gb-primary: var(--primary, #4f46e5);
12
+ --gb-primary-foreground: var(--primary-foreground, #fafafa);
13
+ /* Plain rgba/hex values (no color-mix()/oklch()) so the theme renders
14
+ correctly in older Chromium forks; hosts can override any token. */
15
+ --gb-code-bg: rgba(128, 128, 128, 0.13);
16
+ --gb-code-fg: var(--foreground, #18181b);
17
+ --gb-radius: 12px;
18
+ /* Demo viewer + pill controls. Translucent so they sit on light and dark hosts alike. */
19
+ --gb-stage: rgba(128, 128, 128, 0.09);
20
+ --gb-stage-dot: rgba(128, 128, 128, 0.28);
21
+ --gb-pill: var(--gb-panel);
22
+ --gb-pill-track: rgba(128, 128, 128, 0.12);
23
+ --gb-pill-shadow: 0 1px 2px rgba(15, 15, 35, 0.14), 0 0 0 0.5px rgba(15, 15, 35, 0.1);
24
+ --gb-hover: rgba(128, 128, 128, 0.12);
25
+ --gb-menu-shadow: 0 14px 34px -10px rgba(15, 15, 35, 0.28), 0 2px 6px rgba(15, 15, 35, 0.08);
26
+ /* The terminal glyph in command boxes. Its own tokens (not --gb-panel-foreground), so a host
27
+ that sets panel colors to currentColor still gets a visible glyph. */
28
+ --gb-term-bg: rgba(128, 128, 128, 0.2);
29
+ --gb-term-fg: var(--gb-muted-foreground);
30
+
31
+ /* Semantic hint palette — solid color plus precomputed tints. Matches the
32
+ editor palette in @brett_lamy/docstream-editor/styles.css. */
33
+ --gb-info: #3b82f6;
34
+ --gb-info-border: rgba(59, 130, 246, 0.45);
35
+ --gb-info-bg: rgba(59, 130, 246, 0.1);
36
+ --gb-success: #22c55e;
37
+ --gb-success-border: rgba(34, 197, 94, 0.45);
38
+ --gb-success-bg: rgba(34, 197, 94, 0.1);
39
+ --gb-warning: #f59e0b;
40
+ --gb-warning-border: rgba(245, 158, 11, 0.5);
41
+ --gb-warning-bg: rgba(245, 158, 11, 0.12);
42
+ --gb-danger: #ef4444;
43
+ --gb-danger-border: rgba(239, 68, 68, 0.45);
44
+ --gb-danger-bg: rgba(239, 68, 68, 0.1);
45
+ }
46
+
47
+ .docs-source-ref,
48
+ .docs-source-preview-header {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: 0.5rem;
52
+ }
53
+
54
+ .docs-source-ref,
55
+ .docs-source-preview {
56
+ border: 1px solid var(--gb-border);
57
+ border-radius: var(--gb-radius);
58
+ overflow: hidden;
59
+ }
60
+
61
+ .docs-source-ref,
62
+ .docs-source-preview-header {
63
+ padding: 0.65rem 0.8rem;
64
+ background: var(--gb-muted);
65
+ }
66
+
67
+ .docs-source-ref code,
68
+ .docs-source-preview-header code {
69
+ margin-left: auto;
70
+ color: var(--gb-muted-foreground);
71
+ font-size: 0.75rem;
72
+ }
73
+
74
+ .docs-source-preview-body {
75
+ padding: 1rem;
76
+ }
77
+
78
+ .docs-source-preview-error {
79
+ color: var(--gb-danger-foreground, #b42318);
80
+ white-space: pre-wrap;
81
+ }
82
+
83
+ :is([data-docstream], .docs-article) {
84
+ color: var(--foreground, #18181b);
85
+ line-height: 1.65;
86
+ font-size: 15.5px;
87
+ }
88
+
89
+ .docs-article {
90
+ max-width: 760px;
91
+ margin: 0 auto;
92
+ padding: 48px 32px 120px;
93
+ }
94
+
95
+ :is([data-docstream], .docs-article) [data-docstream-blocks] > * {
96
+ margin-block: 0.75em;
97
+ }
98
+
99
+ :is([data-docstream], .docs-article) :is(h1, h2, h3, h4, h5, h6) {
100
+ color: inherit;
101
+ display: block;
102
+ font-family: inherit;
103
+ font-weight: 650;
104
+ line-height: 1.25;
105
+ margin-block: 1.6em 0.45em;
106
+ text-wrap: pretty;
107
+ }
108
+
109
+ :is([data-docstream], .docs-article) [data-docstream-blocks] > :is(h1, h2, h3, h4, h5, h6) {
110
+ margin-block: 1.6em 0.45em;
111
+ }
112
+
113
+ :is([data-docstream], .docs-article) h1 {
114
+ font-size: 2.2em;
115
+ font-weight: 700;
116
+ }
117
+
118
+ :is([data-docstream], .docs-article) h2 {
119
+ font-size: 1.5em;
120
+ font-weight: 675;
121
+ padding-bottom: 0.2em;
122
+ border-bottom: 1px solid var(--border, #e4e4e7);
123
+ }
124
+
125
+ :is([data-docstream], .docs-article) h3 {
126
+ font-size: 1.2em;
127
+ font-weight: 600;
128
+ }
129
+
130
+ :is([data-docstream], .docs-article) h4 {
131
+ font-size: 1.08em;
132
+ font-weight: 600;
133
+ }
134
+
135
+ :is([data-docstream], .docs-article) h5 {
136
+ font-size: 1em;
137
+ font-weight: 600;
138
+ }
139
+
140
+ :is([data-docstream], .docs-article) h6 {
141
+ font-size: 0.92em;
142
+ font-weight: 600;
143
+ letter-spacing: 0.02em;
144
+ }
145
+
146
+ :is([data-docstream], .docs-article) p {
147
+ margin-block: 0.75em;
148
+ }
149
+
150
+ :is([data-docstream], .docs-article) [data-docstream-blocks] > :is(.docs-cards, .docs-code, .docs-math, .docs-hint, .docs-tabs, .docs-demo, .docs-expandable, .docs-stepper, .docs-mermaid-preview, .oas, .docs-embed, .docstream-viz, figure, blockquote, ul, ol, hr) {
151
+ margin-block: 0.75em;
152
+ }
153
+
154
+ :is([data-docstream], .docs-article) [data-docstream-blocks] > .docs-tabs-section {
155
+ margin-block: 1.6em 0.9em;
156
+ }
157
+
158
+ :is([data-docstream], .docs-article) a {
159
+ color: var(--gb-primary);
160
+ text-decoration: underline;
161
+ }
162
+
163
+ :is([data-docstream], .docs-article) code {
164
+ background: var(--gb-muted);
165
+ border-radius: 4px;
166
+ padding: 0.15em 0.35em;
167
+ font-size: 0.875em;
168
+ font-family: ui-monospace, Menlo, monospace;
169
+ }
170
+
171
+ :is([data-docstream], .docs-article) ul {
172
+ list-style: disc;
173
+ padding-left: 1.5em;
174
+ }
175
+
176
+ :is([data-docstream], .docs-article) ol {
177
+ list-style: decimal;
178
+ padding-left: 1.5em;
179
+ }
180
+
181
+ .docs-tasklist {
182
+ list-style: none;
183
+ padding-left: 0.2em;
184
+ }
185
+
186
+ .docs-tasklist li {
187
+ display: flex;
188
+ gap: 8px;
189
+ align-items: flex-start;
190
+ }
191
+
192
+ .docs-tasklist li > input {
193
+ flex: 0 0 auto;
194
+ margin-top: 0.45em;
195
+ }
196
+
197
+ .docs-tasklist .docs-blocks-inline {
198
+ flex: 1;
199
+ min-width: 0;
200
+ }
201
+
202
+ .docs-tasklist .docs-blocks-inline > p:first-child {
203
+ margin: 0;
204
+ }
205
+
206
+ :is([data-docstream], .docs-article) blockquote {
207
+ border-left: 3px solid var(--gb-border);
208
+ padding-left: 1em;
209
+ color: var(--gb-muted-foreground);
210
+ }
211
+
212
+ :is([data-docstream], .docs-article) hr {
213
+ border: none;
214
+ border-top: 1px solid var(--gb-border);
215
+ margin: 2em 0;
216
+ }
217
+
218
+ :is([data-docstream], .docs-article) figure img {
219
+ border-radius: 12px;
220
+ max-width: 100%;
221
+ }
222
+
223
+ :is([data-docstream], .docs-article) figcaption {
224
+ text-align: center;
225
+ font-size: 13px;
226
+ color: var(--gb-muted-foreground);
227
+ margin-top: 8px;
228
+ }
229
+
230
+ .docstream-viz {
231
+ margin: 1.5rem 0;
232
+ }
233
+
234
+ .docstream-viz__player {
235
+ overflow: hidden;
236
+ border: 1px solid var(--gb-border);
237
+ border-radius: 12px;
238
+ background: var(--gb-muted);
239
+ }
240
+
241
+ .docstream-viz figcaption {
242
+ margin-top: 8px;
243
+ color: var(--gb-muted-foreground);
244
+ }
245
+
246
+ .docs-hint {
247
+ display: flex;
248
+ align-items: center;
249
+ gap: 12px;
250
+ padding: 14px 16px;
251
+ border-radius: 12px;
252
+ border: 1px solid;
253
+ }
254
+
255
+ .docs-hint-icon {
256
+ width: 18px;
257
+ height: 18px;
258
+ flex-shrink: 0;
259
+ }
260
+
261
+ .docs-hint > div {
262
+ flex: 1;
263
+ min-width: 0;
264
+ }
265
+
266
+ .docs-hint > div > :first-child {
267
+ margin-top: 0;
268
+ }
269
+
270
+ .docs-hint > div > :last-child {
271
+ margin-bottom: 0;
272
+ }
273
+
274
+ .docs-hint-info {
275
+ border-color: var(--gb-info-border);
276
+ background: var(--gb-info-bg);
277
+ }
278
+
279
+ .docs-hint-info .docs-hint-icon {
280
+ color: var(--gb-info);
281
+ }
282
+
283
+ .docs-hint-success {
284
+ border-color: var(--gb-success-border);
285
+ background: var(--gb-success-bg);
286
+ }
287
+
288
+ .docs-hint-success .docs-hint-icon {
289
+ color: var(--gb-success);
290
+ }
291
+
292
+ .docs-hint-warning {
293
+ border-color: var(--gb-warning-border);
294
+ background: var(--gb-warning-bg);
295
+ }
296
+
297
+ .docs-hint-warning .docs-hint-icon {
298
+ color: var(--gb-warning);
299
+ }
300
+
301
+ .docs-hint-danger {
302
+ border-color: var(--gb-danger-border);
303
+ background: var(--gb-danger-bg);
304
+ }
305
+
306
+ .docs-hint-danger .docs-hint-icon {
307
+ color: var(--gb-danger);
308
+ }
309
+
310
+ .docs-tabs {
311
+ border: 1px solid var(--gb-border);
312
+ border-radius: 12px;
313
+ overflow: hidden;
314
+ background: var(--gb-panel);
315
+ }
316
+
317
+ .docs-tabs-header {
318
+ display: flex;
319
+ width: fit-content;
320
+ max-width: calc(100% - 24px);
321
+ gap: 2px;
322
+ margin: 10px auto 0;
323
+ padding: 4px;
324
+ overflow-x: auto;
325
+ border: 1px solid var(--gb-border);
326
+ border-radius: 999px;
327
+ background: var(--gb-muted);
328
+ }
329
+
330
+ .docs-tabs-header button {
331
+ position: relative;
332
+ z-index: 0;
333
+ flex: 0 0 auto;
334
+ border: 0;
335
+ border-radius: 999px;
336
+ padding: 7px 14px;
337
+ background: transparent;
338
+ font: inherit;
339
+ font-size: 13.5px;
340
+ line-height: 1.25;
341
+ color: var(--gb-muted-foreground);
342
+ cursor: pointer;
343
+ -webkit-tap-highlight-color: transparent;
344
+ transition: color 160ms ease;
345
+ }
346
+
347
+ .docs-tabs-header .docs-tab-active {
348
+ color: var(--gb-panel-foreground);
349
+ font-weight: 600;
350
+ }
351
+
352
+ .docs-tabs-header button:hover:not(.docs-tab-active) {
353
+ color: var(--gb-panel-foreground);
354
+ }
355
+
356
+ .docs-tabs-header button:focus-visible {
357
+ outline: 2px solid var(--gb-primary);
358
+ outline-offset: 2px;
359
+ }
360
+
361
+ .docs-tab-indicator {
362
+ position: absolute;
363
+ inset: 0;
364
+ z-index: -1;
365
+ border: 1px solid var(--gb-border);
366
+ border-radius: inherit;
367
+ background: var(--gb-panel);
368
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08), 0 1px 6px rgba(15, 23, 42, 0.06);
369
+ }
370
+
371
+ .docs-tab-label {
372
+ position: relative;
373
+ }
374
+
375
+ .docs-tabs-body {
376
+ margin-top: 10px;
377
+ padding: 14px 16px;
378
+ border-top: 1px solid var(--gb-border);
379
+ }
380
+
381
+ @media (prefers-reduced-motion: reduce) {
382
+ .docs-tabs-header button {
383
+ transition: none;
384
+ }
385
+ }
386
+
387
+ .docs-expandable {
388
+ border: 1px solid var(--gb-border);
389
+ border-radius: 12px;
390
+ }
391
+
392
+ .docs-expandable summary {
393
+ padding: 12px 16px;
394
+ font-weight: 500;
395
+ cursor: pointer;
396
+ }
397
+
398
+ .docs-expandable-body {
399
+ padding: 0 16px 14px;
400
+ }
401
+
402
+ .docs-stepper .docs-step {
403
+ display: flex;
404
+ gap: 14px;
405
+ }
406
+
407
+ .docs-step-rail {
408
+ display: flex;
409
+ flex-direction: column;
410
+ align-items: center;
411
+ }
412
+
413
+ .docs-step-badge {
414
+ width: 28px;
415
+ height: 28px;
416
+ border-radius: 999px;
417
+ background: var(--gb-muted);
418
+ border: 1px solid var(--gb-border);
419
+ display: flex;
420
+ align-items: center;
421
+ justify-content: center;
422
+ font-size: 13px;
423
+ font-weight: 600;
424
+ }
425
+
426
+ .docs-step-line {
427
+ width: 1px;
428
+ flex: 1;
429
+ background: var(--gb-border);
430
+ margin: 4px 0;
431
+ }
432
+
433
+ .docs-step-main {
434
+ flex: 1;
435
+ min-width: 0;
436
+ padding-bottom: 20px;
437
+ }
438
+
439
+ .docs-step-title {
440
+ font-weight: 600;
441
+ margin: 4px 0 6px;
442
+ }
443
+
444
+ .docs-embed {
445
+ width: 100%;
446
+ aspect-ratio: 16 / 9;
447
+ border: 1px solid var(--gb-border);
448
+ border-radius: 12px;
449
+ }
450
+
451
+ .docs-content-ref {
452
+ display: flex !important;
453
+ align-items: center;
454
+ gap: 10px;
455
+ padding: 13px 16px;
456
+ border: 1px solid var(--gb-border);
457
+ border-radius: 12px;
458
+ font-weight: 500;
459
+ text-decoration: none !important;
460
+ color: var(--foreground, #18181b) !important;
461
+ }
462
+
463
+ .docs-content-ref:hover {
464
+ background: var(--gb-accent);
465
+ color: var(--gb-accent-foreground) !important;
466
+ }
467
+
468
+ .docs-columns {
469
+ display: flex;
470
+ gap: 20px;
471
+ }
472
+
473
+ .docs-column {
474
+ flex: 1;
475
+ min-width: 0;
476
+ }
477
+
478
+ .docs-code {
479
+ border: 1px solid var(--gb-border);
480
+ border-radius: 12px;
481
+ overflow: hidden;
482
+ }
483
+
484
+ .docs-code-header {
485
+ display: flex;
486
+ justify-content: space-between;
487
+ padding: 7px 14px;
488
+ background: var(--gb-muted);
489
+ border-bottom: 1px solid var(--gb-border);
490
+ font-size: 12.5px;
491
+ font-weight: 500;
492
+ }
493
+
494
+ .docs-code-lang {
495
+ color: var(--gb-muted-foreground);
496
+ font-weight: 400;
497
+ }
498
+
499
+ .docs-code pre {
500
+ margin: 0;
501
+ padding: 13px 15px;
502
+ overflow-x: auto;
503
+ font-family: ui-monospace, Menlo, monospace;
504
+ font-size: 13px;
505
+ line-height: 1.55;
506
+ background: var(--gb-code-bg);
507
+ color: var(--gb-code-fg);
508
+ }
509
+
510
+ .docs-code pre code {
511
+ background: none;
512
+ padding: 0;
513
+ font-size: inherit;
514
+ color: inherit;
515
+ }
516
+
517
+ .docs-code pre code.hljs {
518
+ background: none;
519
+ padding: 0;
520
+ }
521
+
522
+ .docs-code-numbered code.hljs {
523
+ display: block;
524
+ }
525
+
526
+ /* Syntax tokens (HighlightedCode). Palenight on dark color-schemes, same-hue AA colors on light ones.
527
+ Override any --docs-tok-* property to retheme. */
528
+ .docs-tok-keyword { color: var(--docs-tok-keyword, light-dark(#8839C4, #C792EA)); }
529
+ .docs-tok-type { color: var(--docs-tok-type, light-dark(#A15C00, #FFCB6B)); }
530
+ .docs-tok-function { color: var(--docs-tok-function, light-dark(#2F5BD3, #82AAFF)); }
531
+ .docs-tok-string { color: var(--docs-tok-string, light-dark(#23803A, #A5D6A7)); }
532
+ .docs-tok-number { color: var(--docs-tok-number, light-dark(#C2410C, #F78C6C)); }
533
+ .docs-tok-constant { color: var(--docs-tok-constant, light-dark(#C8283F, #F07178)); }
534
+ .docs-tok-operator { color: var(--docs-tok-operator, light-dark(#0B7285, #89DDFF)); }
535
+ .docs-tok-comment { color: var(--docs-tok-comment, light-dark(#6E6E7A, #8A8A98)); font-style: italic; }
536
+
537
+ .docs-code-line {
538
+ display: flex;
539
+ gap: 14px;
540
+ }
541
+
542
+ .docs-code-lineno {
543
+ color: var(--gb-muted-foreground);
544
+ width: 1.5em;
545
+ text-align: right;
546
+ flex-shrink: 0;
547
+ user-select: none;
548
+ }
549
+
550
+ .docs-table {
551
+ border-collapse: collapse;
552
+ width: 100%;
553
+ }
554
+
555
+ .docs-table th,
556
+ .docs-table td {
557
+ border: 1px solid var(--gb-border);
558
+ padding: 8px 12px;
559
+ text-align: left;
560
+ }
561
+
562
+ .docs-table th {
563
+ background: var(--gb-muted);
564
+ font-weight: 600;
565
+ }
566
+
567
+ .docs-math {
568
+ border: 1px solid var(--gb-border);
569
+ border-radius: 12px;
570
+ padding: 14px 16px;
571
+ background: var(--gb-muted);
572
+ text-align: center;
573
+ overflow-x: auto;
574
+ }
575
+
576
+ .docs-math .katex-display {
577
+ margin: 0;
578
+ }
579
+
580
+ .docs-updates {
581
+ border-top: 1px solid var(--gb-border);
582
+ }
583
+
584
+ .docs-update {
585
+ display: flex;
586
+ gap: 20px;
587
+ padding: 18px 0;
588
+ border-bottom: 1px solid var(--gb-border);
589
+ }
590
+
591
+ .docs-update-date {
592
+ width: 130px;
593
+ flex-shrink: 0;
594
+ font-size: 13px;
595
+ color: var(--gb-muted-foreground);
596
+ padding-top: 6px;
597
+ }
598
+
599
+ .docs-update-body {
600
+ flex: 1;
601
+ min-width: 0;
602
+ }
603
+
604
+ .docs-cards {
605
+ display: grid;
606
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
607
+ gap: 14px;
608
+ }
609
+
610
+ .docs-card {
611
+ border: 1px solid var(--gb-border);
612
+ border-radius: 12px;
613
+ padding: 16px;
614
+ min-height: 70px;
615
+ }
616
+
617
+ .docs-card:hover {
618
+ background: var(--gb-accent);
619
+ color: var(--gb-accent-foreground);
620
+ }
621
+
622
+ .docs-card-title {
623
+ font-weight: 600;
624
+ }
625
+
626
+ .docs-card-body {
627
+ font-size: 13.5px;
628
+ color: var(--gb-muted-foreground);
629
+ margin-top: 4px;
630
+ }
631
+
632
+ .docs-mermaid-preview {
633
+ border: 1px solid var(--gb-border);
634
+ border-radius: 12px;
635
+ overflow: hidden;
636
+ }
637
+
638
+ .docs-mermaid {
639
+ display: flex;
640
+ justify-content: center;
641
+ padding: 16px;
642
+ background: var(--background, #ffffff);
643
+ }
644
+
645
+ .docs-mermaid svg {
646
+ max-width: 100%;
647
+ }
648
+
649
+ .docs-mermaid-error {
650
+ margin: 0;
651
+ font-size: 12px;
652
+ color: var(--gb-danger);
653
+ padding: 10px;
654
+ white-space: pre-wrap;
655
+ }
656
+
657
+ .docs-mermaid-code {
658
+ border-top: 1px solid var(--gb-border);
659
+ }
660
+
661
+ .docs-inline-img {
662
+ display: inline-block;
663
+ vertical-align: middle;
664
+ border-radius: 4px;
665
+ }
666
+
667
+ .docs-inline-img-link {
668
+ text-decoration: none !important;
669
+ }
670
+
671
+ .oas {
672
+ border: 1px solid var(--gb-border);
673
+ border-radius: 12px;
674
+ padding: 18px 20px;
675
+ margin: 0.7em 0;
676
+ }
677
+
678
+ .oas-empty {
679
+ color: var(--gb-muted-foreground);
680
+ font-size: 14px;
681
+ }
682
+
683
+ .oas-title {
684
+ font-size: 1.35em;
685
+ font-weight: 700;
686
+ margin-bottom: 10px;
687
+ }
688
+
689
+ .oas-endpoint {
690
+ display: flex;
691
+ align-items: center;
692
+ gap: 10px;
693
+ flex-wrap: wrap;
694
+ margin-bottom: 12px;
695
+ }
696
+
697
+ .oas-method {
698
+ font-size: 12px;
699
+ font-weight: 700;
700
+ padding: 3px 9px;
701
+ border-radius: 7px;
702
+ letter-spacing: 0.03em;
703
+ }
704
+
705
+ .oas-method-get {
706
+ background: var(--gb-success-bg);
707
+ color: var(--gb-success);
708
+ }
709
+
710
+ .oas-method-post {
711
+ background: var(--gb-info-bg);
712
+ color: var(--gb-info);
713
+ }
714
+
715
+ .oas-method-put,
716
+ .oas-method-patch {
717
+ background: var(--gb-warning-bg);
718
+ color: var(--gb-warning);
719
+ }
720
+
721
+ .oas-method-delete {
722
+ background: var(--gb-danger-bg);
723
+ color: var(--gb-danger);
724
+ }
725
+
726
+ .oas-server {
727
+ font-size: 13px;
728
+ color: var(--gb-muted-foreground);
729
+ background: var(--gb-muted);
730
+ border-radius: 7px;
731
+ padding: 3px 9px;
732
+ font-family: ui-monospace, Menlo, monospace;
733
+ }
734
+
735
+ .oas-path {
736
+ font-family: ui-monospace, Menlo, monospace;
737
+ font-size: 14px;
738
+ background: none !important;
739
+ }
740
+
741
+ .oas-desc {
742
+ color: var(--foreground, #18181b);
743
+ margin-bottom: 8px;
744
+ }
745
+
746
+ .oas-section {
747
+ margin-top: 18px;
748
+ }
749
+
750
+ .oas-section h4 {
751
+ font-weight: 600;
752
+ font-size: 14px;
753
+ margin-bottom: 8px;
754
+ padding-bottom: 6px;
755
+ border-bottom: 1px solid var(--gb-border);
756
+ }
757
+
758
+ .oas-field {
759
+ padding: 7px 0;
760
+ font-size: 13.5px;
761
+ }
762
+
763
+ .oas-field-name {
764
+ font-weight: 600;
765
+ background: none !important;
766
+ padding: 0 !important;
767
+ }
768
+
769
+ .oas-field-type {
770
+ color: var(--gb-muted-foreground);
771
+ }
772
+
773
+ .oas-required {
774
+ color: var(--gb-warning);
775
+ font-size: 12px;
776
+ }
777
+
778
+ .oas-optional {
779
+ color: var(--gb-muted-foreground);
780
+ font-size: 12px;
781
+ }
782
+
783
+ .oas-field-desc {
784
+ color: var(--gb-muted-foreground);
785
+ font-size: 13px;
786
+ margin-top: 2px;
787
+ }
788
+
789
+ .oas-fields {
790
+ padding-left: 10px;
791
+ border-left: 2px solid var(--gb-border);
792
+ margin-top: 6px;
793
+ }
794
+
795
+ .oas-response summary {
796
+ display: flex;
797
+ gap: 10px;
798
+ align-items: center;
799
+ cursor: pointer;
800
+ padding: 7px 0;
801
+ font-size: 13.5px;
802
+ }
803
+
804
+ .oas-code {
805
+ font-size: 12px;
806
+ font-weight: 700;
807
+ padding: 2px 8px;
808
+ border-radius: 6px;
809
+ font-family: ui-monospace, Menlo, monospace;
810
+ }
811
+
812
+ .oas-code-2 {
813
+ background: var(--gb-success-bg);
814
+ color: var(--gb-success);
815
+ }
816
+
817
+ .oas-code-3 {
818
+ background: var(--gb-warning-bg);
819
+ color: var(--gb-warning);
820
+ }
821
+
822
+ .oas-code-4,
823
+ .oas-code-5 {
824
+ background: var(--gb-danger-bg);
825
+ color: var(--gb-danger);
826
+ }
827
+
828
+ .oas-samples {
829
+ display: grid;
830
+ grid-template-columns: 1fr;
831
+ gap: 12px;
832
+ }
833
+
834
+ .oas-sample {
835
+ border: 1px solid var(--gb-border);
836
+ border-radius: 10px;
837
+ overflow: hidden;
838
+ }
839
+
840
+ .oas-sample-head {
841
+ display: flex;
842
+ align-items: center;
843
+ gap: 10px;
844
+ padding: 7px 12px;
845
+ background: var(--gb-muted);
846
+ font-size: 12.5px;
847
+ }
848
+
849
+ .oas-sample-head code {
850
+ background: none;
851
+ padding: 0;
852
+ color: inherit;
853
+ font-family: ui-monospace, Menlo, monospace;
854
+ font-size: inherit;
855
+ }
856
+
857
+ .oas-sample-label {
858
+ margin-left: auto;
859
+ color: var(--gb-muted-foreground);
860
+ }
861
+
862
+ .oas-sample pre {
863
+ margin: 0;
864
+ padding: 12px 14px;
865
+ font-family: ui-monospace, Menlo, monospace;
866
+ font-size: 12.5px;
867
+ line-height: 1.55;
868
+ overflow-x: auto;
869
+ background: var(--gb-code-bg);
870
+ color: var(--gb-code-fg);
871
+ }
872
+
873
+ .oas-sample pre code,
874
+ .oas-sample pre code.hljs {
875
+ display: block;
876
+ background: transparent;
877
+ border-radius: 0;
878
+ padding: 0;
879
+ color: inherit;
880
+ font-size: inherit;
881
+ white-space: pre;
882
+ }
883
+
884
+ .oas-sample pre code *,
885
+ .oas-sample pre code.hljs * {
886
+ background: transparent;
887
+ }
888
+
889
+ .hljs-keyword,
890
+ .hljs-selector-tag,
891
+ .hljs-built_in,
892
+ .hljs-type,
893
+ .hljs-tag,
894
+ .hljs-name {
895
+ color: var(--chart-4, #cf222e);
896
+ }
897
+
898
+ .hljs-string,
899
+ .hljs-attr,
900
+ .hljs-symbol,
901
+ .hljs-bullet {
902
+ color: var(--chart-1, #0a7a4b);
903
+ }
904
+
905
+ .hljs-title,
906
+ .hljs-section,
907
+ .hljs-function .hljs-title {
908
+ color: var(--chart-2, #8250df);
909
+ }
910
+
911
+ .hljs-number,
912
+ .hljs-literal,
913
+ .hljs-variable,
914
+ .hljs-template-variable {
915
+ color: var(--chart-3, #0550ae);
916
+ }
917
+
918
+ .hljs-comment,
919
+ .hljs-quote,
920
+ .hljs-meta {
921
+ color: var(--gb-muted-foreground, #71717a);
922
+ }
923
+
924
+ .hljs-operator,
925
+ .hljs-punctuation {
926
+ color: var(--gb-code-fg, #18181b);
927
+ }
928
+
929
+ .hljs-deletion {
930
+ color: var(--gb-danger, #ef4444);
931
+ }
932
+
933
+ .hljs-addition {
934
+ color: var(--gb-success, #22c55e);
935
+ }
936
+
937
+ .docs-react-demo {
938
+ --docs-react-demo-panel: var(--gb-panel, var(--card, #ffffff));
939
+ --docs-react-demo-foreground: var(--gb-panel-foreground, var(--card-foreground, #18181b));
940
+ --docs-react-demo-muted-foreground: var(--gb-muted-foreground, var(--muted-foreground, #71717a));
941
+ --docs-react-demo-border: var(--gb-border, var(--border, #e4e4e7));
942
+ --docs-react-demo-accent: var(--gb-accent, var(--accent, #f4f4f5));
943
+ --docs-react-demo-primary: var(--gb-primary, var(--primary, #4f46e5));
944
+ --docs-react-demo-code-bg: var(--gb-code-bg, rgba(128, 128, 128, 0.13));
945
+ --docs-react-demo-success: var(--gb-success, #22c55e);
946
+ --docs-react-demo-danger: var(--gb-danger, #ef4444);
947
+ overflow: hidden;
948
+ border: 1px solid var(--docs-react-demo-border);
949
+ border-radius: 12px;
950
+ background: var(--docs-react-demo-panel);
951
+ }
952
+
953
+ .docs-react-demo-header {
954
+ display: flex;
955
+ align-items: center;
956
+ gap: 10px;
957
+ min-height: 42px;
958
+ padding: 8px 12px;
959
+ border-bottom: 1px solid var(--docs-react-demo-border);
960
+ color: var(--docs-react-demo-foreground);
961
+ font-size: 13px;
962
+ font-weight: 550;
963
+ }
964
+
965
+ .docs-react-demo-status {
966
+ margin-left: auto;
967
+ color: var(--docs-react-demo-muted-foreground);
968
+ font-size: 11px;
969
+ text-transform: uppercase;
970
+ letter-spacing: 0.08em;
971
+ }
972
+
973
+ .docs-react-demo-status-ready {
974
+ color: var(--docs-react-demo-success);
975
+ }
976
+
977
+ .docs-react-demo-status-error {
978
+ color: var(--docs-react-demo-danger);
979
+ }
980
+
981
+ .docs-react-demo-run {
982
+ border: 1px solid var(--docs-react-demo-border);
983
+ border-radius: 6px;
984
+ padding: 4px 9px;
985
+ color: var(--docs-react-demo-foreground);
986
+ font-size: 12px;
987
+ cursor: pointer;
988
+ }
989
+
990
+ .docs-react-demo-run:disabled {
991
+ cursor: wait;
992
+ opacity: 0.55;
993
+ }
994
+
995
+ .docs-react-demo-frame,
996
+ .docs-react-demo-placeholder {
997
+ display: block;
998
+ width: 100%;
999
+ border: 0;
1000
+ background: #fff;
1001
+ }
1002
+
1003
+ /* Inline preview (`preview` prop): the host's own content, so no forced background. `height: auto` grows to fit. */
1004
+ .docs-react-demo-preview {
1005
+ position: relative;
1006
+ overflow: hidden;
1007
+ }
1008
+
1009
+ .docs-react-demo-placeholder {
1010
+ display: grid;
1011
+ place-items: center;
1012
+ color: #64748b;
1013
+ font-size: 13px;
1014
+ }
1015
+
1016
+ .docs-react-demo-error {
1017
+ margin: 0;
1018
+ min-height: 100px;
1019
+ overflow: auto;
1020
+ padding: 14px;
1021
+ color: var(--docs-react-demo-danger);
1022
+ background: var(--docs-react-demo-code-bg);
1023
+ white-space: pre-wrap;
1024
+ }
1025
+
1026
+ .docs-react-demo-code {
1027
+ position: relative;
1028
+ border-top: 1px solid var(--docs-react-demo-border);
1029
+ background: var(--docs-react-demo-code-bg);
1030
+ }
1031
+
1032
+ .docs-react-demo-code-body {
1033
+ --docs-react-demo-code-line-height: 1.6rem;
1034
+ max-height: calc(var(--docs-react-demo-code-lines) * var(--docs-react-demo-code-line-height));
1035
+ margin: 0;
1036
+ overflow: hidden;
1037
+ padding: 1.15rem 1rem 2.4rem;
1038
+ font-size: 0.875rem;
1039
+ line-height: var(--docs-react-demo-code-line-height);
1040
+ tab-size: 2;
1041
+ }
1042
+
1043
+ .docs-react-demo-code-body::after {
1044
+ position: absolute;
1045
+ right: 0;
1046
+ bottom: 0;
1047
+ left: 0;
1048
+ height: 4.5rem;
1049
+ background: linear-gradient(to bottom, transparent, var(--docs-react-demo-panel));
1050
+ content: "";
1051
+ pointer-events: none;
1052
+ }
1053
+
1054
+ .docs-react-demo-code-body-expanded {
1055
+ overflow: auto;
1056
+ padding-bottom: 3.25rem;
1057
+ }
1058
+
1059
+ .docs-react-demo-code-body-expanded::after {
1060
+ display: none;
1061
+ }
1062
+
1063
+ .docs-react-demo-code-body > code {
1064
+ display: block;
1065
+ min-width: max-content;
1066
+ padding: 0;
1067
+ background: transparent;
1068
+ }
1069
+
1070
+ .docs-react-demo-code-body:not(.docs-react-demo-code-body-expanded) > code {
1071
+ max-height: calc(var(--docs-react-demo-code-lines) * var(--docs-react-demo-code-line-height));
1072
+ overflow: hidden;
1073
+ }
1074
+
1075
+ .docs-react-demo-code-body .docs-code-line {
1076
+ min-height: var(--docs-react-demo-code-line-height);
1077
+ }
1078
+
1079
+ .docs-react-demo-code-toggle {
1080
+ position: absolute;
1081
+ bottom: 0.85rem;
1082
+ left: 50%;
1083
+ z-index: 1;
1084
+ transform: translateX(-50%);
1085
+ border: 1px solid var(--docs-react-demo-border);
1086
+ border-radius: 0.65rem;
1087
+ padding: 0.45rem 0.85rem;
1088
+ color: var(--docs-react-demo-foreground);
1089
+ background: var(--docs-react-demo-panel);
1090
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
1091
+ font: inherit;
1092
+ font-size: 0.8125rem;
1093
+ font-weight: 600;
1094
+ cursor: pointer;
1095
+ }
1096
+
1097
+ .docs-react-demo-code-toggle:hover {
1098
+ background: var(--docs-react-demo-accent);
1099
+ }
1100
+
1101
+ .docs-react-demo-code-toggle:focus-visible {
1102
+ outline: 2px solid var(--docs-react-demo-primary);
1103
+ outline-offset: 2px;
1104
+ }
1105
+
1106
+ /* ---- Inline reference chips (@mention, #tag) and citations ---- */
1107
+
1108
+ .docs-ref {
1109
+ display: inline-flex;
1110
+ align-items: center;
1111
+ gap: 4px;
1112
+ padding: 1px 8px;
1113
+ border-radius: 999px;
1114
+ font-family: inherit;
1115
+ font-size: 0.85em;
1116
+ font-weight: 500;
1117
+ line-height: 1.5;
1118
+ vertical-align: baseline;
1119
+ cursor: pointer;
1120
+ }
1121
+
1122
+ .docs-ref-icon {
1123
+ width: 12px;
1124
+ height: 12px;
1125
+ }
1126
+
1127
+ .docs-ref-mention {
1128
+ border: 1px solid rgba(59, 130, 246, 0.45);
1129
+ background: rgba(59, 130, 246, 0.1);
1130
+ color: var(--gb-info);
1131
+ }
1132
+
1133
+ .docs-ref-mention:hover {
1134
+ background: rgba(59, 130, 246, 0.18);
1135
+ }
1136
+
1137
+ .docs-ref-tag {
1138
+ border: 1px solid var(--gb-border);
1139
+ background: var(--gb-muted);
1140
+ color: var(--gb-muted-foreground);
1141
+ }
1142
+
1143
+ .docs-ref-tag:hover {
1144
+ background: var(--gb-accent);
1145
+ color: var(--gb-accent-foreground);
1146
+ }
1147
+
1148
+ .docs-ref-codebase {
1149
+ border: 1px solid rgba(34, 197, 94, 0.45);
1150
+ background: rgba(34, 197, 94, 0.1);
1151
+ color: rgb(74, 222, 128);
1152
+ }
1153
+
1154
+ .docs-ref-codebase:hover {
1155
+ background: rgba(34, 197, 94, 0.18);
1156
+ }
1157
+
1158
+ .docs-cite-wrap {
1159
+ position: relative;
1160
+ display: inline-block;
1161
+ vertical-align: super;
1162
+ }
1163
+
1164
+ .docs-cite {
1165
+ display: inline-block;
1166
+ padding: 1px 5px;
1167
+ border-radius: 5px;
1168
+ background: rgba(59, 130, 246, 0.14);
1169
+ color: var(--gb-info) !important;
1170
+ font-size: 10px;
1171
+ font-weight: 700;
1172
+ line-height: 1.4;
1173
+ vertical-align: baseline;
1174
+ text-decoration: none !important;
1175
+ cursor: pointer;
1176
+ }
1177
+
1178
+ .docs-cite:hover {
1179
+ background: rgba(59, 130, 246, 0.22);
1180
+ }
1181
+
1182
+ .docs-cite:focus-visible {
1183
+ outline: 2px solid var(--gb-info);
1184
+ outline-offset: 2px;
1185
+ }
1186
+
1187
+ .docs-cite-card {
1188
+ position: absolute;
1189
+ top: calc(100% + 10px);
1190
+ left: 50%;
1191
+ z-index: 50;
1192
+ display: block;
1193
+ width: min(320px, calc(100vw - 32px));
1194
+ overflow: hidden;
1195
+ border: 1px solid var(--gb-border);
1196
+ border-radius: 12px;
1197
+ color: var(--gb-panel-foreground);
1198
+ background: var(--gb-panel);
1199
+ box-shadow: 0 12px 32px rgba(15, 23, 42, 0.16), 0 2px 8px rgba(15, 23, 42, 0.08);
1200
+ opacity: 0;
1201
+ visibility: hidden;
1202
+ transform: translate(-50%, -4px);
1203
+ transition: opacity 120ms ease, transform 120ms ease, visibility 120ms;
1204
+ pointer-events: none;
1205
+ text-align: left;
1206
+ white-space: normal;
1207
+ }
1208
+
1209
+ .docs-cite-wrap:hover .docs-cite-card,
1210
+ .docs-cite-wrap:focus-within .docs-cite-card {
1211
+ opacity: 1;
1212
+ visibility: visible;
1213
+ transform: translate(-50%, 0);
1214
+ }
1215
+
1216
+ .docs-cite-card-image-wrap {
1217
+ display: block;
1218
+ aspect-ratio: 1.91 / 1;
1219
+ overflow: hidden;
1220
+ border-bottom: 1px solid var(--gb-border);
1221
+ background: var(--gb-muted);
1222
+ }
1223
+
1224
+ .docs-cite-card-image {
1225
+ width: 100%;
1226
+ height: 100%;
1227
+ object-fit: cover;
1228
+ }
1229
+
1230
+ .docs-cite-card-body {
1231
+ display: flex;
1232
+ flex-direction: column;
1233
+ gap: 6px;
1234
+ padding: 12px 14px 13px;
1235
+ }
1236
+
1237
+ .docs-cite-card-source,
1238
+ .docs-cite-card-url {
1239
+ display: flex;
1240
+ align-items: center;
1241
+ gap: 6px;
1242
+ min-width: 0;
1243
+ color: var(--gb-muted-foreground);
1244
+ font-size: 11px;
1245
+ font-weight: 500;
1246
+ line-height: 1.35;
1247
+ }
1248
+
1249
+ .docs-cite-card-favicon {
1250
+ width: 14px;
1251
+ height: 14px;
1252
+ flex: 0 0 auto;
1253
+ border-radius: 3px;
1254
+ }
1255
+
1256
+ .docs-cite-card-title {
1257
+ display: -webkit-box;
1258
+ overflow: hidden;
1259
+ color: var(--gb-panel-foreground);
1260
+ font-size: 14px;
1261
+ font-weight: 650;
1262
+ line-height: 1.35;
1263
+ -webkit-box-orient: vertical;
1264
+ -webkit-line-clamp: 2;
1265
+ }
1266
+
1267
+ .docs-cite-card-description {
1268
+ display: -webkit-box;
1269
+ overflow: hidden;
1270
+ color: var(--gb-muted-foreground);
1271
+ font-size: 12px;
1272
+ font-weight: 400;
1273
+ line-height: 1.45;
1274
+ -webkit-box-orient: vertical;
1275
+ -webkit-line-clamp: 3;
1276
+ }
1277
+
1278
+ .docs-cite-card-url {
1279
+ margin-top: 2px;
1280
+ overflow: hidden;
1281
+ text-overflow: ellipsis;
1282
+ white-space: nowrap;
1283
+ }
1284
+
1285
+ .docs-cite-card-url svg {
1286
+ width: 12px;
1287
+ height: 12px;
1288
+ flex: 0 0 auto;
1289
+ }
1290
+
1291
+ @media (prefers-reduced-motion: reduce) {
1292
+ .docs-cite-card {
1293
+ transition: none;
1294
+ }
1295
+ }
1296
+
1297
+ .docs-sources {
1298
+ display: flex;
1299
+ flex-wrap: wrap;
1300
+ gap: 8px;
1301
+ margin-top: 16px;
1302
+ }
1303
+
1304
+ .docs-source-chip {
1305
+ display: inline-flex;
1306
+ align-items: center;
1307
+ gap: 6px;
1308
+ padding: 4px 12px;
1309
+ border: 1px solid var(--gb-border);
1310
+ border-radius: 999px;
1311
+ font-size: 12.5px;
1312
+ font-weight: 500;
1313
+ color: var(--gb-muted-foreground) !important;
1314
+ text-decoration: none !important;
1315
+ }
1316
+
1317
+ .docs-source-chip:hover {
1318
+ background: var(--gb-accent);
1319
+ color: var(--gb-accent-foreground) !important;
1320
+ }
1321
+
1322
+ .docs-source-favicon {
1323
+ width: 14px;
1324
+ height: 14px;
1325
+ border-radius: 4px;
1326
+ }
1327
+
1328
+ /* ---- Copy buttons ---- */
1329
+
1330
+ .docs-copy {
1331
+ display: inline-grid;
1332
+ place-items: center;
1333
+ flex-shrink: 0;
1334
+ width: 28px;
1335
+ height: 28px;
1336
+ padding: 0;
1337
+ border: 0;
1338
+ border-radius: 7px;
1339
+ background: none;
1340
+ color: var(--gb-muted-foreground);
1341
+ cursor: pointer;
1342
+ transition: background 150ms ease, color 150ms ease;
1343
+ }
1344
+
1345
+ .docs-copy:hover {
1346
+ background: var(--gb-hover);
1347
+ color: var(--gb-panel-foreground);
1348
+ }
1349
+
1350
+ .docs-copy:focus-visible {
1351
+ outline: 2px solid var(--gb-primary);
1352
+ outline-offset: 1px;
1353
+ }
1354
+
1355
+ .docs-copy-icon-done {
1356
+ color: var(--gb-success);
1357
+ }
1358
+
1359
+ .docs-code {
1360
+ position: relative;
1361
+ }
1362
+
1363
+ .docs-code-header {
1364
+ align-items: center;
1365
+ gap: 8px;
1366
+ padding-right: 6px;
1367
+ }
1368
+
1369
+ .docs-code-header > span:first-child {
1370
+ flex: 1;
1371
+ min-width: 0;
1372
+ }
1373
+
1374
+ .docs-code-header .docs-copy {
1375
+ width: 24px;
1376
+ height: 24px;
1377
+ margin: -3px 0;
1378
+ }
1379
+
1380
+ /* Untitled code blocks: no header bar, just the code and a copy button in its top-right corner. */
1381
+ .docs-code-copy-float {
1382
+ position: absolute;
1383
+ top: 9px;
1384
+ right: 9px;
1385
+ z-index: 1;
1386
+ background: transparent;
1387
+ opacity: 0.75;
1388
+ }
1389
+
1390
+ .docs-code:hover .docs-code-copy-float,
1391
+ .docs-code-copy-float:focus-visible,
1392
+ .docs-code-copy-float[data-copied] {
1393
+ opacity: 1;
1394
+ }
1395
+
1396
+ .docs-react-demo-code-copy {
1397
+ position: absolute;
1398
+ top: 8px;
1399
+ right: 8px;
1400
+ z-index: 1;
1401
+ background: var(--docs-react-demo-panel, var(--gb-panel));
1402
+ box-shadow: 0 0 0 1px var(--gb-border);
1403
+ }
1404
+
1405
+ .docs-react-demo-code-body:not([data-toggle]) {
1406
+ padding-bottom: 1.15rem;
1407
+ }
1408
+
1409
+ .docs-react-demo-code-body:not([data-toggle])::after {
1410
+ display: none;
1411
+ }
1412
+
1413
+ /* ---- Pill tabs / segmented controls ---- */
1414
+
1415
+ .docs-pills {
1416
+ display: inline-flex;
1417
+ flex-shrink: 0;
1418
+ gap: 2px;
1419
+ padding: 2px;
1420
+ border-radius: 9px;
1421
+ background: var(--gb-pill-track);
1422
+ }
1423
+
1424
+ .docs-pill {
1425
+ position: relative;
1426
+ z-index: 0;
1427
+ border: 0;
1428
+ border-radius: 7px;
1429
+ padding: 6px 11px;
1430
+ background: none;
1431
+ color: var(--gb-muted-foreground);
1432
+ font: inherit;
1433
+ font-size: 12.5px;
1434
+ font-weight: 600;
1435
+ line-height: 1;
1436
+ white-space: nowrap;
1437
+ cursor: pointer;
1438
+ -webkit-tap-highlight-color: transparent;
1439
+ transition: color 150ms ease;
1440
+ }
1441
+
1442
+ .docs-pill[aria-selected="true"],
1443
+ .docs-pill[aria-checked="true"],
1444
+ .docs-pill:hover {
1445
+ color: var(--gb-panel-foreground);
1446
+ }
1447
+
1448
+ .docs-pill:focus-visible {
1449
+ outline: 2px solid var(--gb-primary);
1450
+ outline-offset: 1px;
1451
+ }
1452
+
1453
+ .docs-pill-indicator {
1454
+ position: absolute;
1455
+ inset: 0;
1456
+ z-index: -1;
1457
+ border-radius: 7px;
1458
+ background: var(--gb-pill);
1459
+ box-shadow: var(--gb-pill-shadow);
1460
+ }
1461
+
1462
+ .docs-pill-label {
1463
+ position: relative;
1464
+ }
1465
+
1466
+ /* ---- Code-only tabs (install commands): the tabs become the code block's header ---- */
1467
+
1468
+ .docs-tabs-code {
1469
+ border-radius: 12px;
1470
+ background: var(--gb-panel);
1471
+ }
1472
+
1473
+ .docs-tabs-code-head {
1474
+ display: flex;
1475
+ align-items: center;
1476
+ gap: 8px;
1477
+ min-height: 38px;
1478
+ padding: 5px 6px 5px 10px;
1479
+ border-bottom: 1px solid var(--gb-border);
1480
+ background: var(--gb-muted);
1481
+ }
1482
+
1483
+ .docs-tabs-code-head .docs-tabs-header {
1484
+ margin: 0;
1485
+ padding: 0;
1486
+ max-width: none;
1487
+ border: 0;
1488
+ border-radius: 0;
1489
+ background: none;
1490
+ }
1491
+
1492
+ .docs-tabs-code-head .docs-tabs-header button {
1493
+ padding: 5px 9px;
1494
+ border-radius: 7px;
1495
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1496
+ font-size: 12px;
1497
+ font-weight: 500;
1498
+ }
1499
+
1500
+ .docs-tabs-code-head .docs-tabs-header .docs-tab-active {
1501
+ font-weight: 600;
1502
+ }
1503
+
1504
+ .docs-tabs-code-head .docs-tab-indicator {
1505
+ border: 0;
1506
+ background: var(--gb-pill);
1507
+ box-shadow: var(--gb-pill-shadow);
1508
+ }
1509
+
1510
+ .docs-tabs-code-term {
1511
+ display: grid;
1512
+ place-items: center;
1513
+ flex-shrink: 0;
1514
+ width: 20px;
1515
+ height: 20px;
1516
+ border-radius: 5px;
1517
+ background: var(--gb-term-bg, rgba(128, 128, 128, 0.2));
1518
+ color: var(--gb-term-fg, #71717a);
1519
+ }
1520
+
1521
+ /* ---- Titled tabs (`{% tabs title="Installation" %}`): heading + pill switch, then the tab ---- */
1522
+
1523
+ .docs-tabs-section-head {
1524
+ display: flex;
1525
+ flex-wrap: wrap;
1526
+ align-items: center;
1527
+ justify-content: space-between;
1528
+ gap: 12px;
1529
+ margin-bottom: 12px;
1530
+ }
1531
+
1532
+ /* The heading sits centred on the switch's row: no block margin, padding or rule of its own
1533
+ (page heading rules — docstream's and a host's `h2 { padding-top }` — would push it off
1534
+ centre; 0,4,0 outranks them). */
1535
+ :is([data-docstream], .docs-article) .docs-tabs-section > .docs-tabs-section-head > .docs-tabs-section-title {
1536
+ align-self: center;
1537
+ margin: 0;
1538
+ padding-block: 0;
1539
+ border-bottom: 0;
1540
+ scroll-margin-top: 80px;
1541
+ }
1542
+
1543
+ .docs-tabs-section-body {
1544
+ display: flex;
1545
+ flex-direction: column;
1546
+ gap: 10px;
1547
+ }
1548
+
1549
+ /* One 10px rhythm inside a section. These must outrank the generic block spacing
1550
+ (`:is([data-docstream], .docs-article) [data-docstream-blocks] > :is(.docs-code, …)`,
1551
+ headings and demos, specificity 0,3,0), hence the extra `.docs-tabs-section >` (0,4,0). */
1552
+ :is([data-docstream], .docs-article) .docs-tabs-section > .docs-tabs-section-body > [data-docstream-blocks] > * {
1553
+ margin-block: 0 10px;
1554
+ }
1555
+
1556
+ :is([data-docstream], .docs-article) .docs-tabs-section > .docs-tabs-section-body > [data-docstream-blocks] > :last-child {
1557
+ margin-bottom: 0;
1558
+ }
1559
+
1560
+ :is([data-docstream], .docs-article) .docs-tabs-section > .docs-tabs-section-body > [data-docstream-blocks] > p {
1561
+ color: var(--gb-muted-foreground);
1562
+ font-size: 0.93em;
1563
+ }
1564
+
1565
+ .docs-tabs-code-title {
1566
+ flex: 1;
1567
+ min-width: 0;
1568
+ overflow: hidden;
1569
+ color: var(--gb-muted-foreground);
1570
+ font-size: 12px;
1571
+ text-align: right;
1572
+ text-overflow: ellipsis;
1573
+ white-space: nowrap;
1574
+ }
1575
+
1576
+ .docs-tabs-code-body pre {
1577
+ margin: 0;
1578
+ padding: 13px 16px;
1579
+ overflow-x: auto;
1580
+ background: var(--gb-code-bg);
1581
+ color: var(--gb-code-fg);
1582
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1583
+ font-size: 13px;
1584
+ line-height: 1.6;
1585
+ }
1586
+
1587
+ .docs-tabs-code-body pre code {
1588
+ padding: 0;
1589
+ background: none;
1590
+ font-size: inherit;
1591
+ }
1592
+
1593
+ /* ---- Page actions ("Copy page ▾") ---- */
1594
+
1595
+ .docs-page-actions-bar {
1596
+ display: flex;
1597
+ justify-content: flex-end;
1598
+ margin-bottom: -4px;
1599
+ }
1600
+
1601
+ .docs-page-actions-bar + [data-docstream-blocks] > :first-child:is(h1, h2) {
1602
+ margin-top: 0.2em;
1603
+ }
1604
+
1605
+ .docs-page-actions {
1606
+ position: relative;
1607
+ display: inline-flex;
1608
+ flex-shrink: 0;
1609
+ font-size: 12.5px;
1610
+ }
1611
+
1612
+ .docs-page-actions > button {
1613
+ display: inline-flex;
1614
+ align-items: center;
1615
+ gap: 6px;
1616
+ height: 28px;
1617
+ border: 1px solid var(--gb-border);
1618
+ background: var(--gb-panel);
1619
+ color: var(--gb-panel-foreground);
1620
+ font: inherit;
1621
+ font-weight: 600;
1622
+ line-height: 1;
1623
+ cursor: pointer;
1624
+ transition: background 150ms ease;
1625
+ }
1626
+
1627
+ .docs-page-actions > button:hover {
1628
+ background: var(--gb-muted);
1629
+ }
1630
+
1631
+ .docs-page-actions > button:focus-visible {
1632
+ position: relative;
1633
+ z-index: 1;
1634
+ outline: 2px solid var(--gb-primary);
1635
+ outline-offset: 1px;
1636
+ }
1637
+
1638
+ .docs-page-actions-main {
1639
+ padding: 0 10px 0 9px;
1640
+ border-radius: 8px 0 0 8px;
1641
+ }
1642
+
1643
+ .docs-page-actions-main > span:last-child {
1644
+ min-width: 60px;
1645
+ text-align: left;
1646
+ }
1647
+
1648
+ .docs-page-actions > .docs-page-actions-more {
1649
+ margin-left: -1px;
1650
+ padding: 0 7px;
1651
+ border-radius: 0 8px 8px 0;
1652
+ color: var(--gb-muted-foreground);
1653
+ }
1654
+
1655
+ .docs-page-actions-more svg {
1656
+ transition: transform 200ms ease;
1657
+ }
1658
+
1659
+ .docs-page-actions-more .docs-page-actions-caret-open {
1660
+ transform: rotate(180deg);
1661
+ }
1662
+
1663
+ .docs-page-actions-menu {
1664
+ position: absolute;
1665
+ top: calc(100% + 6px);
1666
+ right: 0;
1667
+ z-index: 50;
1668
+ width: 256px;
1669
+ padding: 5px;
1670
+ border: 1px solid var(--gb-border);
1671
+ border-radius: 12px;
1672
+ background: var(--gb-panel);
1673
+ box-shadow: var(--gb-menu-shadow);
1674
+ }
1675
+
1676
+ .docs-page-actions-item {
1677
+ display: flex;
1678
+ align-items: flex-start;
1679
+ gap: 10px;
1680
+ box-sizing: border-box;
1681
+ width: 100%;
1682
+ padding: 8px 9px;
1683
+ border: 0;
1684
+ border-radius: 8px;
1685
+ background: none;
1686
+ color: var(--gb-panel-foreground) !important;
1687
+ font: inherit;
1688
+ text-align: left;
1689
+ text-decoration: none !important;
1690
+ cursor: pointer;
1691
+ }
1692
+
1693
+ .docs-page-actions-item:hover,
1694
+ .docs-page-actions-item:focus-visible {
1695
+ outline: none;
1696
+ background: var(--gb-hover);
1697
+ }
1698
+
1699
+ .docs-page-actions-icon {
1700
+ display: grid;
1701
+ place-items: center;
1702
+ flex-shrink: 0;
1703
+ width: 26px;
1704
+ height: 26px;
1705
+ border: 1px solid var(--gb-border);
1706
+ border-radius: 7px;
1707
+ color: var(--gb-muted-foreground);
1708
+ }
1709
+
1710
+ .docs-page-actions-text {
1711
+ display: flex;
1712
+ flex-direction: column;
1713
+ gap: 2px;
1714
+ min-width: 0;
1715
+ }
1716
+
1717
+ .docs-page-actions-label {
1718
+ display: inline-flex;
1719
+ align-items: center;
1720
+ gap: 5px;
1721
+ font-size: 13px;
1722
+ font-weight: 600;
1723
+ line-height: 1.3;
1724
+ }
1725
+
1726
+ .docs-page-actions-label svg {
1727
+ color: var(--gb-muted-foreground);
1728
+ }
1729
+
1730
+ .docs-page-actions-hint {
1731
+ color: var(--gb-muted-foreground);
1732
+ font-size: 11.5px;
1733
+ line-height: 1.35;
1734
+ }
1735
+
1736
+ /* ---- Demo viewer ---- */
1737
+
1738
+ .docs-demo {
1739
+ container-type: inline-size;
1740
+ --docs-demo-mono: ui-monospace, SFMono-Regular, Menlo, monospace;
1741
+ }
1742
+
1743
+ :is([data-docstream], .docs-article) [data-docstream-blocks] > .docs-demo {
1744
+ margin-block: 1.5em;
1745
+ }
1746
+
1747
+ .docs-demo-title {
1748
+ color: var(--gb-panel-foreground);
1749
+ font-size: 15px;
1750
+ font-weight: 650;
1751
+ letter-spacing: -0.1px;
1752
+ line-height: 1.3;
1753
+ }
1754
+
1755
+ .docs-demo-desc {
1756
+ margin: 3px 0 0;
1757
+ color: var(--gb-muted-foreground);
1758
+ font-size: 13.5px;
1759
+ font-weight: 400;
1760
+ line-height: 1.5;
1761
+ }
1762
+
1763
+ .docs-demo-desc code {
1764
+ font-size: 0.9em;
1765
+ }
1766
+
1767
+ .docs-demo-spacer {
1768
+ flex: 1;
1769
+ }
1770
+
1771
+ .docs-demo-icon-btn {
1772
+ display: inline-grid;
1773
+ place-items: center;
1774
+ flex-shrink: 0;
1775
+ box-sizing: border-box;
1776
+ width: 30px;
1777
+ height: 30px;
1778
+ padding: 0;
1779
+ border: 1px solid var(--gb-border);
1780
+ border-radius: 8px;
1781
+ background: var(--gb-panel);
1782
+ color: var(--gb-muted-foreground) !important;
1783
+ cursor: pointer;
1784
+ text-decoration: none !important;
1785
+ transition: background 150ms ease, color 150ms ease;
1786
+ }
1787
+
1788
+ .docs-demo-icon-btn:hover {
1789
+ background: var(--gb-hover);
1790
+ color: var(--gb-panel-foreground) !important;
1791
+ }
1792
+
1793
+ .docs-demo-icon-btn:focus-visible,
1794
+ .docs-demo-vp:focus-visible,
1795
+ .docs-demo-file:focus-visible,
1796
+ .docs-demo-handle:focus-visible,
1797
+ .docs-demo-source-body:focus-visible {
1798
+ outline: 2px solid var(--gb-primary);
1799
+ outline-offset: 1px;
1800
+ }
1801
+
1802
+ .docs-demo-head {
1803
+ display: flex;
1804
+ flex-wrap: wrap;
1805
+ align-items: flex-end;
1806
+ justify-content: space-between;
1807
+ gap: 10px 20px;
1808
+ margin-bottom: 10px;
1809
+ }
1810
+
1811
+ .docs-demo-head .docs-demo-heading {
1812
+ flex: 1 1 220px;
1813
+ min-width: 0;
1814
+ }
1815
+
1816
+ .docs-demo-tools {
1817
+ display: flex;
1818
+ flex-wrap: wrap;
1819
+ align-items: center;
1820
+ gap: 6px;
1821
+ }
1822
+
1823
+ .docs-demo-viewports {
1824
+ display: inline-flex;
1825
+ align-items: center;
1826
+ gap: 1px;
1827
+ padding: 1px;
1828
+ border: 1px solid var(--gb-border);
1829
+ border-radius: 9px;
1830
+ }
1831
+
1832
+ .docs-demo-vp {
1833
+ display: grid;
1834
+ place-items: center;
1835
+ width: 28px;
1836
+ height: 26px;
1837
+ padding: 0;
1838
+ border: 0;
1839
+ border-radius: 7px;
1840
+ background: none;
1841
+ color: var(--gb-muted-foreground);
1842
+ cursor: pointer;
1843
+ transition: background 150ms ease, color 150ms ease;
1844
+ }
1845
+
1846
+ .docs-demo-vp:hover,
1847
+ .docs-demo-vp[aria-pressed="true"] {
1848
+ background: var(--gb-hover);
1849
+ color: var(--gb-panel-foreground);
1850
+ }
1851
+
1852
+ .docs-demo-body {
1853
+ overflow: hidden;
1854
+ border: 1px solid var(--gb-border);
1855
+ border-radius: 14px;
1856
+ background-color: var(--gb-panel);
1857
+ }
1858
+
1859
+ .docs-demo-stage {
1860
+ position: relative;
1861
+ display: flex;
1862
+ background-color: var(--gb-stage);
1863
+ background-image: radial-gradient(var(--gb-stage-dot) 1px, transparent 1.2px);
1864
+ background-size: 14px 14px;
1865
+ }
1866
+
1867
+ /* Frames are size containers, so a demo's own @container queries respond to the preview width. */
1868
+ .docs-demo-frame,
1869
+ .docs-demo-single-preview,
1870
+ .docs-demo-dialog-stage,
1871
+ .docs-demo-fullscreen {
1872
+ container-type: inline-size;
1873
+ }
1874
+
1875
+ .docs-demo-frame {
1876
+ position: relative;
1877
+ max-width: 100%;
1878
+ height: 100%;
1879
+ overflow: auto;
1880
+ background: var(--background, var(--gb-panel));
1881
+ }
1882
+
1883
+ .docs-demo-frame[data-sized] {
1884
+ box-shadow: 1px 0 0 var(--gb-border);
1885
+ }
1886
+
1887
+ .docs-demo-handle {
1888
+ position: relative;
1889
+ z-index: 2;
1890
+ flex-shrink: 0;
1891
+ width: 16px;
1892
+ margin-left: -16px;
1893
+ cursor: ew-resize;
1894
+ touch-action: none;
1895
+ }
1896
+
1897
+ .docs-demo-frame[data-sized] + .docs-demo-handle {
1898
+ margin-left: 0;
1899
+ }
1900
+
1901
+ .docs-demo-handle::after {
1902
+ position: absolute;
1903
+ top: 50%;
1904
+ left: 5px;
1905
+ width: 5px;
1906
+ height: 40px;
1907
+ margin-top: -20px;
1908
+ border-radius: 3px;
1909
+ background: var(--gb-stage-dot);
1910
+ content: "";
1911
+ transition: background 150ms ease, height 200ms ease, margin 200ms ease;
1912
+ }
1913
+
1914
+ .docs-demo-handle:hover::after,
1915
+ .docs-demo-handle:focus-visible::after,
1916
+ .docs-demo-handle[data-dragging]::after {
1917
+ height: 56px;
1918
+ margin-top: -28px;
1919
+ background: var(--gb-primary);
1920
+ }
1921
+
1922
+ .docs-demo-stage[data-dragging] {
1923
+ cursor: ew-resize;
1924
+ user-select: none;
1925
+ }
1926
+
1927
+ .docs-demo-stage[data-dragging] .docs-demo-frame {
1928
+ pointer-events: none;
1929
+ }
1930
+
1931
+ .docs-demo-readout {
1932
+ position: absolute;
1933
+ right: 10px;
1934
+ bottom: 8px;
1935
+ z-index: 3;
1936
+ padding: 3px 7px;
1937
+ border-radius: 6px;
1938
+ background: var(--gb-panel);
1939
+ box-shadow: 0 0 0 1px var(--gb-border);
1940
+ color: var(--gb-muted-foreground);
1941
+ font: 500 11px/1 var(--docs-demo-mono);
1942
+ opacity: 0;
1943
+ pointer-events: none;
1944
+ transition: opacity 150ms ease;
1945
+ }
1946
+
1947
+ .docs-demo-stage:hover .docs-demo-readout,
1948
+ .docs-demo-stage[data-dragging] .docs-demo-readout,
1949
+ .docs-demo-stage:has(.docs-demo-handle:focus-visible) .docs-demo-readout,
1950
+ .docs-demo-stage:has(.docs-demo-frame[data-sized]) .docs-demo-readout {
1951
+ opacity: 1;
1952
+ }
1953
+
1954
+ /* The canvas is block flow, so a block-level demo root lays out exactly as it would on a
1955
+ page: it fills the width, and `max-width: 480px; margin: 0 auto` centres it at 480px (a
1956
+ grid or flex canvas would shrink it to its content). Intrinsically sized roots — inline /
1957
+ inline-block / inline-flex elements such as a lone button, badge or image — sit on the
1958
+ canvas's centred line box. Content is centred vertically (`align-content` on a block
1959
+ container). The canvas's `text-align: center` stops at its children: the reset below has
1960
+ zero specificity, so any rule of the demo's own wins. */
1961
+ .docs-demo-canvas {
1962
+ display: block;
1963
+ align-content: center;
1964
+ box-sizing: border-box;
1965
+ min-height: 100%;
1966
+ padding: 28px 24px;
1967
+ color: var(--foreground, var(--gb-panel-foreground));
1968
+ text-align: center;
1969
+ }
1970
+
1971
+ :where(.docs-demo-canvas) > * {
1972
+ max-width: 100%;
1973
+ text-align: start;
1974
+ }
1975
+
1976
+ .docs-demo-canvas-bleed {
1977
+ align-content: normal;
1978
+ height: 100%;
1979
+ padding: 0;
1980
+ text-align: start;
1981
+ }
1982
+
1983
+ :where(.docs-demo-canvas-bleed) > * {
1984
+ max-width: none;
1985
+ }
1986
+
1987
+ /* Inline-file demos: the runtime's iframe fills the frame. */
1988
+ .docs-demo-canvas-runtime {
1989
+ display: flex;
1990
+ flex-direction: column;
1991
+ }
1992
+
1993
+ .docs-demo-canvas-runtime > * {
1994
+ flex: 1 1 auto;
1995
+ min-height: 0;
1996
+ }
1997
+
1998
+ .docs-demo-runtime-frame {
1999
+ display: block;
2000
+ width: 100%;
2001
+ height: 100%;
2002
+ min-height: 120px;
2003
+ border: 0;
2004
+ background: #fff;
2005
+ }
2006
+
2007
+ .docs-demo-runtime-status {
2008
+ display: grid;
2009
+ place-items: center;
2010
+ height: 100%;
2011
+ min-height: 120px;
2012
+ color: var(--gb-muted-foreground);
2013
+ font-size: 12.5px;
2014
+ }
2015
+
2016
+ /* No runtime for an inline-file demo (or still streaming): a one-line note, then the code. */
2017
+ .docs-demo-note {
2018
+ margin: 0;
2019
+ padding: 8px 14px;
2020
+ border-bottom: 1px solid var(--gb-border);
2021
+ color: var(--gb-muted-foreground);
2022
+ font-size: 12.5px;
2023
+ line-height: 1.5;
2024
+ }
2025
+
2026
+ .docs-demo-loading {
2027
+ display: grid;
2028
+ place-items: center;
2029
+ height: 100%;
2030
+ min-height: 120px;
2031
+ color: var(--gb-muted-foreground);
2032
+ }
2033
+
2034
+ .docs-demo-spinner {
2035
+ width: 18px;
2036
+ height: 18px;
2037
+ border: 2px solid var(--gb-border);
2038
+ border-top-color: var(--gb-muted-foreground);
2039
+ border-radius: 50%;
2040
+ animation: docs-demo-spin 700ms linear infinite;
2041
+ }
2042
+
2043
+ @keyframes docs-demo-spin {
2044
+ to {
2045
+ transform: rotate(360deg);
2046
+ }
2047
+ }
2048
+
2049
+ .docs-demo-error {
2050
+ margin: 0;
2051
+ padding: 14px;
2052
+ color: var(--gb-danger);
2053
+ font: 12px/1.5 var(--docs-demo-mono);
2054
+ white-space: pre-wrap;
2055
+ }
2056
+
2057
+ /* Code view: file tree + source */
2058
+
2059
+ .docs-demo-code {
2060
+ display: flex;
2061
+ background: var(--gb-panel);
2062
+ }
2063
+
2064
+ .docs-demo-files {
2065
+ flex-shrink: 0;
2066
+ box-sizing: border-box;
2067
+ width: 188px;
2068
+ padding: 8px;
2069
+ overflow-y: auto;
2070
+ border-right: 1px solid var(--gb-border);
2071
+ background: var(--gb-muted);
2072
+ }
2073
+
2074
+ .docs-demo-files-h {
2075
+ padding: 6px 8px 8px;
2076
+ color: var(--gb-muted-foreground);
2077
+ font-size: 10.5px;
2078
+ font-weight: 700;
2079
+ letter-spacing: 0.7px;
2080
+ text-transform: uppercase;
2081
+ }
2082
+
2083
+ .docs-demo-dir,
2084
+ .docs-demo-file {
2085
+ display: flex;
2086
+ align-items: center;
2087
+ gap: 7px;
2088
+ box-sizing: border-box;
2089
+ width: 100%;
2090
+ padding: 6px 8px 6px calc(8px + var(--depth, 0) * 14px);
2091
+ font: 12.5px/1.3 var(--docs-demo-mono);
2092
+ text-align: left;
2093
+ }
2094
+
2095
+ .docs-demo-dir {
2096
+ color: var(--gb-muted-foreground);
2097
+ }
2098
+
2099
+ .docs-demo-file {
2100
+ border: 0;
2101
+ border-radius: 7px;
2102
+ background: none;
2103
+ color: var(--gb-panel-foreground);
2104
+ cursor: pointer;
2105
+ }
2106
+
2107
+ .docs-demo-file > span {
2108
+ overflow: hidden;
2109
+ text-overflow: ellipsis;
2110
+ white-space: nowrap;
2111
+ }
2112
+
2113
+ .docs-demo-file svg,
2114
+ .docs-demo-dir svg {
2115
+ flex-shrink: 0;
2116
+ color: var(--gb-muted-foreground);
2117
+ }
2118
+
2119
+ .docs-demo-file:hover {
2120
+ background: var(--gb-hover);
2121
+ }
2122
+
2123
+ .docs-demo-file[aria-selected="true"] {
2124
+ background: var(--gb-panel);
2125
+ box-shadow: var(--gb-pill-shadow);
2126
+ color: var(--gb-primary);
2127
+ font-weight: 600;
2128
+ }
2129
+
2130
+ .docs-demo-file[aria-selected="true"] svg {
2131
+ color: var(--gb-primary);
2132
+ }
2133
+
2134
+ .docs-demo-source {
2135
+ display: flex;
2136
+ flex: 1;
2137
+ flex-direction: column;
2138
+ min-width: 0;
2139
+ }
2140
+
2141
+ .docs-demo-source-h {
2142
+ display: flex;
2143
+ align-items: center;
2144
+ justify-content: space-between;
2145
+ gap: 8px;
2146
+ padding: 5px 6px 5px 14px;
2147
+ border-bottom: 1px solid var(--gb-border);
2148
+ color: var(--gb-muted-foreground);
2149
+ font: 12px/1 var(--docs-demo-mono);
2150
+ }
2151
+
2152
+ .docs-demo-source-path {
2153
+ overflow: hidden;
2154
+ text-overflow: ellipsis;
2155
+ white-space: nowrap;
2156
+ }
2157
+
2158
+ .docs-demo-source-body {
2159
+ flex: 1;
2160
+ min-height: 0;
2161
+ overflow: auto;
2162
+ background: var(--gb-code-bg);
2163
+ }
2164
+
2165
+ .docs-demo-source-body pre {
2166
+ margin: 0;
2167
+ padding: 13px 16px;
2168
+ color: var(--gb-code-fg);
2169
+ font: 12.5px/1.65 var(--docs-demo-mono);
2170
+ tab-size: 2;
2171
+ }
2172
+
2173
+ .docs-demo-source-body pre code {
2174
+ display: block;
2175
+ min-width: max-content;
2176
+ padding: 0;
2177
+ background: none;
2178
+ font-size: inherit;
2179
+ }
2180
+
2181
+ @container (max-width: 560px) {
2182
+ .docs-demo-code {
2183
+ flex-direction: column;
2184
+ }
2185
+
2186
+ .docs-demo-files {
2187
+ display: flex;
2188
+ gap: 2px;
2189
+ width: auto;
2190
+ padding: 6px;
2191
+ overflow-x: auto;
2192
+ overflow-y: hidden;
2193
+ border-right: 0;
2194
+ border-bottom: 1px solid var(--gb-border);
2195
+ }
2196
+
2197
+ .docs-demo-files-h,
2198
+ .docs-demo-dir {
2199
+ display: none;
2200
+ }
2201
+
2202
+ .docs-demo-file {
2203
+ width: auto;
2204
+ padding-left: 8px;
2205
+ }
2206
+
2207
+ .docs-demo-viewports {
2208
+ display: none;
2209
+ }
2210
+ }
2211
+
2212
+ /* Single-file layout: the ReactDemo card */
2213
+
2214
+ .docs-demo-single .docs-react-demo-header {
2215
+ flex-wrap: wrap;
2216
+ gap: 8px;
2217
+ padding: 8px 8px 8px 14px;
2218
+ }
2219
+
2220
+ .docs-demo-single .docs-demo-heading {
2221
+ display: flex;
2222
+ flex: 1 1 200px;
2223
+ flex-direction: column;
2224
+ min-width: 0;
2225
+ }
2226
+
2227
+ .docs-demo-single .docs-demo-heading + .docs-demo-spacer {
2228
+ display: none;
2229
+ }
2230
+
2231
+ .docs-demo-single .docs-demo-title {
2232
+ font-size: 13.5px;
2233
+ }
2234
+
2235
+ .docs-demo-single .docs-demo-desc {
2236
+ margin: 1px 0 0;
2237
+ font-size: 12.5px;
2238
+ }
2239
+
2240
+ .docs-demo-single .docs-demo-icon-btn {
2241
+ width: 28px;
2242
+ height: 28px;
2243
+ border-color: transparent;
2244
+ background: none;
2245
+ }
2246
+
2247
+ .docs-demo-single .docs-demo-icon-btn:hover {
2248
+ background: var(--gb-hover);
2249
+ }
2250
+
2251
+ /* Sizes to its content; a `height` in meta or on the tag sets a minimum (inline style), and
2252
+ hosts may set a floor for every single-file preview with --docs-demo-preview-min-height. */
2253
+ .docs-demo-single-preview {
2254
+ display: grid;
2255
+ min-height: var(--docs-demo-preview-min-height, 0px);
2256
+ background: var(--background, var(--gb-panel));
2257
+ }
2258
+
2259
+ .docs-demo-status {
2260
+ flex-shrink: 0;
2261
+ padding: 3px 8px;
2262
+ border-radius: 999px;
2263
+ background: var(--gb-pill-track);
2264
+ color: var(--gb-muted-foreground);
2265
+ font-size: 11.5px;
2266
+ font-weight: 600;
2267
+ line-height: 1.2;
2268
+ white-space: nowrap;
2269
+ }
2270
+
2271
+ .docs-demo-variants-sized .docs-pill {
2272
+ flex: 1 1 0;
2273
+ }
2274
+
2275
+ /* Fullscreen overlay + deep link */
2276
+
2277
+ .docs-demo-dialog {
2278
+ box-sizing: border-box;
2279
+ width: 100vw;
2280
+ max-width: none;
2281
+ height: 100dvh;
2282
+ max-height: none;
2283
+ margin: 0;
2284
+ padding: 0;
2285
+ border: 0;
2286
+ background: var(--background, var(--gb-panel));
2287
+ color: var(--foreground, var(--gb-panel-foreground));
2288
+ }
2289
+
2290
+ .docs-demo-dialog:not([open]) {
2291
+ display: none;
2292
+ }
2293
+
2294
+ .docs-demo-dialog::backdrop {
2295
+ background: rgba(0, 0, 0, 0.45);
2296
+ }
2297
+
2298
+ .docs-demo-dialog-inner {
2299
+ display: flex;
2300
+ flex-direction: column;
2301
+ height: 100%;
2302
+ }
2303
+
2304
+ .docs-demo-dialog-bar {
2305
+ display: flex;
2306
+ align-items: center;
2307
+ gap: 10px;
2308
+ padding: 8px 10px 8px 16px;
2309
+ border-bottom: 1px solid var(--gb-border);
2310
+ background: var(--gb-panel);
2311
+ }
2312
+
2313
+ .docs-demo-dialog-src {
2314
+ color: var(--gb-muted-foreground);
2315
+ font: 12px/1 var(--docs-demo-mono);
2316
+ }
2317
+
2318
+ .docs-demo-dialog-stage {
2319
+ flex: 1;
2320
+ min-height: 0;
2321
+ overflow: auto;
2322
+ }
2323
+
2324
+ .docs-demo-fullscreen {
2325
+ width: 100vw;
2326
+ height: 100dvh;
2327
+ overflow: auto;
2328
+ }
2329
+
2330
+ .docs-demo-dialog-stage > .docs-demo-canvas,
2331
+ .docs-demo-fullscreen > .docs-demo-canvas {
2332
+ min-height: 100%;
2333
+ }
2334
+
2335
+ @media (prefers-reduced-motion: reduce) {
2336
+ .docs-demo-spinner {
2337
+ animation-duration: 1.6s;
2338
+ }
2339
+
2340
+ .docs-demo-handle::after,
2341
+ .docs-page-actions-more svg {
2342
+ transition: none;
2343
+ }
2344
+ }
2345
+
2346
+ /* Replay embeds (ReplayPreview / ReplayEmbed). Part of the one package stylesheet so no
2347
+ module imports CSS on the eager path: the root entry stays importable from Node
2348
+ (SSR, vitest) without a CSS loader. */
2349
+ .replay-preview {
2350
+ width: 100%;
2351
+ min-width: 0;
2352
+ color: var(--replay-preview-fg, #e5e7eb);
2353
+ background: var(--replay-preview-bg, #0f172a);
2354
+ border: 1px solid var(--replay-preview-border, rgba(148, 163, 184, 0.28));
2355
+ border-radius: 12px;
2356
+ overflow: hidden;
2357
+ }
2358
+
2359
+ .replay-preview__frame {
2360
+ display: block;
2361
+ width: 100%;
2362
+ aspect-ratio: 16 / 9;
2363
+ border: 0;
2364
+ background: #0f172a;
2365
+ }
2366
+
2367
+ .replay-preview__invalid,
2368
+ .replay-preview__empty,
2369
+ .replay-preview__error {
2370
+ display: flex;
2371
+ align-items: center;
2372
+ justify-content: center;
2373
+ min-height: 140px;
2374
+ padding: 20px;
2375
+ color: var(--replay-preview-muted, #94a3b8);
2376
+ font: 13px/1.5 ui-sans-serif, system-ui, sans-serif;
2377
+ text-align: center;
2378
+ }
2379
+
2380
+ .replay-preview__invalid {
2381
+ color: var(--replay-preview-link, #7dd3fc);
2382
+ }
2383
+
2384
+ .replay-preview__error {
2385
+ color: #fda4af;
2386
+ }
2387
+
2388
+ .replay-preview__native {
2389
+ width: 100%;
2390
+ background: #0f172a;
2391
+ }
2392
+
2393
+ .replay-preview__stage {
2394
+ position: relative;
2395
+ width: 100%;
2396
+ min-height: 160px;
2397
+ overflow: hidden;
2398
+ background: #020617;
2399
+ }
2400
+
2401
+ .replay-preview__scaler {
2402
+ position: absolute;
2403
+ inset: 0 auto auto 0;
2404
+ }
2405
+
2406
+ .replay-preview__player {
2407
+ position: relative;
2408
+ overflow: hidden;
2409
+ }
2410
+
2411
+ .replay-preview__controls {
2412
+ display: flex;
2413
+ align-items: center;
2414
+ gap: 8px;
2415
+ padding: 8px 10px;
2416
+ border-top: 1px solid rgba(148, 163, 184, 0.2);
2417
+ background: #111827;
2418
+ font: 12px/1.2 ui-sans-serif, system-ui, sans-serif;
2419
+ }
2420
+
2421
+ .replay-preview__controls button,
2422
+ .replay-preview__controls select {
2423
+ border: 1px solid rgba(148, 163, 184, 0.3);
2424
+ border-radius: 6px;
2425
+ padding: 5px 8px;
2426
+ color: inherit;
2427
+ background: #1e293b;
2428
+ cursor: pointer;
2429
+ }
2430
+
2431
+ .replay-preview__controls input[type='range'] {
2432
+ min-width: 60px;
2433
+ flex: 1;
2434
+ accent-color: #38bdf8;
2435
+ }
2436
+
2437
+ /* Keep every rendered table variant flush, after the shared block spacing rules. */
2438
+ :is([data-docstream], .docs-article) [data-docstream-blocks] > :is(.docs-table, table, .docs-cards) {
2439
+ margin-block-start: 0;
2440
+ margin-block-end: 0;
2441
+ }