@piagent/platform 1.41.0 → 1.42.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/CHANGELOG.md +1020 -2038
  2. package/CONTRIBUTING.md +2 -0
  3. package/README.md +128 -325
  4. package/README.vi.md +149 -143
  5. package/docs/command-reference-vietnamese.md +2 -2
  6. package/docs/distribution-standard.md +6 -6
  7. package/docs/languages.json +2 -2
  8. package/docs/operator-manual-vietnamese.md +7 -7
  9. package/docs/publishing-for-teams.md +2 -0
  10. package/docs/release-install-policy.md +3 -3
  11. package/docs/team-onboarding.md +2 -2
  12. package/docs-site/architecture.html +71 -63
  13. package/docs-site/assets/docs.css +2736 -1030
  14. package/docs-site/assets/docs.js +451 -43
  15. package/docs-site/assets/og.png +0 -0
  16. package/docs-site/assets/piagent-logo.svg +9 -31
  17. package/docs-site/assets/search-en.json +1 -0
  18. package/docs-site/assets/search-vi.json +1 -0
  19. package/docs-site/benchmark.html +71 -63
  20. package/docs-site/commands.html +72 -64
  21. package/docs-site/content/en/index.html +220 -131
  22. package/docs-site/content/en/quickstart.html +74 -90
  23. package/docs-site/content/en/update.html +80 -0
  24. package/docs-site/content/en/whats-new.html +1 -684
  25. package/docs-site/content/index.html +220 -131
  26. package/docs-site/content/quickstart.html +73 -108
  27. package/docs-site/content/update.html +80 -0
  28. package/docs-site/content/whats-new.html +1 -684
  29. package/docs-site/context-engine.html +73 -65
  30. package/docs-site/ecosystem.html +73 -65
  31. package/docs-site/en/architecture.html +67 -59
  32. package/docs-site/en/benchmark.html +67 -59
  33. package/docs-site/en/commands.html +68 -60
  34. package/docs-site/en/context-engine.html +68 -60
  35. package/docs-site/en/ecosystem.html +68 -60
  36. package/docs-site/en/index.html +281 -220
  37. package/docs-site/en/mcp-approval.html +67 -59
  38. package/docs-site/en/mcp-auth.html +67 -59
  39. package/docs-site/en/mcp-servers.html +68 -60
  40. package/docs-site/en/mcp.html +64 -56
  41. package/docs-site/en/permissions.html +68 -60
  42. package/docs-site/en/profiles.html +68 -60
  43. package/docs-site/en/quickstart.html +142 -150
  44. package/docs-site/en/runtime.html +67 -59
  45. package/docs-site/en/scope.html +68 -60
  46. package/docs-site/en/security.html +64 -56
  47. package/docs-site/en/team.html +67 -59
  48. package/docs-site/en/update.html +228 -0
  49. package/docs-site/en/whats-new.html +1612 -725
  50. package/docs-site/en/windows.html +71 -63
  51. package/docs-site/en/workflows.html +68 -60
  52. package/docs-site/favicon.svg +9 -14
  53. package/docs-site/index.html +281 -220
  54. package/docs-site/mcp-approval.html +70 -62
  55. package/docs-site/mcp-auth.html +70 -62
  56. package/docs-site/mcp-servers.html +71 -63
  57. package/docs-site/mcp.html +70 -62
  58. package/docs-site/permissions.html +72 -64
  59. package/docs-site/profiles.html +72 -64
  60. package/docs-site/quickstart.html +145 -172
  61. package/docs-site/releases.json +4485 -0
  62. package/docs-site/runtime.html +73 -65
  63. package/docs-site/scope.html +73 -65
  64. package/docs-site/security.html +73 -65
  65. package/docs-site/team.html +71 -63
  66. package/docs-site/update.html +228 -0
  67. package/docs-site/whats-new.html +1616 -729
  68. package/docs-site/windows.html +75 -67
  69. package/docs-site/workflows.html +73 -65
  70. package/evals/private-holdout-v1/public-exposure.v2.json +1 -1
  71. package/package.json +1 -1
  72. package/packages/piagent-core/managed/dist/workspace/manifest.json +1 -1
  73. package/packages/piagent-core/managed/dist/workspace/worker.mjs +1 -1
  74. package/packages/piagent-core/package.json +1 -1
  75. package/packages/piagent-core/security/workspace-file-reader.ts +3 -1
  76. package/packages/piagent-webui/dist/client/assets/ActivityPanel-DRAiHliI.js +1 -0
  77. package/packages/piagent-webui/dist/client/assets/App-JMuP_9-r.js +5 -0
  78. package/packages/piagent-webui/dist/client/assets/GatewayApp-awcOLVTi.js +93 -0
  79. package/packages/piagent-webui/dist/client/assets/InspectionApp-DtDc9NxN.js +1 -0
  80. package/packages/piagent-webui/dist/client/assets/LineReview-DZ9ez8kO.js +3 -0
  81. package/packages/piagent-webui/dist/client/assets/{MarkdownMessage-DeLo-xiz.js → MarkdownMessage-D7bbIWJe.js} +2 -2
  82. package/packages/piagent-webui/dist/client/assets/SessionAgentWorkspace-DLwK12hX.js +1 -0
  83. package/packages/piagent-webui/dist/client/assets/SessionInspectorDrawer-CsPNI6aU.js +2 -0
  84. package/packages/piagent-webui/dist/client/assets/SettingsNavigation-CM0s3QUC.js +3 -0
  85. package/packages/piagent-webui/dist/client/assets/SettingsPage-Cr6M2FVg.js +1 -0
  86. package/packages/piagent-webui/dist/client/assets/TerminalPanel-A78JVp4e.js +2 -0
  87. package/packages/piagent-webui/dist/client/assets/{TerminalView-r9rG24IO.js → TerminalView-CR4TO5f1.js} +3 -3
  88. package/packages/piagent-webui/dist/client/assets/WorkspaceCodeEditor-DPOp-ZoD.js +2 -0
  89. package/packages/piagent-webui/dist/client/assets/WorkspaceExplorer-H8Ogln3d.js +5 -0
  90. package/packages/piagent-webui/dist/client/assets/WorkspaceQuickOpen-vQ5DqfJl.js +1 -0
  91. package/packages/piagent-webui/dist/client/assets/api-BUjrtT1B.js +1 -0
  92. package/packages/piagent-webui/dist/client/assets/composer-drafts-BtMaVw8W.js +1 -0
  93. package/packages/piagent-webui/dist/client/assets/index-Dqb2hNan.css +1 -0
  94. package/packages/piagent-webui/dist/client/assets/index-qi6mjvTy.js +37 -0
  95. package/packages/piagent-webui/dist/client/assets/latest-request-DXcYQW86.js +1 -0
  96. package/packages/piagent-webui/dist/client/assets/tab-close-DHDqCxTL.js +1 -0
  97. package/packages/piagent-webui/dist/client/assets/terminal-transport-Dk5pYNX5.js +1 -0
  98. package/packages/piagent-webui/dist/client/assets/transcript-view-model-BNGQCkzY.js +3 -0
  99. package/packages/piagent-webui/dist/client/assets/ui-preferences-Dy4qeODT.js +1 -0
  100. package/packages/piagent-webui/dist/client/assets/vendor-CA5pzJiI.js +136 -0
  101. package/packages/piagent-webui/dist/client/assets/view-model-CWNiS4JN.js +1 -0
  102. package/packages/piagent-webui/dist/client/assets/workspace-navigation-C8GtShbg.js +1 -0
  103. package/packages/piagent-webui/dist/client/index.html +4 -9
  104. package/packages/piagent-webui/gateway/signed-session-journal.ts +16 -6
  105. package/packages/piagent-webui/server/loopback-server.ts +19 -5
  106. package/packages/piagent-webui/server/static-bundle.ts +10 -2
  107. package/scripts/build-docs-site.mjs +205 -348
  108. package/scripts/check-public-wording.mjs +2 -1
  109. package/scripts/docs-site-icons.mjs +84 -0
  110. package/scripts/docs-site-nav.mjs +302 -0
  111. package/scripts/docs-site-releases.mjs +227 -0
  112. package/scripts/verify-local.sh +17 -1
  113. package/packages/piagent-webui/dist/client/assets/Alert-DGWhP2MM.js +0 -1
  114. package/packages/piagent-webui/dist/client/assets/Button-QItfZUNj.js +0 -1
  115. package/packages/piagent-webui/dist/client/assets/DialogTitle-CyaFPaiW.js +0 -3
  116. package/packages/piagent-webui/dist/client/assets/TerminalPanel-BG-DP_qm.js +0 -2
  117. package/packages/piagent-webui/dist/client/assets/Typography-B9om7Evq.js +0 -1
  118. package/packages/piagent-webui/dist/client/assets/WorkspaceCodeEditor-BnqaR3pK.js +0 -2
  119. package/packages/piagent-webui/dist/client/assets/WorkspaceExplorer-BIxwiGtl.js +0 -5
  120. package/packages/piagent-webui/dist/client/assets/WorkspaceQuickOpen-CK3dILhQ.js +0 -1
  121. package/packages/piagent-webui/dist/client/assets/index-DBUTrEXi.css +0 -1
  122. package/packages/piagent-webui/dist/client/assets/index-rlyRccut.js +0 -102
  123. package/packages/piagent-webui/dist/client/assets/tab-close-BoJRyBO_.js +0 -1
  124. package/packages/piagent-webui/dist/client/assets/ui-preferences-BO3AV7QE.js +0 -10
  125. package/packages/piagent-webui/dist/client/assets/useId-DEefKUAT.js +0 -124
@@ -1,45 +1,137 @@
1
+ /* Pi Agent Platform docs — one stylesheet for the landing page and every docs page.
2
+ Colours are tokens on :root; dark is the default, light is opt-in through the
3
+ theme switch or the operating system. Motion uses transform and opacity only
4
+ and stops under prefers-reduced-motion. */
5
+
1
6
  :root {
2
7
  color-scheme: dark;
3
- --bg: #050505;
4
- --bg-soft: #0b0b0d;
5
- --panel: #101114;
6
- --panel-strong: #15171b;
7
- --text: #f4f4ef;
8
- --muted: #a4a6ad;
9
- --muted-2: #71747d;
10
- --line: #24262d;
11
- --line-soft: #191b20;
12
- --accent: #d8ff7a;
13
- --accent-2: #8be9c8;
14
- --danger: #ff8f8f;
15
- --warning: #ffd166;
16
- --ok: #8be9c8;
17
- --chart-piagent: #8be9c8;
18
- --chart-codex: #8fa7ff;
19
- --shadow: 0 24px 90px rgba(0, 0, 0, 0.45);
20
- --radius: 22px;
21
- --sidebar: 294px;
22
- --content: 1260px;
23
- }
24
-
25
- * {
8
+ --bg: #09090b;
9
+ --bg-soft: #0d0d10;
10
+ --surface: #111114;
11
+ --surface-2: #17171b;
12
+ --surface-3: #1e1e23;
13
+ --border: #232329;
14
+ --border-strong: #31313a;
15
+ --text: #ededf0;
16
+ --text-2: #a3a3ad;
17
+ --text-3: #6e6e79;
18
+ --accent: #c6f432;
19
+ --accent-ink: #0b0d05;
20
+ --accent-text: #d4fb5a;
21
+ --accent-soft: rgba(198, 244, 50, 0.1);
22
+ --accent-line: rgba(198, 244, 50, 0.32);
23
+ --mint: #5eead4;
24
+ --mint-soft: rgba(94, 234, 212, 0.1);
25
+ --ok: #4ade80;
26
+ --warn: #fbbf24;
27
+ --danger: #f87171;
28
+ --info: #60a5fa;
29
+ --code-bg: #0c0c0f;
30
+ --code-text: #e4e4e7;
31
+ --code-comment: #6b7280;
32
+ --grid-dot: rgba(255, 255, 255, 0.07);
33
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
34
+ --shadow-lg: 0 24px 60px -20px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(255, 255, 255, 0.04);
35
+ --topbar-bg: rgba(9, 9, 11, 0.72);
36
+
37
+ --font-sans: "Inter", "Be Vietnam Pro", system-ui, -apple-system, "Segoe UI", sans-serif;
38
+ --font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;
39
+ --radius-sm: 6px;
40
+ --radius: 10px;
41
+ --radius-lg: 14px;
42
+ --radius-xl: 20px;
43
+ --topbar-h: 60px;
44
+ --sidebar-w: 268px;
45
+ --toc-w: 220px;
46
+ --content-max: 760px;
47
+ --ease: cubic-bezier(0.2, 0.7, 0.2, 1);
48
+ --dur: 160ms;
49
+ }
50
+
51
+ :root[data-theme="light"] {
52
+ color-scheme: light;
53
+ --bg: #fbfbf9;
54
+ --bg-soft: #f5f5f2;
55
+ --surface: #ffffff;
56
+ --surface-2: #f4f4f1;
57
+ --surface-3: #ebebe7;
58
+ --border: #e6e6e1;
59
+ --border-strong: #d4d4ce;
60
+ --text: #121214;
61
+ --text-2: #4f4f57;
62
+ --text-3: #85858e;
63
+ --accent: #c6f432;
64
+ --accent-ink: #0b0d05;
65
+ --accent-text: #4a7a00;
66
+ --accent-soft: rgba(132, 184, 0, 0.12);
67
+ --accent-line: rgba(100, 150, 0, 0.35);
68
+ --mint: #0d9488;
69
+ --mint-soft: rgba(13, 148, 136, 0.1);
70
+ --ok: #16a34a;
71
+ --warn: #b45309;
72
+ --danger: #dc2626;
73
+ --info: #2563eb;
74
+ --code-bg: #0f0f12;
75
+ --code-text: #e4e4e7;
76
+ --grid-dot: rgba(0, 0, 0, 0.08);
77
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06);
78
+ --shadow-lg: 0 24px 50px -24px rgba(20, 20, 30, 0.28), 0 0 0 1px rgba(0, 0, 0, 0.05);
79
+ --topbar-bg: rgba(251, 251, 249, 0.78);
80
+ }
81
+
82
+ @media (prefers-color-scheme: light) {
83
+ :root:not([data-theme="dark"]):not([data-theme="light"]) {
84
+ color-scheme: light;
85
+ --bg: #fbfbf9;
86
+ --bg-soft: #f5f5f2;
87
+ --surface: #ffffff;
88
+ --surface-2: #f4f4f1;
89
+ --surface-3: #ebebe7;
90
+ --border: #e6e6e1;
91
+ --border-strong: #d4d4ce;
92
+ --text: #121214;
93
+ --text-2: #4f4f57;
94
+ --text-3: #85858e;
95
+ --accent-text: #4a7a00;
96
+ --accent-soft: rgba(132, 184, 0, 0.12);
97
+ --accent-line: rgba(100, 150, 0, 0.35);
98
+ --mint: #0d9488;
99
+ --mint-soft: rgba(13, 148, 136, 0.1);
100
+ --ok: #16a34a;
101
+ --warn: #b45309;
102
+ --danger: #dc2626;
103
+ --info: #2563eb;
104
+ --grid-dot: rgba(0, 0, 0, 0.08);
105
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06);
106
+ --shadow-lg: 0 24px 50px -24px rgba(20, 20, 30, 0.28), 0 0 0 1px rgba(0, 0, 0, 0.05);
107
+ --topbar-bg: rgba(251, 251, 249, 0.78);
108
+ }
109
+ }
110
+
111
+ /* ---------- Base ---------- */
112
+
113
+ *,
114
+ *::before,
115
+ *::after {
26
116
  box-sizing: border-box;
27
117
  }
28
118
 
29
119
  html {
120
+ -webkit-text-size-adjust: 100%;
121
+ scroll-padding-top: calc(var(--topbar-h) + 20px);
30
122
  scroll-behavior: smooth;
31
123
  }
32
124
 
33
125
  body {
34
126
  margin: 0;
35
- min-height: 100vh;
36
- background:
37
- radial-gradient(circle at 18% -10%, rgba(216, 255, 122, 0.12), transparent 34rem),
38
- radial-gradient(circle at 88% 8%, rgba(139, 233, 200, 0.1), transparent 30rem),
39
- linear-gradient(180deg, #050505 0%, #07080a 55%, #050505 100%);
127
+ background: var(--bg);
40
128
  color: var(--text);
41
- font-family: "Be Vietnam Pro", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
129
+ font-family: var(--font-sans);
130
+ font-size: 15.5px;
42
131
  line-height: 1.65;
132
+ font-feature-settings: "cv11", "ss01";
133
+ -webkit-font-smoothing: antialiased;
134
+ text-rendering: optimizeLegibility;
43
135
  }
44
136
 
45
137
  a {
@@ -47,1493 +139,3107 @@ a {
47
139
  text-decoration: none;
48
140
  }
49
141
 
50
- a:hover {
51
- color: var(--accent);
142
+ img,
143
+ svg {
144
+ display: block;
145
+ max-width: 100%;
52
146
  }
53
147
 
54
- code,
55
- pre {
56
- font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
148
+ ::selection {
149
+ background: var(--accent);
150
+ color: var(--accent-ink);
151
+ }
152
+
153
+ :focus-visible {
154
+ outline: 2px solid var(--accent);
155
+ outline-offset: 2px;
156
+ border-radius: 4px;
157
+ }
158
+
159
+ .icon {
160
+ width: 16px;
161
+ height: 16px;
162
+ flex: none;
163
+ stroke: currentColor;
164
+ stroke-width: 1.75;
165
+ stroke-linecap: round;
166
+ stroke-linejoin: round;
167
+ fill: none;
168
+ }
169
+
170
+ .skip-link {
171
+ position: absolute;
172
+ left: 12px;
173
+ top: -48px;
174
+ z-index: 100;
175
+ padding: 8px 12px;
176
+ border-radius: var(--radius-sm);
177
+ background: var(--accent);
178
+ color: var(--accent-ink);
179
+ font-weight: 600;
57
180
  }
58
181
 
182
+ .skip-link:focus {
183
+ top: 12px;
184
+ }
185
+
186
+ /* ---------- Top bar ---------- */
187
+
59
188
  .topbar {
60
189
  position: sticky;
61
190
  top: 0;
62
- z-index: 30;
191
+ z-index: 40;
192
+ height: var(--topbar-h);
63
193
  display: flex;
64
194
  align-items: center;
65
- justify-content: space-between;
66
- height: 62px;
67
- padding: 0 28px;
68
- border-bottom: 1px solid rgba(255, 255, 255, 0.08);
69
- background: rgba(5, 5, 5, 0.78);
70
- backdrop-filter: blur(20px);
195
+ gap: 16px;
196
+ padding: 0 20px;
197
+ background: var(--topbar-bg);
198
+ backdrop-filter: saturate(180%) blur(14px);
199
+ -webkit-backdrop-filter: saturate(180%) blur(14px);
200
+ border-bottom: 1px solid var(--border);
71
201
  }
72
202
 
73
203
  .brand {
74
204
  display: inline-flex;
75
205
  align-items: center;
76
- gap: 12px;
77
- min-width: 0;
78
- font-weight: 700;
79
- letter-spacing: -0.03em;
206
+ gap: 10px;
207
+ font-weight: 650;
208
+ font-size: 15px;
209
+ letter-spacing: -0.01em;
210
+ white-space: nowrap;
80
211
  }
81
212
 
82
213
  .brand-mark {
83
- display: grid;
84
- place-items: center;
85
- width: 34px;
86
- height: 34px;
87
- border: 1px solid rgba(216, 255, 122, 0.32);
88
- border-radius: 11px;
89
- background:
90
- linear-gradient(135deg, rgba(216, 255, 122, 0.12), transparent),
91
- #0d0f12;
92
- color: var(--accent);
93
- font-family: "JetBrains Mono", monospace;
94
- font-size: 13px;
214
+ width: 28px;
215
+ height: 28px;
216
+ border-radius: 8px;
95
217
  overflow: hidden;
96
- box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04);
218
+ box-shadow: 0 0 0 1px var(--border);
97
219
  }
98
220
 
99
221
  .brand-mark img {
100
- display: block;
101
222
  width: 100%;
102
223
  height: 100%;
103
224
  }
104
225
 
105
- .brand span:last-child {
106
- overflow: hidden;
107
- text-overflow: ellipsis;
108
- white-space: nowrap;
226
+ .brand-name b {
227
+ font-weight: 650;
109
228
  }
110
229
 
111
- .top-actions {
112
- display: flex;
230
+ .brand-name span {
231
+ color: var(--text-3);
232
+ font-weight: 500;
233
+ }
234
+
235
+ .version-badge {
236
+ display: inline-flex;
113
237
  align-items: center;
114
- gap: 10px;
238
+ gap: 6px;
239
+ height: 24px;
240
+ padding: 0 9px;
241
+ border-radius: 999px;
242
+ border: 1px solid var(--border);
243
+ color: var(--text-2);
244
+ font: 500 12px/1 var(--font-mono);
245
+ white-space: nowrap;
115
246
  }
116
247
 
117
- .language-switch {
118
- display: grid;
119
- grid-template-columns: repeat(2, 34px);
120
- height: 34px;
121
- padding: 3px;
122
- border: 1px solid rgba(255, 255, 255, 0.12);
123
- border-radius: 6px;
124
- background: rgba(255, 255, 255, 0.035);
248
+ .version-badge .dot,
249
+ .pill-dot {
250
+ width: 6px;
251
+ height: 6px;
252
+ border-radius: 50%;
253
+ background: var(--ok);
254
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok) 20%, transparent);
125
255
  }
126
256
 
127
- .language-option {
128
- display: grid;
129
- place-items: center;
130
- min-width: 0;
131
- border-radius: 3px;
132
- color: var(--muted);
133
- font-family: "JetBrains Mono", ui-monospace, monospace;
134
- font-size: 11px;
135
- font-weight: 700;
257
+ .top-nav {
258
+ display: flex;
259
+ align-items: center;
260
+ gap: 2px;
261
+ margin-left: 8px;
262
+ }
263
+
264
+ .top-nav a {
265
+ padding: 6px 10px;
266
+ border-radius: var(--radius-sm);
267
+ color: var(--text-2);
268
+ font-size: 14px;
269
+ font-weight: 500;
270
+ transition: color var(--dur) var(--ease), background var(--dur) var(--ease);
136
271
  }
137
272
 
138
- .language-option:hover,
139
- .language-option:focus-visible {
273
+ .top-nav a:hover,
274
+ .top-nav a[aria-current] {
140
275
  color: var(--text);
276
+ background: var(--surface-2);
141
277
  }
142
278
 
143
- .language-option.current {
144
- background: var(--accent);
145
- color: #111300;
279
+ .top-spacer {
280
+ flex: 1;
146
281
  }
147
282
 
148
- .pill {
283
+ .search-trigger {
149
284
  display: inline-flex;
150
285
  align-items: center;
151
286
  gap: 8px;
152
- min-height: 34px;
153
- padding: 6px 12px;
154
- border: 1px solid rgba(255, 255, 255, 0.1);
155
- border-radius: 999px;
156
- background: rgba(255, 255, 255, 0.035);
157
- color: var(--muted);
158
- font-size: 12px;
159
- font-weight: 600;
287
+ width: 240px;
288
+ height: 34px;
289
+ padding: 0 8px 0 10px;
290
+ border-radius: var(--radius);
291
+ border: 1px solid var(--border);
292
+ background: var(--surface);
293
+ color: var(--text-3);
294
+ font: inherit;
295
+ font-size: 13.5px;
296
+ cursor: pointer;
297
+ transition: border-color var(--dur) var(--ease), color var(--dur) var(--ease);
160
298
  }
161
299
 
162
- .pill-dot {
163
- width: 7px;
164
- height: 7px;
165
- border-radius: 999px;
166
- background: var(--ok);
167
- box-shadow: 0 0 18px rgba(139, 233, 200, 0.6);
300
+ .search-trigger:hover {
301
+ border-color: var(--border-strong);
302
+ color: var(--text-2);
168
303
  }
169
304
 
170
- .layout {
171
- display: grid;
172
- grid-template-columns: var(--sidebar) minmax(0, 1fr);
173
- gap: 0;
174
- width: 100%;
305
+ .search-trigger span {
306
+ flex: 1;
307
+ text-align: left;
175
308
  }
176
309
 
177
- .sidebar {
178
- position: sticky;
179
- top: 62px;
180
- align-self: start;
181
- height: calc(100vh - 62px);
182
- padding: 28px 22px 28px 28px;
183
- overflow-y: auto;
184
- border-right: 1px solid rgba(255, 255, 255, 0.08);
185
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0));
310
+ kbd,
311
+ .kbd {
312
+ display: inline-flex;
313
+ align-items: center;
314
+ height: 20px;
315
+ padding: 0 6px;
316
+ border-radius: 5px;
317
+ border: 1px solid var(--border);
318
+ background: var(--surface-2);
319
+ color: var(--text-2);
320
+ font: 500 11px/1 var(--font-mono);
186
321
  }
187
322
 
188
- .sidebar-search {
189
- position: relative;
190
- margin-bottom: 26px;
323
+ .top-actions {
324
+ display: flex;
325
+ align-items: center;
326
+ gap: 6px;
191
327
  }
192
328
 
193
- .sidebar-search input {
194
- width: 100%;
195
- height: 42px;
196
- padding: 0 14px 0 38px;
197
- border: 1px solid var(--line);
198
- border-radius: 14px;
199
- outline: none;
200
- background: rgba(255, 255, 255, 0.04);
201
- color: var(--text);
202
- font: inherit;
203
- font-size: 13px;
329
+ .icon-button {
330
+ display: inline-grid;
331
+ place-items: center;
332
+ width: 34px;
333
+ height: 34px;
334
+ border-radius: var(--radius);
335
+ border: 1px solid transparent;
336
+ background: transparent;
337
+ color: var(--text-2);
338
+ cursor: pointer;
339
+ transition: color var(--dur) var(--ease), background var(--dur) var(--ease), border-color var(--dur) var(--ease);
204
340
  }
205
341
 
206
- .sidebar-search input:focus {
207
- border-color: rgba(216, 255, 122, 0.5);
208
- box-shadow: 0 0 0 4px rgba(216, 255, 122, 0.08);
342
+ .icon-button:hover {
343
+ color: var(--text);
344
+ background: var(--surface-2);
345
+ border-color: var(--border);
209
346
  }
210
347
 
211
- .sidebar-search svg {
212
- position: absolute;
213
- left: 13px;
214
- top: 50%;
215
- width: 15px;
216
- height: 15px;
217
- color: var(--muted-2);
218
- transform: translateY(-50%);
348
+ .icon-button .icon {
349
+ width: 17px;
350
+ height: 17px;
219
351
  }
220
352
 
221
- .nav-group {
222
- margin: 0 0 22px;
353
+ .theme-toggle .icon-sun {
354
+ display: none;
223
355
  }
224
356
 
225
- .nav-title {
226
- margin: 0 0 9px;
227
- color: var(--muted-2);
228
- font-size: 11px;
229
- font-weight: 700;
230
- letter-spacing: 0.11em;
231
- text-transform: uppercase;
357
+ :root[data-theme="light"] .theme-toggle .icon-sun {
358
+ display: block;
232
359
  }
233
360
 
234
- .nav-link {
235
- display: flex;
236
- align-items: center;
237
- min-height: 34px;
238
- padding: 7px 10px;
239
- border-radius: 11px;
240
- color: var(--muted);
241
- font-size: 13px;
242
- font-weight: 500;
243
- transition: background 160ms ease, color 160ms ease, transform 160ms ease;
361
+ :root[data-theme="light"] .theme-toggle .icon-moon {
362
+ display: none;
244
363
  }
245
364
 
246
- .nav-link:hover,
247
- .nav-link.active {
248
- background: rgba(255, 255, 255, 0.06);
249
- color: var(--text);
365
+ .language-switch {
366
+ display: inline-flex;
367
+ padding: 2px;
368
+ border-radius: var(--radius);
369
+ border: 1px solid var(--border);
370
+ background: var(--surface);
250
371
  }
251
372
 
252
- .nav-link.active {
253
- box-shadow: inset 2px 0 0 var(--accent);
373
+ .language-option {
374
+ padding: 3px 8px;
375
+ border-radius: 7px;
376
+ color: var(--text-3);
377
+ font: 600 11.5px/1.4 var(--font-mono);
378
+ transition: color var(--dur) var(--ease), background var(--dur) var(--ease);
254
379
  }
255
380
 
256
- main {
257
- min-width: 0;
258
- display: flex;
259
- justify-content: center;
381
+ .language-option:hover {
382
+ color: var(--text);
260
383
  }
261
384
 
262
- .content-shell {
263
- width: min(100%, var(--content));
264
- padding: 58px 56px 96px;
385
+ .language-option.current {
386
+ background: var(--surface-3);
387
+ color: var(--text);
265
388
  }
266
389
 
267
- .hero {
268
- position: relative;
269
- overflow: hidden;
270
- padding: 42px;
271
- border: 1px solid rgba(255, 255, 255, 0.1);
272
- border-radius: 30px;
273
- background:
274
- linear-gradient(135deg, rgba(216, 255, 122, 0.13), transparent 38%),
275
- linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.018)),
276
- var(--panel);
277
- box-shadow: var(--shadow);
390
+ .mobile-menu {
391
+ display: none;
278
392
  }
279
393
 
280
- .hero::after {
281
- content: "";
282
- position: absolute;
283
- inset: auto -18% -58% 32%;
284
- height: 280px;
285
- border-radius: 50%;
286
- background: radial-gradient(circle, rgba(139, 233, 200, 0.16), transparent 64%);
287
- pointer-events: none;
288
- }
394
+ /* ---------- Buttons ---------- */
289
395
 
290
- .eyebrow {
396
+ .button {
291
397
  display: inline-flex;
292
398
  align-items: center;
293
- gap: 9px;
294
- margin: 0 0 18px;
295
- color: var(--accent);
296
- font-size: 12px;
297
- font-weight: 700;
298
- letter-spacing: 0.12em;
299
- text-transform: uppercase;
399
+ justify-content: center;
400
+ gap: 8px;
401
+ height: 38px;
402
+ padding: 0 16px;
403
+ border-radius: var(--radius);
404
+ border: 1px solid var(--border-strong);
405
+ background: var(--surface);
406
+ color: var(--text);
407
+ font: inherit;
408
+ font-size: 14px;
409
+ font-weight: 550;
410
+ white-space: nowrap;
411
+ cursor: pointer;
412
+ transition: transform var(--dur) var(--ease), background var(--dur) var(--ease), border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
300
413
  }
301
414
 
302
- .eyebrow::before {
303
- content: "";
304
- width: 8px;
305
- height: 8px;
306
- border-radius: 999px;
307
- background: var(--accent);
308
- box-shadow: 0 0 24px rgba(216, 255, 122, 0.8);
415
+ .button:hover {
416
+ border-color: var(--text-3);
417
+ background: var(--surface-2);
309
418
  }
310
419
 
311
- h1,
312
- h2,
313
- h3 {
314
- margin: 0;
315
- line-height: 1.12;
316
- letter-spacing: -0.055em;
420
+ .button:active {
421
+ transform: translateY(1px);
317
422
  }
318
423
 
319
- h1 {
320
- max-width: 860px;
321
- font-size: clamp(42px, 8vw, 82px);
322
- font-weight: 800;
424
+ .button.primary {
425
+ background: var(--accent);
426
+ border-color: var(--accent);
427
+ color: var(--accent-ink);
428
+ box-shadow: 0 0 0 0 var(--accent-line);
323
429
  }
324
430
 
325
- h2 {
326
- font-size: clamp(30px, 4vw, 48px);
327
- font-weight: 800;
431
+ .button.primary:hover {
432
+ background: var(--accent);
433
+ box-shadow: 0 0 0 4px var(--accent-soft), 0 8px 28px -8px var(--accent-line);
328
434
  }
329
435
 
330
- h3 {
331
- font-size: 20px;
332
- font-weight: 700;
333
- letter-spacing: -0.035em;
436
+ .button.ghost {
437
+ background: transparent;
438
+ border-color: transparent;
439
+ color: var(--text-2);
334
440
  }
335
441
 
336
- p {
337
- margin: 0;
338
- color: var(--muted);
442
+ .button.ghost:hover {
443
+ color: var(--text);
444
+ background: var(--surface-2);
339
445
  }
340
446
 
341
- .hero p {
342
- position: relative;
343
- z-index: 1;
344
- max-width: 760px;
345
- margin-top: 20px;
346
- color: #d6d7dc;
347
- font-size: 17px;
447
+ .button.lg {
448
+ height: 44px;
449
+ padding: 0 20px;
450
+ font-size: 15px;
348
451
  }
349
452
 
350
- .hero-actions {
351
- position: relative;
352
- z-index: 1;
353
- display: flex;
354
- flex-wrap: wrap;
355
- gap: 12px;
356
- margin-top: 28px;
453
+ .button .icon {
454
+ width: 16px;
455
+ height: 16px;
357
456
  }
358
457
 
359
- .button {
360
- display: inline-flex;
361
- align-items: center;
362
- justify-content: center;
363
- gap: 9px;
364
- min-height: 42px;
365
- padding: 10px 16px;
366
- border: 1px solid rgba(255, 255, 255, 0.12);
367
- border-radius: 999px;
368
- background: rgba(255, 255, 255, 0.055);
369
- color: var(--text);
370
- font-size: 13px;
371
- font-weight: 700;
372
- cursor: pointer;
373
- transition: background 160ms ease, border-color 160ms ease, color 160ms ease;
374
- }
458
+ /* ---------- Docs layout ---------- */
375
459
 
376
- .button:hover,
377
- .button:focus-visible {
378
- border-color: rgba(216, 255, 122, 0.45);
379
- background: rgba(216, 255, 122, 0.1);
380
- color: var(--accent);
460
+ .layout {
461
+ display: grid;
462
+ grid-template-columns: var(--sidebar-w) minmax(0, 1fr);
463
+ max-width: 1440px;
464
+ margin: 0 auto;
381
465
  }
382
466
 
383
- .button.primary {
384
- border-color: transparent;
385
- background: var(--accent);
386
- color: #111300;
467
+ .layout.with-toc {
468
+ grid-template-columns: var(--sidebar-w) minmax(0, 1fr) var(--toc-w);
387
469
  }
388
470
 
389
- .button.primary:hover,
390
- .button.primary:focus-visible {
391
- background: #e5ff98;
392
- color: #111300;
471
+ .sidebar {
472
+ position: sticky;
473
+ top: var(--topbar-h);
474
+ height: calc(100vh - var(--topbar-h));
475
+ overflow-y: auto;
476
+ padding: 20px 12px 40px 20px;
477
+ border-right: 1px solid var(--border);
478
+ scrollbar-width: thin;
479
+ scrollbar-color: var(--border) transparent;
393
480
  }
394
481
 
395
- .button.social {
396
- min-height: 34px;
397
- padding: 7px 12px;
398
- color: #d6d7dc;
482
+ .nav-group + .nav-group {
483
+ margin-top: 22px;
399
484
  }
400
485
 
401
- .button.social svg {
402
- width: 14px;
403
- height: 14px;
486
+ .nav-title {
487
+ margin: 0 0 6px;
488
+ padding: 0 10px;
489
+ color: var(--text-3);
490
+ font-size: 11.5px;
491
+ font-weight: 600;
492
+ letter-spacing: 0.06em;
493
+ text-transform: uppercase;
404
494
  }
405
495
 
406
- .owner-strip {
496
+ .nav-link {
407
497
  position: relative;
408
- z-index: 1;
409
498
  display: flex;
410
- flex-wrap: wrap;
411
499
  align-items: center;
412
500
  gap: 10px;
413
- margin-top: 18px;
501
+ padding: 6px 10px;
502
+ border-radius: 8px;
503
+ color: var(--text-2);
504
+ font-size: 14px;
505
+ font-weight: 450;
506
+ transition: color var(--dur) var(--ease), background var(--dur) var(--ease);
414
507
  }
415
508
 
416
- .owner-label {
417
- color: var(--muted-2);
418
- font-size: 12px;
419
- font-weight: 800;
420
- letter-spacing: 0.12em;
421
- text-transform: uppercase;
509
+ .nav-link .icon {
510
+ width: 15px;
511
+ height: 15px;
512
+ color: var(--text-3);
513
+ transition: color var(--dur) var(--ease);
422
514
  }
423
515
 
424
- .owner-strip a {
425
- display: inline-flex;
426
- align-items: center;
427
- gap: 7px;
428
- padding: 7px 11px;
429
- border: 1px solid rgba(255, 255, 255, 0.1);
430
- border-radius: 999px;
431
- background: rgba(255, 255, 255, 0.04);
432
- color: #d6d7dc;
433
- font-size: 12px;
434
- font-weight: 700;
516
+ .nav-link:hover {
517
+ color: var(--text);
518
+ background: var(--surface-2);
435
519
  }
436
520
 
437
- .owner-strip a:hover,
438
- .owner-strip a:focus-visible {
439
- border-color: rgba(216, 255, 122, 0.42);
440
- color: var(--accent);
521
+ .nav-link.current {
522
+ color: var(--text);
523
+ background: var(--surface-2);
524
+ font-weight: 550;
441
525
  }
442
526
 
443
- .section {
444
- padding-top: 86px;
445
- scroll-margin-top: 86px;
527
+ .nav-link.current .icon {
528
+ color: var(--accent-text);
446
529
  }
447
530
 
448
- .section-kicker {
449
- margin-bottom: 12px;
450
- color: var(--accent-2);
451
- font-size: 12px;
452
- font-weight: 800;
453
- letter-spacing: 0.12em;
454
- text-transform: uppercase;
531
+ .nav-link.current::before {
532
+ content: "";
533
+ position: absolute;
534
+ left: -12px;
535
+ top: 7px;
536
+ bottom: 7px;
537
+ width: 2px;
538
+ border-radius: 2px;
539
+ background: var(--accent);
455
540
  }
456
541
 
457
- .section-lead {
458
- max-width: 820px;
459
- margin-top: 18px;
460
- font-size: 16px;
542
+ .nav-badge {
543
+ margin-left: auto;
544
+ padding: 1px 6px;
545
+ border-radius: 999px;
546
+ background: var(--accent-soft);
547
+ color: var(--accent-text);
548
+ font: 600 10.5px/1.5 var(--font-mono);
461
549
  }
462
550
 
463
- .grid {
464
- display: grid;
465
- gap: 16px;
466
- margin-top: 28px;
551
+ main {
552
+ min-width: 0;
467
553
  }
468
554
 
469
- .grid.cols-2 {
470
- grid-template-columns: repeat(2, minmax(0, 1fr));
555
+ .content-shell {
556
+ max-width: calc(var(--content-max) + 96px);
557
+ margin: 0 auto;
558
+ padding: 36px 48px 64px;
471
559
  }
472
560
 
473
- .grid.cols-3 {
474
- grid-template-columns: repeat(3, minmax(0, 1fr));
561
+ .breadcrumb {
562
+ display: flex;
563
+ align-items: center;
564
+ gap: 8px;
565
+ margin-bottom: 14px;
566
+ color: var(--text-3);
567
+ font-size: 13px;
475
568
  }
476
569
 
477
- .card {
478
- padding: 22px;
479
- border: 1px solid rgba(255, 255, 255, 0.1);
480
- border-radius: var(--radius);
481
- background: linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.018));
570
+ .breadcrumb a:hover {
571
+ color: var(--text);
482
572
  }
483
573
 
484
- .card strong {
485
- color: var(--text);
574
+ .page-head {
575
+ padding-bottom: 28px;
576
+ margin-bottom: 8px;
577
+ border-bottom: 1px solid var(--border);
486
578
  }
487
579
 
488
- .card p {
489
- margin-top: 10px;
490
- font-size: 14px;
580
+ .page-head h1 {
581
+ margin: 0;
582
+ font-size: clamp(30px, 3.6vw, 40px);
583
+ line-height: 1.12;
584
+ letter-spacing: -0.03em;
585
+ font-weight: 700;
586
+ text-wrap: balance;
491
587
  }
492
588
 
493
- .steps {
494
- display: grid;
589
+ .page-head p {
590
+ margin: 14px 0 0;
591
+ color: var(--text-2);
592
+ font-size: 17px;
593
+ line-height: 1.6;
594
+ max-width: 64ch;
595
+ }
596
+
597
+ .page-meta {
598
+ display: flex;
599
+ flex-wrap: wrap;
495
600
  gap: 14px;
496
- margin-top: 28px;
497
- counter-reset: steps;
601
+ margin-top: 18px;
602
+ color: var(--text-3);
603
+ font-size: 13px;
498
604
  }
499
605
 
500
- .step {
501
- counter-increment: steps;
502
- display: grid;
503
- grid-template-columns: 44px minmax(0, 1fr);
504
- gap: 16px;
505
- padding: 20px;
506
- border: 1px solid rgba(255, 255, 255, 0.1);
507
- border-radius: var(--radius);
508
- background: rgba(255, 255, 255, 0.028);
606
+ .page-meta a {
607
+ display: inline-flex;
608
+ align-items: center;
609
+ gap: 6px;
509
610
  }
510
611
 
511
- .step::before {
512
- content: counter(steps, decimal-leading-zero);
513
- display: grid;
514
- place-items: center;
515
- width: 42px;
516
- height: 42px;
517
- border-radius: 14px;
518
- background: rgba(216, 255, 122, 0.12);
519
- color: var(--accent);
520
- font-family: "JetBrains Mono", monospace;
521
- font-size: 13px;
522
- font-weight: 800;
612
+ .page-meta a:hover {
613
+ color: var(--text);
523
614
  }
524
615
 
525
- .step p {
526
- margin-top: 8px;
527
- font-size: 14px;
616
+ .page-meta .icon {
617
+ width: 14px;
618
+ height: 14px;
528
619
  }
529
620
 
530
- /* One card per row. Half the content width holds about 45 characters, which is
531
- shorter than most of the commands these cards exist to show — the rest ran
532
- off the edge behind a scrollbar. Wrapping them instead is no better here,
533
- because a wrapped line and a second command look alike. */
534
- .command-grid {
535
- display: grid;
536
- grid-template-columns: minmax(0, 1fr);
537
- gap: 14px;
538
- margin-top: 28px;
621
+ /* ---------- Prose ---------- */
622
+
623
+ .content-shell h2 {
624
+ margin: 0 0 12px;
625
+ font-size: 24px;
626
+ line-height: 1.25;
627
+ letter-spacing: -0.02em;
628
+ font-weight: 650;
629
+ text-wrap: balance;
539
630
  }
540
631
 
541
- .command-card {
542
- overflow: hidden;
543
- border: 1px solid rgba(255, 255, 255, 0.1);
544
- border-radius: var(--radius);
545
- background: #08090b;
632
+ .content-shell h3 {
633
+ margin: 28px 0 8px;
634
+ font-size: 17.5px;
635
+ line-height: 1.35;
636
+ letter-spacing: -0.01em;
637
+ font-weight: 620;
546
638
  }
547
639
 
548
- .command-card header {
549
- display: flex;
550
- align-items: center;
551
- justify-content: space-between;
552
- gap: 16px;
553
- padding: 14px 16px;
554
- border-bottom: 1px solid var(--line-soft);
555
- background: rgba(255, 255, 255, 0.025);
640
+ .content-shell h2[id],
641
+ .content-shell h3[id] {
642
+ position: relative;
643
+ }
644
+
645
+ .heading-anchor {
646
+ position: absolute;
647
+ left: -22px;
648
+ top: 0;
649
+ padding-right: 6px;
650
+ color: var(--text-3);
651
+ opacity: 0;
652
+ transition: opacity var(--dur) var(--ease);
653
+ }
654
+
655
+ h2:hover > .heading-anchor,
656
+ h3:hover > .heading-anchor {
657
+ opacity: 1;
658
+ }
659
+
660
+ .content-shell p,
661
+ .content-shell li {
662
+ color: var(--text-2);
663
+ }
664
+
665
+ .content-shell p {
666
+ margin: 0 0 14px;
556
667
  }
557
668
 
558
- .command-card header span {
669
+ .content-shell strong {
559
670
  color: var(--text);
560
- font-size: 13px;
561
- font-weight: 700;
671
+ font-weight: 600;
562
672
  }
563
673
 
564
- /* The card carries no padding of its own — `header` and `pre` bring theirs. A
565
- heading or paragraph placed directly in the card would otherwise sit on the
566
- border, where the rounded corner clips its first letter. */
567
- .command-card > h3,
568
- .command-card > p {
569
- padding: 0 16px;
674
+ .content-shell a:not(.button):not(.doc-card):not(.pager-prev):not(.pager-next):not(.nav-link) {
675
+ color: var(--text);
676
+ text-decoration: underline;
677
+ text-decoration-color: var(--accent-line);
678
+ text-underline-offset: 3px;
679
+ text-decoration-thickness: 1px;
680
+ transition: text-decoration-color var(--dur) var(--ease);
570
681
  }
571
682
 
572
- .command-card > h3 {
573
- padding-top: 16px;
683
+ .content-shell a:not(.button):not(.doc-card):not(.pager-prev):not(.pager-next):hover {
684
+ text-decoration-color: var(--accent);
574
685
  }
575
686
 
576
- .command-card > h3 + p {
577
- margin-top: 8px;
687
+ .content-shell ul,
688
+ .content-shell ol {
689
+ padding-left: 20px;
690
+ margin: 0 0 16px;
578
691
  }
579
692
 
580
- .command-card > p:last-child {
581
- padding-bottom: 16px;
693
+ .content-shell li + li {
694
+ margin-top: 6px;
582
695
  }
583
696
 
584
- .command-card > p + pre {
585
- margin-top: 14px;
697
+ .content-shell li::marker {
698
+ color: var(--text-3);
586
699
  }
587
700
 
588
- .clip-btn {
589
- min-width: 74px;
590
- border: 1px solid rgba(255, 255, 255, 0.1);
591
- border-radius: 999px;
592
- background: rgba(255, 255, 255, 0.05);
593
- color: var(--muted);
594
- font: inherit;
595
- font-size: 12px;
596
- font-weight: 700;
597
- cursor: pointer;
598
- padding: 6px 10px;
701
+ code,
702
+ .inline-code {
703
+ font-family: var(--font-mono);
704
+ font-size: 0.86em;
599
705
  }
600
706
 
601
- .clip-btn:hover,
602
- .clip-btn:focus-visible {
603
- color: var(--accent);
604
- border-color: rgba(216, 255, 122, 0.45);
707
+ :not(pre) > code,
708
+ .inline-code {
709
+ padding: 1.5px 6px;
710
+ border-radius: 5px;
711
+ border: 1px solid var(--border);
712
+ background: var(--surface-2);
713
+ color: var(--text);
714
+ white-space: break-spaces;
605
715
  }
606
716
 
607
717
  pre {
608
- margin: 0;
609
- padding: 16px;
718
+ position: relative;
719
+ margin: 0 0 16px;
720
+ padding: 16px 18px;
610
721
  overflow-x: auto;
611
- color: #e9e9e3;
612
- font-size: 13px;
613
- line-height: 1.65;
722
+ border-radius: var(--radius);
723
+ border: 1px solid var(--border);
724
+ background: var(--code-bg);
725
+ color: var(--code-text);
726
+ font: 13.5px/1.7 var(--font-mono);
727
+ scrollbar-width: thin;
614
728
  }
615
729
 
616
- code {
617
- color: #f5f5f0;
730
+ pre code {
731
+ font-size: inherit;
618
732
  }
619
733
 
620
- .inline-code {
621
- padding: 2px 6px;
622
- border: 1px solid rgba(255, 255, 255, 0.1);
734
+ .code-copy {
735
+ position: absolute;
736
+ top: 8px;
737
+ right: 8px;
738
+ display: inline-grid;
739
+ place-items: center;
740
+ width: 30px;
741
+ height: 30px;
623
742
  border-radius: 7px;
624
- background: rgba(255, 255, 255, 0.05);
625
- color: var(--accent-2);
626
- font-family: "JetBrains Mono", monospace;
627
- font-size: 0.91em;
743
+ border: 1px solid rgba(255, 255, 255, 0.1);
744
+ background: rgba(24, 24, 28, 0.9);
745
+ color: #a1a1aa;
746
+ cursor: pointer;
747
+ opacity: 0;
748
+ transition: opacity var(--dur) var(--ease), color var(--dur) var(--ease);
749
+ }
750
+
751
+ pre:hover .code-copy,
752
+ .code-copy:focus-visible,
753
+ .code-copy.done {
754
+ opacity: 1;
755
+ }
756
+
757
+ .code-copy:hover {
758
+ color: #fafafa;
759
+ }
760
+
761
+ .code-copy.done {
762
+ color: var(--ok);
763
+ }
764
+
765
+ .code-copy .icon {
766
+ width: 15px;
767
+ height: 15px;
628
768
  }
629
769
 
630
770
  .table-wrap {
631
- margin-top: 28px;
632
- overflow: hidden;
633
- border: 1px solid rgba(255, 255, 255, 0.1);
771
+ margin: 0 0 18px;
772
+ overflow-x: auto;
773
+ border: 1px solid var(--border);
634
774
  border-radius: var(--radius);
635
775
  }
636
776
 
637
777
  table {
638
778
  width: 100%;
639
779
  border-collapse: collapse;
640
- background: rgba(255, 255, 255, 0.02);
780
+ font-size: 14px;
641
781
  }
642
782
 
643
783
  th,
644
784
  td {
645
- padding: 16px;
646
- border-bottom: 1px solid var(--line-soft);
785
+ padding: 10px 14px;
647
786
  text-align: left;
648
787
  vertical-align: top;
649
- font-size: 14px;
788
+ border-bottom: 1px solid var(--border);
650
789
  }
651
790
 
652
791
  th {
653
- color: var(--text);
792
+ background: var(--surface);
793
+ color: var(--text-3);
654
794
  font-size: 12px;
655
- letter-spacing: 0.09em;
795
+ font-weight: 600;
796
+ letter-spacing: 0.04em;
656
797
  text-transform: uppercase;
657
798
  }
658
799
 
800
+ tr:last-child td {
801
+ border-bottom: 0;
802
+ }
803
+
659
804
  td {
660
- color: var(--muted);
805
+ color: var(--text-2);
661
806
  }
662
807
 
663
- tr:last-child td {
808
+ /* ---------- Sections & cards ---------- */
809
+
810
+ .section {
811
+ padding: 32px 0;
812
+ border-bottom: 1px solid var(--border);
813
+ }
814
+
815
+ .section:last-of-type {
664
816
  border-bottom: 0;
665
817
  }
666
818
 
667
- .tag-list {
668
- display: flex;
669
- flex-wrap: wrap;
819
+ .section-kicker,
820
+ .eyebrow,
821
+ .card-kicker {
822
+ display: inline-flex;
823
+ align-items: center;
670
824
  gap: 8px;
671
- margin-top: 16px;
825
+ margin: 0 0 10px;
826
+ color: var(--accent-text);
827
+ font: 600 12px/1.4 var(--font-mono);
828
+ letter-spacing: 0.04em;
829
+ text-transform: uppercase;
672
830
  }
673
831
 
674
- .tag {
675
- padding: 6px 10px;
676
- border: 1px solid rgba(255, 255, 255, 0.1);
677
- border-radius: 999px;
678
- color: var(--muted);
679
- font-family: "JetBrains Mono", monospace;
680
- font-size: 12px;
832
+ .section-lead {
833
+ font-size: 16px;
834
+ max-width: 68ch;
681
835
  }
682
836
 
683
- .callout {
684
- margin-top: 28px;
685
- padding: 20px;
686
- border: 1px solid rgba(255, 209, 102, 0.26);
687
- border-radius: var(--radius);
688
- background: rgba(255, 209, 102, 0.07);
837
+ .section-head {
838
+ margin-bottom: 18px;
689
839
  }
690
840
 
691
- .callout strong {
692
- color: var(--warning);
841
+ .grid {
842
+ display: grid;
843
+ gap: 14px;
844
+ margin: 18px 0;
693
845
  }
694
846
 
695
- .callout p {
696
- margin-top: 8px;
847
+ .grid.cols-2 {
848
+ grid-template-columns: repeat(2, minmax(0, 1fr));
697
849
  }
698
850
 
699
- .callout ul {
700
- margin: 12px 0 0;
701
- padding-left: 20px;
702
- color: var(--muted);
851
+ .grid.cols-3 {
852
+ grid-template-columns: repeat(3, minmax(0, 1fr));
703
853
  }
704
854
 
705
- .ok-callout {
706
- border-color: rgba(139, 233, 200, 0.22);
707
- background: rgba(139, 233, 200, 0.065);
855
+ .card,
856
+ .doc-card {
857
+ position: relative;
858
+ display: block;
859
+ padding: 18px 18px 16px;
860
+ border-radius: var(--radius-lg);
861
+ border: 1px solid var(--border);
862
+ background: var(--surface);
863
+ transition: border-color var(--dur) var(--ease), transform var(--dur) var(--ease), background var(--dur) var(--ease);
708
864
  }
709
865
 
710
- .ok-callout strong {
711
- color: var(--ok);
866
+ .card h3,
867
+ .doc-card h3 {
868
+ margin: 0 0 6px;
869
+ font-size: 15.5px;
870
+ color: var(--text);
712
871
  }
713
872
 
714
- .split {
873
+ .card p,
874
+ .doc-card p {
875
+ margin: 0;
876
+ font-size: 14px;
877
+ line-height: 1.6;
878
+ }
879
+
880
+ .card p + p {
881
+ margin-top: 8px;
882
+ }
883
+
884
+ a.doc-card:hover {
885
+ border-color: var(--border-strong);
886
+ background: var(--surface-2);
887
+ transform: translateY(-2px);
888
+ }
889
+
890
+ .card-grid {
715
891
  display: grid;
716
- grid-template-columns: 1fr 1fr;
717
- gap: 16px;
718
- margin-top: 28px;
892
+ grid-template-columns: repeat(2, minmax(0, 1fr));
893
+ gap: 12px;
894
+ margin-top: 16px;
719
895
  }
720
896
 
721
- .footer {
722
- margin-top: 90px;
723
- padding-top: 28px;
724
- border-top: 1px solid rgba(255, 255, 255, 0.1);
725
- color: var(--muted-2);
726
- font-size: 13px;
897
+ .split {
898
+ display: grid;
899
+ grid-template-columns: repeat(3, minmax(0, 1fr));
900
+ gap: 12px;
727
901
  }
728
902
 
729
- .footer-links {
903
+ .tag-list {
730
904
  display: flex;
731
905
  flex-wrap: wrap;
732
- gap: 12px;
733
- margin-top: 14px;
906
+ gap: 6px;
907
+ margin: 10px 0 0;
908
+ padding: 0;
909
+ list-style: none;
734
910
  }
735
911
 
736
- .footer-links a {
737
- color: var(--muted);
738
- font-weight: 700;
912
+ .tag {
913
+ display: inline-flex;
914
+ align-items: center;
915
+ height: 22px;
916
+ padding: 0 8px;
917
+ border-radius: 999px;
918
+ border: 1px solid var(--border);
919
+ background: var(--surface-2);
920
+ color: var(--text-2);
921
+ font: 500 11.5px/1 var(--font-mono);
739
922
  }
740
923
 
741
- .footer-links a:hover,
742
- .footer-links a:focus-visible {
743
- color: var(--accent);
924
+ .tag-list li + li {
925
+ margin-top: 0;
744
926
  }
745
927
 
746
- .mobile-menu {
747
- display: none;
928
+ /* ---------- Callouts ---------- */
929
+
930
+ .callout {
931
+ position: relative;
932
+ margin: 18px 0;
933
+ padding: 14px 16px 14px 44px;
934
+ border-radius: var(--radius);
935
+ border: 1px solid color-mix(in srgb, var(--info) 30%, var(--border));
936
+ background: color-mix(in srgb, var(--info) 6%, var(--surface));
748
937
  }
749
938
 
750
- @media (max-width: 1020px) {
751
- .layout {
752
- grid-template-columns: 1fr;
753
- }
939
+ .callout::before {
940
+ content: "i";
941
+ position: absolute;
942
+ left: 14px;
943
+ top: 15px;
944
+ display: grid;
945
+ place-items: center;
946
+ width: 18px;
947
+ height: 18px;
948
+ border-radius: 50%;
949
+ background: var(--info);
950
+ color: var(--bg);
951
+ font: 700 11px/1 var(--font-mono);
952
+ }
754
953
 
755
- .sidebar {
756
- position: fixed;
757
- inset: 62px 0 auto;
758
- z-index: 25;
759
- display: none;
760
- height: calc(100vh - 62px);
761
- padding: 22px;
762
- background: rgba(5, 5, 5, 0.96);
763
- }
954
+ .callout strong:first-child {
955
+ display: block;
956
+ margin-bottom: 4px;
957
+ color: var(--text);
958
+ }
764
959
 
765
- .sidebar.open {
766
- display: block;
767
- }
960
+ .callout p {
961
+ margin: 0;
962
+ font-size: 14.5px;
963
+ }
768
964
 
769
- .mobile-menu {
770
- display: inline-flex;
771
- }
965
+ .callout p + p {
966
+ margin-top: 6px;
967
+ }
772
968
 
773
- .content-shell {
774
- width: min(100%, 980px);
775
- padding: 38px 22px 76px;
776
- }
969
+ .callout.ok-callout {
970
+ border-color: color-mix(in srgb, var(--ok) 30%, var(--border));
971
+ background: color-mix(in srgb, var(--ok) 6%, var(--surface));
972
+ }
777
973
 
778
- .hero {
779
- padding: 30px;
780
- }
974
+ .callout.ok-callout::before {
975
+ content: "✓";
976
+ background: var(--ok);
781
977
  }
782
978
 
783
- @media (max-width: 760px) {
784
- .topbar {
785
- padding: 0 16px;
786
- }
979
+ .callout.warn-callout {
980
+ border-color: color-mix(in srgb, var(--warn) 35%, var(--border));
981
+ background: color-mix(in srgb, var(--warn) 7%, var(--surface));
982
+ }
983
+
984
+ .callout.warn-callout::before {
985
+ content: "!";
986
+ background: var(--warn);
987
+ }
988
+
989
+ /* ---------- Command cards & steps ---------- */
990
+
991
+ .command-card {
992
+ margin: 14px 0 16px;
993
+ border-radius: var(--radius);
994
+ border: 1px solid var(--border);
995
+ background: var(--code-bg);
996
+ overflow: hidden;
997
+ }
998
+
999
+ .command-card header {
1000
+ display: flex;
1001
+ align-items: center;
1002
+ justify-content: space-between;
1003
+ gap: 12px;
1004
+ padding: 8px 10px 8px 14px;
1005
+ border-bottom: 1px solid rgba(255, 255, 255, 0.07);
1006
+ color: #a1a1aa;
1007
+ font: 500 12px/1.4 var(--font-mono);
1008
+ }
1009
+
1010
+ .command-card pre {
1011
+ margin: 0;
1012
+ border: 0;
1013
+ border-radius: 0;
1014
+ }
1015
+
1016
+ .command-card pre .code-copy {
1017
+ display: none;
1018
+ }
1019
+
1020
+ .clip-btn {
1021
+ display: inline-flex;
1022
+ align-items: center;
1023
+ gap: 6px;
1024
+ height: 26px;
1025
+ padding: 0 10px;
1026
+ border-radius: 6px;
1027
+ border: 1px solid rgba(255, 255, 255, 0.1);
1028
+ background: rgba(255, 255, 255, 0.04);
1029
+ color: #d4d4d8;
1030
+ font: 500 12px/1 var(--font-sans);
1031
+ cursor: pointer;
1032
+ transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
1033
+ }
1034
+
1035
+ .clip-btn:hover {
1036
+ background: rgba(255, 255, 255, 0.09);
1037
+ color: #fafafa;
1038
+ }
1039
+
1040
+ .clip-btn.done {
1041
+ color: #4ade80;
1042
+ }
1043
+
1044
+ .command-grid {
1045
+ display: grid;
1046
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1047
+ gap: 12px;
1048
+ margin: 16px 0;
1049
+ }
1050
+
1051
+ .command-grid .command-card {
1052
+ margin: 0;
1053
+ }
1054
+
1055
+ .command-note {
1056
+ color: var(--text-3);
1057
+ font-size: 13.5px;
1058
+ }
1059
+
1060
+ .steps {
1061
+ position: relative;
1062
+ counter-reset: step;
1063
+ margin: 8px 0 0;
1064
+ }
1065
+
1066
+ .step {
1067
+ position: relative;
1068
+ padding: 0 0 28px 48px;
1069
+ counter-increment: step;
1070
+ }
1071
+
1072
+ .step::before {
1073
+ content: counter(step);
1074
+ position: absolute;
1075
+ left: 0;
1076
+ top: 0;
1077
+ display: grid;
1078
+ place-items: center;
1079
+ width: 30px;
1080
+ height: 30px;
1081
+ border-radius: 50%;
1082
+ border: 1px solid var(--border-strong);
1083
+ background: var(--surface);
1084
+ color: var(--text);
1085
+ font: 600 13px/1 var(--font-mono);
1086
+ }
1087
+
1088
+ .step::after {
1089
+ content: "";
1090
+ position: absolute;
1091
+ left: 15px;
1092
+ top: 36px;
1093
+ bottom: 6px;
1094
+ width: 1px;
1095
+ background: linear-gradient(var(--border-strong), transparent);
1096
+ }
1097
+
1098
+ .step:last-child::after {
1099
+ display: none;
1100
+ }
1101
+
1102
+ .step h3 {
1103
+ margin-top: 3px;
1104
+ }
1105
+
1106
+ /* ---------- Tabs ---------- */
1107
+
1108
+ .tabs {
1109
+ margin: 16px 0;
1110
+ }
1111
+
1112
+ .tab-list {
1113
+ display: flex;
1114
+ gap: 2px;
1115
+ padding: 3px;
1116
+ width: max-content;
1117
+ max-width: 100%;
1118
+ overflow-x: auto;
1119
+ border-radius: var(--radius);
1120
+ border: 1px solid var(--border);
1121
+ background: var(--surface);
1122
+ }
1123
+
1124
+ .tab-list button {
1125
+ display: inline-flex;
1126
+ align-items: center;
1127
+ gap: 7px;
1128
+ height: 30px;
1129
+ padding: 0 12px;
1130
+ border: 0;
1131
+ border-radius: 7px;
1132
+ background: transparent;
1133
+ color: var(--text-3);
1134
+ font: inherit;
1135
+ font-size: 13.5px;
1136
+ font-weight: 550;
1137
+ white-space: nowrap;
1138
+ cursor: pointer;
1139
+ transition: color var(--dur) var(--ease), background var(--dur) var(--ease);
1140
+ }
1141
+
1142
+ .tab-list button:hover {
1143
+ color: var(--text);
1144
+ }
1145
+
1146
+ .tab-list button[aria-selected="true"] {
1147
+ background: var(--surface-3);
1148
+ color: var(--text);
1149
+ }
1150
+
1151
+ .tab-list .icon {
1152
+ width: 14px;
1153
+ height: 14px;
1154
+ }
1155
+
1156
+ .tab-panel {
1157
+ margin-top: 12px;
1158
+ }
1159
+
1160
+ .tab-panel[hidden] {
1161
+ display: none;
1162
+ }
1163
+
1164
+ /* ---------- Figures ---------- */
1165
+
1166
+ .shot,
1167
+ .diagram {
1168
+ margin: 20px 0;
1169
+ }
1170
+
1171
+ .shot img {
1172
+ width: 100%;
1173
+ height: auto;
1174
+ border-radius: var(--radius-lg);
1175
+ border: 1px solid var(--border);
1176
+ box-shadow: var(--shadow-lg);
1177
+ }
1178
+
1179
+ .shot figcaption,
1180
+ .diagram figcaption,
1181
+ .diagram-hint {
1182
+ margin-top: 10px;
1183
+ color: var(--text-3);
1184
+ font-size: 13px;
1185
+ }
1186
+
1187
+ .shot-grid {
1188
+ display: grid;
1189
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1190
+ gap: 14px;
1191
+ }
1192
+
1193
+ .diagram {
1194
+ padding: 16px;
1195
+ overflow-x: auto;
1196
+ border-radius: var(--radius-lg);
1197
+ border: 1px solid var(--border);
1198
+ background: #0b0b0e;
1199
+ }
1200
+
1201
+ .diagram svg {
1202
+ min-width: 720px;
1203
+ width: 100%;
1204
+ height: auto;
1205
+ }
1206
+
1207
+ /* ---------- Pager & footer ---------- */
1208
+
1209
+ .pager {
1210
+ display: grid;
1211
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1212
+ gap: 12px;
1213
+ margin-top: 48px;
1214
+ }
1215
+
1216
+ .pager a {
1217
+ display: flex;
1218
+ flex-direction: column;
1219
+ gap: 2px;
1220
+ padding: 14px 16px;
1221
+ border-radius: var(--radius);
1222
+ border: 1px solid var(--border);
1223
+ transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease);
1224
+ }
1225
+
1226
+ .pager a:hover {
1227
+ border-color: var(--border-strong);
1228
+ background: var(--surface);
1229
+ }
1230
+
1231
+ .pager-next {
1232
+ grid-column: 2;
1233
+ text-align: right;
1234
+ }
1235
+
1236
+ .pager-label {
1237
+ color: var(--text-3);
1238
+ font-size: 12.5px;
1239
+ }
1240
+
1241
+ .pager-title {
1242
+ font-weight: 600;
1243
+ }
1244
+
1245
+ .footer {
1246
+ display: flex;
1247
+ flex-wrap: wrap;
1248
+ align-items: center;
1249
+ justify-content: space-between;
1250
+ gap: 12px;
1251
+ margin-top: 40px;
1252
+ padding-top: 20px;
1253
+ border-top: 1px solid var(--border);
1254
+ color: var(--text-3);
1255
+ font-size: 13px;
1256
+ }
1257
+
1258
+ .footer p {
1259
+ margin: 0;
1260
+ color: var(--text-3);
1261
+ }
1262
+
1263
+ .footer-links {
1264
+ display: flex;
1265
+ flex-wrap: wrap;
1266
+ gap: 16px;
1267
+ }
1268
+
1269
+ .footer-links a:hover {
1270
+ color: var(--text);
1271
+ }
1272
+
1273
+ /* ---------- TOC ---------- */
1274
+
1275
+ .toc {
1276
+ position: sticky;
1277
+ top: var(--topbar-h);
1278
+ height: calc(100vh - var(--topbar-h));
1279
+ overflow-y: auto;
1280
+ padding: 36px 20px 40px 8px;
1281
+ }
1282
+
1283
+ .toc-title {
1284
+ margin: 0 0 10px;
1285
+ color: var(--text);
1286
+ font-size: 12.5px;
1287
+ font-weight: 600;
1288
+ }
1289
+
1290
+ .toc nav {
1291
+ display: flex;
1292
+ flex-direction: column;
1293
+ border-left: 1px solid var(--border);
1294
+ }
1295
+
1296
+ .toc a {
1297
+ margin-left: -1px;
1298
+ padding: 4px 0 4px 12px;
1299
+ border-left: 1px solid transparent;
1300
+ color: var(--text-3);
1301
+ font-size: 13px;
1302
+ line-height: 1.45;
1303
+ transition: color var(--dur) var(--ease), border-color var(--dur) var(--ease);
1304
+ }
1305
+
1306
+ .toc a:hover {
1307
+ color: var(--text);
1308
+ }
1309
+
1310
+ .toc a.active {
1311
+ color: var(--text);
1312
+ border-left-color: var(--accent);
1313
+ }
1314
+
1315
+ .toc a.toc-h3 {
1316
+ padding-left: 24px;
1317
+ font-size: 12.5px;
1318
+ }
1319
+
1320
+ /* ---------- Release notes ---------- */
1321
+
1322
+ .release {
1323
+ display: grid;
1324
+ grid-template-columns: 148px minmax(0, 1fr);
1325
+ gap: 24px;
1326
+ padding: 28px 0;
1327
+ border-bottom: 1px solid var(--border);
1328
+ }
1329
+
1330
+ .release-meta {
1331
+ position: sticky;
1332
+ top: calc(var(--topbar-h) + 20px);
1333
+ align-self: start;
1334
+ }
1335
+
1336
+ .release-version {
1337
+ display: inline-flex;
1338
+ align-items: center;
1339
+ height: 26px;
1340
+ padding: 0 10px;
1341
+ border-radius: 999px;
1342
+ border: 1px solid var(--border-strong);
1343
+ background: var(--surface);
1344
+ color: var(--text);
1345
+ font: 600 13px/1 var(--font-mono);
1346
+ }
1347
+
1348
+ .release.latest .release-version {
1349
+ border-color: var(--accent-line);
1350
+ background: var(--accent-soft);
1351
+ color: var(--accent-text);
1352
+ }
1353
+
1354
+ .release-date {
1355
+ display: block;
1356
+ margin-top: 8px;
1357
+ color: var(--text-3);
1358
+ font: 500 12.5px/1.4 var(--font-mono);
1359
+ }
1360
+
1361
+ .release-body h2 {
1362
+ margin-bottom: 8px;
1363
+ }
1364
+
1365
+ .release-body > p {
1366
+ margin-bottom: 12px;
1367
+ }
1368
+
1369
+ .release-items {
1370
+ margin: 0;
1371
+ padding: 0;
1372
+ list-style: none;
1373
+ }
1374
+
1375
+ .release-items li {
1376
+ display: grid;
1377
+ grid-template-columns: 76px minmax(0, 1fr);
1378
+ gap: 10px;
1379
+ align-items: baseline;
1380
+ padding: 3px 0;
1381
+ }
1382
+
1383
+ .release-items li + li {
1384
+ margin-top: 4px;
1385
+ }
1386
+
1387
+ .kind {
1388
+ display: inline-flex;
1389
+ justify-content: center;
1390
+ height: 20px;
1391
+ align-items: center;
1392
+ border-radius: 5px;
1393
+ font: 600 10.5px/1 var(--font-mono);
1394
+ letter-spacing: 0.04em;
1395
+ text-transform: uppercase;
1396
+ }
1397
+
1398
+ .kind-new {
1399
+ background: var(--accent-soft);
1400
+ color: var(--accent-text);
1401
+ }
1402
+
1403
+ .kind-improved {
1404
+ background: var(--mint-soft);
1405
+ color: var(--mint);
1406
+ }
1407
+
1408
+ .kind-fixed {
1409
+ background: color-mix(in srgb, var(--info) 12%, transparent);
1410
+ color: var(--info);
1411
+ }
1412
+
1413
+ .kind-security {
1414
+ background: color-mix(in srgb, var(--warn) 14%, transparent);
1415
+ color: var(--warn);
1416
+ }
1417
+
1418
+ .kind-requires {
1419
+ background: var(--surface-3);
1420
+ color: var(--text-2);
1421
+ }
1422
+
1423
+ .release-filter {
1424
+ display: flex;
1425
+ flex-wrap: wrap;
1426
+ gap: 8px;
1427
+ margin: 8px 0 4px;
1428
+ }
1429
+
1430
+ .release-archive summary {
1431
+ cursor: pointer;
1432
+ color: var(--text-2);
1433
+ font-weight: 550;
1434
+ padding: 12px 0;
1435
+ }
1436
+
1437
+ .release-archive summary:hover {
1438
+ color: var(--text);
1439
+ }
1440
+
1441
+ .sr-only {
1442
+ position: absolute;
1443
+ width: 1px;
1444
+ height: 1px;
1445
+ padding: 0;
1446
+ margin: -1px;
1447
+ overflow: hidden;
1448
+ clip: rect(0, 0, 0, 0);
1449
+ white-space: nowrap;
1450
+ border: 0;
1451
+ }
1452
+
1453
+ .releases {
1454
+ padding-top: 8px;
1455
+ }
1456
+
1457
+ .release:first-of-type {
1458
+ padding-top: 12px;
1459
+ }
1460
+
1461
+ .release-body h3 {
1462
+ margin: 0 0 6px;
1463
+ font-size: 19px;
1464
+ letter-spacing: -0.02em;
1465
+ }
1466
+
1467
+ .release-body h3 .tag {
1468
+ margin-left: 6px;
1469
+ vertical-align: 2px;
1470
+ }
1471
+
1472
+ .release-requires {
1473
+ margin: 12px 0 0;
1474
+ font-size: 13.5px;
1475
+ color: var(--text-3);
1476
+ }
1477
+
1478
+ .release-filter button {
1479
+ height: 30px;
1480
+ padding: 0 12px;
1481
+ border-radius: 999px;
1482
+ border: 1px solid var(--border);
1483
+ background: var(--surface);
1484
+ color: var(--text-2);
1485
+ font: inherit;
1486
+ font-size: 13px;
1487
+ font-weight: 550;
1488
+ cursor: pointer;
1489
+ transition: color var(--dur) var(--ease), background var(--dur) var(--ease), border-color var(--dur) var(--ease);
1490
+ }
1491
+
1492
+ .release-filter button:hover {
1493
+ color: var(--text);
1494
+ border-color: var(--border-strong);
1495
+ }
1496
+
1497
+ .release-filter button[aria-pressed="true"] {
1498
+ background: var(--text);
1499
+ border-color: var(--text);
1500
+ color: var(--bg);
1501
+ }
1502
+
1503
+ .release-archive {
1504
+ border-bottom: 1px solid var(--border);
1505
+ }
1506
+
1507
+ .release-archive summary {
1508
+ display: flex;
1509
+ align-items: center;
1510
+ justify-content: space-between;
1511
+ list-style: none;
1512
+ }
1513
+
1514
+ .release-archive summary::-webkit-details-marker {
1515
+ display: none;
1516
+ }
1517
+
1518
+ .release-archive summary::after {
1519
+ content: "+";
1520
+ color: var(--text-3);
1521
+ font: 500 18px/1 var(--font-mono);
1522
+ }
1523
+
1524
+ .release-archive[open] summary::after {
1525
+ content: "−";
1526
+ }
1527
+
1528
+ .archive-count {
1529
+ margin-left: auto;
1530
+ margin-right: 14px;
1531
+ color: var(--text-3);
1532
+ font: 500 12px/1 var(--font-mono);
1533
+ }
1534
+
1535
+ .archive-row {
1536
+ display: grid;
1537
+ grid-template-columns: 148px minmax(0, 1fr);
1538
+ gap: 24px;
1539
+ padding: 14px 0;
1540
+ border-top: 1px dashed var(--border);
1541
+ }
1542
+
1543
+ .archive-head .release-date {
1544
+ margin-top: 6px;
1545
+ }
1546
+
1547
+ .archive-body p {
1548
+ margin-bottom: 8px;
1549
+ font-size: 14.5px;
1550
+ }
1551
+
1552
+ .archive-body .release-items li {
1553
+ font-size: 14px;
1554
+ }
1555
+
1556
+ .update-more {
1557
+ display: inline-flex;
1558
+ align-items: center;
1559
+ gap: 6px;
1560
+ margin-top: auto;
1561
+ padding-top: 6px;
1562
+ color: var(--accent-text);
1563
+ font-size: 13.5px;
1564
+ font-weight: 550;
1565
+ }
1566
+
1567
+ .update-more .icon {
1568
+ width: 14px;
1569
+ height: 14px;
1570
+ transition: transform var(--dur) var(--ease);
1571
+ }
1572
+
1573
+ .update:hover .update-more .icon {
1574
+ transform: translateX(3px);
1575
+ }
1576
+
1577
+ .update .release-version {
1578
+ height: 22px;
1579
+ font-size: 12px;
1580
+ }
1581
+
1582
+ /* ---------- Search palette ---------- */
1583
+
1584
+ .palette {
1585
+ position: fixed;
1586
+ inset: 0;
1587
+ z-index: 80;
1588
+ display: none;
1589
+ align-items: flex-start;
1590
+ justify-content: center;
1591
+ padding: 12vh 16px 16px;
1592
+ background: rgba(0, 0, 0, 0.5);
1593
+ backdrop-filter: blur(4px);
1594
+ }
1595
+
1596
+ .palette.open {
1597
+ display: flex;
1598
+ animation: fade-in 120ms var(--ease);
1599
+ }
1600
+
1601
+ .palette-box {
1602
+ width: min(640px, 100%);
1603
+ max-height: 70vh;
1604
+ display: flex;
1605
+ flex-direction: column;
1606
+ border-radius: var(--radius-lg);
1607
+ border: 1px solid var(--border-strong);
1608
+ background: var(--surface);
1609
+ box-shadow: var(--shadow-lg);
1610
+ overflow: hidden;
1611
+ animation: pop-in 160ms var(--ease);
1612
+ }
1613
+
1614
+ .palette-input {
1615
+ display: flex;
1616
+ align-items: center;
1617
+ gap: 10px;
1618
+ padding: 0 14px;
1619
+ border-bottom: 1px solid var(--border);
1620
+ color: var(--text-3);
1621
+ }
1622
+
1623
+ .palette-input input {
1624
+ flex: 1;
1625
+ height: 52px;
1626
+ border: 0;
1627
+ outline: 0;
1628
+ background: transparent;
1629
+ color: var(--text);
1630
+ font: inherit;
1631
+ font-size: 16px;
1632
+ }
1633
+
1634
+ .palette-results {
1635
+ overflow-y: auto;
1636
+ padding: 6px;
1637
+ }
1638
+
1639
+ .palette-results a {
1640
+ display: flex;
1641
+ align-items: center;
1642
+ gap: 12px;
1643
+ padding: 9px 10px;
1644
+ border-radius: 8px;
1645
+ color: var(--text-2);
1646
+ }
1647
+
1648
+ .palette-results a .icon {
1649
+ color: var(--text-3);
1650
+ }
1651
+
1652
+ .palette-results a[aria-selected="true"] {
1653
+ background: var(--surface-3);
1654
+ color: var(--text);
1655
+ }
1656
+
1657
+ .palette-results a[aria-selected="true"] .icon {
1658
+ color: var(--accent-text);
1659
+ }
1660
+
1661
+ .palette-results .hit-title {
1662
+ display: block;
1663
+ color: inherit;
1664
+ font-size: 14px;
1665
+ font-weight: 550;
1666
+ }
1667
+
1668
+ .palette-results .hit-sub {
1669
+ display: block;
1670
+ color: var(--text-3);
1671
+ font-size: 12.5px;
1672
+ }
1673
+
1674
+ .palette-empty,
1675
+ .palette-foot {
1676
+ padding: 14px;
1677
+ color: var(--text-3);
1678
+ font-size: 13px;
1679
+ }
1680
+
1681
+ .palette-foot {
1682
+ display: flex;
1683
+ gap: 14px;
1684
+ padding: 8px 14px;
1685
+ border-top: 1px solid var(--border);
1686
+ font-size: 12px;
1687
+ }
1688
+
1689
+ @keyframes fade-in {
1690
+ from {
1691
+ opacity: 0;
1692
+ }
1693
+ }
1694
+
1695
+ @keyframes pop-in {
1696
+ from {
1697
+ opacity: 0;
1698
+ transform: translateY(-6px) scale(0.985);
1699
+ }
1700
+ }
1701
+
1702
+ /* ---------- Benchmark (kept for the benchmark page) ---------- */
1703
+
1704
+ .benchmark-summary {
1705
+ display: grid;
1706
+ gap: 16px;
1707
+ }
1708
+
1709
+ .benchmark-verdict {
1710
+ display: grid;
1711
+ grid-template-columns: minmax(0, 1fr) auto;
1712
+ gap: 20px;
1713
+ align-items: center;
1714
+ padding: 22px;
1715
+ border-radius: var(--radius-lg);
1716
+ border: 1px solid var(--accent-line);
1717
+ background: linear-gradient(135deg, var(--accent-soft), transparent 60%), var(--surface);
1718
+ }
1719
+
1720
+ .benchmark-verdict h2 {
1721
+ margin: 0 0 6px;
1722
+ }
1723
+
1724
+ .benchmark-verdict p:last-child {
1725
+ margin: 0;
1726
+ }
1727
+
1728
+ .benchmark-verdict-score {
1729
+ text-align: right;
1730
+ }
1731
+
1732
+ .benchmark-verdict-score strong {
1733
+ display: block;
1734
+ color: var(--accent-text);
1735
+ font: 700 44px/1 var(--font-mono);
1736
+ letter-spacing: -0.04em;
1737
+ }
1738
+
1739
+ .benchmark-verdict-score span {
1740
+ color: var(--text-3);
1741
+ font-size: 13px;
1742
+ }
1743
+
1744
+ .benchmark-metrics {
1745
+ display: grid;
1746
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1747
+ margin: 18px 0;
1748
+ border-radius: var(--radius-lg);
1749
+ border: 1px solid var(--border);
1750
+ background: var(--surface);
1751
+ }
1752
+
1753
+ .benchmark-metric {
1754
+ display: flex;
1755
+ flex-direction: column;
1756
+ gap: 4px;
1757
+ padding: 16px;
1758
+ }
1759
+
1760
+ .benchmark-metric + .benchmark-metric {
1761
+ border-left: 1px solid var(--border);
1762
+ }
1763
+
1764
+ .benchmark-metric span,
1765
+ .benchmark-metric small {
1766
+ color: var(--text-3);
1767
+ font-size: 12.5px;
1768
+ }
1769
+
1770
+ .benchmark-metric strong {
1771
+ color: var(--text);
1772
+ font: 650 24px/1.15 var(--font-mono);
1773
+ letter-spacing: -0.03em;
1774
+ }
1775
+
1776
+ .benchmark-facts {
1777
+ display: grid;
1778
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1779
+ gap: 10px;
1780
+ margin: 16px 0;
1781
+ }
1782
+
1783
+ .benchmark-facts div {
1784
+ padding: 12px 14px;
1785
+ border-radius: var(--radius);
1786
+ border: 1px solid var(--border);
1787
+ background: var(--surface);
1788
+ }
1789
+
1790
+ .benchmark-facts dt {
1791
+ color: var(--text-3);
1792
+ font-size: 12px;
1793
+ font-weight: 600;
1794
+ text-transform: uppercase;
1795
+ letter-spacing: 0.04em;
1796
+ }
1797
+
1798
+ .benchmark-facts dd {
1799
+ margin: 4px 0 0;
1800
+ color: var(--text);
1801
+ font-size: 14px;
1802
+ }
1803
+
1804
+ .benchmark-score-chart,
1805
+ .benchmark-usage-chart,
1806
+ .benchmark-paired {
1807
+ margin: 16px 0;
1808
+ padding: 18px;
1809
+ border-radius: var(--radius-lg);
1810
+ border: 1px solid var(--border);
1811
+ background: var(--surface);
1812
+ }
1813
+
1814
+ .benchmark-usage-chart {
1815
+ display: grid;
1816
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1817
+ gap: 24px;
1818
+ }
1819
+
1820
+ .benchmark-usage-group h3 {
1821
+ margin: 0 0 12px;
1822
+ font-size: 14px;
1823
+ }
1824
+
1825
+ .benchmark-score-row,
1826
+ .benchmark-usage-row {
1827
+ display: grid;
1828
+ grid-template-columns: 110px minmax(0, 1fr) 72px;
1829
+ gap: 12px;
1830
+ align-items: center;
1831
+ padding: 5px 0;
1832
+ font-size: 13.5px;
1833
+ }
1834
+
1835
+ .benchmark-score-row > span,
1836
+ .benchmark-usage-row > span {
1837
+ color: var(--text-2);
1838
+ }
1839
+
1840
+ .benchmark-score-row strong,
1841
+ .benchmark-usage-row strong {
1842
+ text-align: right;
1843
+ font: 600 13px/1 var(--font-mono);
1844
+ }
787
1845
 
788
- .top-actions .pill {
789
- display: none;
790
- }
1846
+ .benchmark-track,
1847
+ .benchmark-win-track {
1848
+ height: 8px;
1849
+ border-radius: 999px;
1850
+ background: var(--surface-3);
1851
+ overflow: hidden;
1852
+ }
791
1853
 
792
- .button.social {
793
- display: none;
794
- }
1854
+ .benchmark-track i,
1855
+ .benchmark-win-track i {
1856
+ display: block;
1857
+ height: 100%;
1858
+ width: var(--bar-size, 0%);
1859
+ border-radius: inherit;
1860
+ transform-origin: left;
1861
+ animation: bar-grow 900ms var(--ease) both;
1862
+ }
795
1863
 
796
- .top-command-link {
797
- display: none;
1864
+ .piagent-bar,
1865
+ .benchmark-score-row .benchmark-track i {
1866
+ background: linear-gradient(90deg, var(--accent), var(--mint));
1867
+ }
1868
+
1869
+ .codex-bar {
1870
+ background: var(--text-3);
1871
+ }
1872
+
1873
+ .benchmark-score-row.overall {
1874
+ margin-top: 6px;
1875
+ padding-top: 10px;
1876
+ border-top: 1px solid var(--border);
1877
+ font-weight: 600;
1878
+ }
1879
+
1880
+ .benchmark-table-wrap code {
1881
+ font-size: 12px;
1882
+ }
1883
+
1884
+ .benchmark-table-wrap td strong {
1885
+ color: var(--accent-text);
1886
+ }
1887
+
1888
+ .benchmark-legend {
1889
+ display: flex;
1890
+ gap: 16px;
1891
+ color: var(--text-2);
1892
+ font-size: 13px;
1893
+ }
1894
+
1895
+ .benchmark-legend span {
1896
+ display: inline-flex;
1897
+ align-items: center;
1898
+ gap: 6px;
1899
+ }
1900
+
1901
+ .benchmark-legend i {
1902
+ width: 10px;
1903
+ height: 10px;
1904
+ border-radius: 3px;
1905
+ }
1906
+
1907
+ .piagent-swatch {
1908
+ background: var(--accent);
1909
+ }
1910
+
1911
+ .codex-swatch {
1912
+ background: var(--text-3);
1913
+ }
1914
+
1915
+ .benchmark-paired-head {
1916
+ display: flex;
1917
+ justify-content: space-between;
1918
+ align-items: baseline;
1919
+ margin-bottom: 10px;
1920
+ }
1921
+
1922
+ .benchmark-paired-head span {
1923
+ color: var(--text-2);
1924
+ font-size: 13.5px;
1925
+ }
1926
+
1927
+ .benchmark-paired-head strong {
1928
+ font: 650 20px/1 var(--font-mono);
1929
+ color: var(--accent-text);
1930
+ }
1931
+
1932
+ .benchmark-paired p strong {
1933
+ color: var(--text);
1934
+ }
1935
+
1936
+ .benchmark-categories {
1937
+ display: grid;
1938
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1939
+ gap: 10px;
1940
+ margin: 16px 0;
1941
+ }
1942
+
1943
+ .benchmark-categories > div {
1944
+ padding: 14px;
1945
+ border-radius: var(--radius);
1946
+ border: 1px solid var(--border);
1947
+ background: var(--surface);
1948
+ }
1949
+
1950
+ .benchmark-categories span {
1951
+ color: var(--text-3);
1952
+ font-size: 12px;
1953
+ }
1954
+
1955
+ .benchmark-categories strong {
1956
+ display: block;
1957
+ margin: 4px 0;
1958
+ font: 650 20px/1.1 var(--font-mono);
1959
+ }
1960
+
1961
+ .benchmark-categories p {
1962
+ margin: 0;
1963
+ font-size: 13px;
1964
+ }
1965
+
1966
+ @keyframes bar-grow {
1967
+ from {
1968
+ transform: scaleX(0);
798
1969
  }
1970
+ }
799
1971
 
800
- .grid.cols-2,
801
- .grid.cols-3,
802
- .split {
803
- grid-template-columns: 1fr;
1972
+ /* ---------- Landing page ---------- */
1973
+
1974
+ .home main {
1975
+ overflow-x: clip;
1976
+ }
1977
+
1978
+ .home-wrap {
1979
+ width: min(1180px, 100% - 40px);
1980
+ margin: 0 auto;
1981
+ }
1982
+
1983
+ .hero {
1984
+ position: relative;
1985
+ padding: 88px 0 40px;
1986
+ text-align: center;
1987
+ isolation: isolate;
1988
+ }
1989
+
1990
+ .hero-bg {
1991
+ position: absolute;
1992
+ inset: -60px -40vw 0;
1993
+ z-index: -1;
1994
+ background-image: radial-gradient(var(--grid-dot) 1px, transparent 1px);
1995
+ background-size: 24px 24px;
1996
+ mask-image: radial-gradient(ellipse 60% 55% at 50% 30%, #000 30%, transparent 75%);
1997
+ -webkit-mask-image: radial-gradient(ellipse 60% 55% at 50% 30%, #000 30%, transparent 75%);
1998
+ }
1999
+
2000
+ .hero-glow {
2001
+ position: absolute;
2002
+ left: 50%;
2003
+ top: -120px;
2004
+ z-index: -1;
2005
+ width: 900px;
2006
+ height: 520px;
2007
+ transform: translateX(-50%);
2008
+ background:
2009
+ radial-gradient(closest-side, rgba(198, 244, 50, 0.16), transparent 70%),
2010
+ radial-gradient(closest-side at 70% 60%, rgba(94, 234, 212, 0.12), transparent 70%);
2011
+ filter: blur(20px);
2012
+ animation: glow-drift 14s ease-in-out infinite alternate;
2013
+ pointer-events: none;
2014
+ }
2015
+
2016
+ :root[data-theme="light"] .hero-glow {
2017
+ opacity: 0.7;
2018
+ }
2019
+
2020
+ @keyframes glow-drift {
2021
+ to {
2022
+ transform: translateX(-46%) translateY(30px) scale(1.06);
804
2023
  }
2024
+ }
805
2025
 
806
- th,
807
- td {
808
- display: block;
809
- width: 100%;
2026
+ .hero-pill {
2027
+ display: inline-flex;
2028
+ align-items: center;
2029
+ gap: 10px;
2030
+ height: 32px;
2031
+ padding: 0 6px 0 6px;
2032
+ border-radius: 999px;
2033
+ border: 1px solid var(--border);
2034
+ background: color-mix(in srgb, var(--surface) 80%, transparent);
2035
+ color: var(--text-2);
2036
+ font-size: 13px;
2037
+ transition: border-color var(--dur) var(--ease);
2038
+ }
2039
+
2040
+ .hero-pill:hover {
2041
+ border-color: var(--border-strong);
2042
+ color: var(--text);
2043
+ }
2044
+
2045
+ .hero-pill b {
2046
+ padding: 3px 8px;
2047
+ border-radius: 999px;
2048
+ background: var(--accent);
2049
+ color: var(--accent-ink);
2050
+ font: 650 11.5px/1.2 var(--font-mono);
2051
+ }
2052
+
2053
+ .hero-pill .icon {
2054
+ width: 14px;
2055
+ height: 14px;
2056
+ margin-right: 4px;
2057
+ }
2058
+
2059
+ .hero h1 {
2060
+ margin: 22px auto 0;
2061
+ max-width: 16ch;
2062
+ font-size: clamp(40px, 6.4vw, 74px);
2063
+ line-height: 1.02;
2064
+ letter-spacing: -0.045em;
2065
+ font-weight: 750;
2066
+ text-wrap: balance;
2067
+ }
2068
+
2069
+ .hero h1 .grad {
2070
+ background: linear-gradient(100deg, var(--accent) 10%, var(--mint) 90%);
2071
+ -webkit-background-clip: text;
2072
+ background-clip: text;
2073
+ color: transparent;
2074
+ }
2075
+
2076
+ :root[data-theme="light"] .hero h1 .grad {
2077
+ background: linear-gradient(100deg, #4a7a00 10%, #0d9488 90%);
2078
+ -webkit-background-clip: text;
2079
+ background-clip: text;
2080
+ }
2081
+
2082
+ .hero-sub {
2083
+ max-width: 620px;
2084
+ margin: 22px auto 0;
2085
+ color: var(--text-2);
2086
+ font-size: clamp(16px, 1.6vw, 18.5px);
2087
+ line-height: 1.6;
2088
+ }
2089
+
2090
+ .hero-cta {
2091
+ display: flex;
2092
+ flex-wrap: wrap;
2093
+ justify-content: center;
2094
+ gap: 10px;
2095
+ margin-top: 30px;
2096
+ }
2097
+
2098
+ .install-box {
2099
+ display: inline-flex;
2100
+ align-items: center;
2101
+ gap: 12px;
2102
+ height: 44px;
2103
+ padding: 0 6px 0 16px;
2104
+ border-radius: var(--radius);
2105
+ border: 1px solid var(--border-strong);
2106
+ background: var(--code-bg);
2107
+ color: #e4e4e7;
2108
+ font: 500 14px/1 var(--font-mono);
2109
+ }
2110
+
2111
+ .install-box .prompt {
2112
+ color: var(--accent);
2113
+ }
2114
+
2115
+ .install-box .clip-btn {
2116
+ height: 32px;
2117
+ width: 32px;
2118
+ justify-content: center;
2119
+ padding: 0;
2120
+ }
2121
+
2122
+ .hero-note {
2123
+ margin-top: 16px;
2124
+ color: var(--text-3);
2125
+ font-size: 13px;
2126
+ }
2127
+
2128
+ .hero-note span + span::before {
2129
+ content: "·";
2130
+ margin: 0 8px;
2131
+ }
2132
+
2133
+ /* Terminal demo */
2134
+
2135
+ .demo {
2136
+ position: relative;
2137
+ margin: 56px auto 0;
2138
+ max-width: 1040px;
2139
+ }
2140
+
2141
+ .demo::before {
2142
+ content: "";
2143
+ position: absolute;
2144
+ inset: -1px;
2145
+ z-index: -1;
2146
+ border-radius: calc(var(--radius-xl) + 1px);
2147
+ background: linear-gradient(140deg, var(--accent-line), transparent 30%, transparent 70%, rgba(94, 234, 212, 0.3));
2148
+ }
2149
+
2150
+ .window {
2151
+ border-radius: var(--radius-xl);
2152
+ border: 1px solid var(--border);
2153
+ background: #0b0b0e;
2154
+ box-shadow: 0 40px 120px -40px rgba(0, 0, 0, 0.8);
2155
+ overflow: hidden;
2156
+ text-align: left;
2157
+ }
2158
+
2159
+ .window-bar {
2160
+ display: flex;
2161
+ align-items: center;
2162
+ gap: 8px;
2163
+ height: 40px;
2164
+ padding: 0 14px;
2165
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
2166
+ background: #111114;
2167
+ color: #71717a;
2168
+ font: 500 12px/1 var(--font-mono);
2169
+ }
2170
+
2171
+ .window-bar i {
2172
+ width: 11px;
2173
+ height: 11px;
2174
+ border-radius: 50%;
2175
+ background: #2a2a30;
2176
+ }
2177
+
2178
+ .window-bar .title {
2179
+ flex: 1;
2180
+ text-align: center;
2181
+ margin-right: 50px;
2182
+ }
2183
+
2184
+ .window-body {
2185
+ display: grid;
2186
+ grid-template-columns: 220px minmax(0, 1fr);
2187
+ min-height: 420px;
2188
+ }
2189
+
2190
+ .window-side {
2191
+ padding: 14px 10px;
2192
+ border-right: 1px solid rgba(255, 255, 255, 0.06);
2193
+ background: #0e0e11;
2194
+ color: #a1a1aa;
2195
+ font-size: 12.5px;
2196
+ }
2197
+
2198
+ .window-side p {
2199
+ margin: 0 0 8px;
2200
+ padding: 0 8px;
2201
+ color: #52525b;
2202
+ font: 600 10.5px/1.4 var(--font-mono);
2203
+ letter-spacing: 0.06em;
2204
+ text-transform: uppercase;
2205
+ }
2206
+
2207
+ .window-side .item {
2208
+ display: flex;
2209
+ align-items: center;
2210
+ gap: 8px;
2211
+ padding: 7px 8px;
2212
+ border-radius: 7px;
2213
+ }
2214
+
2215
+ .window-side .item.active {
2216
+ background: #1c1c21;
2217
+ color: #f4f4f5;
2218
+ }
2219
+
2220
+ .window-side .item .icon {
2221
+ width: 14px;
2222
+ height: 14px;
2223
+ }
2224
+
2225
+ .window-side .status {
2226
+ margin-left: auto;
2227
+ width: 7px;
2228
+ height: 7px;
2229
+ border-radius: 50%;
2230
+ background: #3f3f46;
2231
+ }
2232
+
2233
+ .window-side .status.run {
2234
+ background: var(--accent);
2235
+ box-shadow: 0 0 0 3px rgba(198, 244, 50, 0.18);
2236
+ animation: pulse 1.6s ease-in-out infinite;
2237
+ }
2238
+
2239
+ .window-side .status.ok {
2240
+ background: #4ade80;
2241
+ }
2242
+
2243
+ @keyframes pulse {
2244
+ 50% {
2245
+ opacity: 0.45;
810
2246
  }
2247
+ }
2248
+
2249
+ .term {
2250
+ padding: 18px 22px 22px;
2251
+ color: #d4d4d8;
2252
+ font: 13px/1.75 var(--font-mono);
2253
+ min-height: 420px;
2254
+ }
2255
+
2256
+ .term-line {
2257
+ display: flex;
2258
+ gap: 10px;
2259
+ align-items: baseline;
2260
+ opacity: 0;
2261
+ transform: translateY(4px);
2262
+ transition: opacity 260ms var(--ease), transform 260ms var(--ease);
2263
+ }
2264
+
2265
+ .term-line.show,
2266
+ .term-card.show,
2267
+ .term-result.show {
2268
+ opacity: 1;
2269
+ transform: none;
2270
+ }
2271
+
2272
+ .term-card,
2273
+ .term-result {
2274
+ opacity: 0;
2275
+ transform: translateY(4px);
2276
+ transition: opacity 260ms var(--ease), transform 260ms var(--ease);
2277
+ }
2278
+
2279
+ .term-line .g {
2280
+ flex: none;
2281
+ width: 16px;
2282
+ text-align: center;
2283
+ }
2284
+
2285
+ .term .you {
2286
+ color: #fafafa;
2287
+ }
2288
+
2289
+ .term .you .g {
2290
+ color: var(--accent);
2291
+ }
2292
+
2293
+ .term .dim {
2294
+ color: #71717a;
2295
+ }
2296
+
2297
+ .term .ok {
2298
+ color: #4ade80;
2299
+ }
2300
+
2301
+ .term .warn {
2302
+ color: #fbbf24;
2303
+ }
2304
+
2305
+ .term .mint {
2306
+ color: #5eead4;
2307
+ }
2308
+
2309
+ .term .lime {
2310
+ color: var(--accent);
2311
+ }
2312
+
2313
+ .term-card {
2314
+ margin: 8px 0 8px 26px;
2315
+ padding: 10px 12px;
2316
+ border-radius: 9px;
2317
+ border: 1px solid rgba(251, 191, 36, 0.35);
2318
+ background: rgba(251, 191, 36, 0.06);
2319
+ }
2320
+
2321
+ .term-card .row {
2322
+ display: flex;
2323
+ flex-wrap: wrap;
2324
+ gap: 8px;
2325
+ margin-top: 8px;
2326
+ }
811
2327
 
812
- th {
813
- border-bottom: 0;
814
- padding-bottom: 4px;
815
- }
2328
+ .term-card .chip {
2329
+ padding: 2px 9px;
2330
+ border-radius: 6px;
2331
+ border: 1px solid rgba(255, 255, 255, 0.12);
2332
+ color: #e4e4e7;
2333
+ font-size: 12px;
2334
+ }
816
2335
 
817
- td {
818
- padding-top: 4px;
819
- }
2336
+ .term-card .chip.yes {
2337
+ background: #c6f432;
2338
+ border-color: #c6f432;
2339
+ color: #0b0d05;
820
2340
  }
821
2341
 
822
- @media (max-width: 520px) {
823
- .brand span:last-child {
824
- display: none;
825
- }
2342
+ .term-result {
2343
+ margin: 10px 0 0 26px;
2344
+ padding: 10px 12px;
2345
+ border-radius: 9px;
2346
+ border: 1px solid rgba(74, 222, 128, 0.3);
2347
+ background: rgba(74, 222, 128, 0.06);
2348
+ color: #d4d4d8;
826
2349
  }
827
2350
 
828
- @media (prefers-reduced-motion: reduce) {
829
- html {
830
- scroll-behavior: auto;
831
- }
2351
+ .caret {
2352
+ display: inline-block;
2353
+ width: 8px;
2354
+ height: 15px;
2355
+ margin-left: 2px;
2356
+ vertical-align: -2px;
2357
+ background: var(--accent);
2358
+ animation: blink 1s steps(1) infinite;
2359
+ }
832
2360
 
833
- *,
834
- *::before,
835
- *::after {
836
- transition: none !important;
2361
+ @keyframes blink {
2362
+ 50% {
2363
+ opacity: 0;
837
2364
  }
838
2365
  }
839
2366
 
840
- /* ---------------------------------------------------------------------------
841
- Multi-page shell
842
- The single-page site had one column of prose under a sidebar. A page per topic
843
- needs three things it did not: a place to say where you are, a map of the page
844
- you are on, and a way to the next page without going back to the sidebar.
845
- --------------------------------------------------------------------------- */
2367
+ /* Proof strip */
846
2368
 
847
- .layout.with-toc {
848
- grid-template-columns: var(--sidebar) minmax(0, 1fr) 232px;
2369
+ .proof {
2370
+ display: grid;
2371
+ grid-template-columns: repeat(4, minmax(0, 1fr));
2372
+ margin: 72px 0 0;
2373
+ border-radius: var(--radius-xl);
2374
+ border: 1px solid var(--border);
2375
+ background: var(--surface);
2376
+ overflow: hidden;
849
2377
  }
850
2378
 
851
- .toc {
852
- position: sticky;
853
- top: 62px;
854
- align-self: start;
855
- max-height: calc(100vh - 62px);
856
- overflow-y: auto;
857
- padding: 58px 26px 60px 8px;
858
- border-left: 1px solid var(--line-soft);
2379
+ .proof > div {
2380
+ padding: 22px 22px 20px;
859
2381
  }
860
2382
 
861
- .toc-title {
862
- margin: 0 0 12px;
863
- font-size: 11px;
864
- letter-spacing: 0.16em;
865
- text-transform: uppercase;
866
- color: var(--muted-2);
2383
+ .proof > div + div {
2384
+ border-left: 1px solid var(--border);
867
2385
  }
868
2386
 
869
- .toc a {
2387
+ .proof strong {
870
2388
  display: block;
871
- padding: 5px 0 5px 12px;
872
- border-left: 2px solid transparent;
873
- color: var(--muted);
874
- font-size: 13px;
875
- line-height: 1.45;
876
- text-decoration: none;
877
- transition: color 0.15s ease, border-color 0.15s ease;
2389
+ color: var(--text);
2390
+ font: 700 clamp(26px, 3vw, 34px)/1.1 var(--font-mono);
2391
+ letter-spacing: -0.04em;
2392
+ font-variant-numeric: tabular-nums;
878
2393
  }
879
2394
 
880
- .toc a:hover {
881
- color: var(--text);
2395
+ .proof strong em {
2396
+ color: var(--accent-text);
2397
+ font-style: normal;
882
2398
  }
883
2399
 
884
- .toc a.active {
885
- color: var(--accent);
886
- border-left-color: var(--accent);
2400
+ .proof strong span {
2401
+ display: inline;
2402
+ margin: 0;
2403
+ color: inherit;
2404
+ font: inherit;
887
2405
  }
888
2406
 
889
- .toc a.toc-h3 {
890
- padding-left: 24px;
891
- font-size: 12.5px;
2407
+ .proof > div > span {
2408
+ display: block;
2409
+ margin-top: 6px;
2410
+ color: var(--text-2);
2411
+ font-size: 13.5px;
2412
+ line-height: 1.45;
892
2413
  }
893
2414
 
894
- .breadcrumb {
895
- display: flex;
896
- flex-wrap: wrap;
897
- align-items: center;
898
- gap: 8px;
899
- margin-bottom: 18px;
900
- font-size: 12.5px;
901
- color: var(--muted-2);
2415
+ .proof small {
2416
+ display: block;
2417
+ margin-top: 4px;
2418
+ color: var(--text-3);
2419
+ font-size: 12px;
902
2420
  }
903
2421
 
904
- .breadcrumb a {
905
- color: var(--muted);
906
- text-decoration: none;
2422
+ /* Home sections */
2423
+
2424
+ .home-section {
2425
+ padding: 96px 0 0;
907
2426
  }
908
2427
 
909
- .breadcrumb a:hover {
910
- color: var(--text);
2428
+ .home-head {
2429
+ max-width: 680px;
2430
+ margin-bottom: 36px;
911
2431
  }
912
2432
 
913
- .breadcrumb span[aria-hidden] {
914
- color: var(--line);
2433
+ .home-head.center {
2434
+ margin-left: auto;
2435
+ margin-right: auto;
2436
+ text-align: center;
915
2437
  }
916
2438
 
917
- .page-head {
918
- margin-bottom: 34px;
2439
+ .home-head h2 {
2440
+ margin: 0;
2441
+ font-size: clamp(28px, 3.6vw, 42px);
2442
+ line-height: 1.1;
2443
+ letter-spacing: -0.035em;
2444
+ font-weight: 720;
2445
+ text-wrap: balance;
919
2446
  }
920
2447
 
921
- .page-head h1 {
922
- margin: 0 0 12px;
923
- font-size: clamp(30px, 3.4vw, 42px);
924
- line-height: 1.12;
925
- letter-spacing: -0.02em;
2448
+ .home-head p {
2449
+ margin: 14px 0 0;
2450
+ color: var(--text-2);
2451
+ font-size: 17px;
926
2452
  }
927
2453
 
928
- .page-head p {
929
- margin: 0;
930
- max-width: 62ch;
931
- color: var(--muted);
932
- font-size: 16px;
933
- line-height: 1.6;
2454
+ .home-head a,
2455
+ .mode a {
2456
+ color: var(--text);
2457
+ text-decoration: underline;
2458
+ text-decoration-color: var(--accent-line);
2459
+ text-underline-offset: 3px;
934
2460
  }
935
2461
 
936
- .pager {
2462
+ .home-head a:hover {
2463
+ text-decoration-color: var(--accent);
2464
+ }
2465
+
2466
+ /* Bento */
2467
+
2468
+ .bento {
937
2469
  display: grid;
938
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
2470
+ grid-template-columns: repeat(6, minmax(0, 1fr));
939
2471
  gap: 14px;
940
- margin-top: 56px;
941
- padding-top: 30px;
942
- border-top: 1px solid var(--line-soft);
943
2472
  }
944
2473
 
945
- .pager a {
946
- display: flex;
947
- flex-direction: column;
948
- gap: 5px;
949
- padding: 16px 18px;
950
- border: 1px solid var(--line);
951
- border-radius: 14px;
952
- background: var(--panel);
953
- color: var(--text);
954
- text-decoration: none;
955
- transition: border-color 0.15s ease, transform 0.15s ease;
2474
+ .tile {
2475
+ --mx: 50%;
2476
+ --my: 50%;
2477
+ position: relative;
2478
+ grid-column: span 2;
2479
+ padding: 24px;
2480
+ border-radius: var(--radius-xl);
2481
+ border: 1px solid var(--border);
2482
+ background: var(--surface);
2483
+ overflow: hidden;
2484
+ isolation: isolate;
2485
+ transition: border-color 220ms var(--ease), transform 220ms var(--ease);
956
2486
  }
957
2487
 
958
- .pager a:hover {
959
- border-color: var(--accent);
960
- transform: translateY(-1px);
2488
+ .tile.wide {
2489
+ grid-column: span 3;
961
2490
  }
962
2491
 
963
- .pager .pager-next {
964
- text-align: right;
965
- grid-column: -2;
2492
+ .tile.xwide {
2493
+ grid-column: span 4;
966
2494
  }
967
2495
 
968
- .pager-label {
969
- font-size: 11px;
970
- letter-spacing: 0.14em;
971
- text-transform: uppercase;
972
- color: var(--muted-2);
2496
+ .tile::before {
2497
+ content: "";
2498
+ position: absolute;
2499
+ inset: 0;
2500
+ z-index: -1;
2501
+ background: radial-gradient(380px circle at var(--mx) var(--my), rgba(198, 244, 50, 0.08), transparent 45%);
2502
+ opacity: 0;
2503
+ transition: opacity 220ms var(--ease);
973
2504
  }
974
2505
 
975
- .pager-title {
976
- font-weight: 600;
977
- font-size: 15px;
2506
+ .tile:hover {
2507
+ border-color: var(--border-strong);
978
2508
  }
979
2509
 
980
- /* Landing-page card grid: the entry points, as cards rather than a wall of prose. */
981
- .card-grid {
982
- display: grid;
983
- grid-template-columns: repeat(auto-fit, minmax(248px, 1fr));
984
- gap: 14px;
2510
+ .tile:hover::before {
2511
+ opacity: 1;
985
2512
  }
986
2513
 
987
- .doc-card {
988
- display: flex;
989
- flex-direction: column;
990
- gap: 8px;
991
- padding: 22px;
992
- border: 1px solid var(--line);
993
- border-radius: 16px;
994
- background: var(--panel);
995
- color: inherit;
996
- text-decoration: none;
997
- transition: border-color 0.15s ease, transform 0.15s ease;
2514
+ .tile-icon {
2515
+ display: inline-grid;
2516
+ place-items: center;
2517
+ width: 38px;
2518
+ height: 38px;
2519
+ margin-bottom: 18px;
2520
+ border-radius: 10px;
2521
+ border: 1px solid var(--border-strong);
2522
+ background: var(--surface-2);
2523
+ color: var(--accent-text);
998
2524
  }
999
2525
 
1000
- .doc-card:hover {
1001
- border-color: var(--accent);
1002
- transform: translateY(-2px);
2526
+ .tile-icon .icon {
2527
+ width: 19px;
2528
+ height: 19px;
1003
2529
  }
1004
2530
 
1005
- .doc-card h3 {
1006
- margin: 0;
1007
- font-size: 16px;
2531
+ .tile h3 {
2532
+ margin: 0 0 6px;
2533
+ font-size: 17px;
2534
+ letter-spacing: -0.015em;
2535
+ font-weight: 640;
1008
2536
  }
1009
2537
 
1010
- .doc-card p {
2538
+ .tile p {
1011
2539
  margin: 0;
1012
- color: var(--muted);
1013
- font-size: 14px;
2540
+ color: var(--text-2);
2541
+ font-size: 14.5px;
1014
2542
  line-height: 1.55;
1015
2543
  }
1016
2544
 
1017
- .doc-card .card-kicker {
1018
- font-size: 11px;
1019
- letter-spacing: 0.14em;
1020
- text-transform: uppercase;
1021
- color: var(--accent);
2545
+ .tile .mini {
2546
+ margin-top: 18px;
2547
+ padding: 12px 14px;
2548
+ border-radius: 10px;
2549
+ border: 1px solid var(--border);
2550
+ background: var(--code-bg);
2551
+ color: #d4d4d8;
2552
+ font: 12.5px/1.7 var(--font-mono);
1022
2553
  }
1023
2554
 
1024
- /* Production benchmark snapshot. The charts are plain CSS so the evidence is
1025
- readable in the committed static HTML without a client charting runtime. */
1026
- .benchmark-summary {
1027
- padding: 28px 0 12px;
1028
- border-top: 1px solid var(--line);
1029
- border-bottom: 1px solid var(--line);
2555
+ .mini .x {
2556
+ color: #f87171;
1030
2557
  }
1031
2558
 
1032
- .benchmark-verdict {
1033
- display: grid;
1034
- grid-template-columns: minmax(0, 1fr) 180px;
1035
- gap: 32px;
1036
- align-items: center;
2559
+ .mini .ok {
2560
+ color: #4ade80;
1037
2561
  }
1038
2562
 
1039
- .benchmark-verdict h2 {
1040
- font-size: 36px;
1041
- letter-spacing: 0;
2563
+ .mini .w {
2564
+ color: #fbbf24;
1042
2565
  }
1043
2566
 
1044
- .benchmark-verdict p:last-child {
1045
- max-width: 780px;
1046
- margin-top: 12px;
2567
+ .mini .d {
2568
+ color: #71717a;
1047
2569
  }
1048
2570
 
1049
- .benchmark-verdict-score {
1050
- padding-left: 24px;
1051
- border-left: 1px solid var(--line);
2571
+ .chips {
2572
+ display: flex;
2573
+ flex-wrap: wrap;
2574
+ gap: 6px;
2575
+ margin-top: 16px;
1052
2576
  }
1053
2577
 
1054
- .benchmark-verdict-score strong {
1055
- display: block;
1056
- color: var(--accent);
1057
- font-size: 48px;
1058
- line-height: 1;
1059
- letter-spacing: 0;
2578
+ .chips span {
2579
+ padding: 3px 9px;
2580
+ border-radius: 999px;
2581
+ border: 1px solid var(--border);
2582
+ background: var(--surface-2);
2583
+ color: var(--text-2);
2584
+ font: 500 12px/1.5 var(--font-mono);
1060
2585
  }
1061
2586
 
1062
- .benchmark-verdict-score span {
1063
- display: block;
1064
- margin-top: 8px;
1065
- color: var(--muted);
1066
- font-size: 12px;
1067
- font-weight: 700;
1068
- text-transform: uppercase;
1069
- }
2587
+ /* Turn flow */
1070
2588
 
1071
- .benchmark-metrics {
2589
+ .flow {
2590
+ position: relative;
1072
2591
  display: grid;
1073
- grid-template-columns: repeat(4, minmax(0, 1fr));
1074
- margin-top: 28px;
1075
- border-top: 1px solid var(--line-soft);
2592
+ grid-template-columns: repeat(5, minmax(0, 1fr));
2593
+ gap: 14px;
1076
2594
  }
1077
2595
 
1078
- .benchmark-metric {
1079
- min-width: 0;
1080
- padding: 18px 18px 14px 0;
2596
+ .flow::before {
2597
+ content: "";
2598
+ position: absolute;
2599
+ left: 10%;
2600
+ right: 10%;
2601
+ top: 27px;
2602
+ height: 1px;
2603
+ background: var(--border-strong);
1081
2604
  }
1082
2605
 
1083
- .benchmark-metric + .benchmark-metric {
1084
- padding-left: 18px;
1085
- border-left: 1px solid var(--line-soft);
2606
+ .flow::after {
2607
+ content: "";
2608
+ position: absolute;
2609
+ left: 10%;
2610
+ top: 27px;
2611
+ width: 80%;
2612
+ height: 1px;
2613
+ background: linear-gradient(90deg, var(--accent), var(--mint));
2614
+ transform-origin: left;
2615
+ transform: scaleX(0);
2616
+ transition: transform 1600ms var(--ease);
1086
2617
  }
1087
2618
 
1088
- .benchmark-metric span,
1089
- .benchmark-metric small {
1090
- display: block;
1091
- color: var(--muted-2);
1092
- font-size: 12px;
2619
+ .flow.in::after {
2620
+ transform: scaleX(1);
1093
2621
  }
1094
2622
 
1095
- .benchmark-metric strong {
1096
- display: block;
1097
- margin: 5px 0 3px;
1098
- color: var(--text);
1099
- font-size: 24px;
1100
- line-height: 1.2;
1101
- letter-spacing: 0;
2623
+ .flow-step {
2624
+ position: relative;
2625
+ text-align: center;
1102
2626
  }
1103
2627
 
1104
- .benchmark-facts {
1105
- display: grid;
1106
- grid-template-columns: repeat(3, minmax(0, 1fr));
1107
- gap: 0 24px;
1108
- margin: 28px 0 0;
2628
+ .flow-dot {
2629
+ position: relative;
2630
+ z-index: 1;
2631
+ display: inline-grid;
2632
+ place-items: center;
2633
+ width: 54px;
2634
+ height: 54px;
2635
+ border-radius: 16px;
2636
+ border: 1px solid var(--border-strong);
2637
+ background: var(--surface);
2638
+ color: var(--text-2);
2639
+ transition: color 300ms var(--ease), border-color 300ms var(--ease), box-shadow 300ms var(--ease);
1109
2640
  }
1110
2641
 
1111
- .benchmark-facts div {
1112
- min-width: 0;
1113
- padding: 14px 0;
1114
- border-bottom: 1px solid var(--line-soft);
2642
+ .flow.in .flow-dot {
2643
+ color: var(--accent-text);
2644
+ border-color: var(--accent-line);
2645
+ box-shadow: 0 0 0 5px var(--bg), 0 0 24px -6px var(--accent-line);
1115
2646
  }
1116
2647
 
1117
- .benchmark-facts dt {
1118
- color: var(--muted-2);
1119
- font-size: 11px;
1120
- font-weight: 700;
1121
- text-transform: uppercase;
2648
+ .flow-step:nth-child(2) .flow-dot { transition-delay: 300ms; }
2649
+ .flow-step:nth-child(3) .flow-dot { transition-delay: 600ms; }
2650
+ .flow-step:nth-child(4) .flow-dot { transition-delay: 900ms; }
2651
+ .flow-step:nth-child(5) .flow-dot { transition-delay: 1200ms; }
2652
+
2653
+ .flow-dot .icon {
2654
+ width: 22px;
2655
+ height: 22px;
1122
2656
  }
1123
2657
 
1124
- .benchmark-facts dd {
1125
- margin: 5px 0 0;
1126
- color: var(--text);
1127
- font-size: 14px;
1128
- overflow-wrap: anywhere;
2658
+ .flow-step h3 {
2659
+ margin: 14px 0 4px;
2660
+ font-size: 15px;
2661
+ font-weight: 640;
1129
2662
  }
1130
2663
 
1131
- .benchmark-score-chart {
1132
- display: grid;
1133
- gap: 13px;
1134
- margin-top: 30px;
1135
- padding: 22px;
1136
- border: 1px solid var(--line);
1137
- border-radius: 8px;
1138
- background: var(--panel);
2664
+ .flow-step p {
2665
+ margin: 0 auto;
2666
+ max-width: 22ch;
2667
+ color: var(--text-2);
2668
+ font-size: 13.5px;
2669
+ line-height: 1.5;
1139
2670
  }
1140
2671
 
1141
- .benchmark-score-row,
1142
- .benchmark-usage-row {
2672
+ /* Gallery */
2673
+
2674
+ .gallery-tabs {
2675
+ display: flex;
2676
+ justify-content: center;
2677
+ margin-bottom: 18px;
2678
+ }
2679
+
2680
+ .gallery-frame {
2681
+ position: relative;
2682
+ border-radius: var(--radius-xl);
2683
+ border: 1px solid var(--border);
2684
+ background: var(--surface);
2685
+ padding: 10px;
2686
+ box-shadow: var(--shadow-lg);
2687
+ }
2688
+
2689
+ .gallery-frame img {
2690
+ width: 100%;
2691
+ height: auto;
2692
+ border-radius: 12px;
2693
+ aspect-ratio: 16 / 10;
2694
+ object-fit: cover;
2695
+ object-position: top;
2696
+ background: #0b0b0e;
2697
+ }
2698
+
2699
+ .gallery-frame figcaption {
2700
+ padding: 12px 6px 4px;
2701
+ color: var(--text-2);
2702
+ font-size: 14px;
2703
+ text-align: center;
2704
+ }
2705
+
2706
+ /* Modes */
2707
+
2708
+ .modes {
1143
2709
  display: grid;
1144
- grid-template-columns: 112px minmax(120px, 1fr) 64px;
2710
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1145
2711
  gap: 14px;
2712
+ }
2713
+
2714
+ .mode {
2715
+ padding: 26px;
2716
+ border-radius: var(--radius-xl);
2717
+ border: 1px solid var(--border);
2718
+ background: var(--surface);
2719
+ }
2720
+
2721
+ .mode.featured {
2722
+ border-color: var(--accent-line);
2723
+ background: linear-gradient(160deg, var(--accent-soft), transparent 45%), var(--surface);
2724
+ }
2725
+
2726
+ .mode-head {
2727
+ display: flex;
1146
2728
  align-items: center;
2729
+ gap: 12px;
2730
+ margin-bottom: 8px;
1147
2731
  }
1148
2732
 
1149
- .benchmark-score-row > span,
1150
- .benchmark-usage-row > span {
1151
- color: var(--muted);
1152
- font-size: 13px;
2733
+ .mode-head h3 {
2734
+ margin: 0;
2735
+ font-size: 19px;
2736
+ letter-spacing: -0.02em;
1153
2737
  }
1154
2738
 
1155
- .benchmark-score-row strong,
1156
- .benchmark-usage-row strong {
1157
- color: var(--text);
1158
- font-family: "JetBrains Mono", monospace;
1159
- font-size: 12px;
1160
- text-align: right;
2739
+ .mode-head code {
2740
+ margin-left: auto;
1161
2741
  }
1162
2742
 
1163
- .benchmark-track {
1164
- position: relative;
1165
- width: 100%;
1166
- height: 10px;
1167
- overflow: hidden;
1168
- border-radius: 5px;
1169
- background: #24262d;
2743
+ .mode > p {
2744
+ margin: 0 0 16px;
2745
+ color: var(--text-2);
2746
+ font-size: 14.5px;
1170
2747
  }
1171
2748
 
1172
- .benchmark-track i,
1173
- .benchmark-win-track i {
1174
- display: block;
1175
- width: var(--bar-size);
1176
- height: 100%;
2749
+ .checks {
2750
+ margin: 0;
2751
+ padding: 0;
2752
+ list-style: none;
1177
2753
  }
1178
2754
 
1179
- .benchmark-score-row .benchmark-track i {
1180
- background: var(--chart-piagent);
2755
+ .checks li {
2756
+ display: flex;
2757
+ gap: 10px;
2758
+ align-items: flex-start;
2759
+ padding: 7px 0;
2760
+ color: var(--text-2);
2761
+ font-size: 14.5px;
2762
+ border-top: 1px solid var(--border);
1181
2763
  }
1182
2764
 
1183
- .benchmark-score-row.overall {
1184
- padding-top: 13px;
1185
- border-top: 1px solid var(--line-soft);
2765
+ .checks li .icon {
2766
+ margin-top: 4px;
2767
+ color: var(--accent-text);
1186
2768
  }
1187
2769
 
1188
- .benchmark-score-row.overall .benchmark-track i {
1189
- background: var(--accent);
2770
+ /* Install steps on the home page */
2771
+
2772
+ .install-grid {
2773
+ display: grid;
2774
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2775
+ gap: 14px;
1190
2776
  }
1191
2777
 
1192
- .benchmark-table-wrap code {
1193
- overflow-wrap: anywhere;
2778
+ .install-step {
2779
+ display: flex;
2780
+ flex-direction: column;
2781
+ padding: 22px;
2782
+ border-radius: var(--radius-xl);
2783
+ border: 1px solid var(--border);
2784
+ background: var(--surface);
2785
+ }
2786
+
2787
+ .install-step.span-2 {
2788
+ grid-column: span 2;
2789
+ }
2790
+
2791
+ .install-step .button {
2792
+ margin-top: auto;
2793
+ align-self: flex-start;
2794
+ }
2795
+
2796
+ .install-step .num {
2797
+ color: var(--text-3);
2798
+ font: 600 12px/1 var(--font-mono);
1194
2799
  }
1195
2800
 
1196
- .benchmark-table-wrap {
1197
- border-radius: 8px;
2801
+ .install-step h3 {
2802
+ margin: 10px 0 4px;
2803
+ font-size: 16.5px;
1198
2804
  }
1199
2805
 
1200
- .benchmark-table-wrap td strong {
1201
- color: var(--accent);
2806
+ .install-step p {
2807
+ margin: 0 0 14px;
2808
+ color: var(--text-2);
2809
+ font-size: 14px;
1202
2810
  }
1203
2811
 
1204
- .benchmark-legend {
1205
- display: flex;
1206
- flex-wrap: wrap;
1207
- gap: 18px;
1208
- margin-top: 28px;
2812
+ .install-step .command-card {
2813
+ margin: auto 0 0;
1209
2814
  }
1210
2815
 
1211
- .benchmark-legend span {
1212
- display: inline-flex;
1213
- align-items: center;
1214
- gap: 7px;
1215
- color: var(--muted);
1216
- font-size: 12px;
1217
- font-weight: 700;
2816
+ /* Changelog preview */
2817
+
2818
+ .updates {
2819
+ display: grid;
2820
+ grid-template-columns: repeat(3, minmax(0, 1fr));
2821
+ gap: 14px;
1218
2822
  }
1219
2823
 
1220
- .benchmark-legend i {
1221
- width: 12px;
1222
- height: 12px;
1223
- border-radius: 3px;
2824
+ .update {
2825
+ display: flex;
2826
+ flex-direction: column;
2827
+ gap: 8px;
2828
+ padding: 20px;
2829
+ border-radius: var(--radius-xl);
2830
+ border: 1px solid var(--border);
2831
+ background: var(--surface);
2832
+ transition: border-color var(--dur) var(--ease), transform var(--dur) var(--ease);
1224
2833
  }
1225
2834
 
1226
- .piagent-swatch,
1227
- .piagent-bar,
1228
- .piagent-win {
1229
- background: var(--chart-piagent);
2835
+ .update:hover {
2836
+ border-color: var(--border-strong);
2837
+ transform: translateY(-2px);
1230
2838
  }
1231
2839
 
1232
- .codex-swatch,
1233
- .codex-bar,
1234
- .codex-win {
1235
- background: var(--chart-codex);
2840
+ .update-meta {
2841
+ display: flex;
2842
+ align-items: center;
2843
+ gap: 10px;
2844
+ color: var(--text-3);
2845
+ font: 500 12px/1 var(--font-mono);
1236
2846
  }
1237
2847
 
1238
- .benchmark-usage-chart {
1239
- display: grid;
1240
- grid-template-columns: repeat(2, minmax(0, 1fr));
1241
- gap: 28px 34px;
1242
- margin-top: 18px;
1243
- padding: 24px;
1244
- border: 1px solid var(--line);
1245
- border-radius: 8px;
1246
- background: var(--panel);
2848
+ .update h3 {
2849
+ margin: 0;
2850
+ font-size: 16px;
2851
+ letter-spacing: -0.01em;
1247
2852
  }
1248
2853
 
1249
- .benchmark-usage-group h3 {
1250
- margin-bottom: 14px;
2854
+ .update p {
2855
+ margin: 0;
2856
+ color: var(--text-2);
1251
2857
  font-size: 14px;
1252
- letter-spacing: 0;
1253
2858
  }
1254
2859
 
1255
- .benchmark-usage-row {
1256
- grid-template-columns: 78px minmax(80px, 1fr) 62px;
1257
- gap: 10px;
1258
- }
2860
+ /* Final CTA */
1259
2861
 
1260
- .benchmark-usage-row + .benchmark-usage-row {
1261
- margin-top: 9px;
2862
+ .final-cta {
2863
+ position: relative;
2864
+ margin: 104px 0 0;
2865
+ padding: 64px 24px;
2866
+ border-radius: var(--radius-xl);
2867
+ border: 1px solid var(--border);
2868
+ background: var(--surface);
2869
+ text-align: center;
2870
+ overflow: hidden;
2871
+ isolation: isolate;
1262
2872
  }
1263
2873
 
1264
- .benchmark-paired {
1265
- margin-top: 28px;
1266
- padding: 22px;
1267
- border-left: 3px solid var(--chart-piagent);
1268
- background: rgba(139, 233, 200, 0.045);
2874
+ .final-cta::before {
2875
+ content: "";
2876
+ position: absolute;
2877
+ inset: 0;
2878
+ z-index: -1;
2879
+ background-image: radial-gradient(var(--grid-dot) 1px, transparent 1px);
2880
+ background-size: 20px 20px;
2881
+ mask-image: radial-gradient(ellipse 50% 70% at 50% 100%, #000, transparent);
2882
+ -webkit-mask-image: radial-gradient(ellipse 50% 70% at 50% 100%, #000, transparent);
1269
2883
  }
1270
2884
 
1271
- .benchmark-paired-head {
1272
- display: grid;
1273
- grid-template-columns: repeat(2, minmax(0, 1fr));
1274
- gap: 20px;
2885
+ .final-cta h2 {
2886
+ margin: 0;
2887
+ font-size: clamp(28px, 3.6vw, 40px);
2888
+ letter-spacing: -0.035em;
1275
2889
  }
1276
2890
 
1277
- .benchmark-paired-head span,
1278
- .benchmark-paired-head strong {
1279
- display: block;
2891
+ .final-cta p {
2892
+ margin: 12px auto 26px;
2893
+ max-width: 520px;
2894
+ color: var(--text-2);
1280
2895
  }
1281
2896
 
1282
- .benchmark-paired-head span {
1283
- color: var(--muted-2);
1284
- font-size: 11px;
1285
- font-weight: 700;
1286
- text-transform: uppercase;
2897
+ .site-footer {
2898
+ margin-top: 72px;
2899
+ padding: 28px 0 40px;
2900
+ border-top: 1px solid var(--border);
2901
+ color: var(--text-3);
2902
+ font-size: 13.5px;
1287
2903
  }
1288
2904
 
1289
- .benchmark-paired-head strong {
1290
- margin-top: 4px;
1291
- color: var(--text);
1292
- font-size: 15px;
2905
+ .site-footer .home-wrap {
2906
+ display: flex;
2907
+ flex-wrap: wrap;
2908
+ align-items: center;
2909
+ justify-content: space-between;
2910
+ gap: 16px;
1293
2911
  }
1294
2912
 
1295
- .benchmark-win-track {
2913
+ .site-footer nav {
1296
2914
  display: flex;
1297
- width: 100%;
1298
- height: 14px;
1299
- margin: 18px 0;
1300
- overflow: hidden;
1301
- border-radius: 7px;
1302
- background: #24262d;
2915
+ flex-wrap: wrap;
2916
+ gap: 18px;
1303
2917
  }
1304
2918
 
1305
- .benchmark-paired p strong {
2919
+ .site-footer a:hover {
1306
2920
  color: var(--text);
1307
2921
  }
1308
2922
 
1309
- .benchmark-categories {
1310
- display: grid;
1311
- grid-template-columns: repeat(3, minmax(0, 1fr));
1312
- gap: 12px;
1313
- margin-top: 28px;
1314
- }
2923
+ /* Scroll reveal: content is visible without JavaScript; the script adds
2924
+ `.reveal-ready` to <html> before hiding anything. */
1315
2925
 
1316
- .benchmark-categories > div {
1317
- position: relative;
1318
- min-width: 0;
1319
- padding: 18px;
1320
- border: 1px solid var(--line);
1321
- border-radius: 8px;
1322
- background: var(--panel);
2926
+ .reveal-ready [data-reveal] {
2927
+ opacity: 0;
2928
+ transform: translateY(16px);
2929
+ transition: opacity 600ms var(--ease), transform 600ms var(--ease);
1323
2930
  }
1324
2931
 
1325
- .benchmark-categories span {
1326
- color: var(--muted-2);
1327
- font-size: 11px;
1328
- font-weight: 700;
1329
- text-transform: uppercase;
2932
+ .reveal-ready [data-reveal].in {
2933
+ opacity: 1;
2934
+ transform: none;
1330
2935
  }
1331
2936
 
1332
- .benchmark-categories strong {
1333
- position: absolute;
1334
- top: 16px;
1335
- right: 16px;
1336
- color: var(--accent);
1337
- font-family: "JetBrains Mono", monospace;
1338
- font-size: 14px;
1339
- }
2937
+ /* ---------- Responsive ---------- */
1340
2938
 
1341
- .benchmark-categories p {
1342
- margin-top: 10px;
1343
- padding-right: 40px;
1344
- font-size: 13px;
2939
+ @media (max-width: 1240px) {
2940
+ .layout.with-toc {
2941
+ grid-template-columns: var(--sidebar-w) minmax(0, 1fr);
2942
+ }
2943
+
2944
+ .toc {
2945
+ display: none;
2946
+ }
1345
2947
  }
1346
2948
 
1347
- @media (max-width: 920px) {
1348
- .benchmark-metrics,
1349
- .benchmark-categories {
2949
+ @media (max-width: 960px) {
2950
+ .bento,
2951
+ .install-grid,
2952
+ .updates {
2953
+ grid-template-columns: minmax(0, 1fr);
2954
+ }
2955
+
2956
+ .tile,
2957
+ .tile.wide,
2958
+ .tile.xwide,
2959
+ .install-step.span-2 {
2960
+ grid-column: auto;
2961
+ }
2962
+
2963
+ .flow {
2964
+ grid-template-columns: minmax(0, 1fr);
2965
+ gap: 18px;
2966
+ }
2967
+
2968
+ .flow::before,
2969
+ .flow::after {
2970
+ display: none;
2971
+ }
2972
+
2973
+ .flow-step {
2974
+ display: grid;
2975
+ grid-template-columns: 54px minmax(0, 1fr);
2976
+ gap: 14px;
2977
+ text-align: left;
2978
+ }
2979
+
2980
+ .flow-step h3 {
2981
+ margin-top: 4px;
2982
+ }
2983
+
2984
+ .flow-step p {
2985
+ margin: 0;
2986
+ max-width: none;
2987
+ }
2988
+
2989
+ .modes {
2990
+ grid-template-columns: minmax(0, 1fr);
2991
+ }
2992
+
2993
+ .proof {
1350
2994
  grid-template-columns: repeat(2, minmax(0, 1fr));
1351
2995
  }
1352
2996
 
1353
- .benchmark-metric:nth-child(3) {
1354
- padding-left: 0;
2997
+ .proof > div:nth-child(3) {
1355
2998
  border-left: 0;
1356
2999
  }
1357
3000
 
1358
- .benchmark-facts,
1359
- .benchmark-usage-chart {
1360
- grid-template-columns: 1fr;
3001
+ .proof > div:nth-child(n + 3) {
3002
+ border-top: 1px solid var(--border);
3003
+ }
3004
+
3005
+ .window-body {
3006
+ grid-template-columns: minmax(0, 1fr);
3007
+ }
3008
+
3009
+ .window-side {
3010
+ display: none;
3011
+ }
3012
+
3013
+ .top-nav {
3014
+ display: none;
1361
3015
  }
1362
3016
  }
1363
3017
 
1364
- @media (max-width: 760px) {
1365
- .benchmark-verdict {
1366
- grid-template-columns: 1fr;
1367
- gap: 22px;
3018
+ @media (max-width: 1020px) {
3019
+ .layout,
3020
+ .layout.with-toc {
3021
+ grid-template-columns: minmax(0, 1fr);
1368
3022
  }
1369
3023
 
1370
- .benchmark-verdict-score {
1371
- padding: 0;
1372
- border-left: 0;
3024
+ .toc {
3025
+ display: none;
1373
3026
  }
1374
3027
 
1375
- .benchmark-verdict-score strong {
1376
- font-size: 42px;
3028
+ .sidebar {
3029
+ position: fixed;
3030
+ top: var(--topbar-h);
3031
+ left: 0;
3032
+ bottom: 0;
3033
+ z-index: 30;
3034
+ width: min(320px, 86vw);
3035
+ height: auto;
3036
+ background: var(--bg);
3037
+ transform: translateX(-102%);
3038
+ transition: transform 220ms var(--ease);
3039
+ box-shadow: var(--shadow-lg);
1377
3040
  }
1378
3041
 
1379
- .benchmark-score-chart,
1380
- .benchmark-usage-chart,
1381
- .benchmark-paired {
1382
- padding: 16px;
3042
+ .sidebar.open {
3043
+ transform: none;
1383
3044
  }
1384
3045
 
1385
- .benchmark-score-row {
1386
- grid-template-columns: 88px minmax(70px, 1fr) 54px;
1387
- gap: 8px;
3046
+ .mobile-menu {
3047
+ display: inline-grid;
1388
3048
  }
1389
3049
 
1390
- .benchmark-paired-head {
1391
- grid-template-columns: 1fr;
3050
+ .content-shell {
3051
+ padding: 28px 20px 56px;
1392
3052
  }
1393
3053
 
1394
- .benchmark-table-wrap {
1395
- overflow-x: auto;
3054
+ .search-trigger {
3055
+ width: 34px;
3056
+ padding: 0;
3057
+ justify-content: center;
1396
3058
  }
1397
3059
 
1398
- .benchmark-table-wrap table {
1399
- min-width: 680px;
3060
+ .search-trigger span,
3061
+ .search-trigger kbd {
3062
+ display: none;
1400
3063
  }
1401
3064
 
1402
- .benchmark-table-wrap th,
1403
- .benchmark-table-wrap td {
1404
- display: table-cell;
1405
- width: auto;
1406
- padding: 12px;
3065
+ .grid.cols-2,
3066
+ .grid.cols-3,
3067
+ .split,
3068
+ .card-grid,
3069
+ .command-grid,
3070
+ .shot-grid,
3071
+ .benchmark-facts,
3072
+ .benchmark-usage-chart {
3073
+ grid-template-columns: minmax(0, 1fr);
1407
3074
  }
1408
- }
1409
3075
 
1410
- @media (max-width: 520px) {
1411
3076
  .benchmark-metrics,
1412
3077
  .benchmark-categories {
1413
- grid-template-columns: 1fr;
3078
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1414
3079
  }
1415
3080
 
1416
- .benchmark-metric,
1417
- .benchmark-metric + .benchmark-metric,
1418
3081
  .benchmark-metric:nth-child(3) {
1419
- padding: 14px 0;
1420
3082
  border-left: 0;
1421
- border-bottom: 1px solid var(--line-soft);
1422
3083
  }
1423
3084
 
1424
- .benchmark-usage-row {
1425
- grid-template-columns: 72px minmax(60px, 1fr) 56px;
3085
+ .benchmark-metric:nth-child(n + 3) {
3086
+ border-top: 1px solid var(--border);
1426
3087
  }
1427
- }
1428
3088
 
1429
- /* An anchor target under a sticky header lands with its heading hidden. */
1430
- .section[id],
1431
- h2[id],
1432
- h3[id] {
1433
- scroll-margin-top: 84px;
1434
- }
3089
+ .release,
3090
+ .archive-row {
3091
+ grid-template-columns: minmax(0, 1fr);
3092
+ gap: 10px;
3093
+ }
1435
3094
 
1436
- .nav-link.current {
1437
- color: var(--accent);
1438
- background: var(--panel-strong);
3095
+ .release-meta {
3096
+ position: static;
3097
+ display: flex;
3098
+ align-items: center;
3099
+ gap: 10px;
3100
+ }
3101
+
3102
+ .release-date {
3103
+ margin: 0;
3104
+ }
1439
3105
  }
1440
3106
 
1441
- @media (min-width: 1021px) and (max-width: 1180px) {
1442
- .layout.with-toc {
1443
- grid-template-columns: var(--sidebar) minmax(0, 1fr);
3107
+ @media (max-width: 640px) {
3108
+ .topbar {
3109
+ gap: 8px;
3110
+ padding: 0 12px;
1444
3111
  }
1445
3112
 
1446
- .toc {
3113
+ .brand-name span,
3114
+ .version-badge {
1447
3115
  display: none;
1448
3116
  }
1449
- }
1450
3117
 
1451
- @media (max-width: 1020px) {
1452
- .layout.with-toc {
3118
+ .language-switch {
3119
+ display: none;
3120
+ }
3121
+
3122
+ .hero {
3123
+ padding-top: 56px;
3124
+ }
3125
+
3126
+ .install-box {
3127
+ width: 100%;
3128
+ font-size: 12.5px;
3129
+ }
3130
+
3131
+ .install-box code {
3132
+ flex: 1;
3133
+ overflow-x: auto;
3134
+ white-space: nowrap;
3135
+ }
3136
+
3137
+ .proof {
1453
3138
  grid-template-columns: minmax(0, 1fr);
1454
3139
  }
1455
3140
 
1456
- .toc {
1457
- display: none;
3141
+ .proof > div + div {
3142
+ border-left: 0;
3143
+ border-top: 1px solid var(--border);
1458
3144
  }
1459
- }
1460
3145
 
1461
- /* Screenshots and diagrams. Screenshots are taken from the dashboard in dark
1462
- mode so they sit on the page without a bright frame. */
1463
- .shot {
1464
- margin: 28px 0 0;
1465
- border: 1px solid var(--line);
1466
- border-radius: 18px;
1467
- overflow: hidden;
1468
- background: var(--panel);
1469
- box-shadow: var(--shadow);
1470
- }
3146
+ .home-wrap {
3147
+ width: calc(100% - 32px);
3148
+ }
1471
3149
 
1472
- .shot img {
1473
- display: block;
1474
- width: 100%;
1475
- height: auto;
3150
+ .home-section {
3151
+ padding-top: 72px;
3152
+ }
3153
+
3154
+ .release-items li {
3155
+ grid-template-columns: minmax(0, 1fr);
3156
+ gap: 4px;
3157
+ }
3158
+
3159
+ .kind {
3160
+ justify-self: start;
3161
+ padding: 0 7px;
3162
+ }
3163
+
3164
+ .benchmark-score-row,
3165
+ .benchmark-usage-row {
3166
+ grid-template-columns: 84px minmax(0, 1fr) 56px;
3167
+ }
3168
+
3169
+ .benchmark-verdict {
3170
+ grid-template-columns: minmax(0, 1fr);
3171
+ }
3172
+
3173
+ .benchmark-verdict-score {
3174
+ text-align: left;
3175
+ }
1476
3176
  }
1477
3177
 
1478
- .shot figcaption {
1479
- padding: 12px 18px 14px;
1480
- border-top: 1px solid var(--line-soft);
1481
- color: var(--muted);
1482
- font-size: 0.92rem;
3178
+ @media (prefers-reduced-motion: reduce) {
3179
+ *,
3180
+ *::before,
3181
+ *::after {
3182
+ animation-duration: 0.01ms !important;
3183
+ animation-iteration-count: 1 !important;
3184
+ transition-duration: 0.01ms !important;
3185
+ scroll-behavior: auto !important;
3186
+ }
3187
+
3188
+ .reveal-ready [data-reveal],
3189
+ .term-line,
3190
+ .term-card,
3191
+ .term-result {
3192
+ opacity: 1;
3193
+ transform: none;
3194
+ }
1483
3195
  }
1484
3196
 
1485
- .shot-grid {
1486
- display: grid;
1487
- grid-template-columns: repeat(2, minmax(0, 1fr));
1488
- gap: 20px;
1489
- margin-top: 24px;
3197
+ /* The mobile shell is one column. This rule stays last so it wins over the
3198
+ desktop TOC grid above at the same specificity. */
3199
+ @media (max-width: 1020px) {
3200
+ .layout.with-toc { grid-template-columns: minmax(0, 1fr); }
3201
+ .toc { display: none; }
1490
3202
  }
1491
3203
 
1492
- .shot-grid .shot {
1493
- margin: 0;
3204
+ .card-kicker .icon {
3205
+ width: 14px;
3206
+ height: 14px;
1494
3207
  }
1495
3208
 
1496
- .diagram {
1497
- margin: 24px 0 0;
1498
- padding: 18px;
1499
- border: 1px solid var(--line);
1500
- border-radius: var(--radius);
1501
- background: var(--bg-soft);
1502
- overflow-x: auto;
3209
+ .install-box code,
3210
+ .mini code,
3211
+ .term code {
3212
+ padding: 0;
3213
+ border: 0;
3214
+ background: none;
3215
+ color: inherit;
1503
3216
  }
1504
3217
 
1505
- .diagram svg {
1506
- display: block;
1507
- width: 100%;
1508
- min-width: 720px;
1509
- height: auto;
3218
+ .content-shell .release-items,
3219
+ .content-shell .checks,
3220
+ .content-shell .tag-list {
3221
+ padding-left: 0;
1510
3222
  }
1511
3223
 
1512
- .diagram-hint {
1513
- display: none;
1514
- margin-top: 8px;
1515
- color: var(--muted-2);
1516
- font-size: 0.85rem;
3224
+ .hero-pill {
3225
+ max-width: 100%;
1517
3226
  }
1518
3227
 
1519
- @media (max-width: 860px) {
1520
- .shot-grid {
1521
- grid-template-columns: 1fr;
1522
- }
3228
+ .hero-pill span {
3229
+ min-width: 0;
3230
+ overflow: hidden;
3231
+ text-overflow: ellipsis;
3232
+ white-space: nowrap;
3233
+ }
1523
3234
 
1524
- .diagram-hint {
1525
- display: block;
3235
+ @media (max-width: 640px) {
3236
+ .install-box code {
3237
+ overflow: hidden;
3238
+ text-overflow: ellipsis;
3239
+ text-align: left;
1526
3240
  }
1527
3241
 
1528
- .diagram {
1529
- padding: 10px;
3242
+ .page-head p {
3243
+ font-size: 16px;
1530
3244
  }
1531
3245
  }
1532
-
1533
- /* Long unbroken tokens (commit hashes, run ids) in running text wrap instead
1534
- of widening the page on a phone. */
1535
- p code,
1536
- li code,
1537
- td code {
1538
- overflow-wrap: anywhere;
1539
- }