@taskon/widget-react 0.0.1-beta.1 → 0.0.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +55 -16
  2. package/dist/CommunityTaskList.css +432 -628
  3. package/dist/EligibilityInfo.css +944 -431
  4. package/dist/PageBuilder.css +0 -2
  5. package/dist/Quest.css +460 -506
  6. package/dist/TaskOnProvider.css +15 -15
  7. package/dist/UserCenterWidget.css +0 -174
  8. package/dist/UserCenterWidget2.css +1119 -341
  9. package/dist/chunks/{CommunityTaskList-DoPGZsw1.js → CommunityTaskList-C9mPl_31.js} +923 -829
  10. package/dist/chunks/{EligibilityInfo-C7GZ2G5u.js → EligibilityInfo-DGBffKN8.js} +1137 -449
  11. package/dist/chunks/{LeaderboardWidget-CmYfDeHV.js → LeaderboardWidget-DPOQVXkT.js} +15 -10
  12. package/dist/chunks/{PageBuilder-Tmhf2GTS.js → PageBuilder-WCZvxL2j.js} +5 -5
  13. package/dist/chunks/{Quest-DKFZ-pPU.js → Quest-DjGH_8bx.js} +464 -314
  14. package/dist/chunks/{TaskOnProvider-BD6Vp2x8.js → TaskOnProvider-iannERG1.js} +2 -207
  15. package/dist/chunks/{ThemeProvider-wnSXrNQb.js → ThemeProvider-DNJqI2lD.js} +246 -54
  16. package/dist/chunks/UserCenterWidget-B0O-f_xl.js +8344 -0
  17. package/dist/chunks/{UserCenterWidget-BVw_IEEd.js → UserCenterWidget-CAhgp46j.js} +214 -1011
  18. package/dist/chunks/{WidgetShell-D_5OjvNZ.js → dynamic-import-helper-B2j_dZ4V.js} +607 -40
  19. package/dist/chunks/useToast-CaRkylKe.js +304 -0
  20. package/dist/chunks/{usercenter-ja-uu-XfVF9.js → usercenter-ja-B2465c1O.js} +4 -10
  21. package/dist/chunks/{usercenter-ko-DYgUOVzd.js → usercenter-ko-xAEYxqLg.js} +4 -10
  22. package/dist/community-task.d.ts +34 -3
  23. package/dist/community-task.js +1 -1
  24. package/dist/core.d.ts +40 -3
  25. package/dist/core.js +9 -10
  26. package/dist/dynamic-import-helper.css +186 -0
  27. package/dist/index.d.ts +207 -10
  28. package/dist/index.js +21 -19
  29. package/dist/leaderboard.d.ts +8 -1
  30. package/dist/leaderboard.js +2 -2
  31. package/dist/page-builder.js +1 -1
  32. package/dist/quest.d.ts +8 -2
  33. package/dist/quest.js +1 -1
  34. package/dist/user-center.d.ts +20 -136
  35. package/dist/user-center.js +19 -236
  36. package/package.json +7 -2
  37. package/dist/TipPopover.css +0 -210
  38. package/dist/WidgetShell.css +0 -182
  39. package/dist/chunks/TipPopover-BrW8jo71.js +0 -2926
  40. package/dist/chunks/UserCenterWidget-BE329iS7.js +0 -3546
  41. package/dist/chunks/dynamic-import-helper-DxEFwm31.js +0 -537
  42. package/dist/chunks/useToast-B-wyO5zL.js +0 -93
  43. package/dist/chunks/useWidgetLocale-JDelxtt8.js +0 -74
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * CardSelector 组件样式
3
3
  * 完全复刻 taskon-website 的 CmCardRadio 样式
4
- * 直接使用 dark 模式颜色值,不使用 CSS 变量
5
4
  * 使用 taskon- 前缀避免与项目方样式冲突
6
5
  */
7
6
 
@@ -17,9 +16,9 @@
17
16
  flex-shrink: 0;
18
17
  padding: 10px 20px;
19
18
  border-radius: 6px;
20
- border: 1px solid rgba(255, 255, 255, 0.1);
21
- background: #252a2c;
22
- color: rgba(255, 255, 255, 0.8);
19
+ border: 1px solid var(--taskon-color-border);
20
+ background: var(--taskon-color-bg-surface);
21
+ color: var(--taskon-color-text-secondary);
23
22
  font-size: 16px;
24
23
  line-height: 24px;
25
24
  letter-spacing: 0.36px;
@@ -39,22 +38,25 @@
39
38
 
40
39
  /* Hover 状态 */
41
40
  .taskon-card-selector-item:hover {
42
- border-color: rgba(255, 255, 255, 0.15);
41
+ border-color: var(--taskon-color-border-secondary);
42
+ color: var(--taskon-color-text);
43
43
  }
44
44
 
45
45
  /* 选中状态 */
46
46
  .taskon-card-selector-item--selected {
47
- background: #fff;
48
- color: #0d0d0d;
47
+ background: var(--taskon-color-text);
48
+ color: var(--taskon-color-bg-canvas);
49
+ border-color: var(--taskon-color-text);
49
50
  }
50
51
 
51
52
  .taskon-card-selector-item--selected:hover {
52
- background: #fff;
53
+ background: var(--taskon-color-text);
54
+ color: var(--taskon-color-bg-canvas);
53
55
  }
54
56
 
55
57
  /* Focus 状态(键盘导航) */
56
58
  .taskon-card-selector-item:focus-visible {
57
- outline: 2px solid rgba(255, 255, 255, 0.5);
59
+ outline: 2px solid var(--taskon-color-primary);
58
60
  outline-offset: 2px;
59
61
  }
60
62
 
@@ -72,331 +74,6 @@
72
74
  backdrop-filter: blur(1.33vw);
73
75
  }
74
76
  }
75
- /**
76
- * BindWalletDialog 组件样式
77
- * 使用 taskon-bind-wallet-* 命名空间
78
- * 与 taskon-website 保持一致
79
- */
80
-
81
- /* ==================== 容器 ==================== */
82
- .taskon-bind-wallet-dialog {
83
- position: relative;
84
- display: flex;
85
- flex-direction: column;
86
- }
87
-
88
- /* ==================== 标题 ==================== */
89
- .taskon-bind-wallet-dialog-title {
90
- margin: 0;
91
- font-size: 22px;
92
- font-weight: 700;
93
- line-height: 28px;
94
- color: var(--taskon-color-text, #ffffff);
95
- }
96
-
97
- /* ==================== 链类型标签 ==================== */
98
- .taskon-bind-wallet-dialog-chain-label {
99
- margin-top: 20px;
100
- font-size: 16px;
101
- font-weight: 500;
102
- line-height: 20px;
103
- color: var(--taskon-color-text, #ffffff);
104
- }
105
-
106
- /* ==================== 钱包网格 ==================== */
107
- .taskon-bind-wallet-dialog-grid {
108
- margin-top: 10px;
109
- display: grid;
110
- grid-template-columns: 1fr 1fr;
111
- gap: 18px;
112
- }
113
-
114
- /* ==================== 钱包项 ==================== */
115
- .taskon-bind-wallet-item {
116
- position: relative;
117
- display: flex;
118
- align-items: center;
119
- justify-content: center;
120
- height: 50px;
121
- padding: 0 12px;
122
-
123
- background: transparent;
124
- border: 1px solid var(--taskon-color-border, rgba(255, 255, 255, 0.15));
125
- border-radius: 8px;
126
- cursor: pointer;
127
- transition: all 0.2s ease;
128
- }
129
-
130
- .taskon-bind-wallet-item:hover,
131
- .taskon-bind-wallet-item:focus {
132
- background: var(--taskon-color-bg-hover, rgba(255, 255, 255, 0.1));
133
- }
134
-
135
- .taskon-bind-wallet-item:active {
136
- transform: scale(0.98);
137
- }
138
-
139
- /* 钱包图标 */
140
- .taskon-bind-wallet-item-icon {
141
- display: flex;
142
- align-items: center;
143
- justify-content: center;
144
- width: 24px;
145
- height: 24px;
146
- flex-shrink: 0;
147
- }
148
-
149
- .taskon-bind-wallet-item-icon svg {
150
- width: 24px;
151
- height: 24px;
152
- }
153
-
154
- /* 钱包名称 */
155
- .taskon-bind-wallet-item-name {
156
- margin-left: 10px;
157
- font-size: 18px;
158
- font-weight: 600;
159
- line-height: 20px;
160
- color: var(--taskon-color-text, #ffffff);
161
- }
162
-
163
- /* 已安装标签 */
164
- .taskon-bind-wallet-item-installed {
165
- position: absolute;
166
- right: 0;
167
- bottom: 0;
168
- padding: 4px 8px;
169
- font-size: 10px;
170
- line-height: 14px;
171
- color: var(--taskon-color-secondary, #22c55e);
172
- background: var(--taskon-color-secondary-bg, rgba(34, 197, 94, 0.1));
173
- border-radius: 8px 0;
174
- transform-origin: bottom right;
175
- }
176
-
177
- /* ==================== 连接中状态 ==================== */
178
- .taskon-bind-wallet-item--connecting {
179
- opacity: 0.7;
180
- cursor: wait;
181
- }
182
-
183
- .taskon-bind-wallet-item--connecting:hover,
184
- .taskon-bind-wallet-item--connecting:focus {
185
- background: transparent;
186
- }
187
-
188
- /* ==================== 禁用状态 ==================== */
189
- .taskon-bind-wallet-item--disabled {
190
- opacity: 0.5;
191
- cursor: not-allowed;
192
- }
193
-
194
- .taskon-bind-wallet-item--disabled:hover,
195
- .taskon-bind-wallet-item--disabled:focus {
196
- background: transparent;
197
- }
198
-
199
- .taskon-bind-wallet-item--disabled:active {
200
- transform: none;
201
- }
202
-
203
- /* 不可用标签 */
204
- .taskon-bind-wallet-item-unavailable {
205
- position: absolute;
206
- right: 0;
207
- bottom: 0;
208
- padding: 4px 8px;
209
- font-size: 10px;
210
- line-height: 14px;
211
- color: var(--taskon-color-text-tertiary, #71717a);
212
- background: var(--taskon-color-bg-secondary, rgba(255, 255, 255, 0.05));
213
- border-radius: 8px 0;
214
- }
215
-
216
- /* 连接中 spinner */
217
- .taskon-bind-wallet-item-connecting {
218
- position: absolute;
219
- right: 8px;
220
- display: flex;
221
- align-items: center;
222
- justify-content: center;
223
- }
224
-
225
- .taskon-bind-wallet-spinner {
226
- width: 16px;
227
- height: 16px;
228
- color: var(--taskon-color-primary, #6366f1);
229
- animation: taskon-bind-wallet-spin 1s linear infinite;
230
- }
231
-
232
- @keyframes taskon-bind-wallet-spin {
233
- from {
234
- transform: rotate(0deg);
235
- }
236
- to {
237
- transform: rotate(360deg);
238
- }
239
- }
240
-
241
- /* ==================== 提示文字 ==================== */
242
- .taskon-bind-wallet-dialog-tip {
243
- margin: 20px 0 0;
244
- font-size: 14px;
245
- line-height: 1.5;
246
- color: var(--taskon-color-text-tertiary, #71717a);
247
- text-align: center;
248
- }
249
-
250
- /* ==================== 响应式 ==================== */
251
- @media (max-width: 750px) {
252
- .taskon-bind-wallet-dialog-title {
253
- font-size: 3.8vw;
254
- line-height: 4vw;
255
- }
256
-
257
- .taskon-bind-wallet-dialog-chain-label {
258
- margin-top: 4vw;
259
- font-size: 4vw;
260
- line-height: 5.6vw;
261
- }
262
-
263
- .taskon-bind-wallet-dialog-grid {
264
- margin-top: 2.667vw;
265
- grid-template-columns: 1fr;
266
- gap: 4vw;
267
- }
268
-
269
- .taskon-bind-wallet-item {
270
- height: 12vw;
271
- }
272
-
273
- .taskon-bind-wallet-item-icon {
274
- width: 6.4vw;
275
- height: 6.4vw;
276
- }
277
-
278
- .taskon-bind-wallet-item-icon svg {
279
- width: 6.4vw;
280
- height: 6.4vw;
281
- }
282
-
283
- .taskon-bind-wallet-item-name {
284
- margin-left: 2.667vw;
285
- font-size: 3.733vw;
286
- line-height: 4.667vw;
287
- }
288
-
289
- .taskon-bind-wallet-dialog-tip {
290
- margin-top: 4vw;
291
- font-size: 3vw;
292
- }
293
- }
294
-
295
- /* ==================== 连接中遮层 ==================== */
296
- .taskon-bind-wallet-loading-overlay {
297
- position: absolute;
298
- /* 使用负值覆盖 Dialog body 的 padding */
299
- inset: -24px;
300
- display: flex;
301
- flex-direction: column;
302
- align-items: center;
303
- justify-content: center;
304
- background: rgba(255, 255, 255, 0.1);
305
- backdrop-filter: blur(4px);
306
- border-radius: 16px;
307
- }
308
-
309
- .taskon-bind-wallet-loading-spinner {
310
- width: 40px;
311
- height: 40px;
312
- color: var(--taskon-color-text-secondary, #a1a1aa);
313
- animation: taskon-bind-wallet-spin 1s linear infinite;
314
- }
315
-
316
- .taskon-bind-wallet-loading-text {
317
- margin: 20px 0 0;
318
- max-width: 60%;
319
- font-size: 16px;
320
- line-height: 20px;
321
- color: var(--taskon-color-text-secondary, #a1a1aa);
322
- text-align: center;
323
- }
324
-
325
- @media (max-width: 750px) {
326
- .taskon-bind-wallet-loading-overlay {
327
- inset: -20px;
328
- border-radius: 12px;
329
- }
330
-
331
- .taskon-bind-wallet-loading-spinner {
332
- width: 8vw;
333
- height: 8vw;
334
- }
335
-
336
- .taskon-bind-wallet-loading-text {
337
- margin-top: 4vw;
338
- font-size: 3.5vw;
339
- line-height: 5vw;
340
- }
341
- }
342
- /**
343
- * CardDescExpress 组件样式
344
- * @module components/CardDescExpress
345
- */
346
-
347
- .taskon-card-desc-rich {
348
- max-height: 60px;
349
- overflow: hidden;
350
- font-size: 14px;
351
- line-height: 21px;
352
- color: rgb(255 255 255 / 60%); /* --color-light */
353
- white-space: pre-wrap;
354
- word-break: break-word;
355
- overflow-wrap: break-word;
356
- }
357
-
358
- /* 处理富文本中的常见元素 */
359
- .taskon-card-desc-rich p {
360
- margin: 0;
361
- }
362
-
363
- .taskon-card-desc-rich a {
364
- color: #cbff01; /* --secondary-100 */
365
- text-decoration: none;
366
- }
367
-
368
- .taskon-card-desc-rich a:hover {
369
- text-decoration: underline;
370
- }
371
-
372
- .taskon-card-desc-rich strong,
373
- .taskon-card-desc-rich b {
374
- font-weight: 600;
375
- }
376
-
377
- .taskon-card-desc-rich em,
378
- .taskon-card-desc-rich i {
379
- font-style: italic;
380
- }
381
-
382
- .taskon-card-desc-rich ul,
383
- .taskon-card-desc-rich ol {
384
- margin: 0;
385
- padding-left: 1.5em;
386
- }
387
-
388
- .taskon-card-desc-rich pre {
389
- text-wrap: initial;
390
- }
391
-
392
- /* ========== 响应式样式(移动端) ========== */
393
- @media (max-width: 750px) {
394
- .taskon-card-desc-rich {
395
- max-height: 18vw;
396
- font-size: 3.733vw;
397
- line-height: normal;
398
- }
399
- }
400
77
  /**
401
78
  * ClaimButton 组件样式
402
79
  * 复刻原版 ClaimButton.vue 样式
@@ -413,9 +90,9 @@
413
90
  padding: 0 10px;
414
91
  text-align: center;
415
92
  border-radius: 6px;
416
- border: 1px solid rgb(255 255 255 / 100%);
93
+ border: 1px solid var(--taskon-color-text);
417
94
  background: transparent;
418
- color: rgb(255 255 255 / 100%);
95
+ color: var(--taskon-color-text);
419
96
  font-size: 14px;
420
97
  font-weight: 500;
421
98
  line-height: 18px;
@@ -431,8 +108,8 @@
431
108
  /* 深色样式(弹窗内使用) */
432
109
  .taskon-community-task-claim--dark {
433
110
  height: 40px;
434
- background: rgb(255 255 255 / 100%);
435
- color: rgb(0 0 0 / 100%);
111
+ background: var(--taskon-color-text);
112
+ color: var(--taskon-color-bg-canvas);
436
113
  font-weight: 600;
437
114
  border: none;
438
115
  }
@@ -445,7 +122,7 @@
445
122
 
446
123
  /* 加载状态 */
447
124
  .taskon-community-task-claim--loading {
448
- background: rgb(255 255 255 / 20%);
125
+ background: var(--taskon-color-bg-surface-strong);
449
126
  border: none;
450
127
  cursor: wait;
451
128
  }
@@ -478,8 +155,8 @@
478
155
  justify-content: center;
479
156
  border-radius: 4px;
480
157
  border: none;
481
- background: rgb(255 255 255 / 10%);
482
- color: rgb(255 255 255 / 100%);
158
+ background: var(--taskon-color-bg-surface-strong);
159
+ color: var(--taskon-color-text);
483
160
  font-size: 12px;
484
161
  font-weight: 500;
485
162
  line-height: 16px;
@@ -576,8 +253,8 @@
576
253
  height: 34px;
577
254
  padding: 0 12px;
578
255
  border-radius: 6px;
579
- border: 1px solid rgba(255, 255, 255, 0.5);
580
- color: rgba(255, 255, 255, 0.5);
256
+ border: 1px solid var(--taskon-color-border);
257
+ color: var(--taskon-color-text-disabled);
581
258
  font-size: 14px;
582
259
  font-weight: 500;
583
260
  line-height: 18px;
@@ -604,7 +281,7 @@
604
281
  /* 完成倒计时容器 - 复刻原版 var(--color-dark) */
605
282
  .taskon-community-task-done-countdown {
606
283
  margin-top: 10px;
607
- color: rgba(255, 255, 255, 0.4);
284
+ color: var(--taskon-color-text-disabled);
608
285
  font-size: 14px;
609
286
  line-height: 18px;
610
287
  }
@@ -617,7 +294,7 @@
617
294
  /* 倒计时数字 - 复刻原版 var(--color-lighter) */
618
295
  .taskon-community-task-done-countdown-time {
619
296
  margin-left: 4px;
620
- color: rgba(255, 255, 255, 0.8);
297
+ color: var(--taskon-color-text-secondary);
621
298
  }
622
299
 
623
300
  /* ========== 响应式样式(移动端) ========== */
@@ -657,8 +334,7 @@
657
334
 
658
335
  .taskon-community-validation-tip-text {
659
336
  margin: 0;
660
- /* 复刻原版 --text-info-warning-60 颜色: rgb(255 212 101 / 60%) */
661
- color: var(--taskon-color-warning-60, rgba(255, 212, 101, 0.6));
337
+ color: var(--taskon-color-warning);
662
338
  font-size: 12px;
663
339
  font-style: normal;
664
340
  font-weight: 400;
@@ -691,14 +367,14 @@
691
367
  margin-top: 8px;
692
368
  font-size: 12px;
693
369
  line-height: 16px;
694
- color: #f5a623; /* warn color */
370
+ color: var(--taskon-color-warning);
695
371
  }
696
372
 
697
373
  /* 可点击的社区链接 */
698
374
  .taskon-community-task-progress-tip-link {
699
375
  text-decoration: underline;
700
376
  cursor: pointer;
701
- color: #f5a623;
377
+ color: var(--taskon-color-warning);
702
378
  }
703
379
 
704
380
  .taskon-community-task-progress-tip-link:hover {
@@ -729,7 +405,7 @@
729
405
  width: 200px;
730
406
  height: 4px;
731
407
  max-width: 100%;
732
- background: rgba(255, 255, 255, 0.1);
408
+ background: var(--taskon-color-bg-surface-strong);
733
409
  border-radius: 30px;
734
410
  }
735
411
 
@@ -737,8 +413,8 @@
737
413
  height: 100%;
738
414
  background: linear-gradient(
739
415
  89.87deg,
740
- var(--taskon-color-secondary, #00ffa3) 0.13%,
741
- var(--taskon-color-primary, #cbff01) 99.92%
416
+ var(--taskon-color-secondary) 0.13%,
417
+ var(--taskon-color-primary) 99.92%
742
418
  );
743
419
  border-radius: 30px;
744
420
  }
@@ -760,7 +436,6 @@
760
436
  * 复刻原版 CmBaseTask.vue 的样式
761
437
  * 使用 Widget 命名空间扁平化方案
762
438
  * 所有类名使用 .taskon-community-* 前缀,避免跨 Widget 冲突
763
- * 直接使用 dark 模式颜色值
764
439
  */
765
440
 
766
441
  /* 卡片外层容器 */
@@ -775,8 +450,8 @@
775
450
  flex-direction: column;
776
451
  padding: 20px;
777
452
  border-radius: 10px;
778
- border: 1px solid rgb(255 255 255 / 4%);
779
- background: #1f1f1f;
453
+ border: 1px solid var(--taskon-color-border-secondary);
454
+ background: var(--taskon-color-bg-inset);
780
455
  min-height: 230px;
781
456
  height: 100%;
782
457
  cursor: pointer;
@@ -786,8 +461,8 @@
786
461
 
787
462
  /* 完成状态卡片样式 */
788
463
  .taskon-community-task--won {
789
- border-color: rgb(203 255 1 / 20%);
790
- background: rgb(203 255 1 / 4%);
464
+ border-color: var(--taskon-color-primary);
465
+ background: var(--taskon-color-primary-bg);
791
466
  min-height: 184px;
792
467
  }
793
468
 
@@ -812,8 +487,8 @@
812
487
  right: 10px;
813
488
  padding: 2px 6px;
814
489
  border-radius: 4px;
815
- background: rgb(255 255 255 / 4%);
816
- color: rgb(255 255 255 / 60%);
490
+ background: var(--taskon-color-bg-surface-subtle);
491
+ color: var(--taskon-color-text-tertiary);
817
492
  font-size: 13px;
818
493
  line-height: 16px;
819
494
  z-index: 1;
@@ -831,7 +506,7 @@
831
506
  font-size: 16px;
832
507
  font-weight: 600;
833
508
  line-height: 20px;
834
- color: rgba(255, 255, 255, 0.95);
509
+ color: var(--taskon-color-text);
835
510
  word-break: break-word;
836
511
  }
837
512
 
@@ -839,12 +514,12 @@
839
514
  .taskon-community-task-title--link {
840
515
  display: block;
841
516
  text-decoration: none;
842
- color: var(--taskon-color-primary, #6366f1);
517
+ color: var(--taskon-color-primary);
843
518
  transition: color 0.2s ease;
844
519
  }
845
520
 
846
521
  .taskon-community-task-title--link:hover {
847
- color: var(--taskon-color-primary-hover, #818cf8);
522
+ color: var(--taskon-color-primary-hover);
848
523
  text-decoration: underline;
849
524
  }
850
525
 
@@ -856,12 +531,12 @@
856
531
  }
857
532
 
858
533
  .taskon-community-task-time-label {
859
- color: rgba(255, 255, 255, 0.5);
534
+ color: var(--taskon-color-text-disabled);
860
535
  }
861
536
 
862
537
  .taskon-community-task-time-value {
863
538
  margin-left: 4px;
864
- color: rgba(255, 255, 255, 0.8);
539
+ color: var(--taskon-color-text-secondary);
865
540
  }
866
541
 
867
542
  /* Action 按钮区域 */
@@ -879,8 +554,8 @@
879
554
  justify-content: center;
880
555
  border-radius: 6px;
881
556
  border: none;
882
- background: rgb(203 255 1 / 12%);
883
- color: #cbff01;
557
+ background: var(--taskon-color-primary-bg);
558
+ color: var(--taskon-color-primary);
884
559
  font-size: 14px;
885
560
  font-weight: 500;
886
561
  line-height: 34px;
@@ -892,8 +567,8 @@
892
567
  }
893
568
 
894
569
  .taskon-community-task-action:hover {
895
- background: #cbff01;
896
- color: #0d0d0d;
570
+ background: var(--taskon-color-primary);
571
+ color: var(--taskon-color-text-on-primary);
897
572
  }
898
573
 
899
574
  .taskon-community-task-action:active {
@@ -921,9 +596,9 @@
921
596
  justify-content: center;
922
597
  padding: 0 10px;
923
598
  border-radius: 6px;
924
- border: 1px solid rgba(255, 255, 255, 0.9);
599
+ border: 1px solid var(--taskon-color-text);
925
600
  background: transparent;
926
- color: rgba(255, 255, 255, 0.9);
601
+ color: var(--taskon-color-text);
927
602
  font-size: 14px;
928
603
  font-weight: 500;
929
604
  line-height: 18px;
@@ -940,7 +615,7 @@
940
615
  }
941
616
 
942
617
  .taskon-community-task-claim--loading {
943
- background: rgba(255, 255, 255, 0.1);
618
+ background: var(--taskon-color-bg-surface-strong);
944
619
  border: none;
945
620
  cursor: not-allowed;
946
621
  }
@@ -952,7 +627,7 @@
952
627
 
953
628
  /* 冷却文本 */
954
629
  .taskon-community-task-cooldown {
955
- color: rgba(255, 255, 255, 0.6);
630
+ color: var(--taskon-color-text-tertiary);
956
631
  font-size: 14px;
957
632
  line-height: 18px;
958
633
  text-align: right;
@@ -968,7 +643,7 @@
968
643
  /* Unlimited 任务已有积分时的 refresh 样式 */
969
644
  /* 复刻 Vue 版本 ClaimRow.vue 中的 .refresh-bg 样式 */
970
645
  .taskon-community-task-claim-row--refresh {
971
- background: rgb(255 255 255 / 4%);
646
+ background: var(--taskon-color-bg-surface-subtle);
972
647
  padding-right: 10px;
973
648
  border-radius: 6px;
974
649
  }
@@ -986,7 +661,7 @@
986
661
  display: flex;
987
662
  align-items: center;
988
663
  border-radius: 6px;
989
- background: rgb(255 255 255 / 4%);
664
+ background: var(--taskon-color-bg-surface-subtle);
990
665
  font-size: 14px;
991
666
  font-weight: 600;
992
667
  line-height: 18px;
@@ -1000,7 +675,7 @@
1000
675
  }
1001
676
 
1002
677
  .taskon-community-task-reward-amount {
1003
- color: #cbff01; /* secondary-100 */
678
+ color: var(--taskon-color-secondary);
1004
679
  }
1005
680
 
1006
681
  .taskon-community-task-reward-name {
@@ -1008,7 +683,7 @@
1008
683
  overflow: hidden;
1009
684
  text-overflow: ellipsis;
1010
685
  white-space: nowrap;
1011
- color: rgba(255, 255, 255, 0.9);
686
+ color: var(--taskon-color-text);
1012
687
  }
1013
688
 
1014
689
  /* Token 链图标 */
@@ -1047,7 +722,7 @@
1047
722
  .taskon-community-task-won-checked {
1048
723
  width: 20px;
1049
724
  height: 20px;
1050
- color: #cbff01; /* primary-100 */
725
+ color: var(--taskon-color-primary);
1051
726
  flex-shrink: 0;
1052
727
  }
1053
728
 
@@ -1055,13 +730,13 @@
1055
730
  .taskon-community-task-won-check {
1056
731
  width: 20px;
1057
732
  height: 20px;
1058
- color: #cbff01;
733
+ color: var(--taskon-color-primary);
1059
734
  font-weight: bold;
1060
735
  }
1061
736
 
1062
737
  .taskon-community-task-won-amount {
1063
738
  margin-left: 6px;
1064
- color: #cbff01;
739
+ color: var(--taskon-color-primary);
1065
740
  font-weight: 700;
1066
741
  }
1067
742
 
@@ -1075,7 +750,7 @@
1075
750
  .taskon-community-task-won-name {
1076
751
  margin-left: 4px;
1077
752
  font-weight: 600;
1078
- color: rgba(255, 255, 255, 0.9);
753
+ color: var(--taskon-color-text);
1079
754
  }
1080
755
 
1081
756
  /* pointIcon - 复刻原版 won__icon */
@@ -1100,7 +775,7 @@
1100
775
 
1101
776
  .taskon-community-task-won-status {
1102
777
  margin-left: auto;
1103
- color: #27ae60;
778
+ color: var(--taskon-color-success);
1104
779
  font-size: 14px;
1105
780
  font-weight: 600;
1106
781
  line-height: 18px;
@@ -1113,17 +788,17 @@
1113
788
 
1114
789
  .taskon-community-task-won-single {
1115
790
  font-weight: 600;
1116
- color: rgba(255, 255, 255, 0.9);
791
+ color: var(--taskon-color-text);
1117
792
  }
1118
793
 
1119
794
  .taskon-community-task-won-label {
1120
795
  margin-left: 4px;
1121
- color: rgba(255, 255, 255, 0.6);
796
+ color: var(--taskon-color-text-tertiary);
1122
797
  }
1123
798
 
1124
799
  .taskon-community-task-won-total {
1125
800
  margin-left: 6px;
1126
- color: #cbff01;
801
+ color: var(--taskon-color-primary);
1127
802
  font-weight: 700;
1128
803
  }
1129
804
 
@@ -1133,12 +808,12 @@
1133
808
  overflow: hidden;
1134
809
  text-overflow: ellipsis;
1135
810
  white-space: nowrap;
1136
- color: rgba(255, 255, 255, 0.9);
811
+ color: var(--taskon-color-text);
1137
812
  }
1138
813
 
1139
814
  /* 兼容旧样式 */
1140
815
  .taskon-community-task-won-text {
1141
- color: rgba(255, 255, 255, 0.6);
816
+ color: var(--taskon-color-text-tertiary);
1142
817
  font-size: 14px;
1143
818
  line-height: 18px;
1144
819
  }
@@ -1166,16 +841,16 @@
1166
841
  line-height: 18px;
1167
842
  }
1168
843
 
1169
- /* 审核失败:红色样式 - 复刻原版 #eb5757 */
844
+ /* 审核失败:错误语义色 */
1170
845
  .taskon-community-task-review-status--failed {
1171
- background: rgba(235, 87, 87, 0.1);
1172
- color: #eb5757;
846
+ background: var(--taskon-color-error-bg);
847
+ color: var(--taskon-color-error);
1173
848
  }
1174
849
 
1175
- /* 审核中:紫色样式 - 复刻原版 #9b51e0 */
850
+ /* 审核中:警告语义色 */
1176
851
  .taskon-community-task-review-status--review {
1177
- background: rgba(155, 81, 224, 0.1);
1178
- color: #9b51e0;
852
+ background: var(--taskon-color-warning-bg);
853
+ color: var(--taskon-color-warning);
1179
854
  }
1180
855
 
1181
856
  /* ========== 响应式样式(移动端) ========== */
@@ -1348,14 +1023,14 @@
1348
1023
  }
1349
1024
 
1350
1025
  .taskon-community-task-field-label {
1351
- color: rgb(255 255 255 / 40%); /* --color-dark */
1026
+ color: var(--taskon-color-text-disabled);
1352
1027
  white-space: pre-wrap;
1353
1028
  word-break: break-word;
1354
1029
  overflow-wrap: break-word;
1355
1030
  }
1356
1031
 
1357
1032
  .taskon-community-task-field-link {
1358
- color: rgb(255 255 255 / 80%); /* --color-lighter,与 value 颜色一致 */
1033
+ color: var(--taskon-color-text-secondary);
1359
1034
  text-decoration: none;
1360
1035
  cursor: pointer;
1361
1036
  word-break: break-all;
@@ -1367,7 +1042,7 @@
1367
1042
  }
1368
1043
 
1369
1044
  .taskon-community-task-field-value {
1370
- color: rgb(255 255 255 / 80%); /* --color-lighter */
1045
+ color: var(--taskon-color-text-secondary);
1371
1046
  word-break: break-word;
1372
1047
  overflow-wrap: break-word;
1373
1048
  }
@@ -1392,11 +1067,11 @@
1392
1067
  .taskon-community-task-field-copy-icon {
1393
1068
  width: 14px;
1394
1069
  height: 14px;
1395
- color: rgb(255 255 255 / 60%); /* --color-darker */
1070
+ color: var(--taskon-color-text-tertiary);
1396
1071
  }
1397
1072
 
1398
1073
  .taskon-community-task-field-copy--copied .taskon-community-task-field-copy-icon {
1399
- color: #cbff01; /* --link-color / --secondary-100 */
1074
+ color: var(--taskon-color-primary);
1400
1075
  }
1401
1076
 
1402
1077
  /* ========== 响应式样式(移动端) ========== */
@@ -1422,11 +1097,11 @@
1422
1097
  .taskon-eligibility-mask {
1423
1098
  position: absolute;
1424
1099
  inset: 0;
1100
+ background: var(--taskon-color-bg-mask);
1425
1101
  -webkit-backdrop-filter: blur(14px);
1426
1102
  backdrop-filter: blur(14px);
1427
1103
  z-index: 10;
1428
1104
  padding: 20px;
1429
- border: 1px solid var(--taskon-border-color, rgba(255, 255, 255, 0.1));
1430
1105
  border-radius: 10px;
1431
1106
  box-sizing: border-box;
1432
1107
  }
@@ -1436,7 +1111,7 @@
1436
1111
  display: flex;
1437
1112
  align-items: center;
1438
1113
  gap: 10px;
1439
- color: var(--taskon-color-lighter, #999);
1114
+ color: var(--taskon-color-text-tertiary);
1440
1115
  font-size: 16px;
1441
1116
  font-style: normal;
1442
1117
  font-weight: 600;
@@ -1450,7 +1125,7 @@
1450
1125
  }
1451
1126
 
1452
1127
  .taskon-eligibility-mask-highlight {
1453
- color: var(--taskon-secondary-100, #6366f1);
1128
+ color: var(--taskon-color-primary);
1454
1129
  }
1455
1130
 
1456
1131
  /* ==================== 任务名称 ==================== */
@@ -1463,7 +1138,7 @@
1463
1138
  font-style: normal;
1464
1139
  font-weight: 600;
1465
1140
  line-height: normal;
1466
- color: var(--taskon-text-color, #fff);
1141
+ color: var(--taskon-color-text);
1467
1142
  }
1468
1143
 
1469
1144
  /* ==================== 条件提示行 ==================== */
@@ -1476,7 +1151,7 @@
1476
1151
  }
1477
1152
 
1478
1153
  .taskon-eligibility-mask-cond-title {
1479
- color: var(--taskon-color-lightest, #ccc);
1154
+ color: var(--taskon-color-text-secondary);
1480
1155
  font-size: 14px;
1481
1156
  font-style: normal;
1482
1157
  font-weight: 500;
@@ -1484,7 +1159,7 @@
1484
1159
  }
1485
1160
 
1486
1161
  .taskon-eligibility-mask-cond-label {
1487
- color: var(--taskon-secondary-100, #6366f1);
1162
+ color: var(--taskon-color-primary);
1488
1163
  }
1489
1164
 
1490
1165
  /* Check 按钮 */
@@ -1492,8 +1167,8 @@
1492
1167
  display: flex;
1493
1168
  align-items: center;
1494
1169
  gap: 4px;
1495
- background: var(--taskon-color-lightest, #ccc);
1496
- color: var(--taskon-color-lightest-inverse, #000);
1170
+ background: var(--taskon-color-text);
1171
+ color: var(--taskon-color-bg-canvas);
1497
1172
  padding: 2px 6px;
1498
1173
  border: none;
1499
1174
  border-radius: 4px;
@@ -1542,7 +1217,7 @@
1542
1217
  margin: 15px 0;
1543
1218
  height: 0;
1544
1219
  border: none;
1545
- border-top: 0.5px dashed var(--taskon-color-darkest, #333);
1220
+ border-top: 0.5px dashed var(--taskon-color-border);
1546
1221
  }
1547
1222
 
1548
1223
  /* ==================== 条件列表 ==================== */
@@ -1562,7 +1237,7 @@
1562
1237
  font-style: normal;
1563
1238
  font-weight: 500;
1564
1239
  line-height: normal;
1565
- color: var(--taskon-text-color, #fff);
1240
+ color: var(--taskon-color-text);
1566
1241
  }
1567
1242
 
1568
1243
  .taskon-eligibility-mask-item:first-child {
@@ -1668,7 +1343,7 @@
1668
1343
  padding: 0;
1669
1344
  border: none;
1670
1345
  background: transparent;
1671
- color: rgba(255, 255, 255, 0.6);
1346
+ color: var(--taskon-color-text-tertiary);
1672
1347
  font-size: 13px;
1673
1348
  line-height: 16px;
1674
1349
  cursor: pointer;
@@ -1676,7 +1351,7 @@
1676
1351
  }
1677
1352
 
1678
1353
  .taskon-community-task-expand-btn:hover {
1679
- color: rgba(255, 255, 255, 0.9);
1354
+ color: var(--taskon-color-text);
1680
1355
  }
1681
1356
 
1682
1357
  .taskon-community-task-expand-text {
@@ -1707,6 +1382,17 @@
1707
1382
  height: 3.2vw;
1708
1383
  }
1709
1384
  }
1385
+
1386
+ /* 卡片描述与标题间距(与原版对齐) */
1387
+ .taskon-template-task-rich-desc {
1388
+ margin-top: 10px;
1389
+ }
1390
+
1391
+ @media (max-width: 750px) {
1392
+ .taskon-template-task-rich-desc {
1393
+ margin-top: 2.67vw;
1394
+ }
1395
+ }
1710
1396
  /**
1711
1397
  * PowTask 组件样式
1712
1398
  * 使用 Widget 命名空间扁平化方案
@@ -1720,10 +1406,10 @@
1720
1406
 
1721
1407
  /* 任务描述 */
1722
1408
  .taskon-community-pow-desc {
1723
- margin-top: 12px;
1409
+ margin-top: 10px;
1724
1410
  font-size: 14px;
1725
1411
  line-height: 20px;
1726
- color: rgb(255 255 255 / 80%);
1412
+ color: var(--taskon-color-text-secondary);
1727
1413
  }
1728
1414
 
1729
1415
  /* 任务链接 */
@@ -1731,7 +1417,7 @@
1731
1417
  display: inline-block;
1732
1418
  margin-top: 8px;
1733
1419
  font-size: 14px;
1734
- color: #cbff01;
1420
+ color: var(--taskon-color-primary);
1735
1421
  text-decoration: none;
1736
1422
  cursor: pointer;
1737
1423
  }
@@ -1750,12 +1436,12 @@
1750
1436
 
1751
1437
  /* 审核中 */
1752
1438
  .taskon-community-pow-review-status--pending {
1753
- color: #ffc107;
1439
+ color: var(--taskon-color-warning);
1754
1440
  }
1755
1441
 
1756
1442
  /* 审核失败 */
1757
1443
  .taskon-community-pow-review-status--failed {
1758
- color: #f44336;
1444
+ color: var(--taskon-color-error);
1759
1445
  }
1760
1446
 
1761
1447
  /* 响应式 */
@@ -1803,11 +1489,11 @@
1803
1489
  /* Hover 效果(PC 端) */
1804
1490
  @media (min-width: 751px) {
1805
1491
  .taskon-community-task-item--hover:hover .taskon-community-task {
1806
- background: #2a2a2a; /* 卡片 hover 背景色 */
1492
+ background: var(--taskon-color-bg-floating);
1807
1493
  }
1808
1494
 
1809
1495
  .taskon-community-task-item--hover:hover .taskon-community-task--won {
1810
- background: rgba(203, 255, 1, 0.08); /* 完成状态 hover 背景 */
1496
+ background: var(--taskon-color-primary-bg);
1811
1497
  }
1812
1498
  }
1813
1499
 
@@ -1878,31 +1564,31 @@
1878
1564
  /* Stacked cards behind main card */
1879
1565
  .taskon-taskchain-card-stack {
1880
1566
  position: absolute;
1881
- border: 1px solid rgba(255, 255, 255, 0.08);
1567
+ border: 1px solid var(--taskon-color-border-secondary);
1882
1568
  border-radius: 10px;
1883
1569
  height: 40px;
1884
- box-shadow: 0 -1px 2px 0 rgba(0, 0, 0, 0.1);
1570
+ box-shadow: 0 -1px 2px 0 var(--taskon-color-border-secondary);
1885
1571
  }
1886
1572
 
1887
1573
  .taskon-taskchain-card-stack--1 {
1888
1574
  left: 37px;
1889
1575
  right: 37px;
1890
1576
  top: 4px;
1891
- background: #1a1a1a;
1577
+ background: var(--taskon-color-bg-canvas);
1892
1578
  }
1893
1579
 
1894
1580
  .taskon-taskchain-card-stack--2 {
1895
1581
  left: 24px;
1896
1582
  right: 24px;
1897
1583
  top: 12px;
1898
- background: #1f1f1f;
1584
+ background: var(--taskon-color-bg-surface);
1899
1585
  }
1900
1586
 
1901
1587
  .taskon-taskchain-card-stack--3 {
1902
1588
  left: 10px;
1903
1589
  right: 10px;
1904
1590
  top: 20px;
1905
- background: #222222;
1591
+ background: var(--taskon-color-bg-floating);
1906
1592
  }
1907
1593
 
1908
1594
  /* Main card */
@@ -1912,7 +1598,8 @@
1912
1598
  flex-direction: column;
1913
1599
  min-height: 200px;
1914
1600
  padding: 20px;
1915
- background-color: var(--taskon-bg-secondary, #252525);
1601
+ background-color: var(--taskon-color-bg-inset);
1602
+ border: 1px solid var(--taskon-color-border);
1916
1603
  border-radius: 10px;
1917
1604
  cursor: pointer;
1918
1605
  overflow: hidden;
@@ -1921,7 +1608,7 @@
1921
1608
 
1922
1609
  .taskon-taskchain-card:hover {
1923
1610
  transform: translateY(-2px);
1924
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
1611
+ box-shadow: 0 8px 20px var(--taskon-color-bg-mask);
1925
1612
  }
1926
1613
 
1927
1614
  .taskon-taskchain-card--disabled {
@@ -1939,7 +1626,7 @@
1939
1626
  font-weight: 600;
1940
1627
  word-break: break-word;
1941
1628
  padding-right: 48px;
1942
- color: var(--taskon-text-primary, #fff);
1629
+ color: var(--taskon-color-text);
1943
1630
  }
1944
1631
 
1945
1632
  /* Spots left */
@@ -1949,11 +1636,11 @@
1949
1636
  gap: 4px;
1950
1637
  margin-top: 10px;
1951
1638
  font-size: 14px;
1952
- color: var(--taskon-text-primary, #fff);
1639
+ color: var(--taskon-color-text);
1953
1640
  }
1954
1641
 
1955
1642
  .taskon-taskchain-card-spots-label {
1956
- color: var(--taskon-text-secondary, #999);
1643
+ color: var(--taskon-color-text-secondary);
1957
1644
  }
1958
1645
 
1959
1646
  /* Description */
@@ -1961,7 +1648,7 @@
1961
1648
  margin-top: 8px;
1962
1649
  margin-bottom: 16px;
1963
1650
  font-size: 14px;
1964
- color: var(--taskon-text-secondary, #999);
1651
+ color: var(--taskon-color-text-secondary);
1965
1652
  line-height: 1.5;
1966
1653
  display: -webkit-box;
1967
1654
  -webkit-line-clamp: 2;
@@ -1991,7 +1678,7 @@
1991
1678
  align-items: center;
1992
1679
  gap: 4px;
1993
1680
  padding: 8px;
1994
- background-color: rgba(255, 255, 255, 0.05);
1681
+ background-color: var(--taskon-color-bg-surface-subtle);
1995
1682
  border-radius: 4px;
1996
1683
  flex-shrink: 0;
1997
1684
  }
@@ -2007,17 +1694,17 @@
2007
1694
  .taskon-taskchain-card-reward-amount {
2008
1695
  font-size: 14px;
2009
1696
  font-weight: 600;
2010
- color: #eeb803;
1697
+ color: var(--taskon-color-warning);
2011
1698
  }
2012
1699
 
2013
1700
  .taskon-taskchain-card-reward-amount--points {
2014
- color: #00ffa3;
1701
+ color: var(--taskon-color-secondary);
2015
1702
  }
2016
1703
 
2017
1704
  /* Reward name */
2018
1705
  .taskon-taskchain-card-reward-name {
2019
1706
  font-size: 14px;
2020
- color: var(--taskon-text-primary, #fff);
1707
+ color: var(--taskon-color-text);
2021
1708
  }
2022
1709
 
2023
1710
  /* NFT reward icon (rounded corners for NFT images) */
@@ -2039,7 +1726,7 @@
2039
1726
  margin-left: 16px;
2040
1727
  font-size: 14px;
2041
1728
  font-weight: 600;
2042
- color: #27ae60;
1729
+ color: var(--taskon-color-success);
2043
1730
  flex-shrink: 0;
2044
1731
  }
2045
1732
 
@@ -2054,18 +1741,18 @@
2054
1741
  }
2055
1742
 
2056
1743
  .taskon-taskchain-card-overlay--ended {
2057
- background-color: rgba(0, 0, 0, 0.7);
1744
+ background-color: var(--taskon-color-bg-mask);
2058
1745
  }
2059
1746
 
2060
1747
  .taskon-taskchain-card-overlay-text {
2061
1748
  font-size: 16px;
2062
1749
  font-weight: 600;
2063
- color: #fff;
1750
+ color: var(--taskon-color-text);
2064
1751
  text-transform: uppercase;
2065
1752
  }
2066
1753
 
2067
1754
  .taskon-taskchain-card-overlay--locked {
2068
- background-color: rgba(0, 0, 0, 0.5);
1755
+ background-color: var(--taskon-color-bg-mask);
2069
1756
  backdrop-filter: blur(2px);
2070
1757
  }
2071
1758
 
@@ -2084,7 +1771,7 @@
2084
1771
  align-items: center;
2085
1772
  justify-content: center;
2086
1773
  gap: 16px;
2087
- background-color: rgba(255, 255, 255, 0.1);
1774
+ background-color: var(--taskon-color-bg-surface-strong);
2088
1775
  backdrop-filter: blur(10px);
2089
1776
  border-radius: inherit;
2090
1777
  opacity: 0;
@@ -2108,12 +1795,12 @@
2108
1795
  .taskon-taskchain-card-lock-text {
2109
1796
  font-size: 14px;
2110
1797
  text-align: center;
2111
- color: #fff;
1798
+ color: var(--taskon-color-text);
2112
1799
  white-space: nowrap;
2113
1800
  }
2114
1801
 
2115
1802
  .taskon-taskchain-card-lock-highlight {
2116
- color: #00ffa3;
1803
+ color: var(--taskon-color-secondary);
2117
1804
  text-transform: capitalize;
2118
1805
  }
2119
1806
 
@@ -2229,12 +1916,12 @@
2229
1916
 
2230
1917
  /* Completed step - bright green */
2231
1918
  .taskon-taskchain-step-bar--completed {
2232
- background-color: #cbff01;
1919
+ background-color: var(--taskon-color-primary);
2233
1920
  }
2234
1921
 
2235
1922
  /* Pending step - dim green */
2236
1923
  .taskon-taskchain-step-bar--pending {
2237
- background-color: rgb(203 255 1 / 20%);
1924
+ background-color: var(--taskon-color-primary-bg);
2238
1925
  }
2239
1926
 
2240
1927
  /* Flag icon at the end */
@@ -2287,31 +1974,31 @@
2287
1974
  .taskon-taskchain-time-icon {
2288
1975
  width: 16px;
2289
1976
  height: 16px;
2290
- color: var(--taskon-text-tertiary, #666);
1977
+ color: var(--taskon-color-text-tertiary);
2291
1978
  }
2292
1979
 
2293
1980
  .taskon-taskchain-time-text {
2294
1981
  font-size: 14px;
2295
1982
  font-weight: 500;
2296
- color: var(--taskon-text-secondary, #999);
1983
+ color: var(--taskon-color-text-secondary);
2297
1984
  }
2298
1985
 
2299
1986
  .taskon-taskchain-time-divider {
2300
1987
  width: 1px;
2301
1988
  height: 20px;
2302
- background-color: var(--taskon-border-color, #333);
1989
+ background-color: var(--taskon-color-border);
2303
1990
  }
2304
1991
 
2305
1992
  .taskon-taskchain-time-label {
2306
1993
  font-size: 14px;
2307
1994
  font-weight: 500;
2308
- color: var(--taskon-text-secondary, #999);
1995
+ color: var(--taskon-color-text-secondary);
2309
1996
  }
2310
1997
 
2311
1998
  .taskon-taskchain-time-value {
2312
1999
  font-size: 14px;
2313
2000
  font-weight: 500;
2314
- color: var(--taskon-text-primary, #fff);
2001
+ color: var(--taskon-color-text);
2315
2002
  }
2316
2003
 
2317
2004
  /* Mobile styles */
@@ -2351,7 +2038,11 @@
2351
2038
  .taskon-taskchain-reward-display-inner {
2352
2039
  position: relative;
2353
2040
  border-radius: 8px;
2354
- background: linear-gradient(to bottom, transparent, rgba(255, 255, 255, 0.2));
2041
+ background: linear-gradient(
2042
+ to bottom,
2043
+ transparent,
2044
+ var(--taskon-color-border-secondary)
2045
+ );
2355
2046
  padding: 2px;
2356
2047
  }
2357
2048
 
@@ -2359,7 +2050,7 @@
2359
2050
  position: relative;
2360
2051
  display: flex;
2361
2052
  border-radius: 8px;
2362
- background-color: #1a1a1a;
2053
+ background-color: var(--taskon-color-bg-surface);
2363
2054
  }
2364
2055
 
2365
2056
  .taskon-taskchain-reward-display-item {
@@ -2391,15 +2082,15 @@
2391
2082
  }
2392
2083
 
2393
2084
  .taskon-taskchain-reward-display-text--token {
2394
- color: #eeb803;
2085
+ color: var(--taskon-color-warning);
2395
2086
  }
2396
2087
 
2397
2088
  .taskon-taskchain-reward-display-text--points {
2398
- color: var(--taskon-secondary, #cbff01);
2089
+ color: var(--taskon-color-secondary);
2399
2090
  }
2400
2091
 
2401
2092
  .taskon-taskchain-reward-display-text--nft {
2402
- color: #fff;
2093
+ color: var(--taskon-color-text);
2403
2094
  max-width: 120px;
2404
2095
  overflow: hidden;
2405
2096
  text-overflow: ellipsis;
@@ -2443,14 +2134,14 @@
2443
2134
  font-size: 32px;
2444
2135
  font-weight: 600;
2445
2136
  line-height: 40px;
2446
- color: var(--taskon-text-primary, #fff);
2137
+ color: var(--taskon-color-text);
2447
2138
  margin-bottom: 12px;
2448
2139
  }
2449
2140
 
2450
2141
  /* Subtitle */
2451
2142
  .taskon-taskchain-reward-subtitle {
2452
2143
  font-size: 16px;
2453
- color: var(--taskon-text-secondary, #999);
2144
+ color: var(--taskon-color-text-secondary);
2454
2145
  }
2455
2146
 
2456
2147
  /* ============================================================================
@@ -2499,7 +2190,7 @@
2499
2190
  .taskon-taskchain-win-reward-text {
2500
2191
  font-size: 20px;
2501
2192
  font-weight: 500;
2502
- color: var(--taskon-text-primary, #fff);
2193
+ color: var(--taskon-color-text);
2503
2194
  max-width: 200px;
2504
2195
  overflow: visible;
2505
2196
  text-wrap: wrap;
@@ -2509,12 +2200,12 @@
2509
2200
 
2510
2201
  /* Token amount color */
2511
2202
  .taskon-taskchain-win-reward-text--token {
2512
- color: #fbb15a;
2203
+ color: var(--taskon-color-warning);
2513
2204
  }
2514
2205
 
2515
2206
  /* Points amount color */
2516
2207
  .taskon-taskchain-win-reward-text--points {
2517
- color: #4b5eff;
2208
+ color: var(--taskon-color-link);
2518
2209
  }
2519
2210
 
2520
2211
  /* ============================================================================
@@ -2537,8 +2228,8 @@
2537
2228
  align-items: center;
2538
2229
  justify-content: center;
2539
2230
  border-radius: 8px;
2540
- border: 1px solid rgb(60 232 155 / 20%);
2541
- background-color: rgb(0 255 163 / 10%);
2231
+ border: 1px solid var(--taskon-color-secondary);
2232
+ background-color: var(--taskon-color-secondary-bg);
2542
2233
  }
2543
2234
 
2544
2235
  /* Multi-reward: flex-wrap centered layout */
@@ -2560,6 +2251,18 @@
2560
2251
  background-color: transparent;
2561
2252
  }
2562
2253
 
2254
+ /* Token claimed item trigger button reset */
2255
+ .taskon-taskchain-claimed-item--token-trigger {
2256
+ appearance: none;
2257
+ border: 0;
2258
+ background-color: transparent;
2259
+ font: inherit;
2260
+ line-height: inherit;
2261
+ text-align: inherit;
2262
+ color: inherit;
2263
+ cursor: pointer;
2264
+ }
2265
+
2563
2266
  /* Multi-reward item: vertical layout */
2564
2267
  .taskon-taskchain-claimed-item--multi {
2565
2268
  flex-direction: column;
@@ -2582,11 +2285,11 @@
2582
2285
 
2583
2286
  /* Claimed icon glow effects - matches Vue: showGlow when multi rewards */
2584
2287
  .taskon-taskchain-claimed-icon--glow-token {
2585
- box-shadow: 0 -8px 30px 0 #f47d3b;
2288
+ box-shadow: 0 -8px 30px 0 var(--taskon-color-warning);
2586
2289
  }
2587
2290
 
2588
2291
  .taskon-taskchain-claimed-icon--glow-points {
2589
- box-shadow: 0 -8px 30px 0 #ff6b35;
2292
+ box-shadow: 0 -8px 30px 0 var(--taskon-color-secondary);
2590
2293
  }
2591
2294
 
2592
2295
  /* Claimed reward text - single reward */
@@ -2594,7 +2297,7 @@
2594
2297
  font-size: 18px;
2595
2298
  font-weight: 600;
2596
2299
  line-height: 24px;
2597
- color: var(--taskon-text-primary, #fff);
2300
+ color: var(--taskon-color-text);
2598
2301
  }
2599
2302
 
2600
2303
  /* Claimed reward text - multi reward */
@@ -2605,12 +2308,12 @@
2605
2308
 
2606
2309
  /* Token amount color in claimed state */
2607
2310
  .taskon-taskchain-claimed-text--token {
2608
- color: #fbb15a;
2311
+ color: var(--taskon-color-warning);
2609
2312
  }
2610
2313
 
2611
2314
  /* Points amount color in claimed state */
2612
2315
  .taskon-taskchain-claimed-text--points {
2613
- color: #ff6b35;
2316
+ color: var(--taskon-color-secondary);
2614
2317
  }
2615
2318
 
2616
2319
  /* Token text with underline (matches Vue: tw-underline on token text) */
@@ -2623,19 +2326,19 @@
2623
2326
  cursor: pointer;
2624
2327
  }
2625
2328
 
2626
- /* Right arrow icon for token link (matches Vue: tw-h-3 tw-w-3 = 12px) */
2329
+ /* Right arrow icon for token link */
2627
2330
  .taskon-taskchain-claimed-arrow {
2628
- color: #fbb15a;
2331
+ color: var(--taskon-color-warning);
2629
2332
  margin-left: 4px;
2630
- width: 12px;
2631
- height: 12px;
2333
+ width: 14px;
2334
+ height: 14px;
2632
2335
  flex-shrink: 0;
2633
2336
  }
2634
2337
 
2635
- /* Multi-reward smaller arrow (matches Vue: tw-h-2 tw-w-2 = 8px) */
2338
+ /* Multi-reward smaller arrow */
2636
2339
  .taskon-taskchain-claimed-arrow--multi {
2637
- width: 8px;
2638
- height: 8px;
2340
+ width: 10px;
2341
+ height: 10px;
2639
2342
  }
2640
2343
 
2641
2344
  /* ============================================================================
@@ -2664,21 +2367,21 @@
2664
2367
  /* Tooltip label (left side) */
2665
2368
  .taskon-taskchain-token-tooltip-label {
2666
2369
  font-size: 14px;
2667
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
2370
+ color: var(--taskon-color-text-tertiary);
2668
2371
  }
2669
2372
 
2670
2373
  /* Tooltip value (right side, token amount) */
2671
2374
  .taskon-taskchain-token-tooltip-value {
2672
2375
  font-size: 14px;
2673
2376
  font-weight: 600;
2674
- color: var(--taskon-text-primary, #fff);
2377
+ color: var(--taskon-color-text);
2675
2378
  }
2676
2379
 
2677
2380
  /* Tooltip USD value */
2678
2381
  .taskon-taskchain-token-tooltip-usd {
2679
2382
  font-size: 14px;
2680
2383
  font-weight: 500;
2681
- color: #cbff01;
2384
+ color: var(--taskon-color-primary);
2682
2385
  }
2683
2386
 
2684
2387
  /* Action buttons container */
@@ -2814,8 +2517,8 @@
2814
2517
  align-items: center;
2815
2518
  justify-content: space-between;
2816
2519
  border-radius: 8px;
2817
- border: 1px solid rgb(60 232 155 / 20%);
2818
- background-color: rgb(0 255 163 / 10%);
2520
+ border: 1px solid var(--taskon-color-secondary);
2521
+ background-color: var(--taskon-color-secondary-bg);
2819
2522
  padding: 12px 16px;
2820
2523
  }
2821
2524
 
@@ -2845,7 +2548,7 @@
2845
2548
 
2846
2549
  /* NFT fallback image (no collection image available) */
2847
2550
  .taskon-taskchain-claimed-nft-image--fallback {
2848
- background-color: #1f1f1f;
2551
+ background-color: var(--taskon-color-bg-surface);
2849
2552
  }
2850
2553
 
2851
2554
  /* Chain badge on NFT image (bottom-right corner) */
@@ -2856,8 +2559,8 @@
2856
2559
  width: 20px;
2857
2560
  height: 20px;
2858
2561
  border-radius: 50%;
2859
- border: 1px solid rgba(0, 0, 0, 0.6);
2860
- background-color: #fff;
2562
+ border: 1px solid var(--taskon-color-border);
2563
+ background-color: var(--taskon-color-bg-canvas);
2861
2564
  }
2862
2565
 
2863
2566
  /* NFT text section */
@@ -2872,14 +2575,14 @@
2872
2575
  /* NFT label ("NFT" text) */
2873
2576
  .taskon-taskchain-claimed-nft-label {
2874
2577
  font-size: 14px;
2875
- color: rgba(255, 255, 255, 0.6);
2578
+ color: var(--taskon-color-text-tertiary);
2876
2579
  }
2877
2580
 
2878
2581
  /* NFT collection name */
2879
2582
  .taskon-taskchain-claimed-nft-name {
2880
2583
  font-size: 18px;
2881
2584
  font-weight: 600;
2882
- color: #fff;
2585
+ color: var(--taskon-color-text);
2883
2586
  overflow: hidden;
2884
2587
  text-overflow: ellipsis;
2885
2588
  white-space: nowrap;
@@ -2891,8 +2594,8 @@
2891
2594
  padding: 8px 20px;
2892
2595
  font-size: 14px;
2893
2596
  font-weight: 600;
2894
- color: #000;
2895
- background-color: #cbff01;
2597
+ color: var(--taskon-color-text-on-primary);
2598
+ background-color: var(--taskon-color-primary);
2896
2599
  border: none;
2897
2600
  border-radius: 8px;
2898
2601
  cursor: pointer;
@@ -2938,19 +2641,19 @@
2938
2641
 
2939
2642
  /* Primary button */
2940
2643
  .taskon-taskchain-btn--primary {
2941
- color: #000;
2942
- background-color: #cbff01;
2644
+ color: var(--taskon-color-text-on-primary);
2645
+ background-color: var(--taskon-color-primary);
2943
2646
  }
2944
2647
 
2945
2648
  /* Secondary button */
2946
2649
  .taskon-taskchain-btn--secondary {
2947
- color: var(--taskon-text-primary, #fff);
2650
+ color: var(--taskon-color-text);
2948
2651
  background-color: transparent;
2949
- border: 1px solid rgba(255, 255, 255, 0.2);
2652
+ border: 1px solid var(--taskon-color-border);
2950
2653
  }
2951
2654
 
2952
2655
  .taskon-taskchain-btn--secondary:hover {
2953
- background-color: rgba(255, 255, 255, 0.1);
2656
+ background-color: var(--taskon-color-bg-surface-strong);
2954
2657
  }
2955
2658
 
2956
2659
  /* ============================================================================
@@ -3032,8 +2735,8 @@
3032
2735
  /**
3033
2736
  * TaskChainBlindBoxStep Styles
3034
2737
  *
3035
- * This component now reuses BlindBoxDialog and BlindBoxRewardDialog from Quest,
3036
- * so most styles come from those components. Only container and helper styles here.
2738
+ * This component now reuses BlindBoxDialog from Quest and shared TaskChain claimed rewards UI.
2739
+ * Only container and helper styles are defined here.
3037
2740
  */
3038
2741
 
3039
2742
  /* Container */
@@ -3051,6 +2754,39 @@
3051
2754
  min-height: 400px;
3052
2755
  }
3053
2756
 
2757
+ /* Blind box claimed result (shared claimed list renderer) */
2758
+ .taskon-taskchain-blindbox-result {
2759
+ width: 100%;
2760
+ max-width: 510px;
2761
+ text-align: center;
2762
+ }
2763
+
2764
+ .taskon-taskchain-blindbox-result-title {
2765
+ margin: 0;
2766
+ font-size: 32px;
2767
+ font-weight: 600;
2768
+ line-height: 40px;
2769
+ color: var(--taskon-color-text);
2770
+ }
2771
+
2772
+ .taskon-taskchain-blindbox-result-subtitle {
2773
+ margin-top: 12px;
2774
+ margin-bottom: 0;
2775
+ font-size: 16px;
2776
+ line-height: 1.5;
2777
+ color: var(--taskon-color-text-secondary);
2778
+ }
2779
+
2780
+ .taskon-taskchain-blindbox-result-rewards {
2781
+ margin-top: 16px;
2782
+ }
2783
+
2784
+ .taskon-taskchain-blindbox-result-actions {
2785
+ display: flex;
2786
+ justify-content: center;
2787
+ margin-top: 60px;
2788
+ }
2789
+
3054
2790
  /* Manual submit action */
3055
2791
  .taskon-taskchain-blindbox-actions {
3056
2792
  display: flex;
@@ -3066,8 +2802,8 @@
3066
2802
  border-radius: 8px;
3067
2803
  cursor: pointer;
3068
2804
  transition: opacity 0.2s, transform 0.1s;
3069
- color: #000;
3070
- background-color: #cbff01;
2805
+ color: var(--taskon-color-text-on-primary);
2806
+ background-color: var(--taskon-color-primary);
3071
2807
  }
3072
2808
 
3073
2809
  .taskon-taskchain-blindbox-btn:hover {
@@ -3089,15 +2825,15 @@
3089
2825
  flex-direction: column;
3090
2826
  align-items: center;
3091
2827
  gap: 16px;
3092
- color: var(--taskon-text-secondary, #999);
2828
+ color: var(--taskon-color-text-secondary);
3093
2829
  }
3094
2830
 
3095
2831
  /* Spinner */
3096
2832
  .taskon-taskchain-spinner {
3097
2833
  width: 32px;
3098
2834
  height: 32px;
3099
- border: 3px solid rgba(255, 255, 255, 0.2);
3100
- border-top-color: #cbff01;
2835
+ border: 3px solid var(--taskon-color-border);
2836
+ border-top-color: var(--taskon-color-primary);
3101
2837
  border-radius: 50%;
3102
2838
  animation: taskon-taskchain-spin 0.8s linear infinite;
3103
2839
  }
@@ -3114,6 +2850,19 @@
3114
2850
  padding: 16px;
3115
2851
  min-height: 350px;
3116
2852
  }
2853
+
2854
+ .taskon-taskchain-blindbox-result-title {
2855
+ font-size: 24px;
2856
+ line-height: 32px;
2857
+ }
2858
+
2859
+ .taskon-taskchain-blindbox-result-subtitle {
2860
+ font-size: 14px;
2861
+ }
2862
+
2863
+ .taskon-taskchain-blindbox-result-actions {
2864
+ margin-top: 40px;
2865
+ }
3117
2866
  }
3118
2867
  /**
3119
2868
  * NotEligible Styles
@@ -3133,7 +2882,7 @@
3133
2882
  .taskon-taskchain-not-eligible-oops {
3134
2883
  font-size: 32px;
3135
2884
  font-weight: 600;
3136
- color: var(--taskon-text-primary, #fff);
2885
+ color: var(--taskon-color-text);
3137
2886
  margin-bottom: 32px;
3138
2887
  }
3139
2888
 
@@ -3145,13 +2894,13 @@
3145
2894
  .taskon-taskchain-not-eligible-title {
3146
2895
  font-size: 18px;
3147
2896
  font-weight: 600;
3148
- color: var(--taskon-text-primary, #fff);
2897
+ color: var(--taskon-color-text);
3149
2898
  margin-bottom: 8px;
3150
2899
  }
3151
2900
 
3152
2901
  .taskon-taskchain-not-eligible-desc {
3153
2902
  font-size: 14px;
3154
- color: var(--taskon-text-secondary, #999);
2903
+ color: var(--taskon-color-text-secondary);
3155
2904
  max-width: 300px;
3156
2905
  line-height: 1.5;
3157
2906
  }
@@ -3160,7 +2909,7 @@
3160
2909
  width: 508px;
3161
2910
  max-width: 100%;
3162
2911
  border-radius: 10px;
3163
- background-color: rgba(255, 255, 255, 0.05);
2912
+ background-color: var(--taskon-color-bg-surface-strong);
3164
2913
  padding: 16px;
3165
2914
  }
3166
2915
 
@@ -3191,7 +2940,7 @@
3191
2940
  flex-direction: column;
3192
2941
  align-items: center;
3193
2942
  justify-content: center;
3194
- background: rgba(0, 0, 0, 0.5);
2943
+ background: var(--taskon-color-bg-mask);
3195
2944
  backdrop-filter: blur(10px);
3196
2945
  z-index: 10;
3197
2946
  border-radius: inherit;
@@ -3208,7 +2957,7 @@
3208
2957
  font-size: 32px;
3209
2958
  font-weight: 700;
3210
2959
  line-height: 40px;
3211
- color: #fff;
2960
+ color: var(--taskon-color-text);
3212
2961
  }
3213
2962
 
3214
2963
  /* Mobile responsive */
@@ -3238,7 +2987,8 @@
3238
2987
  display: flex;
3239
2988
  flex-direction: column;
3240
2989
  width: 100%;
3241
- padding-top: 38px;
2990
+ /* Reserve safe spacing for BottomDialog close button area to prevent overlap with title/content */
2991
+ padding-top: 68px;
3242
2992
  padding-bottom: 40px;
3243
2993
  }
3244
2994
 
@@ -3248,7 +2998,7 @@
3248
2998
  font-weight: 600;
3249
2999
  margin: 0;
3250
3000
  word-break: break-word;
3251
- color: var(--taskon-text-primary, #fff);
3001
+ color: var(--taskon-color-text);
3252
3002
  }
3253
3003
 
3254
3004
  /* Time info */
@@ -3286,8 +3036,8 @@
3286
3036
  margin-top: 16px;
3287
3037
  padding: 40px;
3288
3038
  border-radius: 10px;
3289
- border: 1px solid rgba(255, 255, 255, 0.05);
3290
- background: rgba(255, 255, 255, 0.05);
3039
+ border: 1px solid var(--taskon-color-border-secondary);
3040
+ background: var(--taskon-color-bg-surface-strong);
3291
3041
  overflow: hidden;
3292
3042
  }
3293
3043
 
@@ -3302,8 +3052,8 @@
3302
3052
  border-radius: 50%;
3303
3053
  background: radial-gradient(
3304
3054
  50% 50% at 50% 50%,
3305
- rgb(82 82 82 / 30%) 0%,
3306
- rgb(178 178 178 / 30%) 100%
3055
+ var(--taskon-color-bg-inset) 0%,
3056
+ transparent 100%
3307
3057
  );
3308
3058
  filter: blur(134px);
3309
3059
  z-index: -1;
@@ -3362,7 +3112,7 @@
3362
3112
  align-items: center;
3363
3113
  justify-content: center;
3364
3114
  gap: 16px;
3365
- color: var(--taskon-text-secondary, #999);
3115
+ color: var(--taskon-color-text-secondary);
3366
3116
  }
3367
3117
 
3368
3118
  /* Task content wrapper - matches Vue: tw-mx-auto tw-w-[800px] tw-max-w-full */
@@ -3375,7 +3125,8 @@
3375
3125
  /* Mobile responsive */
3376
3126
  @media (max-width: 750px) {
3377
3127
  .taskon-taskchain-detail {
3378
- padding-top: 32px;
3128
+ /* Keep extra top spacing on mobile where close button stays in top-right corner */
3129
+ padding-top: 52px;
3379
3130
  padding-bottom: 24px;
3380
3131
  }
3381
3132
 
@@ -3414,7 +3165,7 @@
3414
3165
  .taskon-bottom-dialog-overlay {
3415
3166
  position: absolute;
3416
3167
  inset: 0;
3417
- background: var(--taskon-color-overlay, rgba(66, 66, 66, 0.5));
3168
+ background: var(--taskon-color-bg-mask);
3418
3169
  backdrop-filter: blur(40px);
3419
3170
  }
3420
3171
 
@@ -3452,8 +3203,8 @@
3452
3203
  right: 0;
3453
3204
  bottom: 0;
3454
3205
  left: 0;
3455
- border-radius: 10px 10px 0 0;
3456
- background: var(--taskon-color-bg-popup, #0d0d0d);
3206
+ border-radius: var(--taskon-border-radius) var(--taskon-border-radius) 0 0;
3207
+ background: var(--taskon-color-bg-floating);
3457
3208
  overflow: auto;
3458
3209
  }
3459
3210
 
@@ -3488,8 +3239,9 @@
3488
3239
  /* ==================== Close button ==================== */
3489
3240
  .taskon-bottom-dialog-close {
3490
3241
  position: absolute;
3491
- top: 24px;
3492
- right: 24px;
3242
+ /* Move close button 6px towards top-right globally */
3243
+ top: 18px;
3244
+ right: 18px;
3493
3245
  z-index: 10;
3494
3246
  display: flex;
3495
3247
  align-items: center;
@@ -3497,24 +3249,25 @@
3497
3249
  width: 32px;
3498
3250
  height: 32px;
3499
3251
  padding: 0;
3500
- background: rgba(255, 255, 255, 0.1);
3252
+ background: var(--taskon-color-bg-surface-subtle);
3501
3253
  border: none;
3502
- border-radius: 8px;
3503
- color: var(--taskon-text-secondary, #999);
3254
+ border-radius: var(--taskon-border-radius-sm);
3255
+ color: var(--taskon-color-text-secondary);
3504
3256
  cursor: pointer;
3505
3257
  transition: background-color 0.2s, color 0.2s;
3506
3258
  }
3507
3259
 
3508
3260
  .taskon-bottom-dialog-close:hover {
3509
- background-color: rgba(255, 255, 255, 0.2);
3510
- color: var(--taskon-text-primary, #fff);
3261
+ background-color: var(--taskon-color-bg-surface);
3262
+ color: var(--taskon-color-text);
3511
3263
  }
3512
3264
 
3513
3265
  /* ==================== Mobile responsive ==================== */
3514
3266
  @media (max-width: 750px) {
3515
3267
  .taskon-bottom-dialog-close {
3516
- top: 5.333vw;
3517
- right: 4vw;
3268
+ /* Keep the same 6px top-right shift on mobile baseline values */
3269
+ top: calc(5.333vw - 6px);
3270
+ right: calc(4vw - 6px);
3518
3271
  width: 24px;
3519
3272
  height: 24px;
3520
3273
  }
@@ -3544,8 +3297,8 @@
3544
3297
  @media (max-width: 750px) {
3545
3298
  .taskon-taskchain-dialog-content {
3546
3299
  max-width: initial;
3547
- padding-left: var(--taskon-m-padding, 4vw);
3548
- padding-right: var(--taskon-m-padding, 4vw);
3300
+ padding-left: 4vw;
3301
+ padding-right: 4vw;
3549
3302
  }
3550
3303
  }
3551
3304
 
@@ -3558,18 +3311,17 @@
3558
3311
  min-height: 400px;
3559
3312
  padding: 40px;
3560
3313
  text-align: center;
3561
- color: var(--taskon-text-primary, #fff);
3314
+ color: var(--taskon-color-text);
3562
3315
  }
3563
3316
 
3564
3317
  .taskon-taskchain-dialog-error-detail {
3565
3318
  margin-top: 8px;
3566
3319
  font-size: 14px;
3567
- color: var(--taskon-text-secondary, #999);
3320
+ color: var(--taskon-color-text-secondary);
3568
3321
  }
3569
3322
  /**
3570
3323
  * SectorItem 组件样式
3571
3324
  * 完全复刻 taskon-website 的 SectorItem.vue 样式
3572
- * 直接使用 dark 模式颜色值,不使用 CSS 变量
3573
3325
  * 使用 taskon-sector- 前缀避免与项目方样式冲突
3574
3326
  */
3575
3327
 
@@ -3589,14 +3341,14 @@
3589
3341
  font-size: 24px;
3590
3342
  font-weight: 700;
3591
3343
  line-height: 40px;
3592
- color: #ffffff;
3344
+ color: var(--taskon-color-text);
3593
3345
  margin: 0;
3594
3346
  }
3595
3347
 
3596
3348
  /* Sector 描述 */
3597
3349
  .taskon-sector-desc {
3598
3350
  margin-top: 4px;
3599
- color: rgba(255, 255, 255, 0.6);
3351
+ color: var(--taskon-color-text-tertiary);
3600
3352
  font-size: 16px;
3601
3353
  line-height: 20px;
3602
3354
  white-space: pre-wrap;
@@ -3616,8 +3368,8 @@
3616
3368
  align-items: center;
3617
3369
  padding: 4px 14px;
3618
3370
  border-radius: 48px;
3619
- background: #cbff01; /* Primary 主题色 */
3620
- color: #0d0d0d;
3371
+ background: var(--taskon-color-primary);
3372
+ color: var(--taskon-color-text-on-primary);
3621
3373
  font-size: 18px;
3622
3374
  font-weight: 500;
3623
3375
  line-height: 30px;
@@ -3640,7 +3392,7 @@
3640
3392
  /* 已完成分隔符 */
3641
3393
  .taskon-sector-completed {
3642
3394
  margin-top: 22px;
3643
- color: #ffffff;
3395
+ color: var(--taskon-color-text);
3644
3396
  font-size: 16px;
3645
3397
  font-weight: 600;
3646
3398
  line-height: 20px;
@@ -3721,7 +3473,7 @@
3721
3473
  margin-top: 10px;
3722
3474
  display: flex;
3723
3475
  align-items: flex-end;
3724
- color: var(--taskon-color-text, #fff);
3476
+ color: var(--taskon-color-text);
3725
3477
  }
3726
3478
 
3727
3479
  /* 周期模式 - 积分数量 */
@@ -3735,7 +3487,7 @@
3735
3487
  /* 周期模式 - 累计积分强调 */
3736
3488
  .taskon-task-dialog-period-amount--em {
3737
3489
  margin-left: 15px;
3738
- color: #00ffa3;
3490
+ color: var(--taskon-color-secondary);
3739
3491
  }
3740
3492
 
3741
3493
  /* 周期模式 - 积分图标 */
@@ -3757,12 +3509,12 @@
3757
3509
 
3758
3510
  /* 周期模式 - 累计标签强调 */
3759
3511
  .taskon-task-dialog-period-label--em {
3760
- color: var(--taskon-color-text-secondary, rgba(255, 255, 255, 0.7));
3512
+ color: var(--taskon-color-text-secondary);
3761
3513
  }
3762
3514
 
3763
3515
  /* ==================== Unlimited 模式 ==================== */
3764
3516
  .taskon-task-dialog-uncertain-amount {
3765
- color: #00ffa3;
3517
+ color: var(--taskon-color-secondary);
3766
3518
  font-size: 32px;
3767
3519
  font-weight: 600;
3768
3520
  }
@@ -3778,7 +3530,7 @@
3778
3530
 
3779
3531
  .taskon-task-dialog-cm-name {
3780
3532
  margin-left: 6px;
3781
- color: var(--taskon-color-text-secondary, rgba(255, 255, 255, 0.7));
3533
+ color: var(--taskon-color-text-secondary);
3782
3534
  font-size: 14px;
3783
3535
  font-weight: 500;
3784
3536
  line-height: 18px;
@@ -3856,7 +3608,7 @@
3856
3608
  }
3857
3609
 
3858
3610
  .taskon-task-dialog-token-period-label--em {
3859
- color: var(--taskon-color-text-secondary, rgba(255, 255, 255, 0.7));
3611
+ color: var(--taskon-color-text-secondary);
3860
3612
  }
3861
3613
 
3862
3614
  /* ==================== 响应式 ==================== */
@@ -3884,7 +3636,7 @@
3884
3636
  position: relative;
3885
3637
  width: 100%;
3886
3638
  height: 8px;
3887
- background-color: rgba(255, 255, 255, 0.2);
3639
+ background-color: var(--taskon-color-bg-surface-strong);
3888
3640
  border-radius: 2px;
3889
3641
  overflow: hidden;
3890
3642
  }
@@ -3899,7 +3651,11 @@
3899
3651
  align-items: center;
3900
3652
  gap: 6px;
3901
3653
  /* 渐变背景: 绿色 -> 黄绿色 */
3902
- background: linear-gradient(90deg, #00ffa3 -229.89%, #cbff01 100%);
3654
+ background: linear-gradient(
3655
+ 90deg,
3656
+ var(--taskon-color-secondary) -229.89%,
3657
+ var(--taskon-color-primary) 100%
3658
+ );
3903
3659
  border-radius: 2px;
3904
3660
  overflow: hidden;
3905
3661
  }
@@ -3910,7 +3666,7 @@
3910
3666
  flex-shrink: 0;
3911
3667
  height: 200%;
3912
3668
  transform: rotate(45deg);
3913
- background: rgba(0, 0, 0, 0.1);
3669
+ background: var(--taskon-color-bg-mask);
3914
3670
  }
3915
3671
 
3916
3672
  /* ==================== 响应式 ==================== */
@@ -3935,14 +3691,14 @@
3935
3691
 
3936
3692
  /* 文字部分 */
3937
3693
  .taskon-task-dialog-token-progress__content {
3938
- color: var(--taskon-color-text-secondary, rgba(255, 255, 255, 0.7));
3694
+ color: var(--taskon-color-text-secondary);
3939
3695
  font-size: 14px;
3940
3696
  font-weight: 500;
3941
3697
  }
3942
3698
 
3943
3699
  /* 高亮数字 */
3944
3700
  .taskon-task-dialog-token-progress__text {
3945
- color: #00ffa3;
3701
+ color: var(--taskon-color-secondary);
3946
3702
  }
3947
3703
 
3948
3704
  /* 进度条容器 */
@@ -3967,7 +3723,7 @@
3967
3723
 
3968
3724
  .taskon-close-in {
3969
3725
  margin-top: 30px;
3970
- color: var(--taskon-primary-100, #6366f1);
3726
+ color: var(--taskon-color-primary);
3971
3727
  text-align: center;
3972
3728
  font-size: 14px;
3973
3729
  font-weight: 500;
@@ -3981,11 +3737,24 @@
3981
3737
 
3982
3738
  /* ==================== 左侧面板 ==================== */
3983
3739
  .taskon-task-dialog-left {
3740
+ position: relative;
3984
3741
  width: 440px;
3985
3742
  display: flex;
3986
3743
  flex-direction: column;
3987
3744
  }
3988
3745
 
3746
+ /* 有资格蒙版时,扩展蒙版范围以覆盖外层 padding 区域 */
3747
+ .taskon-task-dialog-left--mask-active {
3748
+ z-index: 1;
3749
+ overflow: visible;
3750
+ }
3751
+
3752
+ .taskon-task-dialog-left--mask-active .taskon-eligibility-mask {
3753
+ inset: -30px;
3754
+ padding: 30px;
3755
+ border-radius: var(--taskon-border-radius-lg);
3756
+ }
3757
+
3989
3758
  /* 主内容区 */
3990
3759
  .taskon-task-dialog-main {
3991
3760
  flex: 1;
@@ -3996,8 +3765,8 @@
3996
3765
  display: inline-block;
3997
3766
  padding: 3px 12px;
3998
3767
  border-radius: 4px;
3999
- background: rgba(255, 255, 255, 0.04);
4000
- color: var(--taskon-color-text-secondary, #a0a0a0);
3768
+ background: var(--taskon-color-bg-surface-subtle);
3769
+ color: var(--taskon-color-text-secondary);
4001
3770
  font-size: 13px;
4002
3771
  line-height: 16px;
4003
3772
  }
@@ -4005,7 +3774,7 @@
4005
3774
  /* ==================== 标题 ==================== */
4006
3775
  .taskon-task-dialog-title {
4007
3776
  margin: 20px 0 0 0;
4008
- color: var(--taskon-color-text, #fff);
3777
+ color: var(--taskon-color-text);
4009
3778
  font-size: 22px;
4010
3779
  font-weight: 600;
4011
3780
  line-height: 28px;
@@ -4015,29 +3784,29 @@
4015
3784
  .taskon-task-dialog-title--link {
4016
3785
  display: block;
4017
3786
  text-decoration: none;
4018
- color: var(--taskon-color-primary, #6366f1);
3787
+ color: var(--taskon-color-primary);
4019
3788
  transition: color 0.2s ease;
4020
3789
  }
4021
3790
 
4022
3791
  .taskon-task-dialog-title--link:hover {
4023
- color: var(--taskon-color-primary-hover, #818cf8);
3792
+ color: var(--taskon-color-primary-hover);
4024
3793
  text-decoration: underline;
4025
3794
  }
4026
3795
 
4027
3796
  /* ==================== 有效时间 - 复刻 Vue valid-util ==================== */
4028
3797
  .taskon-task-dialog-valid-time {
4029
- margin-top: 10px;
3798
+ margin-top: 15px;
4030
3799
  font-size: 14px;
4031
3800
  line-height: 18px;
4032
3801
  }
4033
3802
 
4034
3803
  .taskon-task-dialog-valid-time-label {
4035
- color: var(--taskon-color-text-secondary, rgba(255, 255, 255, 0.5));
3804
+ color: var(--taskon-color-text-disabled);
4036
3805
  }
4037
3806
 
4038
3807
  .taskon-task-dialog-valid-time-value {
4039
3808
  margin-left: 4px;
4040
- color: var(--taskon-color-text, #fff);
3809
+ color: var(--taskon-color-text);
4041
3810
  }
4042
3811
 
4043
3812
  /* ==================== 描述区域 ==================== */
@@ -4056,10 +3825,8 @@
4056
3825
  justify-content: center;
4057
3826
  border-radius: 6px;
4058
3827
  border: none;
4059
- /* Vue: --primary-12 深蓝色背景 */
4060
- background: rgba(203, 255, 1, 0.12);
4061
- /* Vue: --primary-100 黄色文字 */
4062
- color: var(--taskon-color-primary, #cbff01);
3828
+ background: var(--taskon-color-primary-bg);
3829
+ color: var(--taskon-color-primary);
4063
3830
  font-size: 14px;
4064
3831
  font-weight: 500;
4065
3832
  line-height: 40px;
@@ -4068,8 +3835,8 @@
4068
3835
  }
4069
3836
 
4070
3837
  .taskon-task-dialog-action:hover {
4071
- background: var(--taskon-color-primary, #cbff01);
4072
- color: #0d0d0d;
3838
+ background: var(--taskon-color-primary);
3839
+ color: var(--taskon-color-text-on-primary);
4073
3840
  }
4074
3841
 
4075
3842
  /* ==================== 奖励卡片 ==================== */
@@ -4078,8 +3845,7 @@
4078
3845
  margin-top: 30px;
4079
3846
  padding: 20px;
4080
3847
  border-radius: 10px;
4081
- /* Vue: --color-invisible 在深色主题下是略亮的半透明 */
4082
- background: rgba(255, 255, 255, 0.06);
3848
+ background: var(--taskon-color-bg-surface-strong);
4083
3849
  }
4084
3850
 
4085
3851
  /* Max claim 标签 - 复刻 Vue rewards-max-claim */
@@ -4092,20 +3858,17 @@
4092
3858
  display: flex;
4093
3859
  align-items: center;
4094
3860
  gap: 4px;
4095
- /* Vue: --color-lightest-inverse 深色文字 */
4096
- color: var(--taskon-color-text-inverse, #0d0d0d);
3861
+ color: var(--taskon-color-text);
4097
3862
  font-size: 14px;
4098
3863
  font-style: normal;
4099
3864
  font-weight: 600;
4100
3865
  line-height: normal;
4101
- /* Vue: --color-lightest 亮色背景 */
4102
- background: var(--taskon-color-bg-inverse, #fff);
3866
+ background: var(--taskon-color-bg-canvas);
4103
3867
  border-radius: 8px 8px 0 0;
4104
3868
  }
4105
3869
 
4106
3870
  .taskon-task-dialog-max-claim--highlight {
4107
- /* Vue: --secondary-100 高亮色 */
4108
- color: var(--taskon-color-secondary, #7c3aed);
3871
+ color: var(--taskon-color-secondary);
4109
3872
  }
4110
3873
 
4111
3874
  /* 标签行 */
@@ -4116,9 +3879,16 @@
4116
3879
  height: 24px;
4117
3880
  }
4118
3881
 
3882
+ .taskon-task-dialog-label-right {
3883
+ margin-left: auto;
3884
+ display: flex;
3885
+ align-items: center;
3886
+ gap: 10px;
3887
+ }
3888
+
4119
3889
  /* Rewards 标签 */
4120
3890
  .taskon-task-dialog-rewards-label {
4121
- color: var(--taskon-color-text, #fff);
3891
+ color: var(--taskon-color-text);
4122
3892
  font-size: 14px;
4123
3893
  line-height: 18px;
4124
3894
  font-weight: 600;
@@ -4128,9 +3898,9 @@
4128
3898
  .taskon-task-dialog-won {
4129
3899
  margin-left: auto;
4130
3900
  border-radius: 4px;
4131
- background: rgba(255, 255, 255, 0.04);
3901
+ background: var(--taskon-color-bg-surface-subtle);
4132
3902
  padding: 3px 12px;
4133
- color: #27ae60;
3903
+ color: var(--taskon-color-success);
4134
3904
  font-size: 14px;
4135
3905
  font-weight: 600;
4136
3906
  line-height: 18px;
@@ -4139,8 +3909,7 @@
4139
3909
  /* Updated at 标签 - Unlimited 任务专用,复刻 Vue updated-label */
4140
3910
  .taskon-task-dialog-updated {
4141
3911
  margin-left: auto;
4142
- /* Vue: --color-dark 半透明白色 */
4143
- color: var(--taskon-color-text-secondary, rgba(255, 255, 255, 0.5));
3912
+ color: var(--taskon-color-text-secondary);
4144
3913
  font-size: 12px;
4145
3914
  font-weight: 500;
4146
3915
  }
@@ -4150,7 +3919,7 @@
4150
3919
  margin-left: auto;
4151
3920
  display: flex;
4152
3921
  align-items: center;
4153
- color: var(--taskon-color-text-secondary, rgba(255, 255, 255, 0.7));
3922
+ color: var(--taskon-color-text-secondary);
4154
3923
  font-size: 13px;
4155
3924
  line-height: 16px;
4156
3925
  }
@@ -4160,14 +3929,13 @@
4160
3929
  margin: 0 6px;
4161
3930
  width: 1px;
4162
3931
  height: 10px;
4163
- background: var(--taskon-color-border, rgba(255, 255, 255, 0.2));
3932
+ background: var(--taskon-color-border);
4164
3933
  }
4165
3934
 
4166
3935
  /* 倒计时数字 */
4167
3936
  .taskon-task-dialog-periodic-done__time {
4168
3937
  margin-left: 4px;
4169
- /* Vue: --secondary-100 绿色强调 */
4170
- color: #00ffa3;
3938
+ color: var(--taskon-color-secondary);
4171
3939
  font-size: 14px;
4172
3940
  font-weight: 500;
4173
3941
  line-height: 18px;
@@ -4178,8 +3946,7 @@
4178
3946
  margin-top: 10px;
4179
3947
  display: flex;
4180
3948
  align-items: center;
4181
- /* Vue: --color-light 白色 */
4182
- color: var(--taskon-color-text, #fff);
3949
+ color: var(--taskon-color-text);
4183
3950
  }
4184
3951
 
4185
3952
  .taskon-task-dialog-point-icon {
@@ -4191,7 +3958,7 @@
4191
3958
  }
4192
3959
 
4193
3960
  .taskon-task-dialog-point-amount {
4194
- color: #00ffa3;
3961
+ color: var(--taskon-color-secondary);
4195
3962
  font-size: 32px;
4196
3963
  font-weight: 600;
4197
3964
  line-height: 40px;
@@ -4199,7 +3966,7 @@
4199
3966
 
4200
3967
  .taskon-task-dialog-point-name {
4201
3968
  margin-left: auto;
4202
- color: var(--taskon-color-text-secondary, #a0a0a0);
3969
+ color: var(--taskon-color-text-secondary);
4203
3970
  font-size: 14px;
4204
3971
  font-weight: 500;
4205
3972
  line-height: 18px;
@@ -4232,6 +3999,12 @@
4232
3999
  width: 100%;
4233
4000
  }
4234
4001
 
4002
+ .taskon-task-dialog-left--mask-active .taskon-eligibility-mask {
4003
+ inset: -5.333vw;
4004
+ padding: 5.333vw;
4005
+ border-radius: var(--taskon-border-radius);
4006
+ }
4007
+
4235
4008
  .taskon-task-dialog-recurrence {
4236
4009
  padding: 0.667vw 2.667vw;
4237
4010
  font-size: 2.667vw;
@@ -4275,6 +4048,10 @@
4275
4048
  height: 4vw;
4276
4049
  }
4277
4050
 
4051
+ .taskon-task-dialog-label-right {
4052
+ gap: 2.133vw;
4053
+ }
4054
+
4278
4055
  .taskon-task-dialog-rewards-label {
4279
4056
  font-size: 3.2vw;
4280
4057
  line-height: 4vw;
@@ -4354,16 +4131,16 @@
4354
4131
  text-align: center;
4355
4132
  font-size: 0;
4356
4133
  overflow: hidden;
4357
- border: 1px solid var(--taskon-color-border, #e2e8f0);
4358
- border-radius: var(--taskon-border-radius, 8px);
4359
- background: var(--taskon-color-bg, #ffffff);
4134
+ border: 1px solid var(--taskon-color-border);
4135
+ border-radius: var(--taskon-border-radius);
4136
+ background: var(--taskon-color-bg-surface);
4360
4137
  cursor: pointer;
4361
4138
  transition: border-color 0.2s ease, background-color 0.2s ease;
4362
4139
  }
4363
4140
 
4364
4141
  .taskon-pow-uploader-area:hover,
4365
4142
  .taskon-pow-uploader-area:focus {
4366
- border-color: var(--taskon-color-primary, #6366f1);
4143
+ border-color: var(--taskon-color-primary);
4367
4144
  outline: none;
4368
4145
  }
4369
4146
 
@@ -4379,7 +4156,7 @@
4379
4156
 
4380
4157
  .taskon-pow-uploader-area--disabled:hover,
4381
4158
  .taskon-pow-uploader-area--disabled:focus {
4382
- border-color: var(--taskon-color-border, #e2e8f0);
4159
+ border-color: var(--taskon-color-border);
4383
4160
  }
4384
4161
 
4385
4162
  /* 隐藏的文件输入 */
@@ -4405,19 +4182,19 @@
4405
4182
  align-items: center;
4406
4183
  justify-content: center;
4407
4184
  flex-direction: column;
4408
- background: rgba(0, 0, 0, 0.8);
4185
+ background: var(--taskon-color-bg-mask);
4409
4186
  }
4410
4187
 
4411
4188
  /* 上传图标 */
4412
4189
  .taskon-pow-uploader-icon {
4413
4190
  width: 24px;
4414
4191
  height: 24px;
4415
- color: #ffffff;
4192
+ color: var(--taskon-color-text);
4416
4193
  }
4417
4194
 
4418
4195
  .taskon-pow-uploader-icon--empty {
4419
4196
  opacity: 0.6;
4420
- color: var(--taskon-color-text-secondary, #64748b);
4197
+ color: var(--taskon-color-text-secondary);
4421
4198
  }
4422
4199
 
4423
4200
  /* 提示文字 */
@@ -4428,12 +4205,12 @@
4428
4205
  letter-spacing: 0.04em;
4429
4206
  text-transform: uppercase;
4430
4207
  white-space: pre-wrap;
4431
- color: #ffffff;
4208
+ color: var(--taskon-color-text);
4432
4209
  }
4433
4210
 
4434
4211
  .taskon-pow-uploader-tip--empty {
4435
4212
  opacity: 0.6;
4436
- color: var(--taskon-color-text-secondary, #64748b);
4213
+ color: var(--taskon-color-text-secondary);
4437
4214
  }
4438
4215
 
4439
4216
  /* 上传进度条 */
@@ -4443,12 +4220,12 @@
4443
4220
  right: 0;
4444
4221
  bottom: 0;
4445
4222
  left: 0;
4446
- background: rgba(255, 255, 255, 0.1);
4223
+ background: var(--taskon-color-bg-surface-strong);
4447
4224
  height: 6px;
4448
4225
  }
4449
4226
 
4450
4227
  .taskon-pow-uploader-progress-bar {
4451
- background: var(--taskon-color-primary, #6366f1);
4228
+ background: var(--taskon-color-primary);
4452
4229
  height: 100%;
4453
4230
  border-radius: 4px;
4454
4231
  transition: width 0.1s linear;
@@ -4492,7 +4269,7 @@
4492
4269
  /* ==================== 错误提示 ==================== */
4493
4270
  .taskon-pow-dialog-error {
4494
4271
  margin-top: 15px;
4495
- color: #ff3a44;
4272
+ color: var(--taskon-color-error);
4496
4273
  font-size: 14px;
4497
4274
  line-height: 20px;
4498
4275
  letter-spacing: 0.04em;
@@ -4511,8 +4288,12 @@
4511
4288
  justify-content: center;
4512
4289
  border-radius: 6px;
4513
4290
  border: none;
4514
- background: linear-gradient(270deg, #00ffa3 0%, #cbff01 100%);
4515
- color: #0d0d0d;
4291
+ background: linear-gradient(
4292
+ 270deg,
4293
+ var(--taskon-color-secondary) 0%,
4294
+ var(--taskon-color-primary) 100%
4295
+ );
4296
+ color: var(--taskon-color-text-on-primary);
4516
4297
  font-size: 14px;
4517
4298
  font-weight: 600;
4518
4299
  line-height: 40px;
@@ -4534,8 +4315,8 @@
4534
4315
  margin-top: 30px;
4535
4316
  padding: 12px 16px;
4536
4317
  border-radius: 6px;
4537
- background: rgba(39, 174, 96, 0.1);
4538
- color: #27ae60;
4318
+ background: var(--taskon-color-success-bg);
4319
+ color: var(--taskon-color-success);
4539
4320
  font-size: 14px;
4540
4321
  font-weight: 500;
4541
4322
  text-align: center;
@@ -4546,8 +4327,8 @@
4546
4327
  margin-left: auto;
4547
4328
  padding: 3px 12px;
4548
4329
  border-radius: 4px;
4549
- background: rgba(255, 255, 255, 0.04);
4550
- color: #9b51e0;
4330
+ background: var(--taskon-color-warning-bg);
4331
+ color: var(--taskon-color-warning);
4551
4332
  font-size: 14px;
4552
4333
  font-weight: 600;
4553
4334
  line-height: 18px;
@@ -4557,8 +4338,8 @@
4557
4338
  margin-left: auto;
4558
4339
  padding: 3px 12px;
4559
4340
  border-radius: 4px;
4560
- background: rgba(255, 255, 255, 0.04);
4561
- color: #eb5757;
4341
+ background: var(--taskon-color-error-bg);
4342
+ color: var(--taskon-color-error);
4562
4343
  font-size: 14px;
4563
4344
  font-weight: 600;
4564
4345
  line-height: 18px;
@@ -4609,16 +4390,16 @@
4609
4390
  }
4610
4391
 
4611
4392
  .taskon-swap-dialog-progress-current {
4612
- color: #00ffa3;
4393
+ color: var(--taskon-color-secondary);
4613
4394
  }
4614
4395
 
4615
4396
  .taskon-swap-dialog-progress-separator {
4616
- color: var(--taskon-color-text-secondary, #a0a0a0);
4397
+ color: var(--taskon-color-text-secondary);
4617
4398
  margin: 0 2px;
4618
4399
  }
4619
4400
 
4620
4401
  .taskon-swap-dialog-progress-total {
4621
- color: var(--taskon-color-text-secondary, #a0a0a0);
4402
+ color: var(--taskon-color-text-secondary);
4622
4403
  font-size: 14px;
4623
4404
  line-height: 18px;
4624
4405
  }
@@ -4629,7 +4410,7 @@
4629
4410
  }
4630
4411
 
4631
4412
  .taskon-swap-dialog-section-title {
4632
- color: var(--taskon-color-text, #fff);
4413
+ color: var(--taskon-color-text);
4633
4414
  font-size: 14px;
4634
4415
  font-weight: 600;
4635
4416
  line-height: 18px;
@@ -4639,12 +4420,32 @@
4639
4420
  margin-top: 8px;
4640
4421
  padding: 12px;
4641
4422
  border-radius: 8px;
4642
- background: rgba(255, 255, 255, 0.04);
4643
- color: var(--taskon-color-text, #fff);
4423
+ background: var(--taskon-color-bg-surface-subtle);
4424
+ color: var(--taskon-color-text);
4644
4425
  font-size: 14px;
4645
4426
  line-height: 18px;
4646
4427
  }
4647
4428
 
4429
+ .taskon-swap-dialog-section-content--rules {
4430
+ display: flex;
4431
+ flex-wrap: wrap;
4432
+ align-items: center;
4433
+ gap: 4px;
4434
+ font-weight: 500;
4435
+ }
4436
+
4437
+ .taskon-swap-dialog-rules-highlight {
4438
+ color: var(--taskon-color-secondary);
4439
+ }
4440
+
4441
+ .taskon-swap-dialog-rules-point-name {
4442
+ color: var(--taskon-color-text);
4443
+ }
4444
+
4445
+ .taskon-swap-dialog-rules-max {
4446
+ color: var(--taskon-color-text-secondary);
4447
+ }
4448
+
4648
4449
  /* ==================== 响应式 ==================== */
4649
4450
  @media (max-width: 750px) {
4650
4451
  .taskon-swap-dialog-progress {
@@ -4677,6 +4478,10 @@
4677
4478
  font-size: 3.2vw;
4678
4479
  line-height: 4.133vw;
4679
4480
  }
4481
+
4482
+ .taskon-swap-dialog-section-content--rules {
4483
+ gap: 1.067vw;
4484
+ }
4680
4485
  }
4681
4486
  /**
4682
4487
  * DialogLoading 组件样式
@@ -4696,14 +4501,14 @@
4696
4501
  .taskon-dialog-loading-spinner {
4697
4502
  width: 40px;
4698
4503
  height: 40px;
4699
- border: 3px solid rgba(255, 255, 255, 0.1);
4700
- border-top-color: var(--taskon-color-primary, #cbff01);
4504
+ border: 3px solid var(--taskon-color-border);
4505
+ border-top-color: var(--taskon-color-primary);
4701
4506
  border-radius: 50%;
4702
4507
  animation: taskon-spin 1s linear infinite;
4703
4508
  }
4704
4509
 
4705
4510
  .taskon-dialog-loading-text {
4706
- color: var(--taskon-color-text-secondary, #888);
4511
+ color: var(--taskon-color-text-secondary);
4707
4512
  font-size: 14px;
4708
4513
  }
4709
4514
 
@@ -4731,11 +4536,11 @@
4731
4536
  .taskon-dialog-error-icon {
4732
4537
  font-size: 48px;
4733
4538
  margin-bottom: 16px;
4734
- color: var(--taskon-color-text-secondary, #888);
4539
+ color: var(--taskon-color-text-secondary);
4735
4540
  }
4736
4541
 
4737
4542
  .taskon-dialog-error-message {
4738
- color: var(--taskon-color-text-secondary, #888);
4543
+ color: var(--taskon-color-text-secondary);
4739
4544
  margin-bottom: 16px;
4740
4545
  font-size: 14px;
4741
4546
  line-height: 1.5;
@@ -4744,8 +4549,8 @@
4744
4549
 
4745
4550
  .taskon-dialog-error-retry {
4746
4551
  padding: 10px 24px;
4747
- background: var(--taskon-color-primary, #cbff01);
4748
- color: #000;
4552
+ background: var(--taskon-color-primary);
4553
+ color: var(--taskon-color-text-on-primary);
4749
4554
  border: none;
4750
4555
  border-radius: 8px;
4751
4556
  cursor: pointer;
@@ -4769,25 +4574,25 @@
4769
4574
 
4770
4575
  /* ==================== Dialog 容器覆盖 ==================== */
4771
4576
  .taskon-task-dialog {
4772
- /* 复刻 Vue --bg-popup-basic-100: #0d0d0d */
4773
- background: var(--taskon-color-bg-popup, #0d0d0d) !important;
4774
- color: var(--taskon-color-text, #ffffff);
4577
+ background: var(--taskon-color-bg-floating) !important;
4578
+ color: var(--taskon-color-text);
4775
4579
  }
4776
4580
 
4777
- /* 覆盖 Dialog body padding,让内容自己控制 */
4778
- .taskon-task-dialog .taskon-dialog-body {
4779
- padding: 0;
4581
+ /* 关闭按钮深色主题 */
4582
+ .taskon-task-dialog .taskon-dialog-header {
4583
+ z-index: 30;
4780
4584
  }
4781
4585
 
4782
- /* 关闭按钮深色主题 */
4783
4586
  .taskon-task-dialog .taskon-dialog-close {
4784
- background: rgba(255, 255, 255, 0.1);
4785
- color: var(--taskon-color-text-secondary, #888);
4587
+ position: relative;
4588
+ z-index: 31;
4589
+ background: var(--taskon-color-bg-surface-strong);
4590
+ color: var(--taskon-color-text-secondary);
4786
4591
  }
4787
4592
 
4788
4593
  .taskon-task-dialog .taskon-dialog-close:hover {
4789
- background: rgba(255, 255, 255, 0.2);
4790
- color: var(--taskon-color-text, #fff);
4594
+ background: var(--taskon-color-bg-inset);
4595
+ color: var(--taskon-color-text);
4791
4596
  }
4792
4597
 
4793
4598
  /* ==================== Wrapper: 复刻 Vue .task-dialog ==================== */
@@ -4800,13 +4605,13 @@
4800
4605
  .taskon-task-dialog-right {
4801
4606
  margin-left: 30px;
4802
4607
  padding-left: 30px;
4803
- border-left: 1px solid rgba(255, 255, 255, 0.1);
4608
+ border-left: 1px solid var(--taskon-color-border);
4804
4609
  }
4805
4610
 
4806
4611
  /* ==================== 验证成功提示(CloseIn) ==================== */
4807
4612
  .taskon-task-dialog-close-in {
4808
4613
  margin-top: 30px;
4809
- color: var(--taskon-color-primary, #cbff01);
4614
+ color: var(--taskon-color-primary);
4810
4615
  text-align: center;
4811
4616
  font-size: 14px;
4812
4617
  font-weight: 500;
@@ -4826,7 +4631,7 @@
4826
4631
  padding-left: 0;
4827
4632
  padding-top: 5.333vw;
4828
4633
  border-left: none;
4829
- border-top: 1px solid rgba(255, 255, 255, 0.1);
4634
+ border-top: 1px solid var(--taskon-color-border);
4830
4635
  }
4831
4636
 
4832
4637
  .taskon-task-dialog-close-in {
@@ -4835,7 +4640,6 @@
4835
4640
  }
4836
4641
  /**
4837
4642
  * CommunityTaskList 组件样式
4838
- * 直接使用 dark 模式颜色值,不使用 CSS 变量
4839
4643
  * 使用 taskon-community-list- 前缀避免与项目方样式冲突
4840
4644
  */
4841
4645
 
@@ -4858,7 +4662,7 @@
4858
4662
  .taskon-community-list-loading {
4859
4663
  padding: 40px;
4860
4664
  text-align: center;
4861
- color: rgba(255, 255, 255, 0.6);
4665
+ color: var(--taskon-color-text-tertiary);
4862
4666
  font-size: 16px;
4863
4667
  }
4864
4668
 
@@ -4866,7 +4670,7 @@
4866
4670
  .taskon-community-list-error {
4867
4671
  padding: 40px;
4868
4672
  text-align: center;
4869
- color: #ef4444;
4673
+ color: var(--taskon-color-error);
4870
4674
  font-size: 16px;
4871
4675
  }
4872
4676
 
@@ -4874,7 +4678,7 @@
4874
4678
  .taskon-community-list-empty {
4875
4679
  padding: 40px;
4876
4680
  text-align: center;
4877
- color: rgba(255, 255, 255, 0.6);
4681
+ color: var(--taskon-color-text-tertiary);
4878
4682
  font-size: 16px;
4879
4683
  }
4880
4684