skill-forge-hub 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -4
- package/annual-report/SKILL.md +17 -2
- package/annual-report/resources/disk-and-html.md +3 -1
- package/annual-report/resources/reference.html +360 -0
- package/annual-report/user-config.md +3 -0
- package/cli.js +175 -36
- package/daily-report/SKILL.md +20 -5
- package/daily-report/resources/content-rules.md +9 -9
- package/daily-report/resources/disk-and-html.md +4 -2
- package/daily-report/resources/reference.html +613 -0
- package/daily-report/resources/usage-guide.md +10 -10
- package/daily-report/user-config.md +5 -2
- package/magic-deck/SKILL.md +52 -0
- package/magic-deck/resources/deck-spec.md +248 -0
- package/magic-deck/resources/reference.html +710 -0
- package/magic-deck/user-config.md +37 -0
- package/meta-forge/SKILL.md +46 -0
- package/meta-forge/resources/forge-rules.md +74 -0
- package/meta-forge/resources/usage-guide.md +41 -0
- package/meta-forge/user-config.md +19 -0
- package/package.json +3 -1
- package/spec-doc2spec/SKILL.md +17 -8
- package/spec-doc2spec/user-config.md +22 -0
- package/spec-spec2doc/SKILL.md +17 -8
- package/spec-spec2doc/user-config.md +22 -0
- package/weekly-report/SKILL.md +20 -5
- package/weekly-report/resources/content-rules.md +10 -10
- package/weekly-report/resources/disk-and-html.md +4 -2
- package/weekly-report/resources/industry-dictionary.md +1 -1
- package/weekly-report/resources/reference.html +866 -0
- package/weekly-report/resources/usage-guide.md +10 -10
- package/weekly-report/user-config.md +5 -2
|
@@ -0,0 +1,866 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>本周周报 - 20261102 ~ 20261106</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root{
|
|
9
|
+
--cyan:#0ea5e9; --bg:#0a1929; --card:#0b1e37; --border:rgba(14,165,233,.15);
|
|
10
|
+
--text:#bae6fd; --muted:#5b7fa5; --green:#14b8a6; --orange:#f97316;
|
|
11
|
+
--purple:#6366f1; --rose:#f43f5e; --glow:#0f3350;
|
|
12
|
+
}
|
|
13
|
+
*{margin:0;padding:0;box-sizing:border-box;}
|
|
14
|
+
html,body{background:var(--bg);}
|
|
15
|
+
body{
|
|
16
|
+
font-family:ui-monospace,'SF Mono',SFMono-Regular,Menlo,Consolas,'Microsoft YaHei',monospace;
|
|
17
|
+
color:var(--text); font-weight:400; padding:40px 20px 40px;
|
|
18
|
+
min-height:100vh; position:relative; overflow-x:hidden;
|
|
19
|
+
}
|
|
20
|
+
/* 噪点层 */
|
|
21
|
+
body::before{
|
|
22
|
+
content:''; position:fixed; inset:0; z-index:0; pointer-events:none; opacity:.04;
|
|
23
|
+
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
|
|
24
|
+
}
|
|
25
|
+
/* 网格底纹 */
|
|
26
|
+
.grid-pattern{
|
|
27
|
+
position:fixed; inset:0; z-index:0; pointer-events:none;
|
|
28
|
+
background-image:linear-gradient(rgba(0,240,255,.03) 1px, transparent 1px),linear-gradient(90deg, rgba(0,240,255,.03) 1px, transparent 1px);
|
|
29
|
+
background-size:60px 60px;
|
|
30
|
+
}
|
|
31
|
+
/* 星点层 */
|
|
32
|
+
.stars{
|
|
33
|
+
position:fixed; inset:0; z-index:0; pointer-events:none;
|
|
34
|
+
background-image:
|
|
35
|
+
radial-gradient(1px 1px at 12% 18%, rgba(255,255,255,.38), transparent),
|
|
36
|
+
radial-gradient(1px 1px at 28% 64%, rgba(0,240,255,.48), transparent),
|
|
37
|
+
radial-gradient(1.5px 1.5px at 41% 32%, rgba(255,255,255,.3), transparent),
|
|
38
|
+
radial-gradient(1px 1px at 56% 78%, rgba(168,85,247,.4), transparent),
|
|
39
|
+
radial-gradient(1px 1px at 67% 12%, rgba(0,255,136,.4), transparent),
|
|
40
|
+
radial-gradient(1.5px 1.5px at 79% 52%, rgba(0,240,255,.45), transparent),
|
|
41
|
+
radial-gradient(1px 1px at 88% 86%, rgba(255,255,255,.34), transparent),
|
|
42
|
+
radial-gradient(1px 1px at 93% 24%, rgba(0,240,255,.5), transparent);
|
|
43
|
+
}
|
|
44
|
+
/* 扫描线 */
|
|
45
|
+
.scanlines{
|
|
46
|
+
position:fixed; inset:0; z-index:999; pointer-events:none;
|
|
47
|
+
background:repeating-linear-gradient(0deg, transparent 0 2px, rgba(0,240,255,.015) 2px 4px);
|
|
48
|
+
}
|
|
49
|
+
/* CRT 光带 */
|
|
50
|
+
.scanband{
|
|
51
|
+
position:fixed; left:0; right:0; height:150px; z-index:998; pointer-events:none;
|
|
52
|
+
background:linear-gradient(180deg, transparent, rgba(0,240,255,.03) 50%, transparent);
|
|
53
|
+
animation:scanMove 11s linear infinite;
|
|
54
|
+
}
|
|
55
|
+
@keyframes scanMove{ from{top:-22%;} to{top:112%;} }
|
|
56
|
+
.wrap{
|
|
57
|
+
width:clamp(640px, 60%, 1200px); margin:0 auto; position:relative; z-index:1;
|
|
58
|
+
}
|
|
59
|
+
/* ============ 头部卡片 ============ */
|
|
60
|
+
.header-card{
|
|
61
|
+
position:relative; background:var(--card);
|
|
62
|
+
background-image:repeating-linear-gradient(180deg, rgba(255,255,255,.012) 0 1px, transparent 1px 8px);
|
|
63
|
+
border-top:1px solid var(--glow); border-bottom:1px solid var(--glow);
|
|
64
|
+
border-radius:6px; padding:38px 36px 26px; text-align:center; overflow:hidden;
|
|
65
|
+
box-shadow:0 0 20px rgba(14,165,233,.08), inset 0 1px 24px rgba(14,165,233,.04);
|
|
66
|
+
margin-bottom:18px;
|
|
67
|
+
}
|
|
68
|
+
.card-glow{
|
|
69
|
+
position:absolute; inset:0; pointer-events:none; transform-origin:top center;
|
|
70
|
+
background:radial-gradient(ellipse at 50% 10%, rgba(14,165,233,.25), transparent 70%);
|
|
71
|
+
opacity:.5; animation:cardGlow 3s ease-in-out infinite;
|
|
72
|
+
}
|
|
73
|
+
@keyframes cardGlow{ 0%,100%{opacity:.5; transform:scale(1);} 50%{opacity:1; transform:scale(1.6);} }
|
|
74
|
+
/* 四边扫描线 */
|
|
75
|
+
.scanline-el{ position:absolute; pointer-events:none; z-index:3; }
|
|
76
|
+
.scan-x{ left:0; right:0; height:1px; background:linear-gradient(90deg, transparent, var(--cyan), transparent); }
|
|
77
|
+
.scan-y{ top:0; bottom:0; width:1px; background:linear-gradient(180deg, transparent, var(--cyan), transparent); }
|
|
78
|
+
.scan-top{ top:0; animation:scanX 3s linear infinite; }
|
|
79
|
+
.scan-right{ right:0; animation:scanY 3s linear infinite; }
|
|
80
|
+
.scan-bottom{ bottom:0; animation:scanXrev 3s linear infinite; }
|
|
81
|
+
.scan-left{ left:0; animation:scanYrev 3s linear infinite; }
|
|
82
|
+
@keyframes scanX{ from{transform:translateX(-100%);} to{transform:translateX(100%);} }
|
|
83
|
+
@keyframes scanXrev{ from{transform:translateX(100%);} to{transform:translateX(-100%);} }
|
|
84
|
+
@keyframes scanY{ from{transform:translateY(-100%);} to{transform:translateY(100%);} }
|
|
85
|
+
@keyframes scanYrev{ from{transform:translateY(100%);} to{transform:translateY(-100%);} }
|
|
86
|
+
h1{
|
|
87
|
+
position:relative; z-index:2; font-size:30px; font-weight:900; letter-spacing:1px;
|
|
88
|
+
background:linear-gradient(90deg, var(--cyan), var(--purple));
|
|
89
|
+
-webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent;
|
|
90
|
+
text-shadow:0 0 20px rgba(14,165,233,.4), 0 0 60px rgba(14,165,233,.15);
|
|
91
|
+
animation:titleGlow 3s ease-in-out infinite;
|
|
92
|
+
}
|
|
93
|
+
@keyframes titleGlow{
|
|
94
|
+
0%,100%{ filter:drop-shadow(0 0 20px rgba(14,165,233,.4)) drop-shadow(0 0 60px rgba(14,165,233,.15)); }
|
|
95
|
+
50%{ filter:drop-shadow(0 0 30px rgba(14,165,233,.7)) drop-shadow(0 0 80px rgba(14,165,233,.3)); }
|
|
96
|
+
}
|
|
97
|
+
.header-sub{ position:relative; z-index:2; font-size:13px; color:var(--muted); margin-top:10px; letter-spacing:2px; }
|
|
98
|
+
.header-badge{
|
|
99
|
+
position:relative; z-index:2; display:inline-block; margin-top:12px; font-size:11px; color:var(--cyan);
|
|
100
|
+
border:1px solid rgba(14,165,233,.35); border-radius:999px; padding:3px 12px;
|
|
101
|
+
background:rgba(14,165,233,.07); text-shadow:0 0 6px rgba(14,165,233,.6); letter-spacing:1px;
|
|
102
|
+
}
|
|
103
|
+
.summary-line{
|
|
104
|
+
position:relative; z-index:2; display:flex; gap:10px; max-width:540px; margin:18px auto 0;
|
|
105
|
+
align-items:flex-start;
|
|
106
|
+
}
|
|
107
|
+
.summary-tag{
|
|
108
|
+
flex:0 0 auto; font-size:10px; font-weight:700; color:var(--cyan); letter-spacing:1px;
|
|
109
|
+
border:1px solid rgba(14,165,233,.35); border-radius:4px; padding:2px 6px;
|
|
110
|
+
background:rgba(14,165,233,.07); text-shadow:0 0 6px rgba(14,165,233,.6); margin-top:2px;
|
|
111
|
+
}
|
|
112
|
+
.summary-text{ font-size:12.5px; color:var(--text); line-height:1.75; text-align:left; }
|
|
113
|
+
/* 复制按钮 */
|
|
114
|
+
.copy-wrap{ position:relative; z-index:2; margin-top:20px; display:flex; justify-content:center; }
|
|
115
|
+
.copy-btn{
|
|
116
|
+
display:flex; align-items:center; gap:8px; cursor:pointer; border:none; border-radius:999px;
|
|
117
|
+
padding:10px 28px; font-family:inherit; font-size:14px; color:#fff; letter-spacing:1px;
|
|
118
|
+
background:linear-gradient(90deg, var(--cyan), #0284c7);
|
|
119
|
+
box-shadow:0 0 30px rgba(14,165,233,.4); transition:box-shadow .25s, transform .15s;
|
|
120
|
+
}
|
|
121
|
+
.copy-btn:hover{ box-shadow:0 0 45px rgba(14,165,233,.6); transform:translateY(-1px); }
|
|
122
|
+
.copy-btn:active{ transform:scale(.97); }
|
|
123
|
+
.copy-btn svg{ width:16px; height:16px; flex:0 0 auto; }
|
|
124
|
+
.copy-btn .check{ display:none; }
|
|
125
|
+
.copy-btn.copied .copy{ display:none; }
|
|
126
|
+
.copy-btn.copied .check{ display:block; }
|
|
127
|
+
/* ============ 概览 Bento ============ */
|
|
128
|
+
.overview{
|
|
129
|
+
position:relative; background:var(--card);
|
|
130
|
+
background-image:repeating-linear-gradient(180deg, rgba(255,255,255,.012) 0 1px, transparent 1px 8px);
|
|
131
|
+
border-top:1px solid var(--glow); border-bottom:1px solid var(--glow);
|
|
132
|
+
border-radius:6px; overflow:hidden; margin-bottom:18px;
|
|
133
|
+
box-shadow:0 0 20px rgba(14,165,233,.08), inset 0 1px 24px rgba(14,165,233,.04);
|
|
134
|
+
}
|
|
135
|
+
.overview::before{
|
|
136
|
+
content:''; position:absolute; left:0; top:0; bottom:0; width:8px; z-index:2;
|
|
137
|
+
background:linear-gradient(180deg,#38bdf8,#0ea5e9);
|
|
138
|
+
box-shadow:0 0 12px rgba(14,165,233,.3);
|
|
139
|
+
}
|
|
140
|
+
.ov-bento{
|
|
141
|
+
position:relative; z-index:1; display:grid; padding:20px 20px 16px 28px; gap:10px;
|
|
142
|
+
grid-template-columns:104px 1fr 1fr; grid-template-rows:auto auto auto auto auto;
|
|
143
|
+
}
|
|
144
|
+
.ov-title{
|
|
145
|
+
grid-column:1/4; display:flex; align-items:center; gap:10px;
|
|
146
|
+
font-size:16px; font-weight:900; color:var(--cyan); letter-spacing:2px;
|
|
147
|
+
text-shadow:0 0 14px rgba(14,165,233,.45), 0 0 40px rgba(14,165,233,.18);
|
|
148
|
+
animation:secGlowCyan 3s ease-in-out infinite;
|
|
149
|
+
}
|
|
150
|
+
@keyframes secGlowCyan{
|
|
151
|
+
0%,100%{ text-shadow:0 0 14px rgba(14,165,233,.45), 0 0 40px rgba(14,165,233,.18); }
|
|
152
|
+
50%{ text-shadow:0 0 22px rgba(14,165,233,.75), 0 0 60px rgba(14,165,233,.3); }
|
|
153
|
+
}
|
|
154
|
+
/* 圆环 */
|
|
155
|
+
.ring-box{
|
|
156
|
+
grid-column:1; grid-row:2/6; display:flex; flex-direction:column; align-items:center;
|
|
157
|
+
justify-content:center; gap:8px;
|
|
158
|
+
}
|
|
159
|
+
.ring{ position:relative; width:88px; height:88px; }
|
|
160
|
+
.ring svg{ transform:rotate(-90deg); }
|
|
161
|
+
.ring .track{ fill:none; stroke:rgba(14,165,233,.12); stroke-width:7; }
|
|
162
|
+
.ring .val{
|
|
163
|
+
fill:none; stroke:url(#ringGrad); stroke-width:7; stroke-linecap:round;
|
|
164
|
+
stroke-dasharray:226.19; stroke-dashoffset:0;
|
|
165
|
+
filter:drop-shadow(0 0 6px rgba(14,165,233,.5));
|
|
166
|
+
}
|
|
167
|
+
.ring-num{
|
|
168
|
+
position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
|
|
169
|
+
font-size:22px; font-weight:900; color:var(--cyan);
|
|
170
|
+
text-shadow:0 0 12px rgba(14,165,233,.6);
|
|
171
|
+
}
|
|
172
|
+
.ring-label{ font-size:11px; color:var(--muted); text-align:center; line-height:1.5; }
|
|
173
|
+
/* 热力图 */
|
|
174
|
+
.heat-card{
|
|
175
|
+
grid-column:2/4; grid-row:2; display:flex; align-items:center; gap:14px;
|
|
176
|
+
border:1px solid rgba(14,165,233,.12); border-radius:6px; background:rgba(14,165,233,.03);
|
|
177
|
+
padding:12px 14px; flex-wrap:wrap;
|
|
178
|
+
}
|
|
179
|
+
.heat-title{ font-size:12px; font-weight:700; color:var(--text); letter-spacing:1px; white-space:nowrap; }
|
|
180
|
+
.heat-grid{ display:grid; grid-template-columns:repeat(3, 14px); grid-auto-flow:column; grid-template-rows:repeat(5, 14px); gap:4px; }
|
|
181
|
+
.hm{
|
|
182
|
+
width:14px; height:14px; border-radius:3px; position:relative; cursor:default;
|
|
183
|
+
background:rgba(14,165,233,.07);
|
|
184
|
+
}
|
|
185
|
+
.hm[data-v="1"]{ background:rgba(14,165,233,.3); }
|
|
186
|
+
.hm[data-v="2"]{ background:rgba(14,165,233,.55); }
|
|
187
|
+
.hm[data-v="3"]{ background:rgba(34,211,238,.8); box-shadow:0 0 8px rgba(34,211,238,.5); }
|
|
188
|
+
.hm::after{
|
|
189
|
+
content:attr(data-tip); position:absolute; bottom:calc(100% + 6px); left:50%; transform:translateX(-50%);
|
|
190
|
+
background:var(--card); border:1px solid rgba(14,165,233,.35); border-radius:4px;
|
|
191
|
+
color:var(--text); font-size:10px; padding:3px 8px; white-space:nowrap; z-index:5;
|
|
192
|
+
opacity:0; pointer-events:none; transition:opacity .15s;
|
|
193
|
+
}
|
|
194
|
+
.hm:hover::after{ opacity:1; }
|
|
195
|
+
.heat-days{ display:grid; grid-template-columns:repeat(5, 14px); gap:4px; margin-top:4px; padding-left:26px; }
|
|
196
|
+
.heat-days span{ font-size:9px; color:var(--muted); text-align:center; }
|
|
197
|
+
.heat-legend{ display:flex; align-items:center; gap:3px; margin-left:auto; }
|
|
198
|
+
.heat-legend span{ font-size:9px; color:var(--muted); }
|
|
199
|
+
/* 指标胶囊 */
|
|
200
|
+
.ov-item{
|
|
201
|
+
display:flex; align-items:center; gap:10px; padding:10px 14px;
|
|
202
|
+
border:1px solid rgba(14,165,233,.12); border-radius:6px; background:rgba(14,165,233,.03);
|
|
203
|
+
}
|
|
204
|
+
.ov-num{
|
|
205
|
+
font-size:24px; font-weight:900; color:var(--cyan); letter-spacing:1px;
|
|
206
|
+
text-shadow:0 0 12px rgba(14,165,233,.5);
|
|
207
|
+
}
|
|
208
|
+
.ov-num-static{ display:flex; flex-direction:column; line-height:1.2; }
|
|
209
|
+
.ov-num-static .main{ font-size:22px; font-weight:900; color:var(--cyan); text-shadow:0 0 12px rgba(14,165,233,.5); }
|
|
210
|
+
.ov-num-static .small{ font-size:10px; color:var(--rose); }
|
|
211
|
+
.ov-label{ font-size:11px; color:var(--muted); }
|
|
212
|
+
.ov-item .ov-num.small-num{ font-size:20px; }
|
|
213
|
+
/* 环比行 */
|
|
214
|
+
.ov-compare{
|
|
215
|
+
grid-column:2/4; grid-row:5; text-align:center; font-size:11.5px; color:var(--muted);
|
|
216
|
+
padding:4px 0 2px;
|
|
217
|
+
}
|
|
218
|
+
.ov-compare .up{ color:var(--green); font-weight:700; }
|
|
219
|
+
.ov-compare .down{ color:var(--rose); font-weight:700; }
|
|
220
|
+
/* 柱图 */
|
|
221
|
+
.cb-row{
|
|
222
|
+
grid-column:2/4; grid-row:6; display:flex; align-items:flex-end; justify-content:space-around;
|
|
223
|
+
height:86px; padding:0 6px; border-top:1px dashed rgba(14,165,233,.12); padding-top:10px; position:relative;
|
|
224
|
+
}
|
|
225
|
+
.cb-col{ position:relative; display:flex; flex-direction:column; align-items:center; gap:6px; height:100%; justify-content:flex-end; }
|
|
226
|
+
.cb-bar{
|
|
227
|
+
width:32px; border-radius:4px 4px 0 0;
|
|
228
|
+
background:linear-gradient(180deg, #38bdf8, #0ea5e9 60%, #0369a1);
|
|
229
|
+
box-shadow:0 0 10px rgba(14,165,233,.35);
|
|
230
|
+
min-height:3px; animation:cbGrow 1s ease-out both;
|
|
231
|
+
}
|
|
232
|
+
@keyframes cbGrow{ from{height:0;} }
|
|
233
|
+
.cb-col .cb-day{ font-size:9.5px; color:var(--muted); }
|
|
234
|
+
.cb-col .cb-tip{
|
|
235
|
+
position:absolute; bottom:calc(100% + 8px); left:50%; transform:translateX(-50%);
|
|
236
|
+
background:var(--card); border:1px solid rgba(14,165,233,.35); border-radius:4px;
|
|
237
|
+
color:var(--text); font-size:10px; padding:4px 8px; white-space:nowrap; z-index:5;
|
|
238
|
+
opacity:0; pointer-events:none; transition:opacity .15s;
|
|
239
|
+
}
|
|
240
|
+
.cb-col:hover .cb-tip{ opacity:1; }
|
|
241
|
+
.cb-count{ font-size:11px; font-weight:900; color:var(--cyan); text-shadow:0 0 8px rgba(14,165,233,.5); }
|
|
242
|
+
/* ============ 分节卡片 ============ */
|
|
243
|
+
.section{
|
|
244
|
+
position:relative; background:var(--card);
|
|
245
|
+
background-image:repeating-linear-gradient(180deg, rgba(255,255,255,.012) 0 1px, transparent 1px 8px);
|
|
246
|
+
border-top:1px solid var(--glow); border-bottom:1px solid var(--glow);
|
|
247
|
+
border-radius:6px; overflow:hidden; margin-bottom:18px;
|
|
248
|
+
box-shadow:0 0 20px rgba(14,165,233,.08), inset 0 1px 24px rgba(14,165,233,.04);
|
|
249
|
+
transition:transform .2s, box-shadow .2s;
|
|
250
|
+
}
|
|
251
|
+
.section:hover{ transform:perspective(900px) translateY(-2px) rotateY(calc(var(--mx,0)*2.5deg)) rotateX(calc(var(--my,0)*-2.5deg)); box-shadow:0 0 28px rgba(14,165,233,.14), inset 0 1px 30px rgba(14,165,233,.07); }
|
|
252
|
+
.header-card,.overview{transition:transform .18s ease-out}
|
|
253
|
+
.header-card:hover,.overview:hover{transform:perspective(900px) rotateY(calc(var(--mx,0)*2.5deg)) rotateX(calc(var(--my,0)*-2.5deg))}
|
|
254
|
+
.section::before{
|
|
255
|
+
content:''; position:absolute; left:0; top:0; bottom:0; width:8px; z-index:2;
|
|
256
|
+
}
|
|
257
|
+
.sec-done::before{ background:linear-gradient(180deg,#5eead4,#14b8a6); box-shadow:0 0 12px rgba(20,184,166,.3); }
|
|
258
|
+
.sec-plan::before{ background:linear-gradient(180deg,#fdba74,#f97316); box-shadow:0 0 12px rgba(249,115,22,.3); }
|
|
259
|
+
.sec-risk::before{ background:linear-gradient(180deg,#fda4af,#e11d48); box-shadow:0 0 12px rgba(225,29,72,.3); }
|
|
260
|
+
.sec-inner{ position:relative; z-index:1; padding:24px 24px 22px 32px; }
|
|
261
|
+
.sec-head{ display:flex; align-items:center; gap:10px; margin-bottom:16px; }
|
|
262
|
+
.sec-head svg{ width:18px; height:18px; flex:0 0 auto; }
|
|
263
|
+
.sec-head h2{
|
|
264
|
+
font-size:18px; font-weight:900; letter-spacing:1px;
|
|
265
|
+
animation:secGlow 3s ease-in-out infinite;
|
|
266
|
+
}
|
|
267
|
+
.sec-done .sec-head h2{ color:#5eead4; animation-name:secGlowDone; }
|
|
268
|
+
.sec-plan .sec-head h2{ color:#fdba74; animation-name:secGlowPlan; }
|
|
269
|
+
.sec-risk .sec-head h2{ color:#fda4af; animation-name:secGlowRisk; }
|
|
270
|
+
@keyframes secGlowDone{
|
|
271
|
+
0%,100%{ text-shadow:0 0 14px rgba(94,234,212,.45), 0 0 40px rgba(94,234,212,.18); }
|
|
272
|
+
50%{ text-shadow:0 0 22px rgba(94,234,212,.75), 0 0 60px rgba(94,234,212,.3); }
|
|
273
|
+
}
|
|
274
|
+
@keyframes secGlowPlan{
|
|
275
|
+
0%,100%{ text-shadow:0 0 14px rgba(253,186,116,.45), 0 0 40px rgba(253,186,116,.18); }
|
|
276
|
+
50%{ text-shadow:0 0 22px rgba(253,186,116,.75), 0 0 60px rgba(253,186,116,.3); }
|
|
277
|
+
}
|
|
278
|
+
@keyframes secGlowRisk{
|
|
279
|
+
0%,100%{ text-shadow:0 0 14px rgba(253,164,175,.45), 0 0 40px rgba(253,164,175,.18); }
|
|
280
|
+
50%{ text-shadow:0 0 22px rgba(253,164,175,.75), 0 0 60px rgba(253,164,175,.3); }
|
|
281
|
+
}
|
|
282
|
+
.sec-date{
|
|
283
|
+
margin-left:auto; flex:0 0 auto; font-size:11px; color:var(--muted); padding:3px 10px;
|
|
284
|
+
border-radius:999px; border:1px solid rgba(14,165,233,.18); background:rgba(14,165,233,.05);
|
|
285
|
+
letter-spacing:1px;
|
|
286
|
+
}
|
|
287
|
+
ol{ list-style:none; padding:0 12px; }
|
|
288
|
+
li{
|
|
289
|
+
display:flex; align-items:flex-start; gap:10px; padding:10px;
|
|
290
|
+
border-bottom:1px dashed rgba(14,165,233,.15); border-radius:4px;
|
|
291
|
+
transition:background .15s;
|
|
292
|
+
}
|
|
293
|
+
li:last-child{ border-bottom:none; }
|
|
294
|
+
li:hover{ background:rgba(14,165,233,.06); }
|
|
295
|
+
.idx{
|
|
296
|
+
flex:0 0 auto; width:28px; height:28px; border-radius:50%; position:relative;
|
|
297
|
+
display:flex; align-items:center; justify-content:center; color:#fff;
|
|
298
|
+
font-size:12px; font-weight:900; margin-top:2px; transition:transform .2s ease, font-size .2s ease;
|
|
299
|
+
text-shadow:0 1px 1px rgba(0,0,0,.25);
|
|
300
|
+
box-shadow:0 2px 4px rgba(0,0,0,.25), 0 0 8px rgba(20,184,166,.4);
|
|
301
|
+
transition:transform .2s;
|
|
302
|
+
}
|
|
303
|
+
li:hover .idx{ transform:scale(1.18) rotate(-4deg); font-size:14px; }
|
|
304
|
+
.idx b{ display:inline-block; transition:transform .2s ease; }
|
|
305
|
+
li:hover .idx b{ transform:rotate(-6deg); }
|
|
306
|
+
.idx.done{
|
|
307
|
+
background:radial-gradient(circle at 30% 28%, #7dd9cf, #14b8a6 55%, #0d9488);
|
|
308
|
+
box-shadow:0 2px 4px rgba(0,0,0,.25), 0 0 8px rgba(20,184,166,.4), inset -3px -4px 6px rgba(0,0,0,.3), inset 1px 2px 3px rgba(255,255,255,.2);
|
|
309
|
+
}
|
|
310
|
+
.idx.plan{
|
|
311
|
+
background:radial-gradient(circle at 30% 28%, #fdc69a, #f97316 55%, #ea580c);
|
|
312
|
+
box-shadow:0 2px 4px rgba(0,0,0,.25), 0 0 8px rgba(249,115,22,.4), inset -3px -4px 6px rgba(0,0,0,.3), inset 1px 2px 3px rgba(255,255,255,.2);
|
|
313
|
+
}
|
|
314
|
+
.idx.risk{
|
|
315
|
+
background:radial-gradient(circle at 30% 28%, #fdaab4, #f43f5e 55%, #e11d48);
|
|
316
|
+
box-shadow:0 2px 4px rgba(0,0,0,.25), 0 0 8px rgba(244,63,94,.4), inset -3px -4px 6px rgba(0,0,0,.3), inset 1px 2px 3px rgba(255,255,255,.2);
|
|
317
|
+
}
|
|
318
|
+
.idx::before{
|
|
319
|
+
content:''; position:absolute; top:5px; left:7px; width:8px; height:6px; border-radius:50%;
|
|
320
|
+
background:radial-gradient(circle, rgba(255,255,255,.7), rgba(255,255,255,0));
|
|
321
|
+
transform:rotate(-28deg); pointer-events:none;
|
|
322
|
+
}
|
|
323
|
+
.entry{ flex:1; min-width:0; }
|
|
324
|
+
.desc{ font-size:15px; line-height:1.65; color:var(--text); }
|
|
325
|
+
.meta{ font-size:12px; color:var(--muted); margin-top:5px; }
|
|
326
|
+
.meta .qt{ color:#7fa8cc; }
|
|
327
|
+
.meta b{ color:var(--cyan); font-weight:900; margin:0 2px; text-shadow:0 0 8px rgba(14,165,233,.5); }
|
|
328
|
+
.advice{ font-size:12px; color:var(--cyan); margin-top:6px; }
|
|
329
|
+
.advice b{ font-weight:900; }
|
|
330
|
+
/* 进度条 */
|
|
331
|
+
.pbar-track{
|
|
332
|
+
position:relative; margin-top:9px; height:5px; border-radius:999px;
|
|
333
|
+
background:rgba(14,165,233,.12);
|
|
334
|
+
}
|
|
335
|
+
.pbar-fill{
|
|
336
|
+
display:block; position:relative; height:100%; border-radius:999px;
|
|
337
|
+
background:linear-gradient(90deg,#0d9488,#14b8a6 45%,#2dd4bf 82%,#a7f3d0);
|
|
338
|
+
box-shadow:0 0 10px rgba(45,212,191,.35); width:0;
|
|
339
|
+
transition:width 1.1s cubic-bezier(.3,.8,.4,1); /* 与流星扫过同参数:首次加载进度与流星同步增长 */
|
|
340
|
+
}
|
|
341
|
+
.pbar-done .pbar-fill{ background:linear-gradient(90deg,#0d9488,#14b8a6 45%,#2dd4bf 82%,#a7f3d0); box-shadow:0 0 10px rgba(45,212,191,.35); }
|
|
342
|
+
.pbar-plan .pbar-fill{ background:linear-gradient(90deg,#c2410c,#f97316 45%,#fb923c 82%,#fdba74); box-shadow:0 0 10px rgba(249,115,22,.35); }
|
|
343
|
+
.pbar-fill::before{
|
|
344
|
+
content:''; position:absolute; right:0; top:50%; width:7px; height:7px; border-radius:50%;
|
|
345
|
+
transform:translate(50%,-50%); z-index:2;
|
|
346
|
+
}
|
|
347
|
+
.pbar-done .pbar-fill::before{
|
|
348
|
+
background:radial-gradient(circle at 35% 30%, #a7f3d0, #5eead4 55%, #2dd4bf 100%);
|
|
349
|
+
box-shadow:0 0 8px rgba(45,212,191,.7);
|
|
350
|
+
}
|
|
351
|
+
.pbar-plan .pbar-fill::before{
|
|
352
|
+
background:radial-gradient(circle at 35% 30%, #fed7aa, #fdba74 55%, #fb923c 100%);
|
|
353
|
+
box-shadow:0 0 8px rgba(249,115,22,.7);
|
|
354
|
+
}
|
|
355
|
+
.pbar-track.sheen-on .pbar-fill::before{ animation:dotPulse 1.1s; }
|
|
356
|
+
@keyframes dotPulse{ 90%{ filter:brightness(2) drop-shadow(0 0 6px #fff); } }
|
|
357
|
+
.pbar-sweep{
|
|
358
|
+
position:absolute; left:0; top:50%; transform:translateY(-50%); height:16px; width:0;
|
|
359
|
+
z-index:1; pointer-events:none; opacity:0;
|
|
360
|
+
}.pbar-comet{
|
|
361
|
+
position:absolute; left:100%; top:50%; transform:translateY(-50%);
|
|
362
|
+
width:14px; height:10px;
|
|
363
|
+
}
|
|
364
|
+
.pbar-comet::before{
|
|
365
|
+
content:''; position:absolute; inset:0; z-index:2;
|
|
366
|
+
clip-path:polygon(0% 50%, 3% 36%, 10% 18%, 24% 4%, 42% 0%, 60% 1%, 78% 6%, 92% 17%, 99% 33%, 100% 50%, 99% 67%, 92% 83%, 78% 94%, 60% 99%, 42% 100%, 24% 96%, 10% 82%, 3% 64%);
|
|
367
|
+
background:
|
|
368
|
+
linear-gradient(90deg,rgba(186,230,253,.7),rgba(224,254,255,.95) 30%,#fff 46%,rgba(244,255,255,1) 58%,rgba(224,254,255,.9) 72%,rgba(186,230,253,.65)),
|
|
369
|
+
radial-gradient(circle 2px at 40% 50%,#fff,rgba(224,254,255,.92) 55%,rgba(125,211,252,.4) 85%,transparent);
|
|
370
|
+
filter:drop-shadow(0 0 2px rgba(186,230,253,.7)) drop-shadow(0 0 5px rgba(45,212,191,.25));
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.pbar-comet::after{
|
|
374
|
+
content:'';position:absolute;right:40%;top:50%;width:68px; height:10px;
|
|
375
|
+
transform:translateY(-50%);
|
|
376
|
+
background:linear-gradient(90deg,rgba(45,212,191,0),rgba(45,212,191,.4) 15%,rgba(125,211,252,.8) 35%,rgba(224,254,255,.95) 55%,rgba(242,255,255,1) 75%,#fff 100%);
|
|
377
|
+
clip-path:polygon(0 50%, 10% 30%, 100% 0, 100% 100%, 10% 70%);
|
|
378
|
+
mask-image:linear-gradient(90deg, transparent 0%, #000 20%, #000 100%);
|
|
379
|
+
-webkit-mask-image:linear-gradient(90deg, transparent 0%, #000 20%, #000 100%);
|
|
380
|
+
filter:blur(1px);
|
|
381
|
+
z-index:0;
|
|
382
|
+
}
|
|
383
|
+
/* 流星剥落粒子:从光核中后部诞生、0~8% 快速渐显、沿水平线加速后飘、渐小渐隐(椭圆各异不规则、明灭发光,与主体 2.4s 呼吸不同频) */
|
|
384
|
+
.pbar-comet .cp-deep{ animation:cpFlowDeep 1.4s linear infinite; }
|
|
385
|
+
@keyframes cpFlowDeep{
|
|
386
|
+
0%{ opacity:0; transform:translate3d(0,0,0) scale(.3) rotate(var(--r,0deg)); box-shadow:0 0 6px 2.5px rgba(56,189,248,.9); }
|
|
387
|
+
8%{ opacity:1; transform:translate3d(calc(var(--dx,-60px)*.01), calc(var(--dy,0)*.01), 0) scale(1) rotate(var(--r,0deg)); }
|
|
388
|
+
35%{ transform:translate3d(calc(var(--dx,-60px)*.08), calc(var(--dy,0)*.30), 0) scale(.78) rotate(var(--r,0deg)); }
|
|
389
|
+
55%{ opacity:.85; transform:translate3d(calc(var(--dx,-60px)*.38), calc(var(--dy,0)*.10), 0) scale(.4) rotate(var(--r,0deg)); box-shadow:0 0 8px 3px rgba(56,189,248,1); }
|
|
390
|
+
100%{ opacity:0; transform:translate3d(var(--dx,-60px), calc(var(--dy,0)*.05), 0) scale(.06) rotate(var(--r,0deg)); box-shadow:0 0 1px 0 rgba(56,189,248,0); }
|
|
391
|
+
}
|
|
392
|
+
.cp{
|
|
393
|
+
position:absolute; border-radius:50%; opacity:0; z-index:1; pointer-events:none;
|
|
394
|
+
background:linear-gradient(90deg, rgba(125,211,252,.18), rgba(224,242,254,.9) 45%, #fff 86%);
|
|
395
|
+
box-shadow:0 0 5px 2px rgba(125,211,252,.7);
|
|
396
|
+
animation:cpFlow 1.4s linear infinite;
|
|
397
|
+
}
|
|
398
|
+
@keyframes cpFlow{
|
|
399
|
+
0%{ opacity:0; transform:translate3d(0,0,0) scale(.3) rotate(var(--r,0deg)); box-shadow:0 0 5px 2px rgba(125,211,252,.7); }
|
|
400
|
+
8%{ opacity:1; transform:translate3d(calc(var(--dx,-60px)*.01), calc(var(--dy,0)*.01), 0) scale(1) rotate(var(--r,0deg)); }
|
|
401
|
+
35%{ transform:translate3d(calc(var(--dx,-60px)*.08), calc(var(--dy,0)*.30), 0) scale(.78) rotate(var(--r,0deg)); }
|
|
402
|
+
52%{ opacity:.7; transform:translate3d(calc(var(--dx,-60px)*.35), calc(var(--dy,0)*.12), 0) scale(.4) rotate(var(--r,0deg)); box-shadow:0 0 7px 2.5px rgba(125,211,252,.95); }
|
|
403
|
+
100%{ opacity:0; transform:translate3d(var(--dx,-60px), calc(var(--dy,0)*.05), 0) scale(.06) rotate(var(--r,0deg)); box-shadow:0 0 1px 0 rgba(186,230,253,0); }
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
@keyframes glowPulse{
|
|
408
|
+
0%,100%{filter:drop-shadow(0 0 2px rgba(186,230,253,.7)) drop-shadow(0 0 5px rgba(45,212,191,.25));}
|
|
409
|
+
50%{filter:drop-shadow(0 0 4px rgba(186,230,253,.95)) drop-shadow(0 0 8px rgba(45,212,191,.45));}
|
|
410
|
+
}
|
|
411
|
+
@keyframes tailGlow{
|
|
412
|
+
0%,100%{filter:blur(1px) brightness(1);}
|
|
413
|
+
50%{filter:blur(1.5px) brightness(1.28);}
|
|
414
|
+
}
|
|
415
|
+
.pbar-track.sheen-on .pbar-sweep{ opacity:1; transition:width 1.1s cubic-bezier(.3,.8,.4,1); }
|
|
416
|
+
.pbar-track.sheen-on .pbar-comet{ animation:cometFade 1.1s; }
|
|
417
|
+
.pbar-track.sheen-on .pbar-comet::after{ animation:tailGlow 2.4s ease-in-out infinite; }
|
|
418
|
+
.pbar-track.sheen-on .pbar-comet::before{ animation:glowPulse 2.4s ease-in-out infinite; }
|
|
419
|
+
@keyframes cometFade{ 0%{opacity:0;} 7%{opacity:1;} 86%{opacity:1;} 100%{opacity:0;} }
|
|
420
|
+
/* 暂无 */
|
|
421
|
+
.empty{
|
|
422
|
+
font-size:14px; color:var(--muted); padding:16px 12px; letter-spacing:1px;
|
|
423
|
+
border:1px dashed rgba(14,165,233,.15); border-radius:6px; text-align:center;
|
|
424
|
+
}
|
|
425
|
+
/* 液态玻璃 */
|
|
426
|
+
@supports((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
|
|
427
|
+
.overview, .section{ backdrop-filter:blur(16px) saturate(1.35); background-color:rgba(11,30,55,.42); }
|
|
428
|
+
}
|
|
429
|
+
/* 入场 */
|
|
430
|
+
.header-card{ animation:fadeDown .5s ease-out backwards; }
|
|
431
|
+
.section{ animation:riseIn .5s ease-out backwards; }
|
|
432
|
+
.section:nth-of-type(1){ animation-delay:.26s; }
|
|
433
|
+
.section:nth-of-type(2){ animation-delay:.4s; }
|
|
434
|
+
.section:nth-of-type(3){ animation-delay:.54s; }
|
|
435
|
+
@keyframes fadeDown{ from{opacity:0; transform:translateY(-12px);} to{opacity:1; transform:none;} }
|
|
436
|
+
@keyframes riseIn{ from{opacity:0; transform:translateY(14px);} to{opacity:1; transform:none;} }
|
|
437
|
+
.overview{ animation:riseIn .5s ease-out .13s backwards; }
|
|
438
|
+
.footer{
|
|
439
|
+
text-align:center; font-size:10px; color:var(--muted); letter-spacing:1.5px;
|
|
440
|
+
padding:6px 0 2px; position:relative; z-index:1;
|
|
441
|
+
}
|
|
442
|
+
</style>
|
|
443
|
+
</head>
|
|
444
|
+
<body>
|
|
445
|
+
<div class="grid-pattern"></div>
|
|
446
|
+
<div class="stars"></div>
|
|
447
|
+
<div class="scanband"></div>
|
|
448
|
+
<div class="scanlines"></div>
|
|
449
|
+
|
|
450
|
+
<div class="wrap">
|
|
451
|
+
<!-- 头部 -->
|
|
452
|
+
<div class="header-card" id="headerCard">
|
|
453
|
+
<div class="card-glow"></div>
|
|
454
|
+
<span class="scanline-el scan-x scan-top"></span>
|
|
455
|
+
<span class="scanline-el scan-y scan-right"></span>
|
|
456
|
+
<span class="scanline-el scan-x scan-bottom"></span>
|
|
457
|
+
<span class="scanline-el scan-y scan-left"></span>
|
|
458
|
+
<h1>本周周报</h1>
|
|
459
|
+
<div class="header-sub">20261102 ~ 20261106</div>
|
|
460
|
+
<span class="header-badge">生成时间 2026-11-06 14:57:02</span>
|
|
461
|
+
<div class="summary-line">
|
|
462
|
+
<span class="summary-tag">TL;DR</span>
|
|
463
|
+
<span class="summary-text">本周 11 次提交覆盖客户端/服务端/网关三端,周三单日 8 次提交集中交付直播、礼物、登录、互动等多线功能;底部导航两轮修复后随 v1.2.2 收口。整体节奏紧凑、无阻塞风险,下周可聚焦配送链路打磨与直播体验优化。</span>
|
|
464
|
+
</div>
|
|
465
|
+
<div class="copy-wrap">
|
|
466
|
+
<button class="copy-btn" id="copyBtn" type="button">
|
|
467
|
+
<svg class="copy" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4">
|
|
468
|
+
<rect x="5.5" y="5.5" width="8.5" height="8.5" rx="1.5"/>
|
|
469
|
+
<path d="M10.5 5.5V4a1.5 1.5 0 0 0-1.5-1.5H4A1.5 1.5 0 0 0 2.5 4v5A1.5 1.5 0 0 0 4 10.5h1.5"/>
|
|
470
|
+
</svg>
|
|
471
|
+
<svg class="check" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6">
|
|
472
|
+
<path d="M2.5 8.5l3.5 3.5 7.5-8"/>
|
|
473
|
+
</svg>
|
|
474
|
+
<span class="btn-text">一键复制</span>
|
|
475
|
+
</button>
|
|
476
|
+
</div>
|
|
477
|
+
</div>
|
|
478
|
+
|
|
479
|
+
<!-- 本周概览 -->
|
|
480
|
+
<div class="overview" id="overviewCard">
|
|
481
|
+
<div class="card-glow"></div>
|
|
482
|
+
<div class="ov-bento">
|
|
483
|
+
<div class="ov-title">本周概览</div>
|
|
484
|
+
<div class="ring-box">
|
|
485
|
+
<div class="ring">
|
|
486
|
+
<svg width="88" height="88" viewBox="0 0 88 88">
|
|
487
|
+
<defs>
|
|
488
|
+
<linearGradient id="ringGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
489
|
+
<stop offset="0%" stop-color="#38bdf8"/>
|
|
490
|
+
<stop offset="100%" stop-color="#0ea5e9"/>
|
|
491
|
+
</linearGradient>
|
|
492
|
+
</defs>
|
|
493
|
+
<circle class="track" cx="44" cy="44" r="36"/>
|
|
494
|
+
<circle class="val" cx="44" cy="44" r="36"/>
|
|
495
|
+
</svg>
|
|
496
|
+
<div class="ring-num">100%</div>
|
|
497
|
+
</div>
|
|
498
|
+
<div class="ring-label">8/8 项已交付</div>
|
|
499
|
+
</div>
|
|
500
|
+
|
|
501
|
+
<div class="heat-card">
|
|
502
|
+
<span class="heat-title">提交热力图</span>
|
|
503
|
+
<div class="heat-grid">
|
|
504
|
+
<span class="hm" data-v="0" data-tip="周一上午 · 0 次"></span>
|
|
505
|
+
<span class="hm" data-v="0" data-tip="周一下午 · 0 次"></span>
|
|
506
|
+
<span class="hm" data-v="0" data-tip="周一晚上 · 0 次"></span>
|
|
507
|
+
<span class="hm" data-v="0" data-tip="周二上午 · 0 次"></span>
|
|
508
|
+
<span class="hm" data-v="0" data-tip="周二下午 · 0 次"></span>
|
|
509
|
+
<span class="hm" data-v="0" data-tip="周二晚上 · 0 次"></span>
|
|
510
|
+
<span class="hm" data-v="0" data-tip="周三上午 · 0 次"></span>
|
|
511
|
+
<span class="hm" data-v="3" data-tip="周三下午 · 8 次"></span>
|
|
512
|
+
<span class="hm" data-v="0" data-tip="周三晚上 · 0 次"></span>
|
|
513
|
+
<span class="hm" data-v="0" data-tip="周四上午 · 0 次"></span>
|
|
514
|
+
<span class="hm" data-v="1" data-tip="周四下午 · 1 次"></span>
|
|
515
|
+
<span class="hm" data-v="0" data-tip="周四晚上 · 0 次"></span>
|
|
516
|
+
<span class="hm" data-v="2" data-tip="周五上午 · 2 次"></span>
|
|
517
|
+
<span class="hm" data-v="0" data-tip="周五下午 · 0 次"></span>
|
|
518
|
+
<span class="hm" data-v="0" data-tip="周五晚上 · 0 次"></span>
|
|
519
|
+
</div>
|
|
520
|
+
<div class="heat-legend"><span>少</span><span class="hm" data-v="0"></span><span class="hm" data-v="1"></span><span class="hm" data-v="2"></span><span class="hm" data-v="3"></span><span>多</span></div>
|
|
521
|
+
</div>
|
|
522
|
+
|
|
523
|
+
<div class="ov-item">
|
|
524
|
+
<span class="ov-num" data-count="11">11</span>
|
|
525
|
+
<span class="ov-label">提交数</span>
|
|
526
|
+
</div>
|
|
527
|
+
<div class="ov-item">
|
|
528
|
+
<span class="ov-num" data-count="3">3</span>
|
|
529
|
+
<span class="ov-label">活跃天数</span>
|
|
530
|
+
</div>
|
|
531
|
+
<div class="ov-item">
|
|
532
|
+
<span class="ov-num" data-count="213">213</span>
|
|
533
|
+
<span class="ov-label">涉及文件</span>
|
|
534
|
+
</div>
|
|
535
|
+
<div class="ov-item">
|
|
536
|
+
<div class="ov-num-static">
|
|
537
|
+
<span class="main">+19.4k</span>
|
|
538
|
+
<span class="small">−2.5k 删行</span>
|
|
539
|
+
</div>
|
|
540
|
+
<span class="ov-label">代码行数</span>
|
|
541
|
+
</div>
|
|
542
|
+
|
|
543
|
+
<div class="ov-compare">vs 上周:提交 17 → 11 <span class="down">(-35%)</span> · 完成任务 8 项</div>
|
|
544
|
+
|
|
545
|
+
<div class="cb-row">
|
|
546
|
+
<div class="cb-col">
|
|
547
|
+
<div class="cb-tip">周一 · 0 次提交</div>
|
|
548
|
+
<span class="cb-count">0</span>
|
|
549
|
+
<div class="cb-bar" style="height:3px; animation-delay:.5s;"></div>
|
|
550
|
+
<span class="cb-day">周一</span>
|
|
551
|
+
</div>
|
|
552
|
+
<div class="cb-col">
|
|
553
|
+
<div class="cb-tip">周二 · 0 次提交</div>
|
|
554
|
+
<span class="cb-count">0</span>
|
|
555
|
+
<div class="cb-bar" style="height:3px; animation-delay:.55s;"></div>
|
|
556
|
+
<span class="cb-day">周二</span>
|
|
557
|
+
</div>
|
|
558
|
+
<div class="cb-col">
|
|
559
|
+
<div class="cb-tip">周三 · 8 次提交 · 多线收束/礼物/登录/互动/配送</div>
|
|
560
|
+
<span class="cb-count">8</span>
|
|
561
|
+
<div class="cb-bar" style="height:100%; animation-delay:.6s;"></div>
|
|
562
|
+
<span class="cb-day">周三</span>
|
|
563
|
+
</div>
|
|
564
|
+
<div class="cb-col">
|
|
565
|
+
<div class="cb-tip">周四 · 1 次提交 · 底部导航仿参考图重绘</div>
|
|
566
|
+
<span class="cb-count">1</span>
|
|
567
|
+
<div class="cb-bar" style="height:12.5%; animation-delay:.65s;"></div>
|
|
568
|
+
<span class="cb-day">周四</span>
|
|
569
|
+
</div>
|
|
570
|
+
<div class="cb-col">
|
|
571
|
+
<div class="cb-tip">周五 · 2 次提交 · 白条三角根治/发版</div>
|
|
572
|
+
<span class="cb-count">2</span>
|
|
573
|
+
<div class="cb-bar" style="height:25%; animation-delay:.7s;"></div>
|
|
574
|
+
<span class="cb-day">周五</span>
|
|
575
|
+
</div>
|
|
576
|
+
</div>
|
|
577
|
+
</div>
|
|
578
|
+
</div>
|
|
579
|
+
|
|
580
|
+
<!-- 本周任务进度 -->
|
|
581
|
+
<div class="section sec-done">
|
|
582
|
+
<div class="card-glow"></div>
|
|
583
|
+
<div class="sec-inner">
|
|
584
|
+
<div class="sec-head">
|
|
585
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="url(#doneGrad)" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" style="filter:drop-shadow(0 0 6px rgba(94,234,212,.4));">
|
|
586
|
+
<defs>
|
|
587
|
+
<linearGradient id="doneGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
588
|
+
<stop offset="0%" stop-color="#5eead4"/><stop offset="100%" stop-color="#14b8a6"/>
|
|
589
|
+
</linearGradient>
|
|
590
|
+
</defs>
|
|
591
|
+
<circle cx="12" cy="12" r="9"/>
|
|
592
|
+
<path d="M8.5 12.5l2.5 2.5 4.5-5"/>
|
|
593
|
+
</svg>
|
|
594
|
+
<h2>本周任务进度</h2>
|
|
595
|
+
<span class="sec-date">2026-11-02 ~ 2026-11-06</span>
|
|
596
|
+
</div>
|
|
597
|
+
<ol>
|
|
598
|
+
<li class="pbar-done">
|
|
599
|
+
<span class="idx done"><b>1</b></span>
|
|
600
|
+
<div class="entry">
|
|
601
|
+
<div class="desc">完成底部导航仿参考图重绘:白栏穹顶拱形与发布按钮凸出,两轮修复根治白条与三角缺口,并发布 v1.2.2</div>
|
|
602
|
+
<div class="meta"><span class="qt">3 次提交、23 文件、+1741/-178 行</span> - <b>100%</b> - 用时约1.5D</div>
|
|
603
|
+
<div class="pbar-track"><div class="pbar-sweep"><div class="pbar-comet"></div></div><div class="pbar-fill" data-w="100"></div></div>
|
|
604
|
+
</div>
|
|
605
|
+
</li>
|
|
606
|
+
<li class="pbar-done">
|
|
607
|
+
<span class="idx done"><b>2</b></span>
|
|
608
|
+
<div class="entry">
|
|
609
|
+
<div class="desc">完成订单配送能力深化:客户端配送费预估与骑手状态展示,服务端 DISPATCHING 状态机与骑手通道抽象</div>
|
|
610
|
+
<div class="meta"><span class="qt">2 次提交、15 文件、+507/-35 行</span> - <b>100%</b> - 用时约1.5D</div>
|
|
611
|
+
<div class="pbar-track"><div class="pbar-sweep"><div class="pbar-comet"></div></div><div class="pbar-fill" data-w="100"></div></div>
|
|
612
|
+
</div>
|
|
613
|
+
</li>
|
|
614
|
+
<li class="pbar-done">
|
|
615
|
+
<span class="idx done"><b>3</b></span>
|
|
616
|
+
<div class="entry">
|
|
617
|
+
<div class="desc">完成对外号正名为产品级主账号邻音号,我的页/账号中心/联系人/群聊全面去内部术语</div>
|
|
618
|
+
<div class="meta"><span class="qt">1 次提交、4 文件、+25/-25 行</span> - <b>100%</b> - 用时约0.5D</div>
|
|
619
|
+
<div class="pbar-track"><div class="pbar-sweep"><div class="pbar-comet"></div></div><div class="pbar-fill" data-w="100"></div></div>
|
|
620
|
+
</div>
|
|
621
|
+
</li>
|
|
622
|
+
<li class="pbar-done">
|
|
623
|
+
<span class="idx done"><b>4</b></span>
|
|
624
|
+
<div class="entry">
|
|
625
|
+
<div class="desc">完成萤火虚拟币礼物体系:钱包/充值/16 款四档礼物/原子扣款与 43001 拦截、WS 房间广播、模拟观众自动送礼</div>
|
|
626
|
+
<div class="meta"><span class="qt">1 次提交、22 文件、+1246/-3 行</span> - <b>100%</b> - 用时约1D</div>
|
|
627
|
+
<div class="pbar-track"><div class="pbar-sweep"><div class="pbar-comet"></div></div><div class="pbar-fill" data-w="100"></div></div>
|
|
628
|
+
</div>
|
|
629
|
+
</li>
|
|
630
|
+
<li class="pbar-done">
|
|
631
|
+
<span class="idx done"><b>5</b></span>
|
|
632
|
+
<div class="entry">
|
|
633
|
+
<div class="desc">完成帖子互动闭环与媒体上传:评论/点赞/收藏/分享四实体与互动快照、30MB 短视频上传接口</div>
|
|
634
|
+
<div class="meta"><span class="qt">1 次提交、22 文件、+1311/-31 行</span> - <b>100%</b> - 用时约1D</div>
|
|
635
|
+
<div class="pbar-track"><div class="pbar-sweep"><div class="pbar-comet"></div></div><div class="pbar-fill" data-w="100"></div></div>
|
|
636
|
+
</div>
|
|
637
|
+
</li>
|
|
638
|
+
<li class="pbar-done">
|
|
639
|
+
<span class="idx done"><b>6</b></span>
|
|
640
|
+
<div class="entry">
|
|
641
|
+
<div class="desc">完成登录安全加固与三方登录:短信验证码(回显+限流+签名)、微信/支付宝绑定、换绑手机号、APK 版本门禁</div>
|
|
642
|
+
<div class="meta"><span class="qt">1 次提交、42 文件、+1792/-87 行</span> - <b>100%</b> - 用时约1.5D</div>
|
|
643
|
+
<div class="pbar-track"><div class="pbar-sweep"><div class="pbar-comet"></div></div><div class="pbar-fill" data-w="100"></div></div>
|
|
644
|
+
</div>
|
|
645
|
+
</li>
|
|
646
|
+
<li class="pbar-done">
|
|
647
|
+
<span class="idx done"><b>7</b></span>
|
|
648
|
+
<div class="entry">
|
|
649
|
+
<div class="desc">完成网关 V2 二进制帧协议升级:Protobuf 上下行帧、JWT 握手鉴权与 HMAC 签名、房间索引、wsprobe 冒烟探针</div>
|
|
650
|
+
<div class="meta"><span class="qt">1 次提交、10 文件、+1552/-59 行</span> - <b>100%</b> - 用时约1D</div>
|
|
651
|
+
<div class="pbar-track"><div class="pbar-sweep"><div class="pbar-comet"></div></div><div class="pbar-fill" data-w="100"></div></div>
|
|
652
|
+
</div>
|
|
653
|
+
</li>
|
|
654
|
+
<li class="pbar-done">
|
|
655
|
+
<span class="idx done"><b>8</b></span>
|
|
656
|
+
<div class="entry">
|
|
657
|
+
<div class="desc">完成多线功能收束:直播推流与观众端、验证码/三方登录页、短视频录制播放、收藏互动、更新自检、SSL pinning</div>
|
|
658
|
+
<div class="meta"><span class="qt">1 次提交、72 文件、+11.1k/-2.1k 行</span> - <b>100%</b> - 用时约2D</div>
|
|
659
|
+
<div class="pbar-track"><div class="pbar-sweep"><div class="pbar-comet"></div></div><div class="pbar-fill" data-w="100"></div></div>
|
|
660
|
+
</div>
|
|
661
|
+
</li>
|
|
662
|
+
</ol>
|
|
663
|
+
</div>
|
|
664
|
+
</div>
|
|
665
|
+
|
|
666
|
+
<!-- 下周计划 -->
|
|
667
|
+
<div class="section sec-plan">
|
|
668
|
+
<div class="card-glow"></div>
|
|
669
|
+
<div class="sec-inner">
|
|
670
|
+
<div class="sec-head">
|
|
671
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="url(#planGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="filter:drop-shadow(0 0 6px rgba(253,186,116,.4));">
|
|
672
|
+
<defs>
|
|
673
|
+
<linearGradient id="planGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
674
|
+
<stop offset="0%" stop-color="#fdba74"/><stop offset="100%" stop-color="#f97316"/>
|
|
675
|
+
</linearGradient>
|
|
676
|
+
</defs>
|
|
677
|
+
<rect x="3.5" y="5" width="17" height="15.5" rx="2.5"/>
|
|
678
|
+
<path d="M3.5 9.5h17M8 2.8v3.4M16 2.8v3.4"/>
|
|
679
|
+
</svg>
|
|
680
|
+
<h2>下周计划</h2>
|
|
681
|
+
</div>
|
|
682
|
+
<div class="empty">暂无</div>
|
|
683
|
+
</div>
|
|
684
|
+
</div>
|
|
685
|
+
|
|
686
|
+
<!-- 风险阻塞点 -->
|
|
687
|
+
<div class="section sec-risk">
|
|
688
|
+
<div class="card-glow"></div>
|
|
689
|
+
<div class="sec-inner">
|
|
690
|
+
<div class="sec-head">
|
|
691
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="url(#riskGrad)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="filter:drop-shadow(0 0 6px rgba(253,164,175,.4));">
|
|
692
|
+
<defs>
|
|
693
|
+
<linearGradient id="riskGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
694
|
+
<stop offset="0%" stop-color="#fda4af"/><stop offset="100%" stop-color="#e11d48"/>
|
|
695
|
+
</linearGradient>
|
|
696
|
+
</defs>
|
|
697
|
+
<path d="M12 3.5L21 19.5H3z"/>
|
|
698
|
+
<path d="M12 10v4.5M12 17.2v.2"/>
|
|
699
|
+
</svg>
|
|
700
|
+
<h2>风险阻塞点</h2>
|
|
701
|
+
</div>
|
|
702
|
+
<div class="empty">暂无</div>
|
|
703
|
+
</div>
|
|
704
|
+
</div>
|
|
705
|
+
|
|
706
|
+
<div class="footer">GENERATED BY SPECCORE TEAM · 20261102 ~ 20261106</div>
|
|
707
|
+
</div>
|
|
708
|
+
|
|
709
|
+
<script>
|
|
710
|
+
// 复制纯文本
|
|
711
|
+
var TXT = "本周周报 - 20261102 ~ 20261106\n\n生成时间:2026-11-06 14:57:02\n\nTL;DR:本周 11 次提交覆盖客户端/服务端/网关三端,周三单日 8 次提交集中交付直播、礼物、登录、互动等多线功能;底部导航两轮修复后随 v1.2.2 收口。整体节奏紧凑、无阻塞风险,下周可聚焦配送链路打磨与直播体验优化。\n\n本周任务进度\n1、完成底部导航仿参考图重绘:白栏穹顶拱形与发布按钮凸出,两轮修复根治白条与三角缺口,并发布 v1.2.2(3 次提交、23 文件、+1741/-178 行)- 进度100% - 用时约1.5D\n2、完成订单配送能力深化:客户端配送费预估与骑手状态展示,服务端 DISPATCHING 状态机与骑手通道抽象(2 次提交、15 文件、+507/-35 行)- 进度100% - 用时约1.5D\n3、完成对外号正名为产品级主账号邻音号,我的页/账号中心/联系人/群聊全面去内部术语(1 次提交、4 文件、+25/-25 行)- 进度100% - 用时约0.5D\n4、完成萤火虚拟币礼物体系:钱包/充值/16 款四档礼物/原子扣款与 43001 拦截、WS 房间广播、模拟观众自动送礼(1 次提交、22 文件、+1246/-3 行)- 进度100% - 用时约1D\n5、完成帖子互动闭环与媒体上传:评论/点赞/收藏/分享四实体与互动快照、30MB 短视频上传接口(1 次提交、22 文件、+1311/-31 行)- 进度100% - 用时约1D\n6、完成登录安全加固与三方登录:短信验证码(回显+限流+签名)、微信/支付宝绑定、换绑手机号、APK 版本门禁(1 次提交、42 文件、+1792/-87 行)- 进度100% - 用时约1.5D\n7、完成网关 V2 二进制帧协议升级:Protobuf 上下行帧、JWT 握手鉴权与 HMAC 签名、房间索引、wsprobe 冒烟探针(1 次提交、10 文件、+1552/-59 行)- 进度100% - 用时约1D\n8、完成多线功能收束:直播推流与观众端、验证码/三方登录页、短视频录制播放、收藏互动、更新自检、SSL pinning(1 次提交、72 文件、+11.1k/-2.1k 行)- 进度100% - 用时约2D\n\n下周计划\n暂无\n\n风险阻塞点\n暂无";
|
|
712
|
+
(function(){
|
|
713
|
+
var btn = document.getElementById('copyBtn');
|
|
714
|
+
btn.addEventListener('click', function(){
|
|
715
|
+
function done(){
|
|
716
|
+
btn.classList.add('copied');
|
|
717
|
+
var t = btn.querySelector('.btn-text');
|
|
718
|
+
var old = t.textContent; t.textContent = '已复制';
|
|
719
|
+
setTimeout(function(){ btn.classList.remove('copied'); t.textContent = old; }, 1600);
|
|
720
|
+
}
|
|
721
|
+
if (navigator.clipboard && navigator.clipboard.writeText){
|
|
722
|
+
navigator.clipboard.writeText(TXT).then(done, function(){ fallback(); });
|
|
723
|
+
} else { fallback(); }
|
|
724
|
+
function fallback(){
|
|
725
|
+
var ta = document.createElement('textarea');
|
|
726
|
+
ta.value = TXT; ta.style.position = 'fixed'; ta.style.opacity = '0';
|
|
727
|
+
document.body.appendChild(ta); ta.select();
|
|
728
|
+
try{ document.execCommand('copy'); }catch(e){}
|
|
729
|
+
document.body.removeChild(ta); done();
|
|
730
|
+
}
|
|
731
|
+
});
|
|
732
|
+
})();
|
|
733
|
+
|
|
734
|
+
// 进度条流星
|
|
735
|
+
/* 流星剥落粒子:JS 为每颗彗星注入 22 粒椭圆小块(从头部稍后诞生 → 加速后飘 → 渐小渐隐,y 向中心水平线收敛) */
|
|
736
|
+
(function(){
|
|
737
|
+
var CP = [
|
|
738
|
+
// [bx, by, w, h, r, delay, dur, dx, dy] —— 30 粒前大后小剥落:bx 2~8 于光核中后部诞生(不贴尖头)、by -6~+9.5 上下连续散布、0~8% 快速渐显(scale .3→1 绽放淡入);dy 适中(上 -3.5~-7 / 中 +1.5~+3.5 / 深蓝 +5~+7)向后飞行中适度上下展开并向中线收敛(既非贴中线亦非过度发散);dx -72~-112 终点越过彗尾左端(用户要求比彗星尾部更远)
|
|
739
|
+
// 上方飘散带 17 粒(by -6~-0.5,向上飘散,dy -3.5~-7 上飘展开——用户反馈上方粒子少且飘散不够远,13→17 再加密、dy 再扩大,下方相对合适不增)
|
|
740
|
+
[ 7, -6.0, 5.2, 3.7, 6, -0.05, 1.08, -72, -7.0],
|
|
741
|
+
[ 5, -5.8, 4.0, 2.9, -8, -0.10, 1.01, -76, -6.8],
|
|
742
|
+
[ 6, -5.0, 4.4, 3.2, -9, -0.18, 1.03, -80, -6.7],
|
|
743
|
+
[ 7, -5.4, 3.6, 2.6, -10, -0.40, 0.96, -86, -6.5],
|
|
744
|
+
[ 5, -4.8, 4.6, 3.3, -8, -0.30, 1.05, -78, -6.3],
|
|
745
|
+
[ 3, -4.2, 3.0, 2.1, -7, -0.62, 0.95, -90, -6.1],
|
|
746
|
+
[ 2, -4.6, 2.3, 1.6, -10, -0.52, 0.89, -96, -6.0],
|
|
747
|
+
[ 2, -3.8, 3.2, 2.3, 7, -0.65, 0.94, -82, -5.5],
|
|
748
|
+
[ 4, -2.4, 3.4, 2.4, 8, -0.50, 0.97, -86, -5.3],
|
|
749
|
+
[ 3, -3.4, 4.1, 2.9, 12, -0.55, 1.00, -74, -4.9],
|
|
750
|
+
[ 4, -3.0, 3.1, 2.2, 9, -0.38, 0.93, -88, -4.9],
|
|
751
|
+
[ 3, -2.6, 2.4, 1.7, 11, -0.20, 0.90, -88, -4.7],
|
|
752
|
+
[ 6, -2.0, 3.7, 2.6, -5, -0.80, 1.06, -84, -4.3],
|
|
753
|
+
[ 6, -1.6, 2.6, 1.9, -7, -0.72, 0.90, -92, -3.9],
|
|
754
|
+
[ 5, -1.4, 2.8, 2.0, -6, -0.90, 0.92, -90, -3.7],
|
|
755
|
+
[ 2, -1.0, 2.2, 1.6, 10, -0.85, 0.91, -94, -3.7],
|
|
756
|
+
[ 4, -0.8, 4.0, 2.9, 9, -0.15, 0.98, -80, -3.5],
|
|
757
|
+
// 中部渗漏带 6 粒(by +0.5~+5.5,向下渗漏至光核下缘,dy +1.5~+3.5)
|
|
758
|
+
[ 4, 0.6, 4.6, 3.3, -8, -0.70, 1.00, -78, 1.5],
|
|
759
|
+
[ 6, 2.2, 4.0, 2.9, 6, -0.95, 0.96, -86, 2.2],
|
|
760
|
+
[ 3, 3.6, 3.4, 2.4, 12, -0.10, 0.94, -82, 2.8],
|
|
761
|
+
[ 7, 4.8, 2.8, 2.0, -5, -0.35, 0.92, -92, 3.2],
|
|
762
|
+
[ 5, 5.6, 2.2, 1.6, 9, -0.50, 0.90, -94, 3.5],
|
|
763
|
+
[ 8, 1.2, 2.0, 1.4, -7, -0.60, 0.92, -90, 1.5],
|
|
764
|
+
// 深蓝带 7 粒(by +7~+9.5=光核下缘下 1~3.5px 贴缘出生,dy +5~+7 向后甩出下散展开,cp-deep 深蓝渐变+深蓝光晕,dur 1.06~1.25s 更久停留)
|
|
765
|
+
[ 6, 7.0, 5.0, 3.6, -8, -0.15, 1.20, -90, 5.5],
|
|
766
|
+
[ 3, 8.0, 4.4, 3.2, 6, -0.45, 1.25, -98, 6.2],
|
|
767
|
+
[ 7, 9.0, 3.8, 2.7, 12, -0.70, 1.12, -94, 5.6],
|
|
768
|
+
[ 4, 9.5, 3.3, 2.4, -5, -0.05, 1.18, -106, 6.8],
|
|
769
|
+
[ 6, 7.8, 2.9, 2.1, 9, -0.25, 1.08, -102, 6.5],
|
|
770
|
+
[ 3, 8.8, 2.5, 1.8, -10, -0.55, 1.10, -110, 6.8],
|
|
771
|
+
[ 8, 7.4, 2.1, 1.5, 7, -0.80, 1.06, -112, 5.0]
|
|
772
|
+
];
|
|
773
|
+
document.querySelectorAll('.pbar-comet').forEach(function(comet){
|
|
774
|
+
for (var i = 0; i < CP.length; i++){
|
|
775
|
+
var c = CP[i];
|
|
776
|
+
var p = document.createElement('span');
|
|
777
|
+
p.className = 'cp';
|
|
778
|
+
p.style.left = c[0] + 'px';
|
|
779
|
+
p.style.top = (5 + c[1]) + 'px';
|
|
780
|
+
p.style.width = c[2] + 'px';
|
|
781
|
+
p.style.height = c[3] + 'px';
|
|
782
|
+
p.style.setProperty('--r', c[4] + 'deg');
|
|
783
|
+
p.style.animationDelay = c[5] + 's';
|
|
784
|
+
p.style.animationDuration = c[6] + 's';
|
|
785
|
+
p.style.setProperty('--dx', c[7] + 'px');
|
|
786
|
+
p.style.setProperty('--dy', c[8] + 'px');
|
|
787
|
+
if (c[1] >= 7){
|
|
788
|
+
p.className = 'cp cp-deep';
|
|
789
|
+
p.style.background = 'linear-gradient(90deg, rgba(2,132,199,.4), rgba(56,189,248,.95) 45%, #e0f2fe 86%)';
|
|
790
|
+
p.style.boxShadow = '0 0 6px 2.5px rgba(56,189,248,.9)';
|
|
791
|
+
}
|
|
792
|
+
comet.appendChild(p);
|
|
793
|
+
}
|
|
794
|
+
});
|
|
795
|
+
})();
|
|
796
|
+
|
|
797
|
+
|
|
798
|
+
function sheen(track, src){
|
|
799
|
+
var now = Date.now();
|
|
800
|
+
var key = '_t' + src;
|
|
801
|
+
if (track[key] && now - track[key] < (src === 'wave' ? 1000 : 300)) return;
|
|
802
|
+
track[key] = now;
|
|
803
|
+
var fill = track.querySelector('.pbar-fill');
|
|
804
|
+
var sweep = track.querySelector('.pbar-sweep');
|
|
805
|
+
var w = fill.getAttribute('data-w');
|
|
806
|
+
track.classList.remove('sheen-on');
|
|
807
|
+
sweep.style.transition = 'none';
|
|
808
|
+
sweep.style.width = '0';
|
|
809
|
+
if (src === 'wave'){ fill.style.transition = 'none'; fill.style.width = '0'; }
|
|
810
|
+
void track.offsetWidth;
|
|
811
|
+
track.classList.add('sheen-on');
|
|
812
|
+
sweep.style.transition = '';
|
|
813
|
+
sweep.style.width = w + '%';
|
|
814
|
+
if (src === 'wave'){ fill.style.transition = ''; fill.style.width = w + '%'; }
|
|
815
|
+
}
|
|
816
|
+
(function(){
|
|
817
|
+
var tracks = document.querySelectorAll('.pbar-track');
|
|
818
|
+
var i = 0;
|
|
819
|
+
tracks.forEach(function(t){
|
|
820
|
+
var li = t.closest('li');
|
|
821
|
+
var isPlan = li && li.classList.contains('pbar-plan');
|
|
822
|
+
var w = parseInt(t.querySelector('.pbar-fill').getAttribute('data-w'), 10);
|
|
823
|
+
if (isPlan && w <= 0) return;
|
|
824
|
+
(function(tr){
|
|
825
|
+
setTimeout(function(){ sheen(tr, 'wave'); }, 1500 + i * 420);
|
|
826
|
+
})(t);
|
|
827
|
+
i++;
|
|
828
|
+
});
|
|
829
|
+
document.querySelectorAll('ol li').forEach(function(li){
|
|
830
|
+
var t = li.querySelector('.pbar-track');
|
|
831
|
+
if (!t) return;
|
|
832
|
+
var isPlan = li.classList.contains('pbar-plan');
|
|
833
|
+
var w = parseInt(t.querySelector('.pbar-fill').getAttribute('data-w'), 10);
|
|
834
|
+
if (isPlan && w <= 0) return;
|
|
835
|
+
function hover(){ sheen(t, 'hover'); }
|
|
836
|
+
li.addEventListener('mouseenter', hover);
|
|
837
|
+
li.addEventListener('pointerenter', hover);
|
|
838
|
+
});
|
|
839
|
+
})();
|
|
840
|
+
|
|
841
|
+
// 3D 微倾斜(卡片级:仅 hover 的卡片偏转)
|
|
842
|
+
(function(){
|
|
843
|
+
document.querySelectorAll('.header-card, .overview, .section').forEach(function(card){
|
|
844
|
+
card.addEventListener('mousemove', function(e){
|
|
845
|
+
var r = card.getBoundingClientRect();
|
|
846
|
+
var mx = ((e.clientX - r.left) / r.width) * 2 - 1;
|
|
847
|
+
var my = ((e.clientY - r.top) / r.height) * 2 - 1;
|
|
848
|
+
card.style.setProperty('--mx', mx.toFixed(3));
|
|
849
|
+
card.style.setProperty('--my', my.toFixed(3));
|
|
850
|
+
});
|
|
851
|
+
card.addEventListener('mouseleave', function(){
|
|
852
|
+
card.style.setProperty('--mx', '0');
|
|
853
|
+
card.style.setProperty('--my', '0');
|
|
854
|
+
});
|
|
855
|
+
});
|
|
856
|
+
})();
|
|
857
|
+
|
|
858
|
+
// 截图模式:整页内容区(含头部标题卡),只统一留白不隐藏元素
|
|
859
|
+
(function(){
|
|
860
|
+
if (location.search.indexOf('shot=content') !== -1){
|
|
861
|
+
document.body.style.padding = '40px';
|
|
862
|
+
}
|
|
863
|
+
})();
|
|
864
|
+
</script>
|
|
865
|
+
</body>
|
|
866
|
+
</html>
|