@a9i5k4/dsh-auto-memory 3.1.4 → 3.1.5
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.
- package/docs/CONTRIBUTORS.html +966 -471
- package/docs/M6-CONTRACT.md +1 -1
- package/docs/landing/index.html +1178 -1624
- package/lib/activation-inbox.js +35 -5
- package/lib/client.js +14 -1
- package/package.json +1 -1
package/docs/CONTRIBUTORS.html
CHANGED
|
@@ -1,471 +1,966 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<!-- ============================================================
|
|
3
|
-
dsh-auto-memory · 贡献者与赞助 (Contributors & Sponsors)
|
|
4
|
-
单文件零外部依赖;与 docs/promo/homepage.html 同一套 liquid-glass 暗色主题。
|
|
5
|
-
数据来源:GitHub API issues?state=all
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<
|
|
9
|
-
<
|
|
10
|
-
<meta
|
|
11
|
-
<
|
|
12
|
-
<
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
--
|
|
16
|
-
--
|
|
17
|
-
--glass
|
|
18
|
-
--glass-
|
|
19
|
-
--
|
|
20
|
-
--txt
|
|
21
|
-
--
|
|
22
|
-
--
|
|
23
|
-
--
|
|
24
|
-
--
|
|
25
|
-
--
|
|
26
|
-
--
|
|
27
|
-
--
|
|
28
|
-
--
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
body {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
radial-gradient(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
.hero
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
.card
|
|
92
|
-
.card
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
.card .who
|
|
96
|
-
.card .who a
|
|
97
|
-
.card .
|
|
98
|
-
.card .
|
|
99
|
-
.card .
|
|
100
|
-
.card .refs
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
.card .refs a
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
.chip
|
|
118
|
-
.chip
|
|
119
|
-
.chip .
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
.sponsor
|
|
135
|
-
.sponsor h3
|
|
136
|
-
.sponsor h3 a
|
|
137
|
-
.sponsor
|
|
138
|
-
.sponsor
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
.step
|
|
152
|
-
.step
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
footer a
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
.lang
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
.
|
|
172
|
-
.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
<
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
<
|
|
396
|
-
<div class="
|
|
397
|
-
<div class="
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
</
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
<
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
<
|
|
419
|
-
<
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
</
|
|
451
|
-
|
|
452
|
-
<
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
</
|
|
470
|
-
</
|
|
471
|
-
</
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<!-- ============================================================
|
|
3
|
+
dsh-auto-memory · 贡献者与赞助 (Contributors & Sponsors)
|
|
4
|
+
单文件零外部依赖;与 docs/promo/homepage.html 同一套 liquid-glass 暗色主题。
|
|
5
|
+
数据来源:GitHub API issues?state=all + pulls?state=closed (2026-09-22 快照:
|
|
6
|
+
已合并 PR 41 · Issue 82 · 外部贡献者 19)
|
|
7
|
+
============================================================= -->
|
|
8
|
+
<html lang="zh-CN">
|
|
9
|
+
<head>
|
|
10
|
+
<meta charset="UTF-8">
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
12
|
+
<title>贡献者与赞助 · dsh-auto-memory</title>
|
|
13
|
+
<style>
|
|
14
|
+
:root {
|
|
15
|
+
--bg0: #060913;
|
|
16
|
+
--bg1: #0b1020;
|
|
17
|
+
--glass: rgba(255, 255, 255, 0.045);
|
|
18
|
+
--glass-2: rgba(255, 255, 255, 0.075);
|
|
19
|
+
--glass-border: rgba(255, 255, 255, 0.10);
|
|
20
|
+
--txt: #e8ecf6;
|
|
21
|
+
--txt-dim: #93a0bd;
|
|
22
|
+
--accent: #5b8cff;
|
|
23
|
+
--accent2: #8f6bff;
|
|
24
|
+
--accent3: #38d2c2;
|
|
25
|
+
--ok: #3ecf8e;
|
|
26
|
+
--warn: #f0b34e;
|
|
27
|
+
--radius: 18px;
|
|
28
|
+
--font: "PingFang SC", "Microsoft YaHei", "Segoe UI", sans-serif;
|
|
29
|
+
--mono: "Cascadia Code", Consolas, monospace;
|
|
30
|
+
}
|
|
31
|
+
* { box-sizing: border-box; }
|
|
32
|
+
html, body { margin: 0; padding: 0; }
|
|
33
|
+
body {
|
|
34
|
+
background:
|
|
35
|
+
radial-gradient(1100px 620px at 12% -8%, rgba(91, 140, 255, .20), transparent 60%),
|
|
36
|
+
radial-gradient(900px 560px at 88% 6%, rgba(143, 107, 255, .17), transparent 62%),
|
|
37
|
+
linear-gradient(180deg, var(--bg0), var(--bg1) 45%, var(--bg0));
|
|
38
|
+
color: var(--txt); font-family: var(--font);
|
|
39
|
+
line-height: 1.7; font-size: 15px; min-height: 100vh;
|
|
40
|
+
}
|
|
41
|
+
.wrap { max-width: 1080px; margin: 0 auto; padding: 56px 22px 80px; }
|
|
42
|
+
|
|
43
|
+
/* ── Hero ── */
|
|
44
|
+
.hero { text-align: center; margin-bottom: 52px; }
|
|
45
|
+
.hero .badge {
|
|
46
|
+
display: inline-block; padding: 5px 14px; border-radius: 999px;
|
|
47
|
+
background: var(--glass); border: 1px solid var(--glass-border);
|
|
48
|
+
color: var(--txt-dim); font-size: 12.5px; letter-spacing: .06em;
|
|
49
|
+
text-transform: uppercase; margin-bottom: 18px;
|
|
50
|
+
}
|
|
51
|
+
.hero h1 {
|
|
52
|
+
font-size: 40px; line-height: 1.24; margin: 0 0 14px;
|
|
53
|
+
background: linear-gradient(100deg, var(--accent), var(--accent2) 52%, var(--accent3));
|
|
54
|
+
-webkit-background-clip: text; background-clip: text; color: transparent;
|
|
55
|
+
}
|
|
56
|
+
.hero p { color: var(--txt-dim); font-size: 16px; margin: 0 auto; max-width: 660px; }
|
|
57
|
+
|
|
58
|
+
/* ── 统计带 ── */
|
|
59
|
+
.stats {
|
|
60
|
+
display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
|
61
|
+
gap: 14px; margin: 38px 0 56px;
|
|
62
|
+
}
|
|
63
|
+
.stat {
|
|
64
|
+
background: var(--glass); border: 1px solid var(--glass-border);
|
|
65
|
+
border-radius: var(--radius); padding: 20px 18px; text-align: center;
|
|
66
|
+
backdrop-filter: blur(14px);
|
|
67
|
+
}
|
|
68
|
+
.stat b { display: block; font-size: 30px; line-height: 1.1;
|
|
69
|
+
background: linear-gradient(100deg, var(--accent), var(--accent3));
|
|
70
|
+
-webkit-background-clip: text; background-clip: text; color: transparent; }
|
|
71
|
+
.stat span { color: var(--txt-dim); font-size: 12.5px; }
|
|
72
|
+
|
|
73
|
+
/* ── 段落标题 ── */
|
|
74
|
+
h2.sec {
|
|
75
|
+
font-size: 23px; margin: 0 0 8px; display: flex; align-items: center; gap: 10px;
|
|
76
|
+
}
|
|
77
|
+
h2.sec::before {
|
|
78
|
+
content: ''; width: 4px; height: 22px; border-radius: 2px;
|
|
79
|
+
background: linear-gradient(180deg, var(--accent), var(--accent2));
|
|
80
|
+
}
|
|
81
|
+
.sec-sub { color: var(--txt-dim); font-size: 13.5px; margin: 0 0 24px; }
|
|
82
|
+
|
|
83
|
+
/* ── 贡献者卡 ── */
|
|
84
|
+
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(310px, 1fr)); gap: 16px; }
|
|
85
|
+
.card {
|
|
86
|
+
background: var(--glass); border: 1px solid var(--glass-border);
|
|
87
|
+
border-radius: var(--radius); padding: 20px; backdrop-filter: blur(14px);
|
|
88
|
+
transition: transform .16s ease, border-color .16s ease, background .16s ease;
|
|
89
|
+
display: flex; flex-direction: column; gap: 10px;
|
|
90
|
+
}
|
|
91
|
+
.card:hover { transform: translateY(-3px); border-color: rgba(91,140,255,.5); background: var(--glass-2); }
|
|
92
|
+
.card .top { display: flex; align-items: center; gap: 12px; }
|
|
93
|
+
.card img { width: 46px; height: 46px; border-radius: 50%; flex-shrink: 0;
|
|
94
|
+
border: 2px solid var(--glass-border); background: rgba(255,255,255,.06); }
|
|
95
|
+
.card .who { min-width: 0; }
|
|
96
|
+
.card .who a { color: var(--txt); text-decoration: none; font-weight: 700; font-size: 15.5px; }
|
|
97
|
+
.card .who a:hover { color: var(--accent); }
|
|
98
|
+
.card .tier { font-size: 11.5px; color: var(--txt-dim); }
|
|
99
|
+
.card .desc { color: var(--txt-dim); font-size: 13.5px; margin: 0; }
|
|
100
|
+
.card .refs { display: flex; flex-wrap: wrap; gap: 6px; margin-top: auto; }
|
|
101
|
+
.card .refs a {
|
|
102
|
+
font-family: var(--mono); font-size: 11px; padding: 2px 8px; border-radius: 6px;
|
|
103
|
+
background: rgba(91,140,255,.14); border: 1px solid rgba(91,140,255,.28);
|
|
104
|
+
color: #a9c2ff; text-decoration: none;
|
|
105
|
+
}
|
|
106
|
+
.card .refs a.pr { background: rgba(143,107,255,.15); border-color: rgba(143,107,255,.32); color: #c6b2ff; }
|
|
107
|
+
.card .refs a:hover { filter: brightness(1.25); }
|
|
108
|
+
|
|
109
|
+
/* ── 紧凑列表(单人 issue) ── */
|
|
110
|
+
.compact { display: grid; grid-template-columns: repeat(auto-fill, minmax(232px, 1fr)); gap: 11px; }
|
|
111
|
+
.chip {
|
|
112
|
+
display: flex; align-items: center; gap: 10px; padding: 11px 14px;
|
|
113
|
+
background: var(--glass); border: 1px solid var(--glass-border);
|
|
114
|
+
border-radius: 12px; text-decoration: none; color: var(--txt);
|
|
115
|
+
transition: border-color .15s ease, background .15s ease;
|
|
116
|
+
}
|
|
117
|
+
.chip:hover { border-color: rgba(91,140,255,.5); background: var(--glass-2); }
|
|
118
|
+
.chip img { width: 28px; height: 28px; border-radius: 50%; flex-shrink: 0; background: rgba(255,255,255,.06); }
|
|
119
|
+
.chip .n { font-weight: 600; font-size: 13.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
120
|
+
.chip .r { font-family: var(--mono); font-size: 11px; color: var(--txt-dim); margin-left: auto; flex-shrink: 0; }
|
|
121
|
+
|
|
122
|
+
/* ── 赞助卡 ── */
|
|
123
|
+
.sponsor {
|
|
124
|
+
background: linear-gradient(135deg, rgba(91,140,255,.14), rgba(143,107,255,.12));
|
|
125
|
+
border: 1px solid rgba(91,140,255,.34); border-radius: var(--radius);
|
|
126
|
+
padding: 28px; display: flex; align-items: center; gap: 22px; flex-wrap: wrap;
|
|
127
|
+
}
|
|
128
|
+
.sponsor .mark {
|
|
129
|
+
width: 62px; height: 62px; border-radius: 15px; flex-shrink: 0;
|
|
130
|
+
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
|
131
|
+
display: flex; align-items: center; justify-content: center;
|
|
132
|
+
font-size: 25px; font-weight: 800; color: #fff; letter-spacing: -.02em;
|
|
133
|
+
}
|
|
134
|
+
.sponsor .body { flex: 1; min-width: 240px; }
|
|
135
|
+
.sponsor h3 { margin: 0 0 6px; font-size: 20px; }
|
|
136
|
+
.sponsor h3 a { color: var(--txt); text-decoration: none; }
|
|
137
|
+
.sponsor h3 a:hover { color: var(--accent3); }
|
|
138
|
+
.sponsor p { margin: 0; color: var(--txt-dim); font-size: 14px; }
|
|
139
|
+
.sponsor .tag {
|
|
140
|
+
display: inline-block; margin-top: 10px; padding: 3px 11px; border-radius: 999px;
|
|
141
|
+
background: rgba(62,207,142,.16); border: 1px solid rgba(62,207,142,.34);
|
|
142
|
+
color: var(--ok); font-size: 11.5px;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* ── 参与方式 ── */
|
|
146
|
+
.steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; }
|
|
147
|
+
.step {
|
|
148
|
+
background: var(--glass); border: 1px solid var(--glass-border);
|
|
149
|
+
border-radius: 14px; padding: 20px;
|
|
150
|
+
}
|
|
151
|
+
.step .k { font-family: var(--mono); font-size: 11.5px; color: var(--accent3); margin-bottom: 8px; }
|
|
152
|
+
.step b { display: block; margin-bottom: 6px; font-size: 15px; }
|
|
153
|
+
.step p { margin: 0; color: var(--txt-dim); font-size: 13px; }
|
|
154
|
+
|
|
155
|
+
footer { margin-top: 66px; padding-top: 26px; border-top: 1px solid var(--glass-border);
|
|
156
|
+
text-align: center; color: var(--txt-dim); font-size: 13px; }
|
|
157
|
+
footer a { color: var(--accent); text-decoration: none; }
|
|
158
|
+
footer a:hover { text-decoration: underline; }
|
|
159
|
+
|
|
160
|
+
/* 语言切换 */
|
|
161
|
+
.lang { display: flex; justify-content: center; gap: 8px; margin-top: 22px; }
|
|
162
|
+
.lang button {
|
|
163
|
+
padding: 6px 18px; border-radius: 999px; cursor: pointer; font-family: inherit;
|
|
164
|
+
font-size: 13px; background: var(--glass); border: 1px solid var(--glass-border);
|
|
165
|
+
color: var(--txt-dim); transition: all .15s ease;
|
|
166
|
+
}
|
|
167
|
+
.lang button.on { background: rgba(91,140,255,.20); border-color: rgba(91,140,255,.5); color: var(--txt); }
|
|
168
|
+
body[data-lang="zh"] .en, body[data-lang="en"] .zh { display: none; }
|
|
169
|
+
|
|
170
|
+
@media (max-width: 640px) {
|
|
171
|
+
.hero h1 { font-size: 29px; }
|
|
172
|
+
.wrap { padding: 38px 16px 60px; }
|
|
173
|
+
.sponsor { padding: 22px; }
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
/* ===== 动效层(内联;语料见本地 transitions-motion skill)===== */
|
|
178
|
+
/* ============================================================
|
|
179
|
+
动效层 — dsh-auto-memory 贡献者页
|
|
180
|
+
语料来源:本地 transitions-motion skill(transitions.dev 43 条)
|
|
181
|
+
逐字抄改:texts-reveal / spinning-counter / 3d-tilt / avatar-group-hover
|
|
182
|
+
按 token 自设计:标题扫光、分区入场(语料无对应条目,已在注释标注)
|
|
183
|
+
判据:按「用途」选 token,不按数值就近。所有新增动效受 reduced-motion 闸门约束。
|
|
184
|
+
============================================================ */
|
|
185
|
+
|
|
186
|
+
:root {
|
|
187
|
+
/* ── 时长 ── */
|
|
188
|
+
--duration-stagger: 40ms;
|
|
189
|
+
--duration-micro: 80ms;
|
|
190
|
+
--duration-quick: 150ms;
|
|
191
|
+
--duration-fast: 250ms;
|
|
192
|
+
--duration-medium: 350ms;
|
|
193
|
+
--duration-slow: 400ms;
|
|
194
|
+
--duration-very-slow: 500ms;
|
|
195
|
+
/* ── 缓动 ── */
|
|
196
|
+
--ease-smooth-out: cubic-bezier(0.22, 1, 0.36, 1);
|
|
197
|
+
--ease-in-out: ease-in-out;
|
|
198
|
+
--ease-out: ease-out;
|
|
199
|
+
--ease-linear: linear;
|
|
200
|
+
--ease-bounce: cubic-bezier(0.34, 1.36, 0.64, 1);
|
|
201
|
+
--ease-bounce-strong: cubic-bezier(0.34, 3.85, 0.64, 1);
|
|
202
|
+
/* ── 位移 ── */
|
|
203
|
+
--distance-micro: 4px;
|
|
204
|
+
--distance-small: 6px;
|
|
205
|
+
--distance-base: 8px;
|
|
206
|
+
--distance-medium: 12px;
|
|
207
|
+
--distance-large: 30px;
|
|
208
|
+
/* ── 缩放 ── */
|
|
209
|
+
--scale-large: 0.96;
|
|
210
|
+
--scale-medium: 0.97;
|
|
211
|
+
--scale-small: 0.98;
|
|
212
|
+
--scale-tiny: 0.99;
|
|
213
|
+
/* ── 模糊 ── */
|
|
214
|
+
--blur-small: 2px;
|
|
215
|
+
--blur-medium: 3px;
|
|
216
|
+
--blur-large: 8px;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* ── ① texts-reveal(逐字抄改:hero 文案错开升起)────────────
|
|
220
|
+
语料 slug=texts-reveal。原文案:headline + supporting line 带
|
|
221
|
+
错开模糊升起;退出与入场解耦,避免反向重播。 */
|
|
222
|
+
:root {
|
|
223
|
+
--stagger-dur: 500ms;
|
|
224
|
+
--stagger-distance: 12px;
|
|
225
|
+
--stagger-stagger: 40ms;
|
|
226
|
+
--stagger-blur: 3px;
|
|
227
|
+
--stagger-ease: cubic-bezier(0.22, 1, 0.36, 1);
|
|
228
|
+
}
|
|
229
|
+
/* 初始隐藏态只在 JS 可用时生效(dam-js),避免脚本失败导致首屏空白 */
|
|
230
|
+
.dam-js .t-stagger-line {
|
|
231
|
+
opacity: 0;
|
|
232
|
+
transform: translateY(var(--stagger-distance));
|
|
233
|
+
filter: blur(var(--stagger-blur));
|
|
234
|
+
transition:
|
|
235
|
+
opacity var(--stagger-dur) var(--stagger-ease),
|
|
236
|
+
transform var(--stagger-dur) var(--stagger-ease),
|
|
237
|
+
filter var(--stagger-dur) var(--stagger-ease);
|
|
238
|
+
will-change: transform, opacity, filter;
|
|
239
|
+
}
|
|
240
|
+
.dam-js .t-stagger-line--2 { transition-delay: var(--stagger-stagger); }
|
|
241
|
+
.dam-js .t-stagger-line--3 { transition-delay: calc(var(--stagger-stagger) * 2); }
|
|
242
|
+
.dam-js .t-stagger-line--4 { transition-delay: calc(var(--stagger-stagger) * 3); }
|
|
243
|
+
.t-stagger.is-shown .t-stagger-line {
|
|
244
|
+
opacity: 1;
|
|
245
|
+
transform: translateY(0);
|
|
246
|
+
filter: blur(0);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* ── ② 统计数字计数滚动(★放弃卷轴重建,改为零结构改动)────────
|
|
250
|
+
语料 slug=spinning-counter 的配方是「每位数字一条 0-9 竖直卷轴 + 逐列
|
|
251
|
+
定位 + overflow 裁剪」。**在本页实测失败**:原页面 `.stat b` 自带
|
|
252
|
+
`background-clip:text; color:transparent` 渐变文字,卷轴需要的
|
|
253
|
+
「祖先渐变 + 子层裁剪 + 列级 overflow」与它反复冲突,实测结果是每格
|
|
254
|
+
只剩首位数字、且颜色发暗(截图:1 / 4 / 8,本应是 19 / 41 / 82)。
|
|
255
|
+
|
|
256
|
+
⇒ 改为**不碰 DOM 结构**的方案:`<b>` 元素连同它自己的渐变、字号、
|
|
257
|
+
布局**全部保持原页面原样**(页脚那个亮蓝 `1` 证明原样式渲染正常),
|
|
258
|
+
JS 只改它的 textContent 做 0→目标 的计数滚动。
|
|
259
|
+
这样零结构冲突,且数字始终走页面已验证的渐变规则。
|
|
260
|
+
|
|
261
|
+
唯一新增的样式是等宽数字,避免滚动时宽度跳动。 */
|
|
262
|
+
.stat b[data-reel] {
|
|
263
|
+
font-variant-numeric: tabular-nums;
|
|
264
|
+
font-feature-settings: "tnum" 1;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/* ── ③ 3d-tilt(逐字抄改:贡献者卡随指针倾斜 + 光标辉光)──────
|
|
268
|
+
语料 slug=3d-tilt。原文案:指针绑在**从不做变换的外层**
|
|
269
|
+
(.t-tilt)上;否则旋转后的边缘会滑出光标下方造成 hover 闪烁。 */
|
|
270
|
+
:root {
|
|
271
|
+
--tilt-perspective: 1000px;
|
|
272
|
+
--tilt-return: 1000ms;
|
|
273
|
+
--tilt-return-ease: cubic-bezier(0.22, 1, 0.36, 1);
|
|
274
|
+
--tilt-follow: 400ms;
|
|
275
|
+
--tilt-follow-ease: cubic-bezier(0.22, 1, 0.36, 1);
|
|
276
|
+
--tilt-glare-opacity: 0.32;
|
|
277
|
+
--tilt-glare-fade: 300ms;
|
|
278
|
+
--tilt-glare-ease: cubic-bezier(0.22, 1, 0.36, 1);
|
|
279
|
+
}
|
|
280
|
+
.t-tilt { position: relative; }
|
|
281
|
+
.card.t-tilt-card {
|
|
282
|
+
height: 100%;
|
|
283
|
+
transform:
|
|
284
|
+
perspective(var(--tilt-perspective))
|
|
285
|
+
rotateX(var(--tilt-rx, 0deg))
|
|
286
|
+
rotateY(var(--tilt-ry, 0deg));
|
|
287
|
+
transform-style: preserve-3d;
|
|
288
|
+
transition: transform var(--tilt-return) var(--tilt-return-ease);
|
|
289
|
+
will-change: transform;
|
|
290
|
+
}
|
|
291
|
+
.card.t-tilt-card.is-tilting {
|
|
292
|
+
transition: transform var(--tilt-follow) var(--tilt-follow-ease);
|
|
293
|
+
}
|
|
294
|
+
.t-tilt-glare {
|
|
295
|
+
position: absolute;
|
|
296
|
+
inset: 0;
|
|
297
|
+
border-radius: var(--radius);
|
|
298
|
+
pointer-events: none;
|
|
299
|
+
opacity: 0;
|
|
300
|
+
mix-blend-mode: screen;
|
|
301
|
+
background:
|
|
302
|
+
radial-gradient(circle 95px at var(--tilt-gx, 50%) var(--tilt-gy, 50%),
|
|
303
|
+
rgba(255,255,255,0.48), rgba(255,255,255,0.06) 52%, rgba(255,255,255,0) 84%),
|
|
304
|
+
radial-gradient(circle 200px at var(--tilt-gx, 50%) var(--tilt-gy, 50%),
|
|
305
|
+
rgba(255,255,255,0.22), rgba(255,255,255,0.04) 58%, rgba(255,255,255,0) 78%),
|
|
306
|
+
radial-gradient(circle 360px at var(--tilt-gx, 50%) var(--tilt-gy, 50%),
|
|
307
|
+
rgba(255,255,255,0.10), rgba(255,255,255,0) 88%);
|
|
308
|
+
transition: opacity var(--tilt-glare-fade) var(--tilt-glare-ease);
|
|
309
|
+
}
|
|
310
|
+
.t-tilt.is-hover .t-tilt-glare { opacity: var(--tilt-glare-opacity); }
|
|
311
|
+
|
|
312
|
+
/* ── ④ avatar-group-hover(逐字抄改:其他贡献者 chip 的梳齿交互)─
|
|
313
|
+
语料 slug=avatar-group-hover。原文案:hover 抬起该项,邻居按
|
|
314
|
+
幂衰减随之轻抬,离开时用回弹曲线归位;进场用干净 ease-in,
|
|
315
|
+
回位用弹性 ease-out。 */
|
|
316
|
+
:root {
|
|
317
|
+
--avatar-lift: -4px;
|
|
318
|
+
--avatar-dur: 320ms;
|
|
319
|
+
--avatar-scale: 1.05;
|
|
320
|
+
--avatar-falloff: 0.45;
|
|
321
|
+
--avatar-ease-in: cubic-bezier(0.22, 1, 0.36, 1);
|
|
322
|
+
--avatar-ease-out: cubic-bezier(0.34, 3.85, 0.64, 1);
|
|
323
|
+
}
|
|
324
|
+
.chip.t-avatar {
|
|
325
|
+
transform-origin: center;
|
|
326
|
+
/* translateY 放在 scale 之前,避免 scale 放大抬升位移 */
|
|
327
|
+
transform:
|
|
328
|
+
translateY(var(--shift, 0px))
|
|
329
|
+
scale(var(--scale-active, 1));
|
|
330
|
+
transition: transform var(--avatar-dur) var(--avatar-ease-in);
|
|
331
|
+
will-change: transform;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* ── ⑤ 标题扫光(自设计:语料无对应条目,按 token 手工设计)────
|
|
335
|
+
纯装饰性持续运动 ⇒ linear + 慢周期(对应 --ease-linear 的用途:
|
|
336
|
+
微光 / 持续加载)。只动 background-position,不触发重排。 */
|
|
337
|
+
.hero h1 { background-size: 220% 100%; }
|
|
338
|
+
@keyframes dam-hue-sweep {
|
|
339
|
+
0% { background-position: 0% 50%; }
|
|
340
|
+
50% { background-position: 100% 50%; }
|
|
341
|
+
100% { background-position: 0% 50%; }
|
|
342
|
+
}
|
|
343
|
+
.dam-js .hero h1 { animation: dam-hue-sweep 9s var(--ease-linear) infinite; }
|
|
344
|
+
|
|
345
|
+
/* ── ⑥ 分区入场(自设计:语料无对应条目,按 §1 位移/模糊刻度设计)─
|
|
346
|
+
用途「面板揭示」⇒ --duration-slow + --ease-smooth-out + --blur-small;
|
|
347
|
+
错开用 --duration-stagger,且封顶 6 项(总错开 ≤240ms,避免末项迟到)。 */
|
|
348
|
+
.dam-js .dam-reveal {
|
|
349
|
+
opacity: 0;
|
|
350
|
+
transform: translateY(var(--distance-medium));
|
|
351
|
+
filter: blur(var(--blur-small));
|
|
352
|
+
transition:
|
|
353
|
+
opacity var(--duration-slow) var(--ease-smooth-out),
|
|
354
|
+
transform var(--duration-slow) var(--ease-smooth-out),
|
|
355
|
+
filter var(--duration-slow) var(--ease-smooth-out);
|
|
356
|
+
transition-delay: calc(var(--duration-stagger) * var(--i, 0));
|
|
357
|
+
}
|
|
358
|
+
.dam-js .dam-reveal.is-in {
|
|
359
|
+
opacity: 1;
|
|
360
|
+
transform: translateY(0);
|
|
361
|
+
filter: blur(0);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/* ── ⑦ 全局 reduced-motion 闸门(每个条目自带,必须保留)──────── */
|
|
365
|
+
@media (prefers-reduced-motion: reduce) {
|
|
366
|
+
*,
|
|
367
|
+
*::before,
|
|
368
|
+
*::after {
|
|
369
|
+
animation-duration: 0.01ms !important;
|
|
370
|
+
animation-iteration-count: 1 !important;
|
|
371
|
+
transition-duration: 0.01ms !important;
|
|
372
|
+
scroll-behavior: auto !important;
|
|
373
|
+
}
|
|
374
|
+
.card.t-tilt-card { transform: none !important; }
|
|
375
|
+
.chip.t-avatar { transform: none !important; }
|
|
376
|
+
}
|
|
377
|
+
</style>
|
|
378
|
+
</head>
|
|
379
|
+
<body data-lang="zh">
|
|
380
|
+
<div class="wrap">
|
|
381
|
+
|
|
382
|
+
<!-- ══════════ Hero ══════════ -->
|
|
383
|
+
<header class="hero">
|
|
384
|
+
<div class="badge">Contributors & Sponsors</div>
|
|
385
|
+
<h1><span class="zh">一起把她养大的人</span><span class="en">The people who raised her</span></h1>
|
|
386
|
+
<p class="zh">dsh-auto-memory 从一个人的实验,长成了有人在用的工具。这页记录所有提过 issue、交过 PR、以及赞助过开发资源的人——名字和贡献都在这里。</p>
|
|
387
|
+
<p class="en">dsh-auto-memory grew from a solo experiment into something people actually use. This page credits everyone who filed an issue, sent a pull request, or sponsored the development resources.</p>
|
|
388
|
+
<div class="lang">
|
|
389
|
+
<button id="lb-zh" class="on" onclick="setLang('zh')">中文</button>
|
|
390
|
+
<button id="lb-en" onclick="setLang('en')">English</button>
|
|
391
|
+
</div>
|
|
392
|
+
</header>
|
|
393
|
+
|
|
394
|
+
<!-- ══════════ 统计带 ══════════ -->
|
|
395
|
+
<section class="stats">
|
|
396
|
+
<div class="stat"><b id="s-ppl" data-reel="19">19</b><span class="zh">外部贡献者</span><span class="en">contributors</span></div>
|
|
397
|
+
<div class="stat"><b id="s-pr" data-reel="41">41</b><span class="zh">已合并 Pull Request</span><span class="en">merged pull requests</span></div>
|
|
398
|
+
<div class="stat"><b id="s-iss" data-reel="82">82</b><span class="zh">Issue</span><span class="en">issues</span></div>
|
|
399
|
+
<div class="stat"><b>1</b><span class="zh">资源赞助方</span><span class="en">resource sponsor</span></div>
|
|
400
|
+
</section>
|
|
401
|
+
|
|
402
|
+
<!-- ══════════ 突出贡献者 ══════════ -->
|
|
403
|
+
<h2 class="sec"><span class="zh">突出贡献者</span><span class="en">Top contributors</span></h2>
|
|
404
|
+
<p class="sec-sub zh">按贡献条目数排序。每条都指向原始的 issue / PR。</p>
|
|
405
|
+
<p class="sec-sub en">Sorted by number of contributions. Every entry links back to the original issue or PR.</p>
|
|
406
|
+
|
|
407
|
+
<div class="grid">
|
|
408
|
+
|
|
409
|
+
<div class="card" style="grid-column: 1 / -1">
|
|
410
|
+
<div class="top">
|
|
411
|
+
<img src="https://github.com/Minervaowl7.png?size=92" alt="Minervaowl7" loading="lazy">
|
|
412
|
+
<div class="who">
|
|
413
|
+
<a href="https://github.com/Minervaowl7" target="_blank" rel="noopener">@Minervaowl7</a>
|
|
414
|
+
<div class="tier"><span class="zh">39 PR · 53 issue(共 92 条)</span><span class="en">39 PRs · 53 issues (92 total)</span></div>
|
|
415
|
+
</div>
|
|
416
|
+
</div>
|
|
417
|
+
<p class="desc zh">贡献量最大,覆盖面也最广:语义索引同步卡死自愈、记忆搬包与安全导入;自动沉淀 100% 失效、水位虚高与接续时机、跨工作区与 per-runtime 隔离等稳定性根因;python 模型下载链路重写与坏产物清除;打包卫生、webhook 默认 fail-closed、CI 全量门禁恢复;并补齐数十条回归守卫。</p>
|
|
418
|
+
<p class="desc en">The most prolific contributor, and the broadest in scope: self-healing for a permanently stuck semantic-index sync, memory packing and safe import; root causes behind auto-consolidation failing 100% of the time, inflated context-watermark readings, continuation timing, and cross-workspace / per-runtime isolation; a rewritten python model-download chain with bad-artifact cleanup; packaging hygiene, webhook defaults switched to fail-closed, and restoration of the full CI gate — plus dozens of new regression guards.</p>
|
|
419
|
+
<div class="refs">
|
|
420
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/129">PR #129</a>
|
|
421
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/128">PR #128</a>
|
|
422
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/126">PR #126</a>
|
|
423
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/125">PR #125</a>
|
|
424
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/124">PR #124</a>
|
|
425
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/123">PR #123</a>
|
|
426
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/122">PR #122</a>
|
|
427
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/121">PR #121</a>
|
|
428
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/120">PR #120</a>
|
|
429
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/119">PR #119</a>
|
|
430
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/118">PR #118</a>
|
|
431
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/101">PR #101</a>
|
|
432
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/100">PR #100</a>
|
|
433
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/99">PR #99</a>
|
|
434
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/98">PR #98</a>
|
|
435
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/97">PR #97</a>
|
|
436
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/96">PR #96</a>
|
|
437
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/95">PR #95</a>
|
|
438
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/81">PR #81</a>
|
|
439
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/80">PR #80</a>
|
|
440
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/79">PR #79</a>
|
|
441
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/78">PR #78</a>
|
|
442
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/77">PR #77</a>
|
|
443
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/62">PR #62</a>
|
|
444
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/53">PR #53</a>
|
|
445
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/50">PR #50</a>
|
|
446
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/49">PR #49</a>
|
|
447
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/46">PR #46</a>
|
|
448
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/44">PR #44</a>
|
|
449
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/37">PR #37</a>
|
|
450
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/36">PR #36</a>
|
|
451
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/34">PR #34</a>
|
|
452
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/33">PR #33</a>
|
|
453
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/32">PR #32</a>
|
|
454
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/31">PR #31</a>
|
|
455
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/27">PR #27</a>
|
|
456
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/25">PR #25</a>
|
|
457
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/23">PR #23</a>
|
|
458
|
+
<a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/17">PR #17</a>
|
|
459
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/117">#117</a>
|
|
460
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/116">#116</a>
|
|
461
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/115">#115</a>
|
|
462
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/114">#114</a>
|
|
463
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/113">#113</a>
|
|
464
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/112">#112</a>
|
|
465
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/111">#111</a>
|
|
466
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/110">#110</a>
|
|
467
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/109">#109</a>
|
|
468
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/108">#108</a>
|
|
469
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/107">#107</a>
|
|
470
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/106">#106</a>
|
|
471
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/105">#105</a>
|
|
472
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/104">#104</a>
|
|
473
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/103">#103</a>
|
|
474
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/94">#94</a>
|
|
475
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/93">#93</a>
|
|
476
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/92">#92</a>
|
|
477
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/91">#91</a>
|
|
478
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/90">#90</a>
|
|
479
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/89">#89</a>
|
|
480
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/88">#88</a>
|
|
481
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/86">#86</a>
|
|
482
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/85">#85</a>
|
|
483
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/84">#84</a>
|
|
484
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/83">#83</a>
|
|
485
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/82">#82</a>
|
|
486
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/76">#76</a>
|
|
487
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/75">#75</a>
|
|
488
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/74">#74</a>
|
|
489
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/73">#73</a>
|
|
490
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/72">#72</a>
|
|
491
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/71">#71</a>
|
|
492
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/70">#70</a>
|
|
493
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/69">#69</a>
|
|
494
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/68">#68</a>
|
|
495
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/67">#67</a>
|
|
496
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/66">#66</a>
|
|
497
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/65">#65</a>
|
|
498
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/64">#64</a>
|
|
499
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/63">#63</a>
|
|
500
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/58">#58</a>
|
|
501
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/57">#57</a>
|
|
502
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/56">#56</a>
|
|
503
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/55">#55</a>
|
|
504
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/52">#52</a>
|
|
505
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/51">#51</a>
|
|
506
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/48">#48</a>
|
|
507
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/35">#35</a>
|
|
508
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/28">#28</a>
|
|
509
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/24">#24</a>
|
|
510
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/22">#22</a>
|
|
511
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/16">#16</a>
|
|
512
|
+
</div>
|
|
513
|
+
</div>
|
|
514
|
+
|
|
515
|
+
<div class="card">
|
|
516
|
+
<div class="top">
|
|
517
|
+
<img src="https://github.com/JIE42393.png?size=92" alt="JIE42393" loading="lazy">
|
|
518
|
+
<div class="who">
|
|
519
|
+
<a href="https://github.com/JIE42393" target="_blank" rel="noopener">@JIE42393</a>
|
|
520
|
+
<div class="tier"><span class="zh">8 issue</span><span class="en">8 issues</span></div>
|
|
521
|
+
</div>
|
|
522
|
+
</div>
|
|
523
|
+
<p class="desc zh">持续的问题反馈者,覆盖面板行为、召回质量与配置边界等场景。</p>
|
|
524
|
+
<p class="desc en">A persistent reporter covering panel behaviour, recall quality, and configuration edge cases.</p>
|
|
525
|
+
<div class="refs">
|
|
526
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/15">#15</a>
|
|
527
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/26">#26</a>
|
|
528
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/30">#30</a>
|
|
529
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/41">#41</a>
|
|
530
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/42">#42</a>
|
|
531
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/43">#43</a>
|
|
532
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/45">#45</a>
|
|
533
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/87">#87</a>
|
|
534
|
+
</div>
|
|
535
|
+
</div>
|
|
536
|
+
|
|
537
|
+
<div class="card">
|
|
538
|
+
<div class="top">
|
|
539
|
+
<img src="https://github.com/Fishsb.png?size=92" alt="Fishsb" loading="lazy">
|
|
540
|
+
<div class="who">
|
|
541
|
+
<a href="https://github.com/Fishsb" target="_blank" rel="noopener">@Fishsb</a>
|
|
542
|
+
<div class="tier"><span class="zh">3 issue</span><span class="en">3 issues</span></div>
|
|
543
|
+
</div>
|
|
544
|
+
</div>
|
|
545
|
+
<p class="desc zh">关于记忆召回与注入行为的连续反馈。</p>
|
|
546
|
+
<p class="desc en">Successive reports on memory recall and injection behaviour.</p>
|
|
547
|
+
<div class="refs">
|
|
548
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/18">#18</a>
|
|
549
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/19">#19</a>
|
|
550
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/20">#20</a>
|
|
551
|
+
</div>
|
|
552
|
+
</div>
|
|
553
|
+
|
|
554
|
+
<div class="card">
|
|
555
|
+
<div class="top">
|
|
556
|
+
<img src="https://github.com/ProperSAMA.png?size=92" alt="ProperSAMA" loading="lazy">
|
|
557
|
+
<div class="who">
|
|
558
|
+
<a href="https://github.com/ProperSAMA" target="_blank" rel="noopener">@ProperSAMA</a>
|
|
559
|
+
<div class="tier"><span class="zh">1 PR</span><span class="en">1 PR</span></div>
|
|
560
|
+
</div>
|
|
561
|
+
</div>
|
|
562
|
+
<p class="desc zh">DSH Desktop 增强模式(透明 / Mica 材质)下的面板可读性修复,以及入口按钮防遮挡与外点 / Esc 关闭。</p>
|
|
563
|
+
<p class="desc en">Panel readability fix for DSH Desktop enhanced mode (transparent / Mica materials), plus entry-button anti-occlusion and outside-click / Esc dismissal.</p>
|
|
564
|
+
<div class="refs"><a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/12">PR #12</a></div>
|
|
565
|
+
</div>
|
|
566
|
+
|
|
567
|
+
<div class="card">
|
|
568
|
+
<div class="top">
|
|
569
|
+
<img src="https://github.com/nkh0472.png?size=92" alt="nkh0472" loading="lazy">
|
|
570
|
+
<div class="who">
|
|
571
|
+
<a href="https://github.com/nkh0472" target="_blank" rel="noopener">@nkh0472</a>
|
|
572
|
+
<div class="tier"><span class="zh">1 issue</span><span class="en">1 issue</span></div>
|
|
573
|
+
</div>
|
|
574
|
+
</div>
|
|
575
|
+
<p class="desc zh">无人值守 / 批处理场景的加固反馈——直接推动了欢迎向导与逐功能开关化。</p>
|
|
576
|
+
<p class="desc en">Unattended / batch-workflow hardening feedback that directly drove the welcome tour and per-feature switches.</p>
|
|
577
|
+
<div class="refs"><a href="https://github.com/Aik358/dsh-auto-memory/issues/10">#10</a></div>
|
|
578
|
+
</div>
|
|
579
|
+
|
|
580
|
+
<div class="card">
|
|
581
|
+
<div class="top">
|
|
582
|
+
<img src="https://github.com/messiahyl.png?size=92" alt="messiahyl" loading="lazy">
|
|
583
|
+
<div class="who">
|
|
584
|
+
<a href="https://github.com/messiahyl" target="_blank" rel="noopener">@messiahyl</a>
|
|
585
|
+
<div class="tier"><span class="zh">2 issue</span><span class="en">2 issues</span></div>
|
|
586
|
+
</div>
|
|
587
|
+
</div>
|
|
588
|
+
<p class="desc zh">早期问题反馈,帮助校准了最初的行为预期。</p>
|
|
589
|
+
<p class="desc en">Early feedback that helped calibrate the initial behaviour expectations.</p>
|
|
590
|
+
<div class="refs">
|
|
591
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/8">#8</a>
|
|
592
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/issues/9">#9</a>
|
|
593
|
+
</div>
|
|
594
|
+
</div>
|
|
595
|
+
|
|
596
|
+
<div class="card">
|
|
597
|
+
<div class="top">
|
|
598
|
+
<img src="https://github.com/fei009009.png?size=92" alt="fei009009" loading="lazy">
|
|
599
|
+
<div class="who">
|
|
600
|
+
<a href="https://github.com/fei009009" target="_blank" rel="noopener">@fei009009</a>
|
|
601
|
+
<div class="tier"><span class="zh">1 PR</span><span class="en">1 PR</span></div>
|
|
602
|
+
</div>
|
|
603
|
+
</div>
|
|
604
|
+
<p class="desc zh">提交代码贡献。</p>
|
|
605
|
+
<p class="desc en">Contributed code via pull request.</p>
|
|
606
|
+
<div class="refs"><a class="pr" href="https://github.com/Aik358/dsh-auto-memory/pull/29">PR #29</a></div>
|
|
607
|
+
</div>
|
|
608
|
+
|
|
609
|
+
</div>
|
|
610
|
+
|
|
611
|
+
<!-- ══════════ 其他贡献者 ══════════ -->
|
|
612
|
+
<h2 class="sec" style="margin-top:56px"><span class="zh">其他贡献者</span><span class="en">Also contributed</span></h2>
|
|
613
|
+
<p class="sec-sub zh">每一位的第一个反馈都算数——很多修复就是从这些 issue 开始的。</p>
|
|
614
|
+
<p class="sec-sub en">Every first report counts — many of these fixes started right here.</p>
|
|
615
|
+
|
|
616
|
+
<div class="compact">
|
|
617
|
+
<a class="chip" href="https://github.com/Architectxz" target="_blank" rel="noopener">
|
|
618
|
+
<img src="https://github.com/Architectxz.png?size=56" alt="" loading="lazy">
|
|
619
|
+
<span class="n">@Architectxz</span><span class="r">#1</span>
|
|
620
|
+
</a>
|
|
621
|
+
<a class="chip" href="https://github.com/ALuoXue" target="_blank" rel="noopener">
|
|
622
|
+
<img src="https://github.com/ALuoXue.png?size=56" alt="" loading="lazy">
|
|
623
|
+
<span class="n">@ALuoXue</span><span class="r">#2</span>
|
|
624
|
+
</a>
|
|
625
|
+
<a class="chip" href="https://github.com/lhbsaa" target="_blank" rel="noopener">
|
|
626
|
+
<img src="https://github.com/lhbsaa.png?size=56" alt="" loading="lazy">
|
|
627
|
+
<span class="n">@lhbsaa</span><span class="r">#3</span>
|
|
628
|
+
</a>
|
|
629
|
+
<a class="chip" href="https://github.com/alexchenzl" target="_blank" rel="noopener">
|
|
630
|
+
<img src="https://github.com/alexchenzl.png?size=56" alt="" loading="lazy">
|
|
631
|
+
<span class="n">@alexchenzl</span><span class="r">#6</span>
|
|
632
|
+
</a>
|
|
633
|
+
<a class="chip" href="https://github.com/zjj871114037" target="_blank" rel="noopener">
|
|
634
|
+
<img src="https://github.com/zjj871114037.png?size=56" alt="" loading="lazy">
|
|
635
|
+
<span class="n">@zjj871114037</span><span class="r">#7</span>
|
|
636
|
+
</a>
|
|
637
|
+
<a class="chip" href="https://github.com/eclgo" target="_blank" rel="noopener">
|
|
638
|
+
<img src="https://github.com/eclgo.png?size=56" alt="" loading="lazy">
|
|
639
|
+
<span class="n">@eclgo</span><span class="r">#13</span>
|
|
640
|
+
</a>
|
|
641
|
+
<a class="chip" href="https://github.com/moonltppt" target="_blank" rel="noopener">
|
|
642
|
+
<img src="https://github.com/moonltppt.png?size=56" alt="" loading="lazy">
|
|
643
|
+
<span class="n">@moonltppt</span><span class="r">#14</span>
|
|
644
|
+
</a>
|
|
645
|
+
<a class="chip" href="https://github.com/swtseaman" target="_blank" rel="noopener">
|
|
646
|
+
<img src="https://github.com/swtseaman.png?size=56" alt="" loading="lazy">
|
|
647
|
+
<span class="n">@swtseaman</span><span class="r">#21</span>
|
|
648
|
+
</a>
|
|
649
|
+
<a class="chip" href="https://github.com/xiaochaZ" target="_blank" rel="noopener">
|
|
650
|
+
<img src="https://github.com/xiaochaZ.png?size=56" alt="" loading="lazy">
|
|
651
|
+
<span class="n">@xiaochaZ</span><span class="r">#38</span>
|
|
652
|
+
</a>
|
|
653
|
+
<a class="chip" href="https://github.com/jeffsui" target="_blank" rel="noopener">
|
|
654
|
+
<img src="https://github.com/jeffsui.png?size=56" alt="" loading="lazy">
|
|
655
|
+
<span class="n">@jeffsui</span><span class="r">#39</span>
|
|
656
|
+
</a>
|
|
657
|
+
<a class="chip" href="https://github.com/cuohua" target="_blank" rel="noopener">
|
|
658
|
+
<img src="https://github.com/cuohua.png?size=56" alt="" loading="lazy">
|
|
659
|
+
<span class="n">@cuohua</span><span class="r">#40</span>
|
|
660
|
+
</a>
|
|
661
|
+
<a class="chip" href="https://github.com/ADE150" target="_blank" rel="noopener">
|
|
662
|
+
<img src="https://github.com/ADE150.png?size=56" alt="" loading="lazy">
|
|
663
|
+
<span class="n">@ADE150</span><span class="r">#102</span>
|
|
664
|
+
</a>
|
|
665
|
+
</div>
|
|
666
|
+
|
|
667
|
+
<!-- ══════════ 赞助方 ══════════ -->
|
|
668
|
+
<h2 class="sec" style="margin-top:56px"><span class="zh">资源赞助</span><span class="en">Resource sponsors</span></h2>
|
|
669
|
+
<p class="sec-sub zh">本项目不接广告、不做付费墙。以下赞助方提供的是开发本身要烧掉的东西——API 额度。</p>
|
|
670
|
+
<p class="sec-sub en">No ads, no paywall. These sponsors provide what development actually burns: API quota.</p>
|
|
671
|
+
|
|
672
|
+
<div class="sponsor">
|
|
673
|
+
<div class="mark">DSH</div>
|
|
674
|
+
<div class="body">
|
|
675
|
+
<h3><a href="https://api.dshapi.icu/register?aff=HJU27P7JL39N" target="_blank" rel="noopener">DSH API · api.dshapi.icu</a></h3>
|
|
676
|
+
<p class="zh">API 中转站,为本项目的开发、回归测试,以及 M 系列语义引擎的选型与激活策略研究提供模型端点。没有这些额度,那些基准实验根本跑不起来。</p>
|
|
677
|
+
<p class="en">An API relay station providing the model endpoints used for development, regression testing, and the M-series semantic-engine selection / activation research. Without that quota, those benchmark runs simply would not have happened.</p>
|
|
678
|
+
<div class="tag"><span class="zh">API 额度赞助</span><span class="en">API quota sponsor</span></div>
|
|
679
|
+
</div>
|
|
680
|
+
</div>
|
|
681
|
+
|
|
682
|
+
<!-- ══════════ 如何参与 ══════════ -->
|
|
683
|
+
<h2 class="sec" style="margin-top:56px"><span class="zh">如何参与</span><span class="en">How to contribute</span></h2>
|
|
684
|
+
<p class="sec-sub zh">不需要先成为"核心贡献者"。一个能复现的 issue 就是有效贡献。</p>
|
|
685
|
+
<p class="sec-sub en">You do not need to be a "core contributor" first. A reproducible issue is a real contribution.</p>
|
|
686
|
+
|
|
687
|
+
<div class="steps">
|
|
688
|
+
<div class="step">
|
|
689
|
+
<div class="k">01 / issue</div>
|
|
690
|
+
<b><span class="zh">报一个能复现的问题</span><span class="en">File a reproducible issue</span></b>
|
|
691
|
+
<p class="zh">带上 DSH 版本、插件版本、复现步骤和实际 vs 预期。这一步比什么都重要。</p>
|
|
692
|
+
<p class="en">Include DSH version, plugin version, steps, and actual vs expected. This matters more than anything else.</p>
|
|
693
|
+
</div>
|
|
694
|
+
<div class="step">
|
|
695
|
+
<div class="k">02 / pr</div>
|
|
696
|
+
<b><span class="zh">提交一个 PR</span><span class="en">Send a pull request</span></b>
|
|
697
|
+
<p class="zh">小步、单一目的、带上验证结果。回归套件是绿的才算完成。</p>
|
|
698
|
+
<p class="en">Small, single-purpose, with verification results. It counts as done only when the regression suite is green.</p>
|
|
699
|
+
</div>
|
|
700
|
+
<div class="step">
|
|
701
|
+
<div class="k">03 / qq</div>
|
|
702
|
+
<b><span class="zh">加入交流群</span><span class="en">Join the QQ group</span></b>
|
|
703
|
+
<p class="zh">问题反馈、使用技巧交流,响应通常比 issue 更快。</p>
|
|
704
|
+
<p class="en">Feedback and usage tips — usually faster than issues.</p>
|
|
705
|
+
<p style="margin-top:10px"><a href="https://qm.qq.com/q/v7Asxn6vPa" target="_blank" rel="noopener" style="color:var(--accent)">→ <span class="zh">点击加入</span><span class="en">Join now</span></a></p>
|
|
706
|
+
</div>
|
|
707
|
+
<div class="step">
|
|
708
|
+
<div class="k">04 / sponsor</div>
|
|
709
|
+
<b><span class="zh">赞助开发资源</span><span class="en">Sponsor resources</span></b>
|
|
710
|
+
<p class="zh">提供 API 额度或其他开发资源。开个 issue 说明来意即可。</p>
|
|
711
|
+
<p class="en">Provide API quota or other development resources. Just open an issue.</p>
|
|
712
|
+
</div>
|
|
713
|
+
</div>
|
|
714
|
+
|
|
715
|
+
<footer>
|
|
716
|
+
<p class="zh">数据来源:GitHub Issues & Pull Requests(2026-09-22 快照:已合并 PR 41 · Issue 82 · 外部贡献者 19)。头像由 GitHub 提供。</p>
|
|
717
|
+
<p class="en">Data source: GitHub Issues & Pull Requests (snapshot 2026-09-22: 41 merged PRs · 82 issues · 19 external contributors). Avatars served by GitHub.</p>
|
|
718
|
+
<p style="margin-top:14px">
|
|
719
|
+
<a href="https://github.com/Aik358/dsh-auto-memory">README</a> ·
|
|
720
|
+
<a href="https://github.com/Aik358/dsh-auto-memory/blob/main/docs/USER-GUIDE.zh-CN.md">用户文档</a> ·
|
|
721
|
+
<a href="https://github.com/Aik358/dsh-auto-memory" target="_blank" rel="noopener">GitHub</a> ·
|
|
722
|
+
<a href="https://api.dshapi.icu/register?aff=HJU27P7JL39N" target="_blank" rel="noopener">DSH API</a>
|
|
723
|
+
</p>
|
|
724
|
+
<p style="margin-top:10px;opacity:.6">dsh-auto-memory · BSD-3-Clause</p>
|
|
725
|
+
</footer>
|
|
726
|
+
|
|
727
|
+
</div>
|
|
728
|
+
|
|
729
|
+
<script>
|
|
730
|
+
function setLang(l) {
|
|
731
|
+
document.body.setAttribute('data-lang', l);
|
|
732
|
+
document.documentElement.lang = (l === 'zh' ? 'zh-CN' : 'en');
|
|
733
|
+
document.getElementById('lb-zh').className = (l === 'zh' ? 'on' : '');
|
|
734
|
+
document.getElementById('lb-en').className = (l === 'en' ? 'on' : '');
|
|
735
|
+
try { localStorage.setItem('dam-contrib-lang', l); } catch (e) {}
|
|
736
|
+
}
|
|
737
|
+
(function () {
|
|
738
|
+
var saved = null;
|
|
739
|
+
try { saved = localStorage.getItem('dam-contrib-lang'); } catch (e) {}
|
|
740
|
+
if (!saved) {
|
|
741
|
+
// 跟随浏览器语言: 非中文默认英文
|
|
742
|
+
saved = /^zh\b/i.test(navigator.language || '') ? 'zh' : 'en';
|
|
743
|
+
}
|
|
744
|
+
setLang(saved);
|
|
745
|
+
})();
|
|
746
|
+
</script>
|
|
747
|
+
<script>
|
|
748
|
+
/* ============================================================
|
|
749
|
+
动效编排 — dsh-auto-memory 贡献者页(单文件内联,零外部依赖)
|
|
750
|
+
语料来源:本地 transitions-motion skill
|
|
751
|
+
· 统计数字:改用**计数滚动**(见下方说明,原 spinning-counter 配方在本页实测失败)
|
|
752
|
+
· 3d-tilt:指针绑在**从不做变换的外层**,写入 4 个自定义属性
|
|
753
|
+
· avatar-group-hover:在写 --shift **之前**内联设置
|
|
754
|
+
transition-timing-function,弹性缓动才只作用于归位
|
|
755
|
+
· texts-reveal:父级加 .is-shown 播放错开入场
|
|
756
|
+
降级:脚本失败 ⇒ 无 .dam-js,CSS 初始隐藏态不生效,内容照常可见可读。
|
|
757
|
+
============================================================ */
|
|
758
|
+
(function () {
|
|
759
|
+
'use strict';
|
|
760
|
+
|
|
761
|
+
var doc = document;
|
|
762
|
+
var root = doc.documentElement;
|
|
763
|
+
var reduce = !!(window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches);
|
|
764
|
+
var canHover = !!(window.matchMedia && window.matchMedia('(hover: hover) and (pointer: fine)').matches);
|
|
765
|
+
|
|
766
|
+
function each(list, fn) { Array.prototype.forEach.call(list, fn); }
|
|
767
|
+
function reflow(el) { return el.offsetWidth; } // 强制一次样式解析,保证过渡有起点
|
|
768
|
+
|
|
769
|
+
/* ── ① 统计数字:计数滚动(★零结构改动)──────────────────────
|
|
770
|
+
语料 spinning-counter 的配方是「每位数字一条 0-9 竖直卷轴 + 逐列定位
|
|
771
|
+
+ 列级 overflow 裁剪 + 祖先渐变」。**本页实测失败**:原页面 `.stat b`
|
|
772
|
+
自带 `background-clip:text; color:transparent`,卷轴需要的祖先渐变与
|
|
773
|
+
子层裁剪与它反复冲突,结果是每格只剩首位数字、颜色发暗
|
|
774
|
+
(截图实测 1 / 4 / 8,本应是 19 / 41 / 82)。
|
|
775
|
+
|
|
776
|
+
⇒ 改为只改 textContent:`<b data-reel="19">` 元素本身、它的渐变、
|
|
777
|
+
字号、布局**全部保持原页面原样**(页脚那个亮蓝 `1` 证明原样式渲染
|
|
778
|
+
正常),只把文字从 0 递增到目标值。零结构冲突,且数字始终走页面
|
|
779
|
+
已验证的渐变规则。 */
|
|
780
|
+
function attachCounters() {
|
|
781
|
+
each(doc.querySelectorAll('[data-reel]'), function (el) {
|
|
782
|
+
var target = parseInt(el.getAttribute('data-reel'), 10);
|
|
783
|
+
if (isNaN(target)) return; // 非数字:原样保留,不动
|
|
784
|
+
// ★给一个**稳定**的可访问名:数字在滚动时 textContent 每帧都变,
|
|
785
|
+
// 读屏会逐帧播报。aria-label 一旦存在即作为可访问名,屏蔽这种噪声。
|
|
786
|
+
el.setAttribute('aria-label', String(target));
|
|
787
|
+
if (reduce) { el.textContent = String(target); return; }
|
|
788
|
+
|
|
789
|
+
var DUR = 1100; // 计数总时长
|
|
790
|
+
var start = null;
|
|
791
|
+
// easeOutExpo:起步快、收尾稳,数字滚动读起来自然(对应 --ease-linear
|
|
792
|
+
// 之外的「强调时刻」用途;此处按 token 刻度自设计,语料无对应条目)。
|
|
793
|
+
function ease(t) { return t >= 1 ? 1 : 1 - Math.pow(2, -10 * t); }
|
|
794
|
+
|
|
795
|
+
function step(ts) {
|
|
796
|
+
if (start === null) start = ts;
|
|
797
|
+
var p = Math.min((ts - start) / DUR, 1);
|
|
798
|
+
el.textContent = String(Math.round(target * ease(p)));
|
|
799
|
+
if (p < 1) requestAnimationFrame(step);
|
|
800
|
+
else el.textContent = String(target); // 收尾钉死精确值
|
|
801
|
+
}
|
|
802
|
+
el.textContent = '0';
|
|
803
|
+
requestAnimationFrame(step);
|
|
804
|
+
});
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
/* ── ② 卡片包裹(3d-tilt:外层扁平、内层旋转)───────────────── */
|
|
808
|
+
function wrapCards() {
|
|
809
|
+
each(doc.querySelectorAll('.card'), function (card) {
|
|
810
|
+
if (card.parentNode && card.parentNode.classList.contains('t-tilt')) return;
|
|
811
|
+
var wrap = doc.createElement('div');
|
|
812
|
+
wrap.className = 't-tilt';
|
|
813
|
+
// 整行卡片的栅格定位必须留在**栅格项**(即外层)上,否则会失去跨列
|
|
814
|
+
if (card.style && card.style.gridColumn) {
|
|
815
|
+
wrap.style.gridColumn = card.style.gridColumn;
|
|
816
|
+
card.style.gridColumn = '';
|
|
817
|
+
}
|
|
818
|
+
card.parentNode.insertBefore(wrap, card);
|
|
819
|
+
wrap.appendChild(card);
|
|
820
|
+
card.classList.add('t-tilt-card');
|
|
821
|
+
var glare = doc.createElement('div');
|
|
822
|
+
glare.className = 't-tilt-glare';
|
|
823
|
+
glare.setAttribute('aria-hidden', 'true');
|
|
824
|
+
card.appendChild(glare);
|
|
825
|
+
});
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
/* ── ③ 梳齿组标记(avatar-group-hover)────────────────────── */
|
|
829
|
+
function tagChips() {
|
|
830
|
+
each(doc.querySelectorAll('.compact'), function (group) { group.classList.add('t-avatar-group'); });
|
|
831
|
+
each(doc.querySelectorAll('.chip'), function (chip) { chip.classList.add('t-avatar'); });
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
/* ── ④ 分区入场标记(按 §1 位移/模糊刻度自设计)────────────── */
|
|
835
|
+
function tagReveal() {
|
|
836
|
+
var seq = [
|
|
837
|
+
'.stats', '.hero ~ h2.sec', 'h2.sec', '.sec-sub', '.grid',
|
|
838
|
+
'.compact', '.sponsor', '.steps', 'footer'
|
|
839
|
+
];
|
|
840
|
+
var i = 0;
|
|
841
|
+
seq.forEach(function (sel) {
|
|
842
|
+
each(doc.querySelectorAll(sel), function (el) {
|
|
843
|
+
if (el.classList.contains('dam-reveal')) return;
|
|
844
|
+
el.classList.add('dam-reveal');
|
|
845
|
+
el.style.setProperty('--i', String(i % 6)); // 封顶 6:总错开 ≤240ms
|
|
846
|
+
i++;
|
|
847
|
+
});
|
|
848
|
+
});
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
/* ── ⑤ hero 文案错开(texts-reveal)────────────────────────── */
|
|
852
|
+
function tagHero() {
|
|
853
|
+
var hero = doc.querySelector('.hero');
|
|
854
|
+
if (!hero) return;
|
|
855
|
+
hero.classList.add('t-stagger');
|
|
856
|
+
var badge = hero.querySelector('.badge');
|
|
857
|
+
var h1 = hero.querySelector('h1');
|
|
858
|
+
var ps = hero.querySelectorAll('p');
|
|
859
|
+
var lang = hero.querySelector('.lang');
|
|
860
|
+
if (badge) badge.classList.add('t-stagger-line', 't-stagger-line--1');
|
|
861
|
+
if (h1) h1.classList.add('t-stagger-line', 't-stagger-line--2');
|
|
862
|
+
each(ps, function (p) { p.classList.add('t-stagger-line', 't-stagger-line--3'); });
|
|
863
|
+
if (lang) lang.classList.add('t-stagger-line', 't-stagger-line--4');
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
function playHero() {
|
|
867
|
+
requestAnimationFrame(function () {
|
|
868
|
+
requestAnimationFrame(function () {
|
|
869
|
+
each(doc.querySelectorAll('.t-stagger'), function (el) { el.classList.add('is-shown'); });
|
|
870
|
+
});
|
|
871
|
+
});
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
/* ── ⑥ 滚动入场 ───────────────────────────────────────────── */
|
|
875
|
+
function revealOnScroll() {
|
|
876
|
+
var targets = doc.querySelectorAll('.dam-reveal');
|
|
877
|
+
if (!('IntersectionObserver' in window)) {
|
|
878
|
+
each(targets, function (el) { el.classList.add('is-in'); });
|
|
879
|
+
return;
|
|
880
|
+
}
|
|
881
|
+
var io = new IntersectionObserver(function (entries) {
|
|
882
|
+
entries.forEach(function (e) {
|
|
883
|
+
if (e.isIntersecting) { e.target.classList.add('is-in'); io.unobserve(e.target); }
|
|
884
|
+
});
|
|
885
|
+
}, { rootMargin: '0px 0px -6% 0px', threshold: 0.06 });
|
|
886
|
+
each(targets, function (el) { io.observe(el); });
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
/* ── ⑦ 3D 倾斜 ────────────────────────────────────────────── */
|
|
890
|
+
function bindTilt() {
|
|
891
|
+
if (reduce || !canHover) return;
|
|
892
|
+
var MAX = 6; // 克制:超过约 8° 会读成「翻倒」而不是「被指针吸引」
|
|
893
|
+
each(doc.querySelectorAll('.t-tilt'), function (wrap) {
|
|
894
|
+
var card = wrap.querySelector('.t-tilt-card');
|
|
895
|
+
if (!card) return;
|
|
896
|
+
wrap.addEventListener('pointermove', function (ev) {
|
|
897
|
+
var r = wrap.getBoundingClientRect();
|
|
898
|
+
if (!r.width || !r.height) return;
|
|
899
|
+
var px = (ev.clientX - r.left) / r.width;
|
|
900
|
+
var py = (ev.clientY - r.top) / r.height;
|
|
901
|
+
card.style.setProperty('--tilt-ry', ((px - 0.5) * 2 * MAX).toFixed(2) + 'deg');
|
|
902
|
+
card.style.setProperty('--tilt-rx', ((0.5 - py) * 2 * MAX).toFixed(2) + 'deg');
|
|
903
|
+
card.style.setProperty('--tilt-gx', (px * 100).toFixed(1) + '%');
|
|
904
|
+
card.style.setProperty('--tilt-gy', (py * 100).toFixed(1) + '%');
|
|
905
|
+
card.classList.add('is-tilting');
|
|
906
|
+
wrap.classList.add('is-hover');
|
|
907
|
+
});
|
|
908
|
+
wrap.addEventListener('pointerleave', function () {
|
|
909
|
+
card.classList.remove('is-tilting');
|
|
910
|
+
wrap.classList.remove('is-hover');
|
|
911
|
+
card.style.setProperty('--tilt-rx', '0deg');
|
|
912
|
+
card.style.setProperty('--tilt-ry', '0deg');
|
|
913
|
+
});
|
|
914
|
+
});
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
/* ── ⑧ 梳齿悬停 ───────────────────────────────────────────── */
|
|
918
|
+
function bindGroup() {
|
|
919
|
+
if (reduce || !canHover) return;
|
|
920
|
+
var LIFT = -4, FALLOFF = 0.45, SCALE = 1.05;
|
|
921
|
+
var EASE_IN = 'cubic-bezier(0.22, 1, 0.36, 1)';
|
|
922
|
+
var EASE_OUT = 'cubic-bezier(0.34, 3.85, 0.64, 1)';
|
|
923
|
+
each(doc.querySelectorAll('.t-avatar-group'), function (group) {
|
|
924
|
+
var items = Array.prototype.slice.call(group.querySelectorAll('.t-avatar'));
|
|
925
|
+
if (items.length < 2) return;
|
|
926
|
+
items.forEach(function (el, idx) {
|
|
927
|
+
el.addEventListener('mouseenter', function () {
|
|
928
|
+
items.forEach(function (other, j) {
|
|
929
|
+
// ★ 先设缓动、再写变量(语料明确要求,否则弹性会作用在进场)
|
|
930
|
+
other.style.transitionTimingFunction = EASE_IN;
|
|
931
|
+
other.style.setProperty('--shift', (LIFT * Math.pow(FALLOFF, Math.abs(j - idx))).toFixed(3) + 'px');
|
|
932
|
+
other.style.setProperty('--scale-active', other === el ? String(SCALE) : '1');
|
|
933
|
+
});
|
|
934
|
+
});
|
|
935
|
+
});
|
|
936
|
+
group.addEventListener('mouseleave', function () {
|
|
937
|
+
items.forEach(function (el) {
|
|
938
|
+
el.style.transitionTimingFunction = EASE_OUT; // 归位才回弹
|
|
939
|
+
el.style.setProperty('--shift', '0px');
|
|
940
|
+
el.style.setProperty('--scale-active', '1');
|
|
941
|
+
});
|
|
942
|
+
});
|
|
943
|
+
});
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
function boot() {
|
|
947
|
+
tagHero();
|
|
948
|
+
wrapCards();
|
|
949
|
+
tagChips();
|
|
950
|
+
tagReveal();
|
|
951
|
+
reflow(doc.body); // 让隐藏初态先落地,过渡才有起点
|
|
952
|
+
playHero();
|
|
953
|
+
revealOnScroll();
|
|
954
|
+
attachCounters();
|
|
955
|
+
bindTilt();
|
|
956
|
+
bindGroup();
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
// ★ 先挂 .dam-js 再动 DOM:CSS 的初始隐藏态只在脚本可用时生效
|
|
960
|
+
root.classList.add('dam-js');
|
|
961
|
+
if (doc.readyState === 'loading') doc.addEventListener('DOMContentLoaded', boot);
|
|
962
|
+
else boot();
|
|
963
|
+
})();
|
|
964
|
+
</script>
|
|
965
|
+
</body>
|
|
966
|
+
</html>
|