clew-code 0.2.21 → 0.2.23

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 (67) hide show
  1. package/README.md +45 -45
  2. package/dist/main.js +2906 -2722
  3. package/docs/architecture.html +91 -148
  4. package/docs/assets/clew-agent-loop.png +0 -0
  5. package/docs/assets/clew-general-architecture.png +0 -0
  6. package/docs/assets/clew-mcp-architecture.png +0 -0
  7. package/docs/assets/clew-p2p-swarm.png +0 -0
  8. package/docs/changelog.html +150 -0
  9. package/docs/cli-reference.html +90 -0
  10. package/docs/commands.html +133 -241
  11. package/docs/configuration.html +85 -147
  12. package/docs/contributing.html +91 -0
  13. package/docs/css/styles.css +272 -152
  14. package/docs/daemon.html +62 -129
  15. package/docs/features/bridge-mode.html +61 -66
  16. package/docs/features/evals.html +57 -149
  17. package/docs/features/searxng-search.html +58 -118
  18. package/docs/features/sentry-setup.html +61 -124
  19. package/docs/index.html +185 -148
  20. package/docs/installation.html +77 -105
  21. package/docs/internals/growthbook-ab-testing.html +69 -91
  22. package/docs/internals/hidden-features.html +81 -143
  23. package/docs/js/main.js +29 -0
  24. package/docs/loop.html +69 -181
  25. package/docs/mcp.html +99 -247
  26. package/docs/models.html +63 -92
  27. package/docs/permission-model.html +86 -102
  28. package/docs/plugins.html +84 -102
  29. package/docs/providers.html +87 -127
  30. package/docs/quick-start.html +81 -93
  31. package/docs/research-memory.html +71 -102
  32. package/docs/security.html +71 -0
  33. package/docs/skills.html +67 -117
  34. package/docs/swarm.html +78 -236
  35. package/docs/tools.html +183 -171
  36. package/docs/troubleshooting.html +86 -106
  37. package/docs/voice-mode.html +79 -0
  38. package/package.json +1 -1
  39. package/docs/architecture.th.html +0 -79
  40. package/docs/clew-code-architecture.html +0 -1126
  41. package/docs/commands.th.html +0 -269
  42. package/docs/configuration.th.html +0 -108
  43. package/docs/daemon.th.html +0 -73
  44. package/docs/features/bridge-mode.th.html +0 -62
  45. package/docs/features/evals.th.html +0 -62
  46. package/docs/features/searxng-search.th.html +0 -67
  47. package/docs/features/sentry-setup.th.html +0 -69
  48. package/docs/features/swarm.html +0 -156
  49. package/docs/generated/providers.html +0 -625
  50. package/docs/generated/tools.html +0 -558
  51. package/docs/index.th.html +0 -292
  52. package/docs/installation.th.html +0 -105
  53. package/docs/internals/growthbook-ab-testing.th.html +0 -60
  54. package/docs/internals/hidden-features.th.html +0 -107
  55. package/docs/loop.th.html +0 -227
  56. package/docs/mcp.th.html +0 -207
  57. package/docs/models.th.html +0 -61
  58. package/docs/permission-model.th.html +0 -67
  59. package/docs/plugins.th.html +0 -79
  60. package/docs/prompts-and-features.html +0 -806
  61. package/docs/providers.th.html +0 -81
  62. package/docs/quick-start.th.html +0 -89
  63. package/docs/research-memory.th.html +0 -72
  64. package/docs/skills.th.html +0 -90
  65. package/docs/swarm.th.html +0 -280
  66. package/docs/tools.th.html +0 -84
  67. package/docs/troubleshooting.th.html +0 -85
@@ -1,50 +1,65 @@
1
1
  /* ============================================================
2
- Clew Docs — Minimal White + Purple Theme
2
+ Clew Docs — Modern Purple Theme v2
3
3
  ============================================================ */
4
4
  *,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
5
5
 
6
6
  :root {
7
- --bg: #ffffff;
8
- --bg-card: #f9f8fc;
9
- --bg-code: #f5f3ff;
10
- --bg-hover: #ede9fe;
11
- --text: #1a1a2e;
12
- --text-dim: #6b6580;
13
- --text-faint:#9994b0;
7
+ --bg: #fafbfc;
8
+ --bg-card: #ffffff;
9
+ --bg-code: #f7f6fa;
10
+ --bg-hover: #f0edfa;
11
+ --text: #0f0f1a;
12
+ --text-dim: #5a5678;
13
+ --text-faint:#9b97b3;
14
14
  --accent: #7c3aed;
15
15
  --accent2: #a78bfa;
16
+ --accent3: #c4b5fd;
16
17
  --border: #e8e5f0;
17
- --border2: #d4cff0;
18
- --shadow: rgba(124,58,237,.06);
18
+ --border2: #ddd8ec;
19
+ --shadow: rgba(124,58,237,.08);
20
+ --shadow-lg: rgba(124,58,237,.15);
21
+ --success: #10b981;
22
+ --warning: #f59e0b;
23
+ --error: #ef4444;
19
24
 
20
25
  --font: 'DM Sans', system-ui, -apple-system, sans-serif;
21
26
  --mono: 'JetBrains Mono', 'SF Mono', monospace;
22
27
 
23
- --header-h: 52px;
24
- --max-w: 880px;
25
- --sidebar-w: 220px;
28
+ --header-h: 56px;
29
+ --max-w: 900px;
30
+ --sidebar-w: 240px;
31
+ --radius: 10px;
32
+ --radius-sm: 6px;
26
33
  }
27
34
 
28
35
  @media(prefers-color-scheme:dark){
29
36
  :root {
30
- --bg: #12121a;
31
- --bg-card: #1a1a28;
32
- --bg-code: #1e1e30;
33
- --bg-hover: #2a2a40;
34
- --text: #e4e4f0;
37
+ --bg: #0c0c14;
38
+ --bg-card: #12121e;
39
+ --bg-code: #181828;
40
+ --bg-hover: #222238;
41
+ --text: #e8e6f0;
35
42
  --text-dim: #9a96b0;
36
43
  --text-faint:#6b6880;
37
44
  --accent: #a78bfa;
38
45
  --accent2: #7c3aed;
46
+ --accent3: #5b4db0;
39
47
  --border: #2a2a3e;
40
48
  --border2: #3a3a54;
41
49
  --shadow: rgba(0,0,0,.3);
50
+ --shadow-lg: rgba(0,0,0,.5);
42
51
  }
43
- .header{background:rgba(18,18,26,.92)}
44
- .term{box-shadow:0 12px 40px rgba(0,0,0,.2)}
52
+ .header{background:rgba(12,12,20,.92)}
53
+ .term{box-shadow:0 12px 40px rgba(0,0,0,.25),0 0 0 1px rgba(124,58,237,.1)}
45
54
  img{opacity:.9}
46
55
  }
47
56
 
57
+ /* ── Scrollbar ── */
58
+ ::-webkit-scrollbar{width:8px;height:8px}
59
+ ::-webkit-scrollbar-track{background:transparent}
60
+ ::-webkit-scrollbar-thumb{background:var(--border2);border-radius:4px}
61
+ ::-webkit-scrollbar-thumb:hover{background:var(--accent3)}
62
+
48
63
  html{scroll-behavior:smooth}
49
64
  body{
50
65
  font-family:var(--font);
@@ -53,37 +68,44 @@ body{
53
68
  color:var(--text);
54
69
  background:var(--bg);
55
70
  -webkit-font-smoothing:antialiased;
71
+ -moz-osx-font-smoothing:grayscale;
56
72
  }
57
73
  ::selection{background:var(--accent);color:#fff}
58
- a{color:var(--accent);text-decoration:none;transition:.12s}
59
- a:hover{color:#6d28d9;text-decoration:underline}
74
+
75
+ a{color:var(--accent);text-decoration:none;transition:all .15s ease}
76
+ a:hover{color:#6d28d9;text-decoration:none}
60
77
  @media(prefers-color-scheme:dark){a:hover{color:#c4b5fd}}
78
+
79
+ /* ── code ── */
61
80
  code{
62
81
  font-family:var(--mono);
63
82
  font-size:.85em;
64
83
  background:var(--bg-code);
65
84
  color:var(--accent);
66
- padding:.12em .4em;
67
- border-radius:4px;
85
+ padding:.2em .45em;
86
+ border-radius:5px;
87
+ border:1px solid var(--border);
88
+ font-weight:500;
68
89
  }
69
- pre code{background:none;padding:0;color:inherit}
90
+ pre code{background:none;padding:0;color:inherit;border:none;font-weight:400}
70
91
 
71
92
  /* ── header ── */
72
93
  .header{
73
94
  position:fixed;top:0;left:0;right:0;height:var(--header-h);
74
- background:rgba(255,255,255,.88);backdrop-filter:blur(16px) saturate(180%);
75
- -webkit-backdrop-filter:blur(16px) saturate(180%);
95
+ background:rgba(250,251,252,.92);backdrop-filter:blur(20px) saturate(180%);
96
+ -webkit-backdrop-filter:blur(20px) saturate(180%);
76
97
  border-bottom:1px solid var(--border);z-index:100;
77
- box-shadow:0 1px 3px rgba(0,0,0,.04);
98
+ box-shadow:0 1px 3px rgba(0,0,0,.03);
99
+ transition:background .2s;
78
100
  }
79
101
  @media(prefers-color-scheme:dark){
80
102
  .header{
81
- background:rgba(18,18,26,.88);
103
+ background:rgba(12,12,20,.92);
82
104
  box-shadow:0 1px 3px rgba(0,0,0,.2);
83
105
  }
84
106
  }
85
107
  .header-inner{
86
- max-width:var(--max-w);margin:0 auto;padding:0 24px;
108
+ max-width:calc(var(--max-w) + var(--sidebar-w));margin:0 auto;padding:0 28px;
87
109
  height:100%;display:flex;align-items:center;gap:12px;
88
110
  }
89
111
  .logo{
@@ -93,11 +115,13 @@ pre code{background:none;padding:0;color:inherit}
93
115
  }
94
116
  .logo:hover{opacity:.85;text-decoration:none}
95
117
  .logo-mark{
96
- width:26px;height:26px;border-radius:6px;
118
+ width:28px;height:28px;border-radius:8px;
97
119
  background:linear-gradient(135deg,#7c3aed,#a78bfa);
98
120
  color:#fff;display:flex;align-items:center;justify-content:center;
99
- font-size:12px;font-weight:700;box-shadow:0 2px 8px rgba(124,58,237,.25);
121
+ font-size:13px;font-weight:700;box-shadow:0 2px 10px rgba(124,58,237,.3);
122
+ transition:transform .2s,box-shadow .2s;
100
123
  }
124
+ .logo:hover .logo-mark{transform:translateY(-2px);box-shadow:0 4px 16px rgba(124,58,237,.4)}
101
125
 
102
126
  /* ── breadcrumbs ── */
103
127
  .header-breadcrumbs{
@@ -115,58 +139,61 @@ pre code{background:none;padding:0;color:inherit}
115
139
  position:relative;margin-left:auto;flex-shrink:0;
116
140
  }
117
141
  .header-search input{
118
- width:180px;height:30px;padding:0 32px 0 10px;
119
- border:1px solid var(--border);border-radius:6px;
142
+ width:200px;height:32px;padding:0 32px 0 12px;
143
+ border:1px solid var(--border);border-radius:8px;
120
144
  background:var(--bg);color:var(--text);
121
- font-family:var(--font);font-size:12px;
122
- outline:none;transition:.15s;
145
+ font-family:var(--font);font-size:13px;
146
+ outline:none;transition:all .2s;
123
147
  }
124
148
  .header-search input:focus{
125
- border-color:var(--accent2);box-shadow:0 0 0 3px rgba(124,58,237,.1);
126
- width:220px;
149
+ border-color:var(--accent2);box-shadow:0 0 0 3px rgba(124,58,237,.12);
150
+ width:240px;
127
151
  }
128
152
  .header-search input::placeholder{color:var(--text-faint)}
129
153
  .header-search .search-icon{
130
- position:absolute;right:8px;top:50%;transform:translateY(-50%);
154
+ position:absolute;right:10px;top:50%;transform:translateY(-50%);
131
155
  font-size:12px;color:var(--text-faint);pointer-events:none;
132
156
  }
133
157
  .header-search .search-results{
134
- display:none;position:absolute;top:100%;right:0;width:320px;max-height:280px;
135
- overflow-y:auto;margin-top:6px;background:var(--bg);
136
- border:1px solid var(--border);border-radius:8px;
137
- box-shadow:0 8px 24px rgba(0,0,0,.08);z-index:300;
158
+ display:none;position:absolute;top:100%;right:0;width:340px;max-height:300px;
159
+ overflow-y:auto;margin-top:8px;background:var(--bg-card);
160
+ border:1px solid var(--border);border-radius:10px;
161
+ box-shadow:0 12px 32px rgba(0,0,0,.1);z-index:300;
138
162
  }
139
163
  .header-search .search-results.open{display:block}
140
164
  .header-search .search-result{
141
- display:block;padding:8px 12px;font-size:12px;color:var(--text-dim);
165
+ display:block;padding:10px 14px;font-size:13px;color:var(--text-dim);
142
166
  border-bottom:1px solid var(--border);
143
167
  transition:.08s;
144
168
  }
145
169
  .header-search .search-result:last-child{border:none}
146
170
  .header-search .search-result:hover{background:var(--bg-hover);color:var(--text);text-decoration:none}
147
- .header-search .search-result mark{background:rgba(124,58,237,.15);color:var(--accent)}
171
+ .header-search .search-result mark{background:rgba(124,58,237,.15);color:var(--accent);border-radius:2px;padding:0 2px}
148
172
  .header-search .search-empty{
149
- padding:12px;font-size:12px;color:var(--text-faint);text-align:center;
173
+ padding:14px;font-size:13px;color:var(--text-faint);text-align:center;
150
174
  }
151
175
 
152
176
  /* ── header nav ── */
153
177
  .header-nav{display:flex;gap:2px;align-items:center;flex-shrink:0}
154
178
  .header-nav a{
155
- padding:5px 10px;border-radius:5px;font-size:12px;font-weight:500;
179
+ padding:6px 12px;border-radius:6px;font-size:12px;font-weight:500;
156
180
  color:var(--text-dim);white-space:nowrap;
181
+ transition:all .15s;
157
182
  }
158
183
  .header-nav a:hover{background:var(--bg-hover);color:var(--text);text-decoration:none}
159
- .header-nav a.active{color:var(--accent);background:var(--bg-code)}
184
+ .header-nav a.active{color:var(--accent);background:var(--bg-code);font-weight:600}
160
185
 
161
186
  /* ── language toggle ── */
162
187
  .lang-toggle{
163
- display:flex;align-items:center;padding:4px 8px;border-radius:5px;
188
+ display:flex;align-items:center;padding:4px 10px;border-radius:6px;
164
189
  background:none;border:1px solid var(--border);cursor:pointer;
165
- font-size:11px;color:var(--text-dim);font-family:var(--font);gap:4px;
166
- transition:.1s;flex-shrink:0;
190
+ font-size:12px;color:var(--text-dim);font-family:var(--font);gap:4px;
191
+ transition:all .15s;flex-shrink:0;
167
192
  }
168
- .lang-toggle:hover{background:var(--bg-hover);border-color:var(--border2)}
169
- .menu-btn{display:none;width:32px;height:32px;border:1px solid var(--border);border-radius:6px;background:none;cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:4px;flex-shrink:0}
193
+ .lang-toggle:hover{background:var(--bg-hover);border-color:var(--border2);color:var(--accent)}
194
+
195
+ .menu-btn{display:none;width:32px;height:32px;border:1px solid var(--border);border-radius:6px;background:none;cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:4px;flex-shrink:0;transition:all .15s}
196
+ .menu-btn:hover{background:var(--bg-hover);border-color:var(--border2)}
170
197
  .menu-btn span{display:block;width:16px;height:2px;background:var(--text-dim);border-radius:2px;transition:.15s}
171
198
  .menu-btn.open span:nth-child(1){transform:rotate(45deg) translate(4px,4px)}
172
199
  .menu-btn.open span:nth-child(2){opacity:0}
@@ -176,221 +203,305 @@ pre code{background:none;padding:0;color:inherit}
176
203
  /* ── page layout (index) ── */
177
204
  .page{
178
205
  max-width:var(--max-w);margin:calc(var(--header-h) + 40px) auto 60px;
179
- padding:0 24px;
206
+ padding:0 28px;
180
207
  }
181
208
 
182
209
  /* ── doc layout (sub-pages) ── */
183
- .app{display:flex;max-width:var(--max-w);margin:0 auto;padding:0 24px;gap:0}
210
+ .app{display:flex;max-width:calc(var(--max-w) + var(--sidebar-w));margin:0 auto;padding:0 28px;gap:0}
184
211
  .sidebar{
185
212
  position:fixed;top:var(--header-h);left:0;bottom:0;
186
- width:var(--sidebar-w);overflow-y:auto;padding:24px 12px 40px;
213
+ width:var(--sidebar-w);overflow-y:auto;padding:28px 16px 40px;
187
214
  border-right:1px solid var(--border);
188
215
  background:var(--bg);
189
216
  z-index:50;
190
217
  }
191
- .sidebar-section{margin-bottom:24px}
218
+ .sidebar-section{margin-bottom:28px}
192
219
  .sidebar-label{
193
- font-family:var(--mono);font-size:10px;font-weight:600;text-transform:uppercase;
194
- color:var(--text-faint);letter-spacing:.05em;margin-bottom:6px;padding:0 8px;
220
+ font-family:var(--mono);font-size:11px;font-weight:600;text-transform:uppercase;
221
+ color:var(--text-faint);letter-spacing:.06em;margin-bottom:8px;padding:0 10px;
195
222
  }
196
223
  .sidebar-link{
197
- display:block;padding:3px 8px;border-radius:4px;
198
- font-size:13px;color:var(--text-dim);transition:.1s;
224
+ display:block;padding:4px 10px;border-radius:6px;
225
+ font-size:13px;color:var(--text-dim);transition:all .12s;
226
+ margin-bottom:2px;
199
227
  }
200
- .sidebar-link:hover{background:var(--bg-hover);color:var(--text);text-decoration:none}
201
- .sidebar-link.active{color:var(--accent);background:var(--bg-code);font-weight:500}
228
+ .sidebar-link:hover{background:var(--bg-hover);color:var(--text);text-decoration:none;transform:translateX(2px)}
229
+ .sidebar-link.active{color:var(--accent);background:var(--bg-code);font-weight:600}
202
230
  .sidebar-link .link-icon{display:inline-block;width:4px;height:4px;border-radius:50%;background:var(--border2);margin-right:6px;vertical-align:middle;transition:.1s}
203
231
  .sidebar-link:hover .link-icon{background:var(--accent2)}
204
232
  .sidebar-link.active .link-icon{background:var(--accent)}
205
233
 
206
234
  .content-wrap{flex:1;margin-left:var(--sidebar-w);min-width:0}
207
235
  .content{
208
- max-width:var(--max-w);padding:calc(var(--header-h) + 24px) 32px 60px;
236
+ max-width:var(--max-w);padding:calc(var(--header-h) + 28px) 36px 60px;
209
237
  }
210
238
 
211
239
  /* ── TOC sidebar ── */
212
- .toc-sidebar{
213
- display:none;
214
- }
240
+ .toc-sidebar{display:none}
215
241
  @media(min-width:1200px){
216
242
  .toc-sidebar{
217
- display:block;position:sticky;top:calc(var(--header-h) + 24px);
218
- width:180px;min-width:180px;max-height:calc(100vh - var(--header-h) - 48px);
219
- overflow-y:auto;padding:calc(var(--header-h) + 24px) 0 40px 20px;
243
+ display:block;position:sticky;top:calc(var(--header-h) + 28px);
244
+ width:200px;min-width:200px;max-height:calc(100vh - var(--header-h) - 56px);
245
+ overflow-y:auto;padding:calc(var(--header-h) + 28px) 0 40px 20px;
220
246
  margin-left:24px;border-left:1px solid var(--border);
221
247
  }
222
248
  .content-wrap{display:flex;flex-direction:row}
223
249
  .content{flex:1;min-width:0}
224
250
  }
225
251
  .toc-label{
226
- font-family:var(--mono);font-size:10px;font-weight:600;text-transform:uppercase;
227
- color:var(--text-faint);letter-spacing:.05em;margin-bottom:8px;
252
+ font-family:var(--mono);font-size:11px;font-weight:600;text-transform:uppercase;
253
+ color:var(--text-faint);letter-spacing:.06em;margin-bottom:8px;
228
254
  }
229
255
  .toc-link{
230
- display:block;padding:2px 0 2px 12px;border-left:2px solid transparent;
231
- font-size:12px;color:var(--text-faint);line-height:1.6;transition:.1s;
256
+ display:block;padding:3px 0 3px 14px;border-left:2px solid transparent;
257
+ font-size:12px;color:var(--text-faint);line-height:1.6;transition:all .12s;
232
258
  }
233
- .toc-link:hover{color:var(--accent);border-color:var(--accent2);text-decoration:none}
234
- .toc-link.active{color:var(--accent);border-color:var(--accent)}
235
- .toc-h3{padding-left:20px;font-size:11px}
259
+ .toc-link:hover{color:var(--accent);border-color:var(--accent2);text-decoration:none;transform:translateX(2px)}
260
+ .toc-link.active{color:var(--accent);border-color:var(--accent);font-weight:500}
261
+ .toc-h3{padding-left:24px;font-size:11px}
236
262
 
237
263
  /* ── breadcrumbs ── */
238
264
  .breadcrumbs{
239
- font-size:13px;color:var(--text-faint);margin-bottom:24px;
265
+ font-size:13px;color:var(--text-faint);margin-bottom:28px;
266
+ padding:8px 0;
240
267
  }
241
- .breadcrumbs a{color:var(--text-faint)}
268
+ .breadcrumbs a{color:var(--text-faint);transition:all .12s}
242
269
  .breadcrumbs a:hover{color:var(--accent)}
243
- .breadcrumbs .sep{margin:0 6px}
270
+ .breadcrumbs .sep{margin:0 6px;opacity:.6}
244
271
 
245
272
  /* ── headings ── */
246
273
  h1{
247
- font-family:var(--mono);font-size:28px;font-weight:700;
248
- margin-bottom:8px;color:var(--text);
274
+ font-family:var(--mono);font-size:30px;font-weight:700;
275
+ margin-bottom:10px;color:var(--text);
276
+ letter-spacing:-0.02em;
249
277
  }
250
278
  h2{
251
- font-family:var(--mono);font-size:18px;font-weight:600;
252
- margin:40px 0 16px;color:var(--text);
253
- padding-bottom:6px;border-bottom:1px solid var(--border);
254
- }
255
- h3{font-size:15px;font-weight:600;margin:24px 0 8px;color:var(--text)}
256
- p{color:var(--text-dim);margin-bottom:12px;line-height:1.7}
257
- .sub{color:var(--text-dim);margin-bottom:24px}
279
+ font-family:var(--mono);font-size:20px;font-weight:600;
280
+ margin:48px 0 18px;color:var(--text);
281
+ padding-bottom:8px;border-bottom:1px solid var(--border);
282
+ letter-spacing:-0.01em;
283
+ }
284
+ h3{font-size:16px;font-weight:600;margin:28px 0 10px;color:var(--text)}
285
+ p{color:var(--text-dim);margin-bottom:14px;line-height:1.8}
286
+ .sub{color:var(--text-dim);margin-bottom:28px;font-size:16px}
258
287
 
259
288
  /* ── hero ── */
260
- .hero{padding:48px 0 32px;text-align:center}
261
- .hero h1{font-size:36px;margin-bottom:12px}
262
- .hero .hl{background:linear-gradient(135deg,#7c3aed,#a78bfa);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
263
- .hero p{max-width:560px;margin:0 auto 20px;font-size:16px}
264
- .hero-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
289
+ .hero{
290
+ padding:56px 0 40px;
291
+ text-align:center;
292
+ position:relative;
293
+ overflow:hidden;
294
+ }
295
+ .hero::before{
296
+ content:'';
297
+ position:absolute;
298
+ top:-50%;left:-50%;right:-50%;bottom:-50%;
299
+ background:radial-gradient(ellipse at 50% 0%,rgba(124,58,237,.08) 0%,transparent 60%),
300
+ radial-gradient(ellipse at 80% 20%,rgba(167,139,250,.06) 0%,transparent 50%);
301
+ pointer-events:none;
302
+ z-index:0;
303
+ }
304
+ .hero > *{position:relative;z-index:1}
305
+ .hero h1{font-size:40px;margin-bottom:14px;letter-spacing:-0.03em}
306
+ .hero .hl{
307
+ background:linear-gradient(135deg,#7c3aed,#a78bfa);
308
+ -webkit-background-clip:text;
309
+ -webkit-text-fill-color:transparent;
310
+ background-clip:text;
311
+ }
312
+ .hero p{max-width:580px;margin:0 auto 24px;font-size:17px;line-height:1.7}
313
+ .hero-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
265
314
 
266
315
  .badge{
267
316
  display:inline-flex;align-items:center;gap:6px;
268
- padding:3px 12px;border-radius:100px;
269
- font-family:var(--mono);font-size:11px;font-weight:500;
317
+ padding:4px 14px;border-radius:100px;
318
+ font-family:var(--mono);font-size:12px;font-weight:500;
270
319
  color:var(--accent);background:var(--bg-code);
271
- border:1px solid var(--border2);margin-bottom:20px;
320
+ border:1px solid var(--border2);margin-bottom:24px;
321
+ box-shadow:0 2px 8px rgba(124,58,237,.06);
322
+ }
323
+ .badge .dot{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:pulse 2s infinite}
324
+
325
+ @keyframes pulse{
326
+ 0%,100%{opacity:1}
327
+ 50%{opacity:.5}
272
328
  }
273
- .badge .dot{width:5px;height:5px;border-radius:50%;background:var(--accent)}
274
329
 
275
330
  .btn{
276
331
  display:inline-flex;align-items:center;gap:6px;
277
- padding:8px 18px;border-radius:6px;
278
- font-family:var(--mono);font-size:12px;font-weight:600;
332
+ padding:10px 20px;border-radius:var(--radius-sm);
333
+ font-family:var(--mono);font-size:13px;font-weight:600;
279
334
  border:1px solid var(--border);
280
- background:var(--bg);color:var(--text);
281
- cursor:pointer;transition:.15s;
335
+ background:var(--bg-card);color:var(--text);
336
+ cursor:pointer;transition:all .2s;
337
+ position:relative;
338
+ overflow:hidden;
282
339
  }
283
- .btn:hover{text-decoration:none;border-color:var(--border2)}
340
+ .btn:hover{text-decoration:none;transform:translateY(-2px);box-shadow:0 4px 12px var(--shadow)}
284
341
  .btn-p{
285
342
  background:var(--accent);color:#fff;border-color:var(--accent);
286
- box-shadow:0 3px 12px rgba(124,58,237,.2);
343
+ box-shadow:0 3px 14px rgba(124,58,237,.25);
287
344
  }
288
- .btn-p:hover{background:#6d28d9;color:#fff;border-color:#6d28d9;box-shadow:0 5px 18px rgba(124,58,237,.3);transform:translateY(-1px)}
345
+ .btn-p:hover{background:#6d28d9;color:#fff;border-color:#6d28d9;box-shadow:0 6px 20px rgba(124,58,237,.35);transform:translateY(-2px)}
289
346
  .btn-ghost{color:var(--text-dim);border-color:var(--border)}
290
- .btn-ghost:hover{color:var(--accent);border-color:var(--border2);background:var(--bg-code)}
347
+ .btn-ghost:hover{color:var(--accent);border-color:var(--border2);background:var(--bg-hover);transform:translateY(-2px)}
291
348
 
292
349
  /* ── stat cards ── */
293
- .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:32px 0}
350
+ .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:36px 0}
294
351
  .stat{
295
- text-align:center;padding:16px 8px;border-radius:8px;
352
+ text-align:center;padding:20px 10px;border-radius:var(--radius);
296
353
  background:var(--bg-card);border:1px solid var(--border);
297
- }
354
+ transition:all .2s;
355
+ position:relative;
356
+ overflow:hidden;
357
+ }
358
+ .stat::before{
359
+ content:'';
360
+ position:absolute;top:0;left:0;right:0;height:2px;
361
+ background:linear-gradient(90deg,var(--accent),var(--accent2));
362
+ opacity:0;transition:opacity .2s;
363
+ }
364
+ .stat:hover{border-color:var(--border2);box-shadow:0 6px 20px var(--shadow);transform:translateY(-3px)}
365
+ .stat:hover::before{opacity:1}
298
366
  .stat-num{
299
- font-family:var(--mono);font-size:24px;font-weight:700;
367
+ font-family:var(--mono);font-size:28px;font-weight:700;
300
368
  background:linear-gradient(135deg,#7c3aed,#a78bfa);
301
- -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
369
+ -webkit-background-clip:text;
370
+ -webkit-text-fill-color:transparent;
371
+ background-clip:text;
302
372
  line-height:1.2;
303
373
  }
304
- .stat-lbl{font-size:12px;color:var(--text-faint);font-weight:500;margin-top:2px}
374
+ .stat-lbl{font-size:13px;color:var(--text-faint);font-weight:500;margin-top:4px}
305
375
 
306
376
  /* ── grid cards ── */
307
- .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin:24px 0}
377
+ .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin:28px 0}
308
378
  .card{
309
- padding:20px;border-radius:8px;
379
+ padding:24px;border-radius:var(--radius);
310
380
  background:var(--bg-card);border:1px solid var(--border);
311
- transition:.15s;
312
- }
313
- .card:hover{border-color:var(--border2);box-shadow:0 4px 16px var(--shadow)}
314
- .card h3{font-family:var(--mono);font-size:13px;margin-bottom:6px;color:var(--accent)}
315
- .card p{font-size:13px}
381
+ transition:all .2s;
382
+ position:relative;
383
+ overflow:hidden;
384
+ }
385
+ .card::before{
386
+ content:'';
387
+ position:absolute;top:0;left:0;right:0;height:2px;
388
+ background:linear-gradient(90deg,var(--accent),var(--accent2));
389
+ opacity:0;transition:opacity .2s;
390
+ }
391
+ .card:hover{border-color:var(--border2);box-shadow:0 6px 24px var(--shadow);transform:translateY(-3px)}
392
+ .card:hover::before{opacity:1}
393
+ .card h3{font-family:var(--mono);font-size:14px;margin-bottom:8px;color:var(--accent);display:flex;align-items:center;gap:8px}
394
+ .card p{font-size:13px;line-height:1.6}
316
395
  .card .tag{
317
- display:inline-block;font-family:var(--mono);font-size:10px;
318
- padding:1px 7px;border-radius:3px;
396
+ display:inline-block;font-family:var(--mono);font-size:11px;
397
+ padding:2px 8px;border-radius:4px;
319
398
  background:var(--bg-code);color:var(--accent);
320
- border:1px solid var(--border2);margin:6px 2px 0 0;
399
+ border:1px solid var(--border2);margin:8px 4px 0 0;
400
+ font-weight:500;
401
+ }
402
+
403
+ /* ── card icons ── */
404
+ .card-icon{
405
+ width:32px;height:32px;border-radius:8px;
406
+ background:linear-gradient(135deg,rgba(124,58,237,.1),rgba(167,139,250,.1));
407
+ display:flex;align-items:center;justify-content:center;
408
+ font-size:16px;flex-shrink:0;
321
409
  }
322
410
 
323
411
  /* ── terminal mock ── */
324
412
  .term{
325
413
  background:var(--bg-code);border:1px solid var(--border2);
326
- border-radius:8px;overflow:hidden;margin:32px auto;
327
- max-width:660px;box-shadow:0 12px 40px var(--shadow);
414
+ border-radius:var(--radius);overflow:hidden;margin:36px auto;
415
+ max-width:680px;box-shadow:0 12px 40px var(--shadow),0 0 0 1px rgba(124,58,237,.05);
416
+ position:relative;
417
+ }
418
+ .term::after{
419
+ content:'';
420
+ position:absolute;bottom:0;left:0;right:0;height:40px;
421
+ background:linear-gradient(to bottom,transparent,var(--bg-code));
422
+ pointer-events:none;
328
423
  }
329
424
  .term-bar{
330
- display:flex;align-items:center;gap:6px;
331
- padding:10px 14px;background:rgba(124,58,237,.03);
425
+ display:flex;align-items:center;gap:8px;
426
+ padding:12px 16px;background:rgba(124,58,237,.04);
332
427
  border-bottom:1px solid var(--border2);
333
428
  }
334
- .term-dot{width:8px;height:8px;border-radius:50%;background:#ddd}
429
+ .term-dot{width:10px;height:10px;border-radius:50%;box-shadow:0 0 6px rgba(0,0,0,.1)}
335
430
  .term-dot:nth-child(1){background:#ff5f56}
336
431
  .term-dot:nth-child(2){background:#ffbd2e}
337
432
  .term-dot:nth-child(3){background:#27c93f}
338
- .term-title{font-family:var(--mono);font-size:11px;color:var(--text-faint);margin-left:6px}
433
+ .term-title{font-family:var(--mono);font-size:12px;color:var(--text-faint);margin-left:6px;font-weight:500}
339
434
  .term-body{
340
- padding:14px;font-family:var(--mono);font-size:12px;line-height:1.7;
435
+ padding:16px;font-family:var(--mono);font-size:13px;line-height:1.8;
341
436
  color:var(--text);overflow-x:auto;white-space:pre;
437
+ min-height:200px;
342
438
  }
343
439
  .term-body .p{color:var(--accent);font-weight:600}
344
440
  .term-body .d{color:var(--text-faint)}
345
441
  .term-body .h{color:var(--accent)}
442
+ .term-cursor{display:inline-block;width:8px;height:16px;background:var(--accent);animation:cursor-blink 1s infinite;vertical-align:middle;margin-left:2px}
443
+ @keyframes cursor-blink{
444
+ 0%,100%{opacity:1}
445
+ 50%{opacity:0}
446
+ }
346
447
 
347
448
  /* ── table ── */
348
- .table-wrap{overflow-x:auto;margin:16px 0;border-radius:6px;border:1px solid var(--border)}
449
+ .table-wrap{overflow-x:auto;margin:20px 0;border-radius:var(--radius-sm);border:1px solid var(--border);box-shadow:0 2px 8px rgba(0,0,0,.03)}
349
450
  table{width:100%;border-collapse:collapse;font-size:13px}
350
451
  th{
351
- font-family:var(--mono);font-size:10px;font-weight:600;text-transform:uppercase;
352
- text-align:left;padding:8px 12px;letter-spacing:.05em;
452
+ font-family:var(--mono);font-size:11px;font-weight:600;text-transform:uppercase;
453
+ text-align:left;padding:10px 14px;letter-spacing:.06em;
353
454
  color:var(--accent);background:var(--bg-code);
354
455
  border-bottom:1px solid var(--border);
456
+ white-space:nowrap;
355
457
  }
356
- td{padding:7px 12px;border-bottom:1px solid var(--border);color:var(--text-dim);vertical-align:top}
458
+ td{padding:10px 14px;border-bottom:1px solid var(--border);color:var(--text-dim);vertical-align:top;line-height:1.6}
357
459
  tr:last-child td{border:none}
358
- tr:hover td{background:rgba(124,58,237,.02)}
460
+ tr:hover td{background:rgba(124,58,237,.03)}
359
461
 
360
462
  /* ── code blocks ── */
361
- .code-block-wrap{margin:16px 0;border-radius:6px;border:1px solid var(--border);overflow:hidden}
463
+ .code-block-wrap{margin:20px 0;border-radius:var(--radius-sm);border:1px solid var(--border);overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.03)}
362
464
  .code-block-header{
363
465
  display:flex;justify-content:space-between;align-items:center;
364
- padding:6px 10px;background:var(--bg-card);
365
- border-bottom:1px solid var(--border);font-size:11px;color:var(--text-faint);
366
- font-family:var(--mono);
466
+ padding:8px 12px;background:var(--bg-card);
467
+ border-bottom:1px solid var(--border);font-size:12px;color:var(--text-faint);
468
+ font-family:var(--mono);font-weight:500;
367
469
  }
368
- .code-block-wrap pre{margin:0;border:none;border-radius:0}
470
+ .code-block-wrap pre{margin:0;border:none;border-radius:0;padding:14px 16px;font-size:13px;line-height:1.7}
369
471
  .copy-btn{
370
472
  background:none;border:1px solid var(--border);border-radius:4px;
371
- color:var(--text-faint);font-size:10px;padding:2px 8px;cursor:pointer;font-family:var(--mono);transition:.1s;
473
+ color:var(--text-faint);font-size:11px;padding:3px 10px;cursor:pointer;font-family:var(--mono);transition:all .15s;
372
474
  }
373
475
  .copy-btn:hover{background:var(--bg-hover);color:var(--accent);border-color:var(--accent2)}
374
476
  .copy-btn.copied{background:var(--bg-code);color:var(--accent);border-color:var(--accent)}
375
477
 
478
+ /* ── back to top ── */
479
+ .back-to-top{
480
+ position:fixed;bottom:24px;right:24px;
481
+ width:40px;height:40px;border-radius:50%;
482
+ background:var(--accent);color:#fff;border:none;
483
+ cursor:pointer;opacity:0;visibility:hidden;
484
+ transition:all .3s;z-index:80;
485
+ display:flex;align-items:center;justify-content:center;
486
+ font-size:18px;box-shadow:0 4px 12px rgba(124,58,237,.3);
487
+ }
488
+ .back-to-top.visible{opacity:1;visibility:visible}
489
+ .back-to-top:hover{background:#6d28d9;transform:translateY(-2px);box-shadow:0 6px 16px rgba(124,58,237,.4)}
490
+
376
491
  /* ── language toggle (kept for backward compat) ── */
377
492
  .lang-select{display:none}
378
493
 
379
494
  /* ── misc ── */
380
- hr{border:none;border-top:1px solid var(--border);margin:40px 0}
495
+ hr{border:none;border-top:1px solid var(--border);margin:48px 0}
381
496
  .footer{
382
- margin-top:60px;padding-top:20px;border-top:1px solid var(--border);
497
+ margin-top:60px;padding-top:24px;border-top:1px solid var(--border);
383
498
  display:flex;justify-content:space-between;align-items:center;gap:16px;
384
- font-size:12px;color:var(--text-faint);flex-wrap:wrap;
499
+ font-size:13px;color:var(--text-faint);flex-wrap:wrap;
385
500
  }
386
501
  .footer-links{display:flex;gap:16px}
387
- .footer-links a{color:var(--text-faint);font-size:12px}
502
+ .footer-links a{color:var(--text-faint);transition:all .12s}
388
503
  .footer-links a:hover{color:var(--accent)}
389
504
 
390
- .menu-btn{display:none;width:32px;height:32px;border:1px solid var(--border);border-radius:5px;background:none;cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:4px;margin-left:auto}
391
- .menu-btn span{display:block;width:16px;height:2px;background:var(--text-dim);border-radius:2px}
392
- .sidebar-overlay{display:none}
393
-
394
505
  /* ── responsive ── */
395
506
  @media(max-width:900px){
396
507
  .sidebar{display:none}
@@ -400,12 +511,14 @@ hr{border:none;border-top:1px solid var(--border);margin:40px 0}
400
511
  .menu-btn{display:flex}
401
512
  .stats{grid-template-columns:repeat(2,1fr)}
402
513
  .grid{grid-template-columns:1fr}
403
- .hero h1{font-size:26px}
514
+ .hero h1{font-size:28px}
515
+ .hero{padding:36px 0 28px}
516
+ .hero p{font-size:15px}
404
517
 
405
518
  .sidebar.open{
406
519
  display:block;position:fixed;top:var(--header-h);left:0;right:0;bottom:0;
407
520
  width:auto;z-index:200;background:var(--bg);padding:24px;
408
- border-right:none;animation:slideIn .15s ease-out;
521
+ border-right:none;animation:slideIn .2s ease-out;
409
522
  }
410
523
  .sidebar.open .header-search{
411
524
  display:block;margin:0 0 16px;position:static;
@@ -420,6 +533,13 @@ hr{border:none;border-top:1px solid var(--border);margin:40px 0}
420
533
  }
421
534
 
422
535
  @keyframes slideIn{
423
- from{transform:translateX(-100%)}
424
- to{transform:translateX(0)}
536
+ from{transform:translateX(-100%);opacity:0}
537
+ to{transform:translateX(0);opacity:1}
538
+ }
539
+
540
+ /* ── print ── */
541
+ @media print{
542
+ .header,.sidebar,.toc-sidebar,.back-to-top{display:none}
543
+ .content-wrap{margin-left:0}
544
+ .content{padding:0}
425
545
  }