@taskon/widget-react 0.0.1-beta.2 → 0.0.1-beta.4

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 (44) hide show
  1. package/README.md +56 -17
  2. package/dist/CommunityTaskList.css +1593 -1741
  3. package/dist/EligibilityInfo.css +1275 -582
  4. package/dist/LeaderboardWidget.css +355 -152
  5. package/dist/PageBuilder.css +0 -2
  6. package/dist/Quest.css +1140 -903
  7. package/dist/TaskOnProvider.css +50 -31
  8. package/dist/UserCenterWidget.css +108 -237
  9. package/dist/UserCenterWidget2.css +2016 -711
  10. package/dist/chunks/{CommunityTaskList-BlH1Wdd5.js → CommunityTaskList-C9Gv8KOF.js} +962 -827
  11. package/dist/chunks/{EligibilityInfo-C7GZ2G5u.js → EligibilityInfo-D-Fuy9GE.js} +1137 -449
  12. package/dist/chunks/{LeaderboardWidget-CmYfDeHV.js → LeaderboardWidget-BV2D2q1N.js} +15 -10
  13. package/dist/chunks/{PageBuilder-Bw0zSkFh.js → PageBuilder-DQoU4Mwf.js} +5 -5
  14. package/dist/chunks/{Quest-DKFZ-pPU.js → Quest-B5NyVr3o.js} +516 -325
  15. package/dist/chunks/{TaskOnProvider-BD6Vp2x8.js → TaskOnProvider-93UxARFo.js} +2 -207
  16. package/dist/chunks/{ThemeProvider-wnSXrNQb.js → ThemeProvider-CPI_roeh.js} +249 -57
  17. package/dist/chunks/{UserCenterWidget-Cw6h_5hT.js → UserCenterWidget-BRtigY_S.js} +206 -1002
  18. package/dist/chunks/UserCenterWidget-cADBSVg7.js +8358 -0
  19. package/dist/chunks/{WidgetShell-D_5OjvNZ.js → dynamic-import-helper-DwXlQC0S.js} +607 -40
  20. package/dist/chunks/useToast-CaRkylKe.js +304 -0
  21. package/dist/chunks/{usercenter-ja-uu-XfVF9.js → usercenter-ja-B2465c1O.js} +4 -10
  22. package/dist/chunks/{usercenter-ko-DYgUOVzd.js → usercenter-ko-xAEYxqLg.js} +4 -10
  23. package/dist/community-task.d.ts +34 -3
  24. package/dist/community-task.js +1 -1
  25. package/dist/core.d.ts +40 -3
  26. package/dist/core.js +9 -10
  27. package/dist/dynamic-import-helper.css +596 -289
  28. package/dist/index.d.ts +207 -10
  29. package/dist/index.js +21 -19
  30. package/dist/leaderboard.d.ts +8 -1
  31. package/dist/leaderboard.js +2 -2
  32. package/dist/page-builder.js +1 -1
  33. package/dist/quest.d.ts +8 -2
  34. package/dist/quest.js +1 -1
  35. package/dist/user-center.d.ts +20 -136
  36. package/dist/user-center.js +19 -236
  37. package/package.json +10 -2
  38. package/dist/TipPopover.css +0 -210
  39. package/dist/WidgetShell.css +0 -182
  40. package/dist/chunks/TipPopover-BrW8jo71.js +0 -2926
  41. package/dist/chunks/UserCenterWidget-BE329iS7.js +0 -3546
  42. package/dist/chunks/dynamic-import-helper-DxEFwm31.js +0 -537
  43. package/dist/chunks/useToast-B-wyO5zL.js +0 -93
  44. package/dist/chunks/useWidgetLocale-JDelxtt8.js +0 -74
package/dist/Quest.css CHANGED
@@ -6,6 +6,7 @@
6
6
  */
7
7
 
8
8
  /* ========== 容器 ========== */
9
+
9
10
  .taskon-button-tabs {
10
11
  display: inline-flex;
11
12
  align-items: center;
@@ -13,14 +14,15 @@
13
14
  }
14
15
 
15
16
  /* ========== Tab 按钮基础样式 ========== */
17
+
16
18
  .taskon-button-tabs__tab {
17
19
  flex-shrink: 0;
18
20
  display: inline-flex;
19
21
  align-items: center;
20
22
  justify-content: center;
21
23
  background-color: transparent;
22
- border: 1px solid rgba(255, 255, 255, 0.2);
23
- color: rgba(255, 255, 255, 0.6);
24
+ border: 1px solid var(--taskon-color-border);
25
+ color: var(--taskon-color-text-secondary);
24
26
  font-weight: 500;
25
27
  white-space: nowrap;
26
28
  cursor: pointer;
@@ -30,6 +32,7 @@
30
32
  /* ========== 尺寸变体 ========== */
31
33
 
32
34
  /* Small 尺寸 */
35
+
33
36
  .taskon-button-tabs__tab--small {
34
37
  height: 32px;
35
38
  padding: 4px 12px;
@@ -39,6 +42,7 @@
39
42
  }
40
43
 
41
44
  /* Medium 尺寸 */
45
+
42
46
  .taskon-button-tabs__tab--medium {
43
47
  height: 36px;
44
48
  padding: 6px 16px;
@@ -50,16 +54,18 @@
50
54
  /* ========== 状态样式 ========== */
51
55
 
52
56
  /* Hover 状态(未选中) */
57
+
53
58
  .taskon-button-tabs__tab:hover:not(.taskon-button-tabs__tab--active):not(.taskon-button-tabs__tab--disabled) {
54
- border-color: rgba(255, 255, 255, 0.6);
55
- color: rgba(255, 255, 255, 0.8);
59
+ border-color: var(--taskon-color-border-secondary);
60
+ color: var(--taskon-color-text);
56
61
  }
57
62
 
58
63
  /* 选中状态 (light-border) */
64
+
59
65
  .taskon-button-tabs__tab--active {
60
66
  background-color: transparent;
61
- border-color: #ffffff;
62
- color: #ffffff;
67
+ border-color: var(--taskon-color-text);
68
+ color: var(--taskon-color-text);
63
69
  }
64
70
 
65
71
  .taskon-button-tabs__tab--active:hover {
@@ -67,9 +73,10 @@
67
73
  }
68
74
 
69
75
  /* 禁用状态 */
76
+
70
77
  .taskon-button-tabs__tab--disabled {
71
- color: rgba(255, 255, 255, 0.3);
72
- border-color: rgba(255, 255, 255, 0.1);
78
+ color: var(--taskon-color-text-disabled);
79
+ border-color: var(--taskon-color-border-secondary);
73
80
  cursor: not-allowed;
74
81
  }
75
82
  /* CompletedCount - 完成计数组件样式 */
@@ -78,20 +85,18 @@
78
85
  align-items: center;
79
86
  gap: 8px;
80
87
  }
81
-
82
88
  .taskon-completed-count-check {
83
89
  width: 12px;
84
90
  height: 9px;
91
+ color: var(--taskon-color-success);
85
92
  }
86
-
87
93
  .taskon-completed-count-text {
88
94
  font-size: 14px;
89
95
  line-height: 18px;
90
- color: rgba(255, 255, 255, 0.6);
96
+ color: var(--taskon-color-text-secondary);
91
97
  }
92
-
93
98
  .taskon-completed-count-em {
94
- color: #fff;
99
+ color: var(--taskon-color-text);
95
100
  }
96
101
  /**
97
102
  * EligsNotPassDialog 样式
@@ -99,6 +104,7 @@
99
104
  */
100
105
 
101
106
  /* 弹窗容器 */
107
+
102
108
  .taskon-eligs-dialog-container {
103
109
  display: flex;
104
110
  flex-direction: column;
@@ -107,6 +113,7 @@
107
113
  }
108
114
 
109
115
  /* 头部图标和标题 */
116
+
110
117
  .taskon-eligs-dialog-header {
111
118
  display: flex;
112
119
  flex-direction: column;
@@ -123,32 +130,34 @@
123
130
  margin: 0;
124
131
  font-size: 20px;
125
132
  font-weight: 600;
126
- color: var(--taskon-text-primary, #fff);
133
+ color: var(--taskon-color-text);
127
134
  }
128
135
 
129
136
  /* 描述文本 */
137
+
130
138
  .taskon-eligs-dialog-desc {
131
139
  margin: 0;
132
140
  font-size: 14px;
133
141
  line-height: 1.5;
134
- color: var(--taskon-text-secondary, #a0a0a0);
142
+ color: var(--taskon-color-text-secondary);
135
143
  text-align: center;
136
144
  }
137
145
 
138
146
  .taskon-eligs-dialog-desc--success {
139
- color: var(--taskon-success, #52c41a);
147
+ color: var(--taskon-color-success);
140
148
  }
141
149
 
142
150
  .taskon-eligs-dialog-highlight {
143
- color: var(--taskon-primary, #6366f1);
151
+ color: var(--taskon-color-primary);
144
152
  font-weight: 500;
145
153
  }
146
154
 
147
155
  /* 资格条件区域 */
156
+
148
157
  .taskon-eligs-dialog-eligs {
149
158
  width: 100%;
150
- border: 1px solid var(--taskon-border, #333);
151
- border-radius: 10px;
159
+ border: 1px solid var(--taskon-color-border);
160
+ border-radius: var(--taskon-border-radius-lg);
152
161
  overflow: hidden;
153
162
  }
154
163
 
@@ -162,14 +171,14 @@
162
171
  background: transparent;
163
172
  border: none;
164
173
  cursor: pointer;
165
- color: var(--taskon-text-primary, #fff);
174
+ color: var(--taskon-color-text);
166
175
  font-size: 14px;
167
176
  text-align: left;
168
177
  transition: background 0.2s;
169
178
  }
170
179
 
171
180
  .taskon-eligs-dialog-eligs-header:hover {
172
- background: var(--taskon-bg-hover, rgba(255, 255, 255, 0.05));
181
+ background: var(--taskon-color-bg-surface-strong);
173
182
  }
174
183
 
175
184
  .taskon-eligs-dialog-eligs-icon {
@@ -184,7 +193,7 @@
184
193
  .taskon-eligs-dialog-arrow {
185
194
  width: 6px;
186
195
  height: 10px;
187
- color: var(--taskon-text-secondary, #a0a0a0);
196
+ color: var(--taskon-color-text-secondary);
188
197
  transition: transform 0.3s;
189
198
  transform: rotate(90deg);
190
199
  }
@@ -198,14 +207,15 @@
198
207
  }
199
208
 
200
209
  /* 底部按钮 */
210
+
201
211
  .taskon-eligs-dialog-button {
202
212
  width: 100%;
203
213
  height: 48px;
204
214
  padding: 0 24px;
205
215
  border: none;
206
- border-radius: 8px;
207
- background: var(--taskon-primary, #6366f1);
208
- color: #fff;
216
+ border-radius: var(--taskon-border-radius);
217
+ background: var(--taskon-color-primary);
218
+ color: var(--taskon-color-text-on-primary);
209
219
  font-size: 16px;
210
220
  font-weight: 500;
211
221
  cursor: pointer;
@@ -222,7 +232,7 @@
222
232
  }
223
233
 
224
234
  .taskon-eligs-dialog-button--loading {
225
- background: var(--taskon-bg-secondary, #2a2a2a);
235
+ background: var(--taskon-color-bg-surface);
226
236
  }
227
237
 
228
238
  .taskon-eligs-dialog-loading {
@@ -256,28 +266,31 @@
256
266
  }
257
267
 
258
268
  /* Eligibility 条件列表区域 */
269
+
259
270
  .taskon-eligs-bind-eligs-section {
260
271
  margin-bottom: 20px;
261
272
  padding-bottom: 20px;
262
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
273
+ border-bottom: 1px solid var(--taskon-color-border);
263
274
  }
264
275
 
265
276
  .taskon-eligs-bind-section-title {
266
277
  margin: 0 0 12px;
267
278
  font-size: 16px;
268
279
  font-weight: 600;
269
- color: #fff;
280
+ color: var(--taskon-color-text);
270
281
  }
271
282
 
272
283
  /* 提示文本 */
284
+
273
285
  .taskon-eligs-bind-tip {
274
286
  margin: 0 0 20px;
275
287
  font-size: 14px;
276
288
  line-height: 1.5;
277
- color: rgba(255, 255, 255, 0.6);
289
+ color: var(--taskon-color-text-tertiary);
278
290
  }
279
291
 
280
292
  /* 绑定区域 */
293
+
281
294
  .taskon-eligs-bind-section {
282
295
  margin-bottom: 20px;
283
296
  }
@@ -286,10 +299,11 @@
286
299
  margin: 0 0 12px;
287
300
  font-size: 14px;
288
301
  font-weight: 500;
289
- color: rgba(255, 255, 255, 0.8);
302
+ color: var(--taskon-color-text-secondary);
290
303
  }
291
304
 
292
305
  /* 绑定列表 */
306
+
293
307
  .taskon-eligs-bind-list {
294
308
  display: flex;
295
309
  flex-direction: column;
@@ -297,28 +311,30 @@
297
311
  }
298
312
 
299
313
  /* 单个绑定项 */
314
+
300
315
  .taskon-eligs-bind-item {
301
316
  display: flex;
302
317
  align-items: center;
303
318
  justify-content: space-between;
304
319
  padding: 12px 16px;
305
- background: rgba(255, 255, 255, 0.05);
306
- border-radius: 8px;
307
- border: 1px solid rgba(255, 255, 255, 0.1);
320
+ background: var(--taskon-color-bg-surface-strong);
321
+ border-radius: var(--taskon-border-radius);
322
+ border: 1px solid var(--taskon-color-border);
308
323
  }
309
324
 
310
325
  .taskon-eligs-bind-item--bound {
311
- background: rgba(74, 222, 128, 0.1);
312
- border-color: rgba(74, 222, 128, 0.3);
326
+ background: var(--taskon-color-success-bg);
327
+ border-color: var(--taskon-color-success);
313
328
  }
314
329
 
315
330
  .taskon-eligs-bind-item-label {
316
331
  font-size: 14px;
317
332
  font-weight: 500;
318
- color: #fff;
333
+ color: var(--taskon-color-text);
319
334
  }
320
335
 
321
336
  /* 绑定按钮 */
337
+
322
338
  .taskon-eligs-bind-item-btn {
323
339
  display: inline-flex;
324
340
  align-items: center;
@@ -326,10 +342,14 @@
326
342
  padding: 6px 16px;
327
343
  font-size: 13px;
328
344
  font-weight: 500;
329
- color: #000;
330
- background: linear-gradient(90deg, #00d1ff 0%, #00ff94 100%);
345
+ color: var(--taskon-color-text-on-primary);
346
+ background: linear-gradient(
347
+ 90deg,
348
+ var(--taskon-color-link) 0%,
349
+ var(--taskon-color-secondary) 100%
350
+ );
331
351
  border: none;
332
- border-radius: 6px;
352
+ border-radius: var(--taskon-border-radius-sm);
333
353
  cursor: pointer;
334
354
  transition: opacity 0.2s;
335
355
  }
@@ -344,6 +364,7 @@
344
364
  }
345
365
 
346
366
  /* 绑定中的加载动画 */
367
+
347
368
  .taskon-eligs-bind-item-spinner {
348
369
  width: 14px;
349
370
  height: 14px;
@@ -360,33 +381,14 @@
360
381
  }
361
382
 
362
383
  /* 已绑定状态 */
384
+
363
385
  .taskon-eligs-bind-item-status {
364
386
  display: inline-flex;
365
387
  align-items: center;
366
388
  gap: 4px;
367
389
  font-size: 13px;
368
390
  font-weight: 500;
369
- color: #4ade80;
370
- }
371
-
372
- /* 跳过按钮 */
373
- .taskon-eligs-bind-skip-btn {
374
- display: block;
375
- width: 100%;
376
- padding: 12px 24px;
377
- margin-top: 20px;
378
- font-size: 14px;
379
- font-weight: 500;
380
- color: #000;
381
- background: linear-gradient(90deg, #00d1ff 0%, #00ff94 100%);
382
- border: none;
383
- border-radius: 8px;
384
- cursor: pointer;
385
- transition: opacity 0.2s;
386
- }
387
-
388
- .taskon-eligs-bind-skip-btn:hover {
389
- opacity: 0.9;
391
+ color: var(--taskon-color-success);
390
392
  }
391
393
  /**
392
394
  * ShareDropdown - 分享下拉菜单样式
@@ -395,6 +397,7 @@
395
397
  */
396
398
 
397
399
  /* 分享触发按钮 - 方形图标按钮(SimpleBox 样式) */
400
+
398
401
  .taskon-quest-share-trigger {
399
402
  display: flex;
400
403
  align-items: center;
@@ -403,34 +406,36 @@
403
406
  height: 40px;
404
407
  padding: 0;
405
408
  margin-left: auto;
406
- background: var(--taskon-quest-color-darkest, #1a1a1a);
409
+ background: var(--taskon-color-bg-surface);
407
410
  border: none;
408
- border-radius: 6px;
411
+ border-radius: var(--taskon-border-radius-sm);
409
412
  cursor: pointer;
410
413
  transition: background 0.2s;
411
414
  flex-shrink: 0;
412
415
  }
413
416
 
414
417
  .taskon-quest-share-trigger:hover {
415
- background: var(--taskon-quest-color-darker, #2a2a2a);
418
+ background: var(--taskon-color-bg-surface-strong);
416
419
  }
417
420
 
418
421
  .taskon-quest-share-trigger svg {
419
- color: var(--taskon-quest-text-lightest, #fff);
422
+ color: var(--taskon-color-text);
420
423
  }
421
424
 
422
425
  /* 下拉菜单 */
426
+
423
427
  .taskon-quest-share-menu {
424
428
  width: 230px;
425
- background: var(--taskon-quest-share-bg, #222);
426
- border-radius: 10px;
429
+ background: var(--taskon-color-bg-surface);
430
+ border-radius: var(--taskon-border-radius-lg);
427
431
  overflow: hidden;
428
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
432
+ box-shadow: 0 4px 16px var(--taskon-color-bg-mask);
429
433
  z-index: 100;
430
434
  text-align: left;
431
435
  }
432
436
 
433
437
  /* 菜单项 */
438
+
434
439
  .taskon-quest-share-menu-item {
435
440
  display: flex;
436
441
  align-items: center;
@@ -438,7 +443,7 @@
438
443
  padding: 12px;
439
444
  font-size: 14px;
440
445
  font-weight: 500;
441
- color: #fff;
446
+ color: var(--taskon-color-text);
442
447
  background: transparent;
443
448
  border: none;
444
449
  cursor: pointer;
@@ -446,7 +451,7 @@
446
451
  }
447
452
 
448
453
  .taskon-quest-share-menu-item:hover {
449
- background: var(--taskon-quest-menu-hover-bg, rgba(255, 255, 255, 0.08));
454
+ background: var(--taskon-color-bg-surface-strong);
450
455
  }
451
456
 
452
457
  .taskon-quest-share-menu-item svg {
@@ -456,11 +461,24 @@
456
461
  flex-shrink: 0;
457
462
  }
458
463
 
464
+ .taskon-quest-share-menu-item--twitter svg {
465
+ color: var(--taskon-color-link);
466
+ }
467
+
468
+ .taskon-quest-share-menu-item--copy svg {
469
+ color: var(--taskon-color-secondary);
470
+ }
471
+
472
+ .taskon-quest-share-menu-item--qr svg {
473
+ color: var(--taskon-color-warning);
474
+ }
475
+
459
476
  /* ============================================================================
460
477
  二维码弹窗样式 - 与原版 ShareQrCodeDialog.vue 一致
461
478
  ============================================================================ */
462
479
 
463
480
  /* 覆盖 Dialog 默认样式 - 移除卡片背景,让内容区域完全透明 */
481
+
464
482
  .taskon-quest-qr-dialog-content {
465
483
  background: transparent !important;
466
484
  border-radius: 0 !important;
@@ -478,24 +496,32 @@
478
496
  }
479
497
 
480
498
  /* 海报外层容器 */
499
+
481
500
  .taskon-quest-qr-poster-outer {
482
- border-radius: 12px;
501
+ border-radius: var(--taskon-border-radius-lg);
483
502
  overflow: hidden;
484
503
  }
485
504
 
486
505
  /* 海报内容 */
506
+
487
507
  .taskon-quest-qr-poster {
488
508
  width: 100%;
489
509
  }
490
510
 
491
511
  /* 海报顶部 - 绿色渐变区域 */
512
+
492
513
  .taskon-quest-qr-poster-header {
493
- background: linear-gradient(89.87deg, #e2ff97 0.13%, #cffd55 99.92%);
514
+ background: linear-gradient(
515
+ 89.87deg,
516
+ var(--taskon-color-primary-bg) 0.13%,
517
+ var(--taskon-color-primary) 99.92%
518
+ );
494
519
  padding: 30px;
495
- color: #000;
520
+ color: var(--taskon-color-text-on-primary);
496
521
  }
497
522
 
498
523
  /* 社区信息 */
524
+
499
525
  .taskon-quest-qr-owner {
500
526
  display: flex;
501
527
  align-items: center;
@@ -506,7 +532,7 @@
506
532
  height: 30px;
507
533
  border-radius: 50%;
508
534
  margin-right: 6px;
509
- border: 2px solid #000;
535
+ border: 2px solid var(--taskon-color-text-on-primary);
510
536
  object-fit: cover;
511
537
  }
512
538
 
@@ -519,6 +545,7 @@
519
545
  }
520
546
 
521
547
  /* 活动名称 */
548
+
522
549
  .taskon-quest-qr-campaign-name {
523
550
  margin-top: 14px;
524
551
  margin-bottom: 8px;
@@ -534,31 +561,35 @@
534
561
  }
535
562
 
536
563
  /* Banner 图片 */
564
+
537
565
  .taskon-quest-qr-banner {
538
566
  width: 100%;
539
- border-radius: 10px;
567
+ border-radius: var(--taskon-border-radius-lg);
540
568
  display: block;
541
569
  }
542
570
 
543
571
  /* 海报底部 - 黑色区域 */
572
+
544
573
  .taskon-quest-qr-poster-footer {
545
574
  padding: 30px;
546
- background: #000;
575
+ background: var(--taskon-color-bg-canvas);
547
576
  display: flex;
548
577
  justify-content: space-between;
549
578
  align-items: flex-start;
550
579
  }
551
580
 
552
581
  /* 信息区域 */
582
+
553
583
  .taskon-quest-qr-info {
554
584
  width: calc(100% - 80px);
555
585
  }
556
586
 
557
587
  /* 奖励标题 */
588
+
558
589
  .taskon-quest-qr-reward-title {
559
590
  display: flex;
560
591
  align-items: center;
561
- color: #fff;
592
+ color: var(--taskon-color-text);
562
593
  font-weight: 500;
563
594
  }
564
595
 
@@ -567,6 +598,7 @@
567
598
  }
568
599
 
569
600
  /* 时间范围 */
601
+
570
602
  .taskon-quest-qr-time {
571
603
  display: flex;
572
604
  align-items: center;
@@ -574,7 +606,7 @@
574
606
  margin-bottom: 6px;
575
607
  font-size: 14px;
576
608
  font-weight: 500;
577
- color: #fff;
609
+ color: var(--taskon-color-text);
578
610
  }
579
611
 
580
612
  .taskon-quest-qr-time svg {
@@ -583,10 +615,11 @@
583
615
  }
584
616
 
585
617
  /* 二维码 */
618
+
586
619
  .taskon-quest-qr-code {
587
620
  width: 80px;
588
621
  height: 80px;
589
- border-radius: 6px;
622
+ border-radius: var(--taskon-border-radius-sm);
590
623
  overflow: hidden;
591
624
  flex-shrink: 0;
592
625
  }
@@ -598,6 +631,7 @@
598
631
  }
599
632
 
600
633
  /* 操作按钮 */
634
+
601
635
  .taskon-quest-qr-actions {
602
636
  display: grid;
603
637
  grid-template-columns: 1fr 1fr;
@@ -607,6 +641,7 @@
607
641
  }
608
642
 
609
643
  /* 奖励列表 - 与原版 RewardsLabels.vue 一致 */
644
+
610
645
  .taskon-quest-qr-rewards-list {
611
646
  display: inline-flex;
612
647
  align-items: center;
@@ -617,21 +652,24 @@
617
652
  }
618
653
 
619
654
  /* 单个奖励项 */
655
+
620
656
  .taskon-quest-qr-reward-item {
621
657
  display: inline-flex;
622
658
  align-items: center;
623
659
  white-space: nowrap;
624
- color: #fff;
660
+ color: var(--taskon-color-text);
625
661
  font-size: 16px;
626
662
  font-weight: 400;
627
663
  }
628
664
 
629
665
  /* 奖励标签 - 高亮绿色 */
666
+
630
667
  .taskon-quest-qr-reward-label {
631
- color: #cbff01;
668
+ color: var(--taskon-color-primary);
632
669
  }
633
670
 
634
671
  /* 链图标 */
672
+
635
673
  .taskon-quest-qr-reward-chain-icon {
636
674
  width: 15px;
637
675
  height: 15px;
@@ -640,9 +678,10 @@
640
678
  }
641
679
 
642
680
  /* 奖励间的 & 符号 */
681
+
643
682
  .taskon-quest-qr-reward-and {
644
683
  margin-left: 6px;
645
- color: #fff;
684
+ color: var(--taskon-color-text);
646
685
  }
647
686
  /**
648
687
  * ParticipantsInfo 组件样式
@@ -665,7 +704,7 @@
665
704
  .taskon-quest-participants-info {
666
705
  display: flex;
667
706
  flex-direction: column;
668
- gap: var(--taskon-quest-spacing-l, 20px);
707
+ gap: var(--taskon-spacing-lg);
669
708
  align-items: stretch;
670
709
  width: 100%;
671
710
  }
@@ -676,7 +715,7 @@
676
715
 
677
716
  .taskon-quest-participants-info-header {
678
717
  display: flex;
679
- gap: var(--taskon-quest-spacing-xs, 8px);
718
+ gap: var(--taskon-spacing-sm);
680
719
  align-items: center;
681
720
  padding: 0;
682
721
  margin: 0;
@@ -688,13 +727,13 @@
688
727
 
689
728
  .taskon-quest-participants-info-header:hover .taskon-quest-participants-info-title,
690
729
  .taskon-quest-participants-info-header:hover .taskon-quest-participants-info-icon {
691
- color: var(--taskon-quest-text-lightest, #ffffff);
730
+ color: var(--taskon-color-text);
692
731
  }
693
732
 
694
733
  .taskon-quest-participants-info-header:focus-visible {
695
- outline: 2px solid var(--taskon-quest-primary, #cbff01);
734
+ outline: 2px solid var(--taskon-color-primary);
696
735
  outline-offset: 2px;
697
- border-radius: 4px;
736
+ border-radius: var(--taskon-border-radius-sm);
698
737
  }
699
738
 
700
739
  .taskon-quest-participants-info-title {
@@ -702,7 +741,7 @@
702
741
  font-size: 24px;
703
742
  font-weight: 600;
704
743
  line-height: 32px;
705
- color: var(--taskon-quest-text-lightest, #ffffff);
744
+ color: var(--taskon-color-text);
706
745
  }
707
746
 
708
747
  .taskon-quest-participants-info-icon {
@@ -711,7 +750,7 @@
711
750
  justify-content: center;
712
751
  width: 12px;
713
752
  height: 12px;
714
- color: var(--taskon-quest-text-lighter, rgba(255, 255, 255, 0.8));
753
+ color: var(--taskon-color-text-secondary);
715
754
  flex-shrink: 0;
716
755
  transition: color 0.2s;
717
756
  }
@@ -731,6 +770,7 @@
731
770
  }
732
771
 
733
772
  /* Winners 行可点击样式 */
773
+
734
774
  .taskon-quest-participants-info-row--clickable {
735
775
  padding: 0;
736
776
  margin: 0;
@@ -746,29 +786,30 @@
746
786
  }
747
787
 
748
788
  .taskon-quest-participants-info-row--clickable:focus-visible {
749
- outline: 2px solid var(--taskon-quest-primary, #cbff01);
789
+ outline: 2px solid var(--taskon-color-primary);
750
790
  outline-offset: 2px;
751
- border-radius: 4px;
791
+ border-radius: var(--taskon-border-radius-sm);
752
792
  }
753
793
 
754
794
  .taskon-quest-participants-info-label {
755
- color: var(--taskon-quest-text-lighter, rgba(255, 255, 255, 0.8));
795
+ color: var(--taskon-color-text-secondary);
756
796
  }
757
797
 
758
798
  .taskon-quest-participants-info-value {
759
- color: var(--taskon-quest-text-lightest, #ffffff);
799
+ color: var(--taskon-color-text);
760
800
  text-align: right;
761
801
  }
762
802
 
763
803
  /* Winners 行的可点击值样式 */
804
+
764
805
  .taskon-quest-participants-info-value--clickable {
765
806
  display: flex;
766
807
  align-items: center;
767
- gap: 4px;
808
+ gap: var(--taskon-spacing-xs);
768
809
  }
769
810
 
770
811
  .taskon-quest-participants-info-arrow {
771
- color: var(--taskon-quest-text-lighter, rgba(255, 255, 255, 0.8));
812
+ color: var(--taskon-color-text-secondary);
772
813
  flex-shrink: 0;
773
814
  transition: transform 0.2s;
774
815
  }
@@ -787,37 +828,38 @@
787
828
  }
788
829
 
789
830
  .taskon-quest-participants-dialog-title {
790
- margin: 0 0 20px 0;
831
+ margin: 0 0 var(--taskon-spacing-lg) 0;
791
832
  font-size: 22px;
792
833
  font-weight: 600;
793
834
  line-height: 28px;
794
- color: var(--taskon-quest-text-lightest, #ffffff);
835
+ color: var(--taskon-color-text);
795
836
  }
796
837
 
797
838
  .taskon-quest-participants-dialog-section {
798
- margin-bottom: 20px;
839
+ margin-bottom: var(--taskon-spacing-lg);
799
840
  }
800
841
 
801
842
  .taskon-quest-participants-dialog-subtitle {
802
843
  font-size: 16px;
803
844
  font-weight: 600;
804
845
  line-height: 24px;
805
- color: var(--taskon-quest-text-lightest, #ffffff);
846
+ color: var(--taskon-color-text);
806
847
  }
807
848
 
808
849
  .taskon-quest-participants-dialog-desc {
809
- margin-top: 4px;
850
+ margin-top: var(--taskon-spacing-xs);
810
851
  font-size: 14px;
811
852
  font-weight: 500;
812
853
  line-height: 20px;
813
- color: rgba(255, 255, 255, 0.6);
854
+ color: var(--taskon-color-text-tertiary);
814
855
  }
815
856
 
816
857
  /* Flow Chart */
858
+
817
859
  .taskon-quest-participants-dialog-chart {
818
860
  display: flex;
819
861
  align-items: flex-start;
820
- margin-bottom: 30px;
862
+ margin-bottom: var(--taskon-spacing-lg);
821
863
  }
822
864
 
823
865
  .taskon-quest-participants-dialog-arrow-wrap {
@@ -829,52 +871,54 @@
829
871
  .taskon-quest-participants-dialog-arrow {
830
872
  width: 36px;
831
873
  height: auto;
874
+ color: var(--taskon-color-secondary);
832
875
  }
833
876
 
834
877
  .taskon-quest-participants-dialog-cards {
835
878
  flex: 1;
836
- margin-left: 20px;
879
+ margin-left: var(--taskon-spacing-lg);
837
880
  display: flex;
838
881
  flex-direction: column;
839
- gap: 4px;
882
+ gap: var(--taskon-spacing-xs);
840
883
  }
841
884
 
842
885
  .taskon-quest-participants-dialog-card {
843
- padding: 8px 20px;
844
- border-radius: 6px;
886
+ padding: var(--taskon-spacing-sm) var(--taskon-spacing-lg);
887
+ border-radius: var(--taskon-border-radius);
845
888
  }
846
889
 
847
890
  .taskon-quest-participants-dialog-card--level1 {
848
- background: rgba(0, 255, 163, 0.2);
891
+ background: var(--taskon-color-secondary-bg);
849
892
  }
850
893
 
851
894
  .taskon-quest-participants-dialog-card--level2 {
852
- background: rgba(0, 255, 163, 0.3);
895
+ background: var(--taskon-color-secondary-bg);
853
896
  }
854
897
 
855
898
  .taskon-quest-participants-dialog-card--level3 {
856
- background: rgba(0, 255, 163, 0.4);
899
+ background: var(--taskon-color-secondary-bg);
857
900
  }
858
901
 
859
902
  .taskon-quest-participants-dialog-card--level4 {
860
- background: rgba(0, 255, 163, 0.5);
903
+ background: var(--taskon-color-secondary-bg);
861
904
  }
862
905
 
863
906
  .taskon-quest-participants-dialog-card-title {
864
907
  font-size: 14px;
865
908
  font-weight: 600;
866
909
  line-height: 20px;
867
- color: var(--taskon-quest-text-lightest, #ffffff);
910
+ color: var(--taskon-color-text);
868
911
  }
869
912
 
870
913
  .taskon-quest-participants-dialog-card-desc {
871
914
  font-size: 12px;
872
915
  font-weight: 500;
873
916
  line-height: 16px;
874
- color: rgba(255, 255, 255, 0.6);
917
+ color: var(--taskon-color-text-tertiary);
875
918
  }
876
919
 
877
920
  /* Confirm Button */
921
+
878
922
  .taskon-quest-participants-dialog-btn {
879
923
  width: 100%;
880
924
  }
@@ -910,7 +954,7 @@
910
954
  font-size: 22px;
911
955
  font-weight: 600;
912
956
  line-height: 28px;
913
- color: var(--taskon-quest-text-lightest, #ffffff);
957
+ color: var(--taskon-color-text);
914
958
  }
915
959
 
916
960
  /* ============================================================================
@@ -937,7 +981,7 @@
937
981
 
938
982
  .taskon-quest-winner-error p {
939
983
  margin: 0;
940
- color: var(--taskon-quest-text-lighter, rgba(255, 255, 255, 0.8));
984
+ color: var(--taskon-color-text-secondary);
941
985
  }
942
986
 
943
987
  /* ============================================================================
@@ -965,7 +1009,7 @@
965
1009
  position: sticky;
966
1010
  top: 0;
967
1011
  z-index: 1;
968
- background: var(--taskon-quest-bg, #1d2123);
1012
+ background: var(--taskon-color-bg-surface);
969
1013
  }
970
1014
 
971
1015
  .taskon-quest-winner-table th {
@@ -974,8 +1018,8 @@
974
1018
  font-size: 14px;
975
1019
  font-weight: 500;
976
1020
  line-height: 20px;
977
- color: var(--taskon-quest-text-lighter, rgba(255, 255, 255, 0.6));
978
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
1021
+ color: var(--taskon-color-text-secondary);
1022
+ border-bottom: 1px solid var(--taskon-color-border);
979
1023
  }
980
1024
 
981
1025
  .taskon-quest-winner-table th:last-child {
@@ -987,13 +1031,13 @@
987
1031
  font-size: 14px;
988
1032
  font-weight: 500;
989
1033
  line-height: 20px;
990
- color: var(--taskon-quest-text-lightest, #ffffff);
991
- border-bottom: 1px solid rgba(255, 255, 255, 0.05);
1034
+ color: var(--taskon-color-text);
1035
+ border-bottom: 1px solid var(--taskon-color-border-secondary);
992
1036
  vertical-align: middle;
993
1037
  }
994
1038
 
995
1039
  .taskon-quest-winner-table tr:hover td {
996
- background: rgba(255, 255, 255, 0.02);
1040
+ background: var(--taskon-color-bg-surface-strong);
997
1041
  }
998
1042
 
999
1043
  /* ============================================================================
@@ -1003,7 +1047,7 @@
1003
1047
  .taskon-quest-winner-position {
1004
1048
  width: 80px;
1005
1049
  font-weight: 600;
1006
- color: var(--taskon-quest-primary, #cbff01);
1050
+ color: var(--taskon-color-primary);
1007
1051
  }
1008
1052
 
1009
1053
  /* ============================================================================
@@ -1020,7 +1064,7 @@
1020
1064
  overflow: hidden;
1021
1065
  text-overflow: ellipsis;
1022
1066
  white-space: nowrap;
1023
- color: var(--taskon-quest-text-lightest, #ffffff);
1067
+ color: var(--taskon-color-text);
1024
1068
  }
1025
1069
 
1026
1070
  /* ============================================================================
@@ -1035,7 +1079,7 @@
1035
1079
  display: inline-flex;
1036
1080
  flex-wrap: wrap;
1037
1081
  justify-content: flex-end;
1038
- gap: 8px;
1082
+ gap: var(--taskon-spacing-sm);
1039
1083
  max-width: 300px;
1040
1084
  }
1041
1085
 
@@ -1046,7 +1090,7 @@
1046
1090
  .taskon-quest-winner-empty {
1047
1091
  padding: 40px 20px !important;
1048
1092
  text-align: center !important;
1049
- color: var(--taskon-quest-text-lighter, rgba(255, 255, 255, 0.6)) !important;
1093
+ color: var(--taskon-color-text-tertiary) !important;
1050
1094
  }
1051
1095
 
1052
1096
  /* ============================================================================
@@ -1057,16 +1101,16 @@
1057
1101
  display: flex;
1058
1102
  align-items: center;
1059
1103
  justify-content: center;
1060
- gap: 8px;
1104
+ gap: var(--taskon-spacing-sm);
1061
1105
  padding: 20px;
1062
- color: var(--taskon-quest-text-lighter, rgba(255, 255, 255, 0.6));
1106
+ color: var(--taskon-color-text-tertiary);
1063
1107
  }
1064
1108
 
1065
1109
  .taskon-quest-winner-loading-spinner {
1066
1110
  width: 16px;
1067
1111
  height: 16px;
1068
- border: 2px solid rgba(255, 255, 255, 0.2);
1069
- border-top-color: var(--taskon-quest-primary, #cbff01);
1112
+ border: 2px solid var(--taskon-color-border);
1113
+ border-top-color: var(--taskon-color-primary);
1070
1114
  border-radius: 50%;
1071
1115
  animation: taskon-quest-winner-spin 0.8s linear infinite;
1072
1116
  }
@@ -1084,10 +1128,10 @@
1084
1128
  .taskon-quest-winner-reward-label {
1085
1129
  display: inline-flex;
1086
1130
  align-items: center;
1087
- gap: 4px;
1088
- padding: 4px 8px;
1089
- background: rgba(255, 255, 255, 0.1);
1090
- border-radius: 4px;
1131
+ gap: var(--taskon-spacing-xs);
1132
+ padding: var(--taskon-spacing-xs) var(--taskon-spacing-sm);
1133
+ background: var(--taskon-color-bg-surface-strong);
1134
+ border-radius: var(--taskon-border-radius-sm);
1091
1135
  font-size: 12px;
1092
1136
  font-weight: 500;
1093
1137
  line-height: 16px;
@@ -1095,11 +1139,11 @@
1095
1139
  }
1096
1140
 
1097
1141
  .taskon-quest-winner-reward-label-type {
1098
- color: var(--taskon-quest-text-lighter, rgba(255, 255, 255, 0.6));
1142
+ color: var(--taskon-color-text-secondary);
1099
1143
  }
1100
1144
 
1101
1145
  .taskon-quest-winner-reward-label-value {
1102
- color: var(--taskon-quest-primary, #cbff01);
1146
+ color: var(--taskon-color-primary);
1103
1147
  }
1104
1148
  /**
1105
1149
  * QuestRewards 样式
@@ -1111,14 +1155,28 @@
1111
1155
  * - 状态修饰:.taskon-quest-rewards-{element}--{state}
1112
1156
  */
1113
1157
 
1158
+ /*
1159
+ * Responsive base styles
1160
+ *
1161
+ * Keep mobile breakpoints and fallback patterns centralized here.
1162
+ * Components should reuse these mixins instead of duplicating query logic.
1163
+ */
1164
+
1165
+ /*
1166
+ * Desktop-up mixin:
1167
+ * 1) Enable desktop enhancement in wider containers
1168
+ * 2) Keep viewport media query as fallback
1169
+ */
1170
+
1114
1171
  /* ============================================================================
1115
1172
  主容器
1116
1173
  ============================================================================ */
1117
1174
 
1118
1175
  .taskon-quest-rewards {
1176
+ container-type: inline-size;
1119
1177
  overflow: hidden;
1120
- border-radius: 10px;
1121
- background: var(--taskon-bg-card, rgba(255, 255, 255, 0.04));
1178
+ border-radius: var(--taskon-border-radius-lg);
1179
+ background: var(--taskon-color-bg-surface-subtle);
1122
1180
  }
1123
1181
 
1124
1182
  .taskon-quest-rewards-container {
@@ -1141,7 +1199,7 @@
1141
1199
  width: 50px;
1142
1200
  height: 50px;
1143
1201
  border-radius: 50%;
1144
- border: 2px solid #f688ff;
1202
+ border: 2px solid var(--taskon-color-primary-hover);
1145
1203
  object-fit: cover;
1146
1204
  margin-right: 16px;
1147
1205
  }
@@ -1151,7 +1209,7 @@
1151
1209
  overflow: hidden;
1152
1210
  white-space: nowrap;
1153
1211
  text-overflow: ellipsis;
1154
- color: var(--taskon-text-primary, #fff);
1212
+ color: var(--taskon-color-text);
1155
1213
  font-size: 22px;
1156
1214
  font-weight: 500;
1157
1215
  line-height: 28px;
@@ -1163,9 +1221,9 @@
1163
1221
 
1164
1222
  .taskon-quest-rewards-ranking-point {
1165
1223
  padding: 16px;
1166
- border-radius: 10px;
1167
- border: 1px solid var(--taskon-border-color, rgba(255, 255, 255, 0.06));
1168
- background: var(--taskon-bg-card, rgba(255, 255, 255, 0.04));
1224
+ border-radius: var(--taskon-border-radius-lg);
1225
+ border: 1px solid var(--taskon-color-border-secondary);
1226
+ background: var(--taskon-color-bg-surface-subtle);
1169
1227
  }
1170
1228
 
1171
1229
  .taskon-quest-rewards-ranking-point-row {
@@ -1180,13 +1238,14 @@
1180
1238
  .taskon-quest-rewards-ranking-point-label {
1181
1239
  display: flex;
1182
1240
  align-items: center;
1183
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
1241
+ color: var(--taskon-color-text-tertiary);
1184
1242
  font-size: 16px;
1185
1243
  font-weight: 500;
1186
1244
  line-height: 20px;
1187
1245
  }
1188
1246
 
1189
1247
  /* Tip icon margin (controlled externally as TipPopover has no internal margin) */
1248
+
1190
1249
  .taskon-quest-rewards-ranking-point-tip-icon {
1191
1250
  margin-left: 6px;
1192
1251
  }
@@ -1197,7 +1256,7 @@
1197
1256
  }
1198
1257
 
1199
1258
  .taskon-quest-rewards-ranking-point-number {
1200
- color: var(--taskon-primary, #cbff01);
1259
+ color: var(--taskon-color-primary);
1201
1260
  font-size: 22px;
1202
1261
  font-weight: 700;
1203
1262
  line-height: 28px;
@@ -1207,7 +1266,7 @@
1207
1266
  position: absolute;
1208
1267
  top: 100%;
1209
1268
  right: 0;
1210
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
1269
+ color: var(--taskon-color-text-tertiary);
1211
1270
  font-size: 13px;
1212
1271
  font-weight: 500;
1213
1272
  line-height: 16px;
@@ -1216,7 +1275,7 @@
1216
1275
 
1217
1276
  .taskon-quest-rewards-ranking-point-amount {
1218
1277
  margin-left: auto;
1219
- color: var(--taskon-secondary, #00ffa3);
1278
+ color: var(--taskon-color-secondary);
1220
1279
  font-size: 22px;
1221
1280
  font-weight: 700;
1222
1281
  line-height: 28px;
@@ -1228,11 +1287,11 @@
1228
1287
  width: 50%;
1229
1288
  font-size: 12px;
1230
1289
  line-height: 16px;
1231
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
1290
+ color: var(--taskon-color-text-tertiary);
1232
1291
  }
1233
1292
 
1234
1293
  .taskon-quest-rewards-ranking-point-tip-highlight {
1235
- color: var(--taskon-primary, #cbff01);
1294
+ color: var(--taskon-color-primary);
1236
1295
  }
1237
1296
 
1238
1297
  /* ============================================================================
@@ -1256,7 +1315,7 @@
1256
1315
  font-size: 16px;
1257
1316
  line-height: 20px;
1258
1317
  font-weight: 500;
1259
- color: var(--taskon-text-primary, #fff);
1318
+ color: var(--taskon-color-text);
1260
1319
  }
1261
1320
 
1262
1321
  .taskon-quest-rewards-group-cards {
@@ -1270,8 +1329,8 @@
1270
1329
 
1271
1330
  .taskon-quest-rewards-card {
1272
1331
  margin-top: 12px;
1273
- background: var(--taskon-bg-card, rgba(255, 255, 255, 0.04));
1274
- border-radius: 8px;
1332
+ background: var(--taskon-color-bg-surface-subtle);
1333
+ border-radius: var(--taskon-border-radius);
1275
1334
  overflow: hidden;
1276
1335
  }
1277
1336
 
@@ -1280,43 +1339,49 @@
1280
1339
  }
1281
1340
 
1282
1341
  .taskon-quest-rewards-card--active {
1283
- border: 1px solid #cbff01;
1342
+ border: 1px solid var(--taskon-color-primary);
1284
1343
  }
1285
1344
 
1286
1345
  /* Tier 表头(仅 PointRanking 模式) */
1346
+
1287
1347
  .taskon-quest-rewards-card-tier {
1288
1348
  display: flex;
1289
1349
  align-items: center;
1290
1350
  justify-content: space-between;
1291
1351
  gap: 8px;
1292
1352
  padding: 8px 16px;
1293
- background: var(--taskon-bg-darkest, rgba(0, 0, 0, 0.4));
1353
+ background: var(--taskon-color-bg-inset);
1294
1354
  font-size: 16px;
1295
1355
  line-height: 20px;
1296
1356
  }
1297
1357
 
1298
1358
  .taskon-quest-rewards-card-tier--active {
1299
- background: linear-gradient(90deg, rgba(203, 255, 1, 0.9) 0%, rgba(0, 255, 163, 0.9) 100%);
1359
+ background: linear-gradient(
1360
+ 90deg,
1361
+ var(--taskon-color-primary) 0%,
1362
+ var(--taskon-color-secondary) 100%
1363
+ );
1300
1364
  }
1301
1365
 
1302
1366
  .taskon-quest-rewards-card-tier-label {
1303
1367
  font-weight: 500;
1304
- color: var(--taskon-text-primary, #fff);
1368
+ color: var(--taskon-color-text);
1305
1369
  }
1306
1370
 
1307
1371
  .taskon-quest-rewards-card-tier--active .taskon-quest-rewards-card-tier-label {
1308
- color: var(--taskon-text-inverse, #000);
1372
+ color: var(--taskon-color-text-on-primary);
1309
1373
  }
1310
1374
 
1311
1375
  .taskon-quest-rewards-card-tier-range {
1312
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
1376
+ color: var(--taskon-color-text-tertiary);
1313
1377
  }
1314
1378
 
1315
1379
  .taskon-quest-rewards-card-tier--active .taskon-quest-rewards-card-tier-range {
1316
- color: var(--taskon-text-inverse-secondary, rgba(0, 0, 0, 0.6));
1380
+ color: var(--taskon-color-text-on-primary);
1317
1381
  }
1318
1382
 
1319
1383
  /* 卡片主体 */
1384
+
1320
1385
  .taskon-quest-rewards-card-body {
1321
1386
  padding: 20px;
1322
1387
  display: flex;
@@ -1342,7 +1407,7 @@
1342
1407
  }
1343
1408
 
1344
1409
  .taskon-quest-rewards-whitelist-desc-icon {
1345
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
1410
+ color: var(--taskon-color-text-tertiary);
1346
1411
  transition: transform 0.3s ease;
1347
1412
  flex-shrink: 0;
1348
1413
  }
@@ -1355,7 +1420,7 @@
1355
1420
  margin-top: 8px;
1356
1421
  font-size: 14px;
1357
1422
  line-height: 20px;
1358
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
1423
+ color: var(--taskon-color-text-secondary);
1359
1424
  }
1360
1425
 
1361
1426
  /* ============================================================================
@@ -1373,7 +1438,7 @@
1373
1438
  font-size: 18px;
1374
1439
  line-height: 24px;
1375
1440
  font-weight: 500;
1376
- color: var(--taskon-text-primary, #fff);
1441
+ color: var(--taskon-color-text);
1377
1442
  flex-shrink: 0;
1378
1443
  }
1379
1444
 
@@ -1383,7 +1448,7 @@
1383
1448
  gap: 8px;
1384
1449
  font-size: 14px;
1385
1450
  line-height: 16px;
1386
- color: var(--taskon-text-primary, #fff);
1451
+ color: var(--taskon-color-text);
1387
1452
  }
1388
1453
 
1389
1454
  /* ============================================================================
@@ -1396,21 +1461,22 @@
1396
1461
  }
1397
1462
 
1398
1463
  /* Chain Icon Tooltip */
1464
+
1399
1465
  .taskon-quest-rewards-chain-tooltip {
1400
1466
  padding: 6px 10px;
1401
- background: var(--taskon-bg-popover, #1a1a1a);
1402
- border: 1px solid var(--taskon-border-color, rgba(255, 255, 255, 0.1));
1403
- border-radius: 6px;
1404
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
1467
+ background: var(--taskon-color-bg-floating);
1468
+ border: 1px solid var(--taskon-color-border);
1469
+ border-radius: var(--taskon-border-radius-sm);
1470
+ box-shadow: 0 4px 12px var(--taskon-color-bg-mask);
1405
1471
  font-size: 12px;
1406
1472
  line-height: 16px;
1407
- color: var(--taskon-text-primary, #fff);
1473
+ color: var(--taskon-color-text);
1408
1474
  z-index: 1000;
1409
1475
  white-space: nowrap;
1410
1476
  }
1411
1477
 
1412
1478
  .taskon-quest-rewards-chain-tooltip-arrow {
1413
- fill: var(--taskon-bg-popover, #1a1a1a);
1479
+ fill: var(--taskon-color-bg-floating);
1414
1480
  }
1415
1481
 
1416
1482
  /* ============================================================================
@@ -1435,7 +1501,11 @@
1435
1501
  }
1436
1502
 
1437
1503
  .taskon-quest-rewards-token-blindbox span:last-child {
1438
- background: linear-gradient(90deg, #cbff01 0%, #00ffa3 100%);
1504
+ background: linear-gradient(
1505
+ 90deg,
1506
+ var(--taskon-color-primary) 0%,
1507
+ var(--taskon-color-secondary) 100%
1508
+ );
1439
1509
  -webkit-background-clip: text;
1440
1510
  background-clip: text;
1441
1511
  -webkit-text-fill-color: transparent;
@@ -1451,22 +1521,22 @@
1451
1521
  .taskon-quest-rewards-token-amount {
1452
1522
  font-size: 22px;
1453
1523
  line-height: 28px;
1454
- color: var(--taskon-primary, #cbff01);
1524
+ color: var(--taskon-color-primary);
1455
1525
  }
1456
1526
 
1457
1527
  .taskon-quest-rewards-token-name {
1458
1528
  font-size: 22px;
1459
1529
  line-height: 28px;
1460
- color: var(--taskon-primary, #cbff01);
1530
+ color: var(--taskon-color-primary);
1461
1531
  }
1462
1532
 
1463
1533
  .taskon-quest-rewards-token-usdt-tag {
1464
1534
  font-size: 12px;
1465
1535
  line-height: 14px;
1466
1536
  padding: 2px 6px;
1467
- background: var(--taskon-bg-secondary, rgba(255, 255, 255, 0.1));
1468
- border-radius: 4px;
1469
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
1537
+ background: var(--taskon-color-secondary-bg);
1538
+ border-radius: var(--taskon-border-radius-sm);
1539
+ color: var(--taskon-color-text-secondary);
1470
1540
  }
1471
1541
 
1472
1542
  .taskon-quest-rewards-token-per {
@@ -1479,25 +1549,26 @@
1479
1549
  .taskon-quest-rewards-token-per-label {
1480
1550
  font-size: 14px;
1481
1551
  line-height: 16px;
1482
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
1552
+ color: var(--taskon-color-text-tertiary);
1483
1553
  }
1484
1554
 
1485
1555
  .taskon-quest-rewards-token-per-value {
1486
1556
  margin-left: auto;
1487
1557
  font-size: 14px;
1488
1558
  line-height: 16px;
1489
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
1559
+ color: var(--taskon-color-text-secondary);
1490
1560
  }
1491
1561
 
1492
1562
  /* BRC20 标签 */
1563
+
1493
1564
  .taskon-quest-rewards-token-brc20 {
1494
1565
  padding: 2px 6px;
1495
1566
  font-size: 12px;
1496
1567
  line-height: 14px;
1497
1568
  font-weight: 500;
1498
- color: #f97316;
1499
- background: rgba(249, 115, 22, 0.15);
1500
- border-radius: 4px;
1569
+ color: var(--taskon-color-warning);
1570
+ background: var(--taskon-color-warning-bg);
1571
+ border-radius: var(--taskon-border-radius-sm);
1501
1572
  }
1502
1573
 
1503
1574
  /* ============================================================================
@@ -1521,7 +1592,7 @@
1521
1592
  font-size: 22px;
1522
1593
  line-height: 28px;
1523
1594
  font-weight: 600;
1524
- color: var(--taskon-text-primary, #fff);
1595
+ color: var(--taskon-color-text);
1525
1596
  overflow: hidden;
1526
1597
  text-overflow: ellipsis;
1527
1598
  white-space: nowrap;
@@ -1531,7 +1602,7 @@
1531
1602
  .taskon-quest-rewards-minted-nft-quantity {
1532
1603
  font-size: 14px;
1533
1604
  line-height: 16px;
1534
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
1605
+ color: var(--taskon-color-text-secondary);
1535
1606
  }
1536
1607
 
1537
1608
  /* ============================================================================
@@ -1540,10 +1611,10 @@
1540
1611
 
1541
1612
  .taskon-quest-rewards-popover-content {
1542
1613
  padding: 12px 16px;
1543
- background: var(--taskon-bg-popover, #1a1a1a);
1544
- border: 1px solid var(--taskon-border-color, rgba(255, 255, 255, 0.1));
1545
- border-radius: 8px;
1546
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
1614
+ background: var(--taskon-color-bg-floating);
1615
+ border: 1px solid var(--taskon-color-border);
1616
+ border-radius: var(--taskon-border-radius);
1617
+ box-shadow: 0 4px 12px var(--taskon-color-bg-mask);
1547
1618
  max-width: 300px;
1548
1619
  z-index: 1000;
1549
1620
  }
@@ -1551,7 +1622,7 @@
1551
1622
  .taskon-quest-rewards-popover-name {
1552
1623
  font-size: 14px;
1553
1624
  line-height: 18px;
1554
- color: var(--taskon-text-primary, #fff);
1625
+ color: var(--taskon-color-text);
1555
1626
  word-break: break-all;
1556
1627
  }
1557
1628
 
@@ -1563,7 +1634,7 @@
1563
1634
  font-size: 14px;
1564
1635
  line-height: 18px;
1565
1636
  font-weight: 500;
1566
- color: var(--taskon-text-primary, #fff);
1637
+ color: var(--taskon-color-text);
1567
1638
  }
1568
1639
 
1569
1640
  .taskon-quest-rewards-popover-address-row {
@@ -1584,7 +1655,7 @@
1584
1655
  flex: 1;
1585
1656
  font-size: 12px;
1586
1657
  line-height: 16px;
1587
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
1658
+ color: var(--taskon-color-text-tertiary);
1588
1659
  word-break: break-all;
1589
1660
  }
1590
1661
 
@@ -1592,16 +1663,16 @@
1592
1663
  flex-shrink: 0;
1593
1664
  display: flex;
1594
1665
  align-items: center;
1595
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
1666
+ color: var(--taskon-color-text-tertiary);
1596
1667
  transition: color 0.2s;
1597
1668
  }
1598
1669
 
1599
1670
  .taskon-quest-rewards-popover-address-row:hover .taskon-quest-rewards-popover-address-copy {
1600
- color: var(--taskon-primary, #cbff01);
1671
+ color: var(--taskon-color-primary);
1601
1672
  }
1602
1673
 
1603
1674
  .taskon-quest-rewards-popover-arrow {
1604
- fill: var(--taskon-bg-popover, #1a1a1a);
1675
+ fill: var(--taskon-color-bg-floating);
1605
1676
  }
1606
1677
 
1607
1678
  /* ============================================================================
@@ -1626,14 +1697,14 @@
1626
1697
  font-size: 22px;
1627
1698
  line-height: 28px;
1628
1699
  font-weight: 600;
1629
- color: var(--taskon-primary, #cbff01);
1700
+ color: var(--taskon-color-primary);
1630
1701
  }
1631
1702
 
1632
1703
  .taskon-quest-rewards-points-name,
1633
1704
  .taskon-quest-rewards-exp-label {
1634
1705
  font-size: 22px;
1635
1706
  line-height: 28px;
1636
- color: var(--taskon-text-primary, #fff);
1707
+ color: var(--taskon-color-text);
1637
1708
  }
1638
1709
 
1639
1710
  /* ============================================================================
@@ -1649,7 +1720,7 @@
1649
1720
  .taskon-quest-rewards-discord-role-name {
1650
1721
  font-size: 22px;
1651
1722
  line-height: 28px;
1652
- color: var(--taskon-link, #5865f2);
1723
+ color: var(--taskon-color-link);
1653
1724
  cursor: pointer;
1654
1725
  }
1655
1726
 
@@ -1660,7 +1731,7 @@
1660
1731
  .taskon-quest-rewards-discord-role-warning {
1661
1732
  font-size: 12px;
1662
1733
  line-height: 14px;
1663
- color: var(--taskon-warning, #ffc107);
1734
+ color: var(--taskon-color-warning);
1664
1735
  }
1665
1736
 
1666
1737
  /* ============================================================================
@@ -1670,7 +1741,7 @@
1670
1741
  .taskon-quest-rewards-winner-open {
1671
1742
  font-size: 22px;
1672
1743
  line-height: 28px;
1673
- color: var(--taskon-secondary, #00ffa3);
1744
+ color: var(--taskon-color-secondary);
1674
1745
  }
1675
1746
 
1676
1747
  .taskon-quest-rewards-winner-fcfs {
@@ -1688,33 +1759,33 @@
1688
1759
  }
1689
1760
 
1690
1761
  .taskon-quest-rewards-winner-available {
1691
- color: var(--taskon-secondary, #00ffa3);
1762
+ color: var(--taskon-color-secondary);
1692
1763
  }
1693
1764
 
1694
1765
  .taskon-quest-rewards-winner-separator {
1695
- color: var(--taskon-text-primary, #fff);
1766
+ color: var(--taskon-color-text);
1696
1767
  }
1697
1768
 
1698
1769
  .taskon-quest-rewards-winner-total {
1699
- color: var(--taskon-text-primary, #fff);
1770
+ color: var(--taskon-color-text);
1700
1771
  }
1701
1772
 
1702
1773
  .taskon-quest-rewards-winner-label {
1703
1774
  font-size: 14px;
1704
1775
  line-height: 16px;
1705
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
1776
+ color: var(--taskon-color-text-secondary);
1706
1777
  }
1707
1778
 
1708
1779
  .taskon-quest-rewards-winner-count {
1709
1780
  font-size: 22px;
1710
1781
  line-height: 28px;
1711
- color: var(--taskon-secondary, #00ffa3);
1782
+ color: var(--taskon-color-secondary);
1712
1783
  }
1713
1784
 
1714
1785
  .taskon-quest-rewards-winner-ranking {
1715
1786
  font-size: 22px;
1716
1787
  line-height: 28px;
1717
- color: var(--taskon-secondary, #00ffa3);
1788
+ color: var(--taskon-color-secondary);
1718
1789
  }
1719
1790
 
1720
1791
  /* ============================================================================
@@ -1723,28 +1794,59 @@
1723
1794
 
1724
1795
  .taskon-quest-rewards-gas {
1725
1796
  display: flex;
1726
- align-items: center;
1727
- gap: 12px;
1797
+ flex-direction: column;
1798
+ align-items: flex-start;
1799
+ gap: 8px;
1728
1800
  margin-top: 8px;
1729
1801
  }
1730
1802
 
1731
1803
  .taskon-quest-rewards-gas-label {
1732
1804
  font-size: 14px;
1733
1805
  line-height: 16px;
1734
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
1806
+ color: var(--taskon-color-text-tertiary);
1735
1807
  white-space: nowrap;
1736
1808
  }
1737
1809
 
1738
1810
  .taskon-quest-rewards-gas-bar {
1739
1811
  flex: 1;
1812
+ width: 100%;
1740
1813
  position: relative;
1741
1814
  height: 8px;
1742
- background: rgba(255, 255, 255, 0.2);
1743
- border-radius: 2px;
1815
+ background: var(--taskon-color-bg-surface-strong);
1816
+ border-radius: var(--taskon-border-radius-sm);
1744
1817
  overflow: hidden;
1745
1818
  }
1746
1819
 
1820
+ @supports (container-type: inline-size) {
1821
+ @container (min-width: 751px) {
1822
+ .taskon-quest-rewards-gas {
1823
+ flex-direction: row;
1824
+ align-items: center;
1825
+ gap: 12px;
1826
+ }
1827
+
1828
+ .taskon-quest-rewards-gas-bar {
1829
+ width: auto;
1830
+ }
1831
+ }
1832
+ }
1833
+
1834
+ @supports not (container-type: inline-size) {
1835
+ @media (min-width: 751px) {
1836
+ .taskon-quest-rewards-gas {
1837
+ flex-direction: row;
1838
+ align-items: center;
1839
+ gap: 12px;
1840
+ }
1841
+
1842
+ .taskon-quest-rewards-gas-bar {
1843
+ width: auto;
1844
+ }
1845
+ }
1846
+ }
1847
+
1747
1848
  /* 进度条靠右对齐(显示剩余量) */
1849
+
1748
1850
  .taskon-quest-rewards-gas-progress {
1749
1851
  position: absolute;
1750
1852
  right: 0;
@@ -1753,18 +1855,23 @@
1753
1855
  display: flex;
1754
1856
  align-items: center;
1755
1857
  gap: 6px;
1756
- background: linear-gradient(90deg, #00ffa3 -229.89%, #cbff01 100%);
1757
- border-radius: 2px;
1858
+ background: linear-gradient(
1859
+ 90deg,
1860
+ var(--taskon-color-secondary) -229.89%,
1861
+ var(--taskon-color-primary) 100%
1862
+ );
1863
+ border-radius: var(--taskon-border-radius-sm);
1758
1864
  overflow: hidden;
1759
1865
  }
1760
1866
 
1761
1867
  /* 波浪纹条纹 */
1868
+
1762
1869
  .taskon-quest-rewards-gas-wave {
1763
1870
  width: 3px;
1764
1871
  flex-shrink: 0;
1765
1872
  height: 200%;
1766
1873
  transform: rotate(45deg);
1767
- background: rgba(0, 0, 0, 0.1);
1874
+ background: var(--taskon-color-bg-canvas);
1768
1875
  }
1769
1876
 
1770
1877
  /* ============================================================================
@@ -1774,15 +1881,15 @@
1774
1881
  .taskon-quest-rewards-preview {
1775
1882
  width: 100%;
1776
1883
  padding: 26px;
1777
- border: 1px solid var(--taskon-border-color, rgba(255, 255, 255, 0.1));
1778
- border-radius: 8px;
1884
+ border: 1px solid var(--taskon-color-border);
1885
+ border-radius: var(--taskon-border-radius);
1779
1886
  box-sizing: border-box;
1780
1887
  }
1781
1888
 
1782
1889
  .taskon-quest-rewards-preview-image,
1783
1890
  .taskon-quest-rewards-preview-video {
1784
1891
  width: 100%;
1785
- border-radius: 8px;
1892
+ border-radius: var(--taskon-border-radius);
1786
1893
  display: block;
1787
1894
  }
1788
1895
 
@@ -1794,8 +1901,8 @@
1794
1901
  position: relative;
1795
1902
  padding: 16px;
1796
1903
  background: transparent;
1797
- border-radius: 8px;
1798
- border: 1px solid rgba(0, 255, 163, 0.4);
1904
+ border-radius: var(--taskon-border-radius);
1905
+ border: 1px solid var(--taskon-color-secondary-bg);
1799
1906
  overflow: hidden;
1800
1907
  }
1801
1908
 
@@ -1810,7 +1917,7 @@
1810
1917
  font-size: 14px;
1811
1918
  line-height: 16px;
1812
1919
  font-weight: 500;
1813
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
1920
+ color: var(--taskon-color-text-secondary);
1814
1921
  }
1815
1922
 
1816
1923
  .taskon-quest-rewards-estimated-value {
@@ -1824,17 +1931,17 @@
1824
1931
  }
1825
1932
 
1826
1933
  .taskon-quest-rewards-estimated-amount {
1827
- color: var(--taskon-primary, #cbff01);
1934
+ color: var(--taskon-color-primary);
1828
1935
  }
1829
1936
 
1830
1937
  .taskon-quest-rewards-estimated-symbol {
1831
- color: var(--taskon-text-primary, #fff);
1938
+ color: var(--taskon-color-text);
1832
1939
  }
1833
1940
 
1834
1941
  .taskon-quest-rewards-estimated-formula {
1835
1942
  font-size: 12px;
1836
1943
  line-height: 14px;
1837
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
1944
+ color: var(--taskon-color-text-tertiary);
1838
1945
  margin-top: 4px;
1839
1946
  }
1840
1947
 
@@ -1842,14 +1949,14 @@
1842
1949
  font-size: 14px;
1843
1950
  line-height: 16px;
1844
1951
  font-weight: 500;
1845
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
1952
+ color: var(--taskon-color-text-secondary);
1846
1953
  }
1847
1954
 
1848
1955
  .taskon-quest-rewards-estimated-points {
1849
1956
  font-size: 18px;
1850
1957
  line-height: 24px;
1851
1958
  font-weight: 700;
1852
- color: var(--taskon-text-primary, #fff);
1959
+ color: var(--taskon-color-text);
1853
1960
  }
1854
1961
 
1855
1962
  .taskon-quest-rewards-estimated-total {
@@ -1859,10 +1966,11 @@
1859
1966
  gap: 8px;
1860
1967
  font-size: 14px;
1861
1968
  line-height: 16px;
1862
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
1969
+ color: var(--taskon-color-text-secondary);
1863
1970
  }
1864
1971
 
1865
1972
  /* 未完成遮罩层 */
1973
+
1866
1974
  .taskon-quest-rewards-estimated-mask {
1867
1975
  position: absolute;
1868
1976
  inset: 0;
@@ -1870,8 +1978,8 @@
1870
1978
  flex-direction: column;
1871
1979
  align-items: center;
1872
1980
  justify-content: center;
1873
- background: rgba(48, 48, 48, 0.4);
1874
- border-radius: 8px;
1981
+ background: var(--taskon-color-bg-mask);
1982
+ border-radius: var(--taskon-border-radius);
1875
1983
  backdrop-filter: blur(4px);
1876
1984
  padding: 16px;
1877
1985
  }
@@ -1886,7 +1994,7 @@
1886
1994
  font-size: 14px;
1887
1995
  line-height: 16px;
1888
1996
  font-weight: 500;
1889
- color: var(--taskon-secondary, #00ffa3);
1997
+ color: var(--taskon-color-secondary);
1890
1998
  text-align: center;
1891
1999
  }
1892
2000
 
@@ -1894,7 +2002,7 @@
1894
2002
  margin-top: 4px;
1895
2003
  font-size: 12px;
1896
2004
  line-height: 14px;
1897
- color: var(--taskon-text-primary, #fff);
2005
+ color: var(--taskon-color-text);
1898
2006
  text-align: center;
1899
2007
  }
1900
2008
 
@@ -1910,7 +2018,7 @@
1910
2018
  font-size: 16px;
1911
2019
  line-height: 20px;
1912
2020
  font-weight: 500;
1913
- color: var(--taskon-text-primary, #fff);
2021
+ color: var(--taskon-color-text);
1914
2022
  }
1915
2023
 
1916
2024
  .taskon-quest-rewards-bonus-card {
@@ -1919,19 +2027,20 @@
1919
2027
  display: flex;
1920
2028
  flex-direction: column;
1921
2029
  gap: 24px;
1922
- border-radius: 10px;
1923
- background: var(--taskon-bg-card, rgba(255, 255, 255, 0.04));
2030
+ border-radius: var(--taskon-border-radius-lg);
2031
+ background: var(--taskon-color-bg-surface-subtle);
1924
2032
  }
1925
2033
 
1926
2034
  /* 覆盖 BaseRow 的 label 样式,匹配 Vue 版本 */
2035
+
1927
2036
  .taskon-quest-rewards-bonus-card .taskon-quest-rewards-row-label {
1928
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
2037
+ color: var(--taskon-color-text-secondary);
1929
2038
  font-size: 16px;
1930
2039
  line-height: 20px;
1931
2040
  }
1932
2041
 
1933
2042
  .taskon-quest-rewards-bonus-desc {
1934
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
2043
+ color: var(--taskon-color-text-tertiary);
1935
2044
  font-size: 14px;
1936
2045
  line-height: 18px;
1937
2046
  text-align: right;
@@ -1940,7 +2049,7 @@
1940
2049
  .taskon-quest-rewards-bonus-value {
1941
2050
  display: flex;
1942
2051
  align-items: flex-end;
1943
- color: var(--taskon-text-primary, #fff);
2052
+ color: var(--taskon-color-text);
1944
2053
  text-align: right;
1945
2054
  font-size: 16px;
1946
2055
  font-weight: 600;
@@ -1956,163 +2065,6 @@
1956
2065
  font-weight: 400;
1957
2066
  }
1958
2067
 
1959
- /* ============================================================================
1960
- 移动端响应式
1961
- ============================================================================ */
1962
-
1963
- @media (max-width: 750px) {
1964
- .taskon-quest-rewards {
1965
- margin-top: 4vw;
1966
- }
1967
-
1968
- .taskon-quest-rewards-container {
1969
- padding: 4vw;
1970
- gap: 7.2vw;
1971
- }
1972
-
1973
- /* 用户信息移动端样式 */
1974
- .taskon-quest-rewards-user-avatar {
1975
- margin-right: 2.933vw;
1976
- width: 10.667vw;
1977
- height: 10.667vw;
1978
- }
1979
-
1980
- .taskon-quest-rewards-user-name {
1981
- font-size: 4.8vw;
1982
- line-height: 6vw;
1983
- }
1984
-
1985
- /* 排名积分移动端样式 */
1986
- .taskon-quest-rewards-ranking-point {
1987
- padding: 3.467vw 4vw;
1988
- }
1989
-
1990
- .taskon-quest-rewards-ranking-point-label {
1991
- font-size: 3.733vw;
1992
- line-height: 4.667vw;
1993
- }
1994
-
1995
- .taskon-quest-rewards-ranking-point-number,
1996
- .taskon-quest-rewards-ranking-point-amount {
1997
- font-size: 4.533vw;
1998
- line-height: 5.733vw;
1999
- }
2000
-
2001
- .taskon-quest-rewards-ranking-point-row--points {
2002
- margin-top: 6.4vw;
2003
- }
2004
-
2005
- .taskon-quest-rewards-ranking-point-tier {
2006
- font-size: 2.933vw;
2007
- line-height: 3.733vw;
2008
- }
2009
-
2010
- .taskon-quest-rewards-card {
2011
- margin-top: 1.6vw;
2012
- }
2013
-
2014
- .taskon-quest-rewards-card-tier {
2015
- gap: 0.8vw;
2016
- padding: 0.8vw 1.333vw;
2017
- font-size: 3.467vw;
2018
- line-height: 4.4vw;
2019
- }
2020
-
2021
- .taskon-quest-rewards-card-body {
2022
- padding: 1.6vw;
2023
- gap: 2.133vw;
2024
- }
2025
-
2026
- .taskon-quest-rewards-row-label {
2027
- font-size: 3.867vw;
2028
- line-height: 4.8vw;
2029
- }
2030
-
2031
- .taskon-quest-rewards-token-amount,
2032
- .taskon-quest-rewards-token-name,
2033
- .taskon-quest-rewards-nft-name,
2034
- .taskon-quest-rewards-minted-nft-name,
2035
- .taskon-quest-rewards-cap-name,
2036
- .taskon-quest-rewards-whitelist-name,
2037
- .taskon-quest-rewards-points-amount,
2038
- .taskon-quest-rewards-points-name,
2039
- .taskon-quest-rewards-exp-amount,
2040
- .taskon-quest-rewards-exp-label,
2041
- .taskon-quest-rewards-discord-role-name,
2042
- .taskon-quest-rewards-winner-count,
2043
- .taskon-quest-rewards-winner-ranking,
2044
- .taskon-quest-rewards-winner-open {
2045
- font-size: 4.267vw;
2046
- line-height: 5.333vw;
2047
- }
2048
-
2049
- .taskon-quest-rewards-preview {
2050
- padding: 6.267vw;
2051
- }
2052
-
2053
- /* Bonus 模块移动端样式 */
2054
- .taskon-quest-rewards-bonus-card {
2055
- margin-top: 2.667vw;
2056
- padding: 4vw;
2057
- gap: 5.333vw;
2058
- }
2059
-
2060
- .taskon-quest-rewards-bonus-card .taskon-quest-rewards-row-label {
2061
- font-size: 3.467vw;
2062
- line-height: 4.4vw;
2063
- }
2064
-
2065
- .taskon-quest-rewards-bonus-desc {
2066
- font-size: 3.2vw;
2067
- line-height: 4vw;
2068
- }
2069
-
2070
- .taskon-quest-rewards-bonus-value {
2071
- font-size: 3.733vw;
2072
- line-height: 4vw;
2073
- }
2074
-
2075
- .taskon-quest-rewards-bonus-amount {
2076
- margin-right: 0.8vw;
2077
- }
2078
-
2079
- .taskon-quest-rewards-bonus-unit {
2080
- font-size: 3.2vw;
2081
- }
2082
-
2083
- /* View Leaderboard 按钮移动端样式 */
2084
- .taskon-quest-rewards-view-leaderboard {
2085
- font-size: 3.2vw;
2086
- line-height: 4vw;
2087
- }
2088
-
2089
- .taskon-quest-rewards-view-leaderboard-arrow {
2090
- margin-left: 1.867vw;
2091
- }
2092
-
2093
- /* Gas Station 移动端样式 */
2094
- .taskon-quest-rewards-gas {
2095
- flex-direction: column;
2096
- align-items: flex-start;
2097
- gap: 2vw;
2098
- }
2099
-
2100
- .taskon-quest-rewards-gas-label {
2101
- font-size: 3.2vw;
2102
- line-height: 4vw;
2103
- }
2104
-
2105
- .taskon-quest-rewards-gas-bar {
2106
- width: 100%;
2107
- height: 1.6vw;
2108
- }
2109
-
2110
- .taskon-quest-rewards-gas-wave {
2111
- width: 0.6vw;
2112
- gap: 1.2vw;
2113
- }
2114
- }
2115
-
2116
2068
  /* ============================================================================
2117
2069
  View Leaderboard 按钮(链接样式,与原版一致)
2118
2070
  ============================================================================ */
@@ -2125,7 +2077,7 @@
2125
2077
  background: none;
2126
2078
  border: none;
2127
2079
  cursor: pointer;
2128
- color: var(--taskon-link, #58afff);
2080
+ color: var(--taskon-color-link);
2129
2081
  font-size: 14px;
2130
2082
  line-height: 18px;
2131
2083
  transition: opacity 0.2s ease;
@@ -2149,14 +2101,6 @@
2149
2101
  margin-left: 4px;
2150
2102
  }
2151
2103
 
2152
- /* ============================================================================
2153
- Leaderboard 弹窗样式
2154
- ============================================================================ */
2155
-
2156
- .taskon-quest-leaderboard-modal {
2157
- background: var(--taskon-bg-card, #1a1a1a);
2158
- }
2159
-
2160
2104
  .taskon-quest-leaderboard-content {
2161
2105
  display: flex;
2162
2106
  flex-direction: column;
@@ -2167,13 +2111,13 @@
2167
2111
  margin: 0;
2168
2112
  font-size: 24px;
2169
2113
  font-weight: 600;
2170
- color: var(--taskon-text-primary, #fff);
2114
+ color: var(--taskon-color-text);
2171
2115
  }
2172
2116
 
2173
2117
  .taskon-quest-leaderboard-subtitle {
2174
2118
  margin: 0;
2175
2119
  font-size: 14px;
2176
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
2120
+ color: var(--taskon-color-text-secondary);
2177
2121
  }
2178
2122
 
2179
2123
  .taskon-quest-leaderboard-error {
@@ -2183,36 +2127,110 @@
2183
2127
  gap: 12px;
2184
2128
  padding: 24px;
2185
2129
  text-align: center;
2186
- color: var(--taskon-text-secondary, rgba(255, 255, 255, 0.7));
2130
+ color: var(--taskon-color-text-secondary);
2187
2131
  }
2188
2132
 
2189
2133
  .taskon-quest-leaderboard-table {
2190
2134
  margin-top: 8px;
2191
2135
  }
2192
2136
 
2137
+ /* ============================================================================
2138
+ Leaderboard 弹窗内 Table 主题(仅作用于该弹窗)
2139
+ 统一使用最新 --taskon-color-* token
2140
+ ============================================================================ */
2141
+
2142
+ .taskon-quest-leaderboard-table .taskon-table__header {
2143
+ color: var(--taskon-color-text-disabled);
2144
+ background-color: var(--taskon-color-bg-surface-subtle);
2145
+ }
2146
+
2147
+ .taskon-quest-leaderboard-table .taskon-table__cell {
2148
+ color: var(--taskon-color-text);
2149
+ }
2150
+
2151
+ .taskon-quest-leaderboard-table .taskon-table--bordered .taskon-table__row td {
2152
+ border-top: 1px solid var(--taskon-color-border-secondary);
2153
+ border-bottom: 1px solid var(--taskon-color-border-secondary);
2154
+ }
2155
+
2156
+ .taskon-quest-leaderboard-table .taskon-table__row:hover {
2157
+ background-color: var(--taskon-color-bg-surface-subtle);
2158
+ }
2159
+
2160
+ .taskon-quest-leaderboard-table .taskon-table--striped .taskon-table__row:nth-child(even) {
2161
+ background-color: var(--taskon-color-bg-surface-subtle);
2162
+ }
2163
+
2164
+ .taskon-quest-leaderboard-table .taskon-table__loading,
2165
+ .taskon-quest-leaderboard-table .taskon-table__empty,
2166
+ .taskon-quest-leaderboard-table .taskon-table__empty-desc {
2167
+ color: var(--taskon-color-text-disabled);
2168
+ }
2169
+
2170
+ .taskon-quest-leaderboard-table .taskon-table__empty-title {
2171
+ color: var(--taskon-color-text);
2172
+ }
2173
+
2174
+ .taskon-quest-leaderboard-table .taskon-table__loading-spinner {
2175
+ border-color: var(--taskon-color-text-disabled);
2176
+ border-top-color: var(--taskon-color-primary);
2177
+ }
2178
+
2179
+ .taskon-quest-leaderboard-table .taskon-table__loading-overlay {
2180
+ background-color: var(--taskon-color-bg-mask);
2181
+ }
2182
+
2193
2183
  .taskon-quest-leaderboard-pagination {
2194
2184
  display: flex;
2195
2185
  justify-content: center;
2196
2186
  margin-top: 16px;
2197
2187
  }
2198
2188
 
2189
+ /* ============================================================================
2190
+ Leaderboard 弹窗内 Pagination 主题(仅作用于该弹窗)
2191
+ 统一使用最新 --taskon-color-* token
2192
+ ============================================================================ */
2193
+
2194
+ .taskon-quest-leaderboard-pagination .taskon-pagination-range,
2195
+ .taskon-quest-leaderboard-pagination .taskon-pagination-info-separator,
2196
+ .taskon-quest-leaderboard-pagination .taskon-pagination-info-total {
2197
+ color: var(--taskon-color-text-disabled);
2198
+ }
2199
+
2200
+ .taskon-quest-leaderboard-pagination .taskon-pagination-info-current {
2201
+ color: var(--taskon-color-text);
2202
+ }
2203
+
2204
+ .taskon-quest-leaderboard-pagination .taskon-pagination-btn {
2205
+ border-color: var(--taskon-color-border) !important;
2206
+ color: var(--taskon-color-text) !important;
2207
+ }
2208
+
2209
+ .taskon-quest-leaderboard-pagination .taskon-pagination-btn:hover:not(:disabled) {
2210
+ background-color: var(--taskon-color-bg-surface-subtle) !important;
2211
+ border-color: var(--taskon-color-border-secondary) !important;
2212
+ }
2213
+
2199
2214
  /* 排名徽章 */
2215
+
2200
2216
  .taskon-quest-leaderboard-rank {
2201
2217
  display: inline-flex;
2202
2218
  align-items: center;
2203
2219
  font-size: 14px;
2204
2220
  font-weight: 500;
2205
- color: var(--taskon-text-primary, #fff);
2221
+ color: var(--taskon-color-text);
2206
2222
  }
2207
2223
 
2208
2224
  /* Unranked / N/A 状态 */
2225
+
2209
2226
  .taskon-quest-leaderboard-rank--unranked {
2210
2227
  font-size: 14px;
2211
2228
  font-weight: 500;
2212
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
2229
+ color: var(--taskon-color-text-tertiary);
2213
2230
  }
2214
2231
 
2215
2232
  /* 表头带提示框的容器 */
2233
+
2216
2234
  .taskon-quest-leaderboard-header {
2217
2235
  display: inline-flex;
2218
2236
  align-items: center;
@@ -2220,13 +2238,15 @@
2220
2238
  }
2221
2239
 
2222
2240
  /* 层级列 */
2241
+
2223
2242
  .taskon-quest-leaderboard-tier {
2224
2243
  font-size: 14px;
2225
2244
  font-weight: 500;
2226
- color: var(--taskon-text-primary, #fff);
2245
+ color: var(--taskon-color-text);
2227
2246
  }
2228
2247
 
2229
2248
  /* 用户单元格 */
2249
+
2230
2250
  .taskon-quest-leaderboard-user {
2231
2251
  display: flex;
2232
2252
  align-items: center;
@@ -2240,27 +2260,29 @@
2240
2260
  padding: 2px 8px;
2241
2261
  font-size: 12px;
2242
2262
  font-weight: 600;
2243
- color: var(--taskon-bg-body, #111);
2244
- background: var(--taskon-secondary, #00ffa3);
2245
- border-radius: 4px;
2263
+ color: var(--taskon-color-text-on-primary);
2264
+ background: var(--taskon-color-secondary);
2265
+ border-radius: var(--taskon-border-radius-sm);
2246
2266
  }
2247
2267
 
2248
2268
  .taskon-quest-leaderboard-user-name {
2249
2269
  font-size: 14px;
2250
- color: var(--taskon-text-primary, #fff);
2270
+ color: var(--taskon-color-text);
2251
2271
  overflow: hidden;
2252
2272
  text-overflow: ellipsis;
2253
2273
  white-space: nowrap;
2254
2274
  }
2255
2275
 
2256
2276
  /* 积分 */
2277
+
2257
2278
  .taskon-quest-leaderboard-points {
2258
2279
  font-size: 14px;
2259
2280
  font-weight: 500;
2260
- color: var(--taskon-text-primary, #fff);
2281
+ color: var(--taskon-color-text);
2261
2282
  }
2262
2283
 
2263
2284
  /* 奖励 */
2285
+
2264
2286
  .taskon-quest-leaderboard-reward-cell {
2265
2287
  display: inline-flex;
2266
2288
  align-items: center;
@@ -2271,73 +2293,75 @@
2271
2293
  .taskon-quest-leaderboard-reward-type {
2272
2294
  font-size: 14px;
2273
2295
  font-weight: 600;
2274
- color: var(--taskon-text-primary, #fff);
2296
+ color: var(--taskon-color-text);
2275
2297
  }
2276
2298
 
2277
2299
  .taskon-quest-leaderboard-reward {
2278
2300
  font-size: 14px;
2279
2301
  font-weight: 600;
2280
- color: var(--taskon-primary, #cbff01);
2302
+ color: var(--taskon-color-primary);
2281
2303
  }
2282
2304
 
2283
2305
  .taskon-quest-leaderboard-not-qualified {
2284
2306
  font-size: 14px;
2285
2307
  font-weight: 600;
2286
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
2308
+ color: var(--taskon-color-text-tertiary);
2287
2309
  }
2288
2310
 
2289
2311
  .taskon-quest-leaderboard-no-reward {
2290
2312
  font-size: 14px;
2291
- color: var(--taskon-text-tertiary, rgba(255, 255, 255, 0.5));
2313
+ color: var(--taskon-color-text-tertiary);
2292
2314
  }
2293
2315
  /**
2294
- * RewardModuleDialog styles
2295
- * Scope UserCenter module styles inside Quest popup
2316
+ * OperateFooter styles
2317
+ * Following Widget naming convention: .taskon-quest-footer-*
2296
2318
  */
2297
2319
 
2298
- .taskon-quest-reward-dialog .taskon-user-center {
2299
- padding: 32px 0 0 0;
2300
- background: transparent;
2301
- border-radius: 0;
2302
- gap: 24px;
2303
- }
2320
+ /*
2321
+ * Responsive base styles
2322
+ *
2323
+ * Keep mobile breakpoints and fallback patterns centralized here.
2324
+ * Components should reuse these mixins instead of duplicating query logic.
2325
+ */
2304
2326
 
2305
- .taskon-quest-reward-dialog .taskon-my-rewards {
2306
- gap: 24px;
2307
- }
2308
-
2309
- .taskon-quest-reward-dialog .taskon-my-rewards__section {
2310
- gap: 16px;
2311
- }
2312
-
2313
- .taskon-quest-reward-dialog .taskon-points-list {
2314
- background: transparent;
2315
- }
2316
- /**
2317
- * OperateFooter styles
2318
- * Following Widget naming convention: .taskon-quest-footer-*
2319
- */
2327
+ /*
2328
+ * Desktop-up mixin:
2329
+ * 1) Enable desktop enhancement in wider containers
2330
+ * 2) Keep viewport media query as fallback
2331
+ */
2320
2332
 
2321
2333
  /* ============================================================================
2322
2334
  Main Container
2323
2335
  ============================================================================ */
2324
2336
 
2325
2337
  .taskon-quest-footer {
2326
- margin-top: 20px;
2338
+ container-type: inline-size;
2339
+ margin-top: 0;
2327
2340
  position: relative;
2328
2341
  }
2329
2342
 
2330
- @media (max-width: 750px) {
2343
+ @supports (container-type: inline-size) {
2344
+ @container (min-width: 751px) {
2331
2345
  .taskon-quest-footer {
2332
- margin-top: 0;
2346
+ margin-top: 20px;
2347
+ }
2348
+ }
2349
+ }
2350
+
2351
+ @supports not (container-type: inline-size) {
2352
+ @media (min-width: 751px) {
2353
+ .taskon-quest-footer {
2354
+ margin-top: 20px;
2355
+ }
2356
+ }
2333
2357
  }
2334
- }
2335
2358
 
2336
2359
  /* ============================================================================
2337
2360
  Status Card - New Design (v2)
2338
2361
  ============================================================================ */
2339
2362
 
2340
2363
  /* Container for the entire status section */
2364
+
2341
2365
  .taskon-quest-footer-status {
2342
2366
  display: flex;
2343
2367
  flex-direction: column;
@@ -2345,6 +2369,7 @@
2345
2369
  }
2346
2370
 
2347
2371
  /* Title row: title + badge */
2372
+
2348
2373
  .taskon-quest-footer-title-row {
2349
2374
  display: flex;
2350
2375
  align-items: center;
@@ -2352,13 +2377,14 @@
2352
2377
  }
2353
2378
 
2354
2379
  /* Badge styles */
2380
+
2355
2381
  .taskon-quest-footer-badge {
2356
2382
  display: inline-flex;
2357
2383
  align-items: center;
2358
2384
  justify-content: center;
2359
2385
  height: 20px;
2360
2386
  padding: 0 8px;
2361
- border-radius: 12px;
2387
+ border-radius: var(--taskon-border-radius-lg);
2362
2388
  font-size: 12px;
2363
2389
  font-weight: 600;
2364
2390
  line-height: 16px;
@@ -2366,64 +2392,35 @@
2366
2392
  }
2367
2393
 
2368
2394
  .taskon-quest-footer-badge--winner {
2369
- color: #cbff01;
2370
- background: linear-gradient(
2371
- 90deg,
2372
- rgba(203, 255, 1, 0.1) 0%,
2373
- rgba(203, 255, 1, 0.1) 100%
2374
- ),
2375
- linear-gradient(
2376
- 90deg,
2377
- rgba(255, 255, 255, 0.1) 0%,
2378
- rgba(255, 255, 255, 0.1) 100%
2379
- );
2395
+ color: var(--taskon-color-primary);
2396
+ background: var(--taskon-color-primary-bg);
2380
2397
  }
2381
2398
 
2382
2399
  .taskon-quest-footer-badge--qualifier,
2383
2400
  .taskon-quest-footer-badge--submitter {
2384
- color: #1affab;
2385
- background: linear-gradient(
2386
- 90deg,
2387
- rgba(26, 255, 171, 0.1) 0%,
2388
- rgba(26, 255, 171, 0.1) 100%
2389
- ),
2390
- linear-gradient(
2391
- 90deg,
2392
- rgba(255, 255, 255, 0.1) 0%,
2393
- rgba(255, 255, 255, 0.1) 100%
2394
- );
2401
+ color: var(--taskon-color-secondary);
2402
+ background: var(--taskon-color-secondary-bg);
2395
2403
  }
2396
2404
 
2397
2405
  /* Dark content card */
2406
+
2398
2407
  .taskon-quest-footer-card {
2399
2408
  display: flex;
2400
- gap: 12px;
2401
- align-items: center;
2409
+ flex-direction: column;
2410
+ gap: 8px;
2411
+ align-items: stretch;
2402
2412
  padding: 12px;
2403
- border-radius: 8px;
2404
- background: linear-gradient(
2405
- 90deg,
2406
- rgba(255, 255, 255, 0.1) 0%,
2407
- rgba(255, 255, 255, 0.1) 100%
2408
- ),
2409
- linear-gradient(90deg, #0d0d0d 0%, #0d0d0d 100%);
2410
- }
2411
-
2412
- @media (max-width: 750px) {
2413
- .taskon-quest-footer-card {
2414
- flex-direction: column;
2415
- align-items: stretch;
2416
- gap: 8px;
2417
- padding: 3.2vw;
2418
- }
2413
+ border-radius: var(--taskon-border-radius);
2414
+ background: var(--taskon-color-bg-surface-strong);
2419
2415
  }
2420
2416
 
2421
2417
  /* Card message text (for simple messages) */
2418
+
2422
2419
  .taskon-quest-footer-card-message {
2423
2420
  font-size: 16px;
2424
2421
  font-weight: 600;
2425
2422
  line-height: 24px;
2426
- color: #fff;
2423
+ color: var(--taskon-color-text);
2427
2424
  }
2428
2425
 
2429
2426
  /* ============================================================================
@@ -2431,6 +2428,7 @@
2431
2428
  ============================================================================ */
2432
2429
 
2433
2430
  /* Card content area */
2431
+
2434
2432
  .taskon-quest-footer-card-content {
2435
2433
  display: flex;
2436
2434
  flex-direction: column;
@@ -2445,14 +2443,7 @@
2445
2443
  font-size: 20px;
2446
2444
  font-weight: 600;
2447
2445
  line-height: 28px;
2448
- color: #fff;
2449
- }
2450
-
2451
- @media (max-width: 750px) {
2452
- .taskon-quest-footer-title {
2453
- font-size: 4.267vw;
2454
- line-height: 5.867vw;
2455
- }
2446
+ color: var(--taskon-color-text);
2456
2447
  }
2457
2448
 
2458
2449
  .taskon-quest-footer-desc {
@@ -2460,15 +2451,7 @@
2460
2451
  font-size: 14px;
2461
2452
  font-weight: 500;
2462
2453
  line-height: 18px;
2463
- color: rgba(255, 255, 255, 0.6);
2464
- }
2465
-
2466
- @media (max-width: 750px) {
2467
- .taskon-quest-footer-desc {
2468
- margin-top: 0.533vw;
2469
- font-size: 3.2vw;
2470
- line-height: 3.733vw;
2471
- }
2454
+ color: var(--taskon-color-text-tertiary);
2472
2455
  }
2473
2456
 
2474
2457
  /* ============================================================================
@@ -2485,16 +2468,16 @@
2485
2468
  padding: 12px 24px;
2486
2469
  font-size: 16px;
2487
2470
  font-weight: 600;
2488
- color: #000;
2489
- background-color: #cbff01;
2471
+ color: var(--taskon-color-text-on-primary);
2472
+ background-color: var(--taskon-color-primary);
2490
2473
  border: none;
2491
- border-radius: 8px;
2474
+ border-radius: var(--taskon-border-radius);
2492
2475
  cursor: pointer;
2493
2476
  transition: background-color 0.2s ease;
2494
2477
  }
2495
2478
 
2496
2479
  .taskon-quest-footer-connect-btn:hover {
2497
- background-color: #b8e600;
2480
+ background-color: var(--taskon-color-primary-active);
2498
2481
  }
2499
2482
 
2500
2483
  /* ============================================================================
@@ -2506,16 +2489,16 @@
2506
2489
  padding: 12px 24px;
2507
2490
  font-size: 16px;
2508
2491
  font-weight: 600;
2509
- color: #000;
2510
- background-color: #cbff01;
2492
+ color: var(--taskon-color-text-on-primary);
2493
+ background-color: var(--taskon-color-primary);
2511
2494
  border: none;
2512
- border-radius: 8px;
2495
+ border-radius: var(--taskon-border-radius);
2513
2496
  cursor: pointer;
2514
2497
  transition: background-color 0.2s ease, opacity 0.2s ease;
2515
2498
  }
2516
2499
 
2517
2500
  .taskon-quest-footer-complete-btn:hover:not(:disabled) {
2518
- background-color: #b8e600;
2501
+ background-color: var(--taskon-color-primary-active);
2519
2502
  }
2520
2503
 
2521
2504
  .taskon-quest-footer-complete-btn:disabled {
@@ -2523,14 +2506,8 @@
2523
2506
  cursor: not-allowed;
2524
2507
  }
2525
2508
 
2526
- @media (max-width: 750px) {
2527
- .taskon-quest-footer-complete-btn {
2528
- height: 13.33vw;
2529
- font-weight: bold;
2530
- }
2531
- }
2532
-
2533
2509
  /* Complete Button Loading State */
2510
+
2534
2511
  .taskon-quest-footer-complete-btn--loading {
2535
2512
  pointer-events: none;
2536
2513
  }
@@ -2545,8 +2522,8 @@
2545
2522
  .taskon-quest-footer-complete-btn-spinner {
2546
2523
  width: 16px;
2547
2524
  height: 16px;
2548
- border: 2px solid rgba(0, 0, 0, 0.2);
2549
- border-top-color: #000;
2525
+ border: 2px solid var(--taskon-color-border-secondary);
2526
+ border-top-color: var(--taskon-color-text-on-primary);
2550
2527
  border-radius: 50%;
2551
2528
  animation: taskon-spin 0.8s linear infinite;
2552
2529
  }
@@ -2572,14 +2549,7 @@
2572
2549
  .taskon-quest-footer-earned-hint {
2573
2550
  font-size: 14px;
2574
2551
  font-weight: 500;
2575
- color: rgba(0, 0, 0, 0.6);
2576
- }
2577
-
2578
- @media (max-width: 750px) {
2579
- .taskon-quest-footer-earned-placeholder {
2580
- margin-top: 2vw;
2581
- gap: 2.267vw;
2582
- }
2552
+ color: var(--taskon-color-text-tertiary);
2583
2553
  }
2584
2554
 
2585
2555
  /* ============================================================================
@@ -2594,12 +2564,6 @@
2594
2564
  margin-top: 0;
2595
2565
  }
2596
2566
 
2597
- @media (max-width: 750px) {
2598
- .taskon-quest-footer-earned {
2599
- gap: 0;
2600
- }
2601
- }
2602
-
2603
2567
  .taskon-quest-footer-earned-list {
2604
2568
  display: flex;
2605
2569
  flex-direction: column;
@@ -2607,19 +2571,15 @@
2607
2571
  }
2608
2572
 
2609
2573
  /* Single reward inner card */
2574
+
2610
2575
  .taskon-quest-footer-earned-single {
2611
2576
  display: flex;
2612
2577
  flex-direction: column;
2613
2578
  gap: 0;
2614
2579
  padding: 8px;
2615
- border-radius: 8px;
2616
- border: 1px solid rgba(255, 255, 255, 0.04);
2617
- background: linear-gradient(
2618
- 90deg,
2619
- rgba(255, 255, 255, 0.04) 0%,
2620
- rgba(255, 255, 255, 0.04) 100%
2621
- ),
2622
- linear-gradient(90deg, #0d0d0d 0%, #0d0d0d 100%);
2580
+ border-radius: var(--taskon-border-radius);
2581
+ border: 1px solid var(--taskon-color-border-secondary);
2582
+ background: var(--taskon-color-bg-surface-strong);
2623
2583
  }
2624
2584
 
2625
2585
  .taskon-quest-footer-earned-single-row {
@@ -2645,18 +2605,19 @@
2645
2605
  font-size: 18px;
2646
2606
  font-weight: 600;
2647
2607
  line-height: 24px;
2648
- color: #fff;
2608
+ color: var(--taskon-color-text);
2649
2609
  }
2650
2610
 
2651
2611
  .taskon-quest-footer-earned-single-name {
2652
2612
  font-size: 12px;
2653
2613
  font-weight: 500;
2654
2614
  line-height: normal;
2655
- color: rgba(255, 255, 255, 0.4);
2615
+ color: var(--taskon-color-text-disabled);
2656
2616
  text-transform: capitalize;
2657
2617
  }
2658
2618
 
2659
2619
  /* Multi reward row */
2620
+
2660
2621
  .taskon-quest-footer-earned-multi {
2661
2622
  display: flex;
2662
2623
  align-items: center;
@@ -2667,10 +2628,11 @@
2667
2628
  font-size: 16px;
2668
2629
  font-weight: 600;
2669
2630
  line-height: 24px;
2670
- color: #fff;
2631
+ color: var(--taskon-color-text);
2671
2632
  }
2672
2633
 
2673
2634
  /* Redirect mode row (same layout as multi) */
2635
+
2674
2636
  .taskon-quest-footer-earned-redirect {
2675
2637
  display: flex;
2676
2638
  align-items: center;
@@ -2681,37 +2643,27 @@
2681
2643
  font-size: 16px;
2682
2644
  font-weight: 600;
2683
2645
  line-height: 24px;
2684
- color: #fff;
2646
+ color: var(--taskon-color-text);
2685
2647
  flex: 1;
2686
2648
  }
2687
2649
 
2688
2650
  /* Hide first reward on mobile when has multiple rewards */
2689
- @media (max-width: 750px) {
2690
- .taskon-quest-footer-earned-first--hide-mobile {
2691
- display: none;
2692
- }
2651
+
2652
+ .taskon-quest-footer-earned-first--hide-mobile {
2653
+ display: none;
2693
2654
  }
2694
2655
 
2695
2656
  .taskon-quest-footer-earned-more {
2696
2657
  display: flex;
2697
- flex-direction: column;
2698
- justify-content: center;
2699
- align-items: flex-start;
2658
+ flex-direction: row;
2659
+ justify-content: flex-start;
2660
+ align-items: center;
2700
2661
  flex: 1;
2701
- gap: 4px;
2662
+ gap: 12px;
2702
2663
  overflow: hidden;
2703
- border-radius: 4px;
2704
- background-color: #000;
2705
- padding: 4px 8px;
2706
- }
2707
-
2708
- @media (max-width: 750px) {
2709
- .taskon-quest-footer-earned-more {
2710
- flex-direction: row;
2711
- align-items: center;
2712
- gap: 3vw;
2713
- padding: 2vw;
2714
- }
2664
+ border-radius: var(--taskon-border-radius-sm);
2665
+ background-color: var(--taskon-color-bg-inset);
2666
+ padding: 8px;
2715
2667
  }
2716
2668
 
2717
2669
  /* ============================================================================
@@ -2723,17 +2675,11 @@
2723
2675
  flex-direction: column;
2724
2676
  justify-content: center;
2725
2677
  flex: 1;
2726
- border-radius: 4px;
2727
- background-color: #000;
2678
+ border-radius: var(--taskon-border-radius-sm);
2679
+ background-color: var(--taskon-color-bg-inset);
2728
2680
  padding: 4px 8px;
2729
2681
  }
2730
2682
 
2731
- @media (max-width: 750px) {
2732
- .taskon-quest-footer-reward {
2733
- padding: 2vw;
2734
- }
2735
- }
2736
-
2737
2683
  /* ============================================================================
2738
2684
  Base Info (for future implementation)
2739
2685
  ============================================================================ */
@@ -2745,12 +2691,6 @@
2745
2691
  font-size: 18px;
2746
2692
  }
2747
2693
 
2748
- @media (max-width: 750px) {
2749
- .taskon-quest-footer-reward-info {
2750
- gap: 2vw;
2751
- }
2752
- }
2753
-
2754
2694
  .taskon-quest-footer-reward-info img {
2755
2695
  height: 20px;
2756
2696
  width: 20px;
@@ -2758,23 +2698,16 @@
2758
2698
  object-fit: cover;
2759
2699
  }
2760
2700
 
2761
- @media (max-width: 750px) {
2762
- .taskon-quest-footer-reward-info img {
2763
- height: 8vw;
2764
- width: 8vw;
2765
- }
2766
- }
2767
-
2768
2701
  .taskon-quest-footer-reward-amount {
2769
- color: #cbff01;
2702
+ color: var(--taskon-color-primary);
2770
2703
  }
2771
2704
 
2772
2705
  .taskon-quest-footer-reward-type {
2773
- color: #fff;
2706
+ color: var(--taskon-color-text);
2774
2707
  }
2775
2708
 
2776
2709
  .taskon-quest-footer-reward-name {
2777
- color: #cbff01;
2710
+ color: var(--taskon-color-primary);
2778
2711
  }
2779
2712
 
2780
2713
  /* ============================================================================
@@ -2786,13 +2719,13 @@
2786
2719
  align-items: center;
2787
2720
  gap: 4px;
2788
2721
  font-size: 14px;
2789
- color: rgba(255, 255, 255, 0.6);
2722
+ color: var(--taskon-color-text-tertiary);
2790
2723
  cursor: pointer;
2791
2724
  transition: color 0.2s ease;
2792
2725
  }
2793
2726
 
2794
2727
  .taskon-quest-footer-action-btn:not(.taskon-quest-footer-action-btn--disabled):hover {
2795
- color: rgba(255, 255, 255, 0.8);
2728
+ color: var(--taskon-color-text-secondary);
2796
2729
  }
2797
2730
 
2798
2731
  .taskon-quest-footer-action-btn--disabled {
@@ -2807,16 +2740,16 @@
2807
2740
  padding: 4px 12px;
2808
2741
  font-size: 14px;
2809
2742
  font-weight: 600;
2810
- color: #000;
2811
- background-color: #cbff01;
2743
+ color: var(--taskon-color-text-on-primary);
2744
+ background-color: var(--taskon-color-primary);
2812
2745
  border: none;
2813
- border-radius: 4px;
2746
+ border-radius: var(--taskon-border-radius-sm);
2814
2747
  cursor: pointer;
2815
2748
  transition: background-color 0.2s ease, opacity 0.2s ease;
2816
2749
  }
2817
2750
 
2818
2751
  .taskon-quest-footer-claim-btn:hover:not(:disabled) {
2819
- background-color: #b8e600;
2752
+ background-color: var(--taskon-color-primary-active);
2820
2753
  }
2821
2754
 
2822
2755
  .taskon-quest-footer-claim-btn:disabled {
@@ -2831,8 +2764,8 @@
2831
2764
  .taskon-quest-footer-claim-btn-spinner {
2832
2765
  width: 14px;
2833
2766
  height: 14px;
2834
- border: 2px solid rgba(0, 0, 0, 0.2);
2835
- border-top-color: #000;
2767
+ border: 2px solid var(--taskon-color-border-secondary);
2768
+ border-top-color: var(--taskon-color-text-on-primary);
2836
2769
  border-radius: 50%;
2837
2770
  animation: taskon-spin 0.8s linear infinite;
2838
2771
  }
@@ -2844,7 +2777,7 @@
2844
2777
  .taskon-quest-footer-earned-more-text {
2845
2778
  font-size: 14px;
2846
2779
  font-weight: 600;
2847
- color: #fff;
2780
+ color: var(--taskon-color-text);
2848
2781
  }
2849
2782
 
2850
2783
  /* ============================================================================
@@ -2874,9 +2807,9 @@
2874
2807
  padding: 2px 6px;
2875
2808
  font-size: 12px;
2876
2809
  font-weight: 500;
2877
- color: #000;
2878
- background-color: rgba(203, 255, 1, 0.8);
2879
- border-radius: 2px;
2810
+ color: var(--taskon-color-text-on-primary);
2811
+ background-color: var(--taskon-color-primary);
2812
+ border-radius: var(--taskon-border-radius-sm);
2880
2813
  }
2881
2814
 
2882
2815
  .taskon-quest-footer-reward-badge-icon {
@@ -2886,27 +2819,12 @@
2886
2819
  object-fit: cover;
2887
2820
  }
2888
2821
 
2889
- @media (max-width: 750px) {
2890
- .taskon-quest-footer-reward-badge-icon {
2891
- margin-left: 1.067vw;
2892
- width: 3.2vw;
2893
- height: 3.2vw;
2894
- }
2895
- }
2896
-
2897
2822
  .taskon-quest-footer-reward-badge-line {
2898
2823
  margin-left: 4px;
2899
2824
  width: 1px;
2900
2825
  height: 10px;
2901
2826
  opacity: 0.1;
2902
- background: #d9d9d9;
2903
- }
2904
-
2905
- @media (max-width: 750px) {
2906
- .taskon-quest-footer-reward-badge-line {
2907
- margin-left: 0.8vw;
2908
- height: 2.267vw;
2909
- }
2827
+ background: var(--taskon-color-border-secondary);
2910
2828
  }
2911
2829
 
2912
2830
  /* ============================================================================
@@ -2921,11 +2839,11 @@
2921
2839
  }
2922
2840
 
2923
2841
  .taskon-quest-footer-reward-tx-label {
2924
- color: rgba(255, 255, 255, 0.6);
2842
+ color: var(--taskon-color-text-tertiary);
2925
2843
  }
2926
2844
 
2927
2845
  .taskon-quest-footer-reward-tx-link {
2928
- color: #fff;
2846
+ color: var(--taskon-color-text);
2929
2847
  text-decoration: none;
2930
2848
  }
2931
2849
 
@@ -2940,7 +2858,7 @@
2940
2858
  .taskon-quest-footer-reward-dropping {
2941
2859
  margin-top: 4px;
2942
2860
  font-size: 14px;
2943
- color: rgba(255, 255, 255, 0.6);
2861
+ color: var(--taskon-color-text-tertiary);
2944
2862
  }
2945
2863
 
2946
2864
  /* ============================================================================
@@ -2954,19 +2872,12 @@
2954
2872
  object-fit: cover;
2955
2873
  }
2956
2874
 
2957
- @media (max-width: 750px) {
2958
- .taskon-quest-footer-reward-chain-icon {
2959
- width: 8vw;
2960
- height: 8vw;
2961
- }
2962
- }
2963
-
2964
2875
  /* ============================================================================
2965
2876
  Detail Panel Dialog
2966
2877
  ============================================================================ */
2967
2878
 
2968
2879
  .taskon-quest-footer-detail-dialog {
2969
- background-color: #1a1a1a;
2880
+ background-color: var(--taskon-color-bg-surface);
2970
2881
  }
2971
2882
 
2972
2883
  .taskon-quest-footer-detail-panel {
@@ -2976,29 +2887,16 @@
2976
2887
  .taskon-quest-footer-detail-title {
2977
2888
  font-size: 22px;
2978
2889
  font-weight: 600;
2979
- color: #fff;
2890
+ color: var(--taskon-color-text);
2980
2891
  margin: 0 0 20px 0;
2981
2892
  }
2982
2893
 
2983
- @media (max-width: 750px) {
2984
- .taskon-quest-footer-detail-title {
2985
- font-size: 4.8vw;
2986
- margin-bottom: 4vw;
2987
- }
2988
- }
2989
-
2990
2894
  .taskon-quest-footer-detail-content {
2991
2895
  display: flex;
2992
2896
  flex-direction: column;
2993
2897
  gap: 24px;
2994
2898
  }
2995
2899
 
2996
- @media (max-width: 750px) {
2997
- .taskon-quest-footer-detail-content {
2998
- gap: 5vw;
2999
- }
3000
- }
3001
-
3002
2900
  /* ============================================================================
3003
2901
  Selection Item
3004
2902
  ============================================================================ */
@@ -3011,16 +2909,10 @@
3011
2909
  margin-top: 24px;
3012
2910
  }
3013
2911
 
3014
- @media (max-width: 750px) {
3015
- .taskon-quest-footer-selection-item + .taskon-quest-footer-selection-item {
3016
- margin-top: 5vw;
3017
- }
3018
- }
3019
-
3020
2912
  .taskon-quest-footer-selection-label {
3021
2913
  font-size: 16px;
3022
2914
  font-weight: 500;
3023
- color: rgba(255, 255, 255, 0.8);
2915
+ color: var(--taskon-color-text-secondary);
3024
2916
  }
3025
2917
 
3026
2918
  .taskon-quest-footer-selection-rewards {
@@ -3030,26 +2922,21 @@
3030
2922
  gap: 24px;
3031
2923
  }
3032
2924
 
3033
- @media (max-width: 750px) {
3034
- .taskon-quest-footer-selection-rewards {
3035
- margin-top: 2vw;
3036
- gap: 5vw;
3037
- }
3038
- }
3039
-
3040
2925
  /* Selection Item - Transparent reward card background */
2926
+
3041
2927
  .taskon-quest-footer-selection-rewards .taskon-quest-footer-reward {
3042
2928
  background: transparent;
3043
2929
  }
3044
2930
 
3045
2931
  /* Selection Failed */
2932
+
3046
2933
  .taskon-quest-footer-selection-failed {
3047
2934
  display: flex;
3048
2935
  align-items: center;
3049
2936
  gap: 6px;
3050
2937
  font-size: 14px;
3051
2938
  line-height: 18px;
3052
- color: rgba(255, 255, 255, 0.6);
2939
+ color: var(--taskon-color-text-tertiary);
3053
2940
  }
3054
2941
 
3055
2942
  .taskon-quest-footer-selection-failed-icon {
@@ -3058,6 +2945,7 @@
3058
2945
  }
3059
2946
 
3060
2947
  /* Selection Wait */
2948
+
3061
2949
  .taskon-quest-footer-selection-wait {
3062
2950
  display: flex;
3063
2951
  align-items: center;
@@ -3065,7 +2953,7 @@
3065
2953
  font-size: 14px;
3066
2954
  font-weight: 500;
3067
2955
  line-height: 16px;
3068
- color: #fff;
2956
+ color: var(--taskon-color-text);
3069
2957
  }
3070
2958
 
3071
2959
  .taskon-quest-footer-selection-wait-icon {
@@ -3078,24 +2966,72 @@
3078
2966
  ============================================================================ */
3079
2967
 
3080
2968
  .taskon-quest-footer-detail-bonus {
3081
- margin-top: 24px;
3082
- padding-top: 24px;
2969
+ margin-top: 20px;
2970
+ padding-top: 0;
3083
2971
  display: flex;
3084
- border-top: 1px solid rgba(255, 255, 255, 0.06);
2972
+ border-top: none;
3085
2973
  }
3086
2974
 
3087
- @media (max-width: 750px) {
2975
+ @supports (container-type: inline-size) {
2976
+ @container (min-width: 751px) {
2977
+ .taskon-quest-footer-card {
2978
+ flex-direction: row;
2979
+ align-items: center;
2980
+ gap: 12px;
2981
+ }
2982
+
2983
+ .taskon-quest-footer-earned-first--hide-mobile {
2984
+ display: flex;
2985
+ }
2986
+
2987
+ .taskon-quest-footer-earned-more {
2988
+ flex-direction: column;
2989
+ justify-content: center;
2990
+ align-items: flex-start;
2991
+ gap: 4px;
2992
+ padding: 4px 8px;
2993
+ }
2994
+
3088
2995
  .taskon-quest-footer-detail-bonus {
3089
- margin-top: 5vw;
3090
- padding-top: 0;
3091
- border-top: none;
2996
+ margin-top: 24px;
2997
+ padding-top: 24px;
2998
+ border-top: 1px solid var(--taskon-color-border-secondary);
2999
+ }
3000
+ }
3001
+ }
3002
+
3003
+ @supports not (container-type: inline-size) {
3004
+ @media (min-width: 751px) {
3005
+ .taskon-quest-footer-card {
3006
+ flex-direction: row;
3007
+ align-items: center;
3008
+ gap: 12px;
3009
+ }
3010
+
3011
+ .taskon-quest-footer-earned-first--hide-mobile {
3012
+ display: flex;
3013
+ }
3014
+
3015
+ .taskon-quest-footer-earned-more {
3016
+ flex-direction: column;
3017
+ justify-content: center;
3018
+ align-items: flex-start;
3019
+ gap: 4px;
3020
+ padding: 4px 8px;
3021
+ }
3022
+
3023
+ .taskon-quest-footer-detail-bonus {
3024
+ margin-top: 24px;
3025
+ padding-top: 24px;
3026
+ border-top: 1px solid var(--taskon-color-border-secondary);
3027
+ }
3028
+ }
3092
3029
  }
3093
- }
3094
3030
 
3095
3031
  .taskon-quest-footer-detail-bonus-label {
3096
3032
  font-size: 16px;
3097
3033
  font-weight: 500;
3098
- color: rgba(255, 255, 255, 0.8);
3034
+ color: var(--taskon-color-text-secondary);
3099
3035
  }
3100
3036
 
3101
3037
  .taskon-quest-footer-detail-bonus-right {
@@ -3107,19 +3043,13 @@
3107
3043
  font-size: 14px;
3108
3044
  font-weight: 600;
3109
3045
  text-align: right;
3110
- color: #fff;
3046
+ color: var(--taskon-color-text);
3111
3047
  }
3112
3048
 
3113
3049
  .taskon-quest-footer-detail-bonus-item + .taskon-quest-footer-detail-bonus-item {
3114
3050
  margin-top: 8px;
3115
3051
  }
3116
3052
 
3117
- @media (max-width: 750px) {
3118
- .taskon-quest-footer-detail-bonus-item + .taskon-quest-footer-detail-bonus-item {
3119
- margin-top: 2vw;
3120
- }
3121
- }
3122
-
3123
3053
  /* ============================================================================
3124
3054
  Action Button - Arrow icon
3125
3055
  ============================================================================ */
@@ -3130,6 +3060,7 @@
3130
3060
  }
3131
3061
 
3132
3062
  /* Link style for ActionButton */
3063
+
3133
3064
  a.taskon-quest-footer-action-btn {
3134
3065
  text-decoration: none;
3135
3066
  }
@@ -3153,6 +3084,7 @@ a.taskon-quest-footer-action-btn {
3153
3084
  .taskon-task-validation-dialog-icon {
3154
3085
  width: 48px;
3155
3086
  height: 48px;
3087
+ color: var(--taskon-color-warning);
3156
3088
  }
3157
3089
 
3158
3090
  .taskon-task-validation-dialog-message {
@@ -3160,7 +3092,7 @@ a.taskon-quest-footer-action-btn {
3160
3092
  margin-bottom: 16px;
3161
3093
  font-size: 16px;
3162
3094
  line-height: 1.5;
3163
- color: rgba(255, 255, 255, 0.9);
3095
+ color: var(--taskon-color-text);
3164
3096
  }
3165
3097
 
3166
3098
  .taskon-task-validation-dialog-progress {
@@ -3168,7 +3100,7 @@ a.taskon-quest-footer-action-btn {
3168
3100
  margin-bottom: 16px;
3169
3101
  font-size: 14px;
3170
3102
  line-height: 1.5;
3171
- color: rgba(255, 255, 255, 0.6);
3103
+ color: var(--taskon-color-text-tertiary);
3172
3104
  }
3173
3105
 
3174
3106
  .taskon-task-validation-dialog-btn {
@@ -3176,9 +3108,9 @@ a.taskon-quest-footer-action-btn {
3176
3108
  max-width: 200px;
3177
3109
  padding: 12px 24px;
3178
3110
  border: none;
3179
- border-radius: 8px;
3180
- background: #cbff01;
3181
- color: #000;
3111
+ border-radius: var(--taskon-border-radius);
3112
+ background: var(--taskon-color-primary);
3113
+ color: var(--taskon-color-text-on-primary);
3182
3114
  font-size: 16px;
3183
3115
  font-weight: 600;
3184
3116
  cursor: pointer;
@@ -3206,7 +3138,7 @@ a.taskon-quest-footer-action-btn {
3206
3138
  margin-bottom: 20px;
3207
3139
  font-size: 14px;
3208
3140
  line-height: 1.6;
3209
- color: rgba(255, 255, 255, 0.7);
3141
+ color: var(--taskon-color-text-tertiary);
3210
3142
  }
3211
3143
 
3212
3144
  .taskon-reward-bind-list {
@@ -3220,20 +3152,20 @@ a.taskon-quest-footer-action-btn {
3220
3152
  align-items: center;
3221
3153
  justify-content: space-between;
3222
3154
  padding: 12px 16px;
3223
- background: rgba(255, 255, 255, 0.05);
3224
- border-radius: 8px;
3225
- border: 1px solid rgba(255, 255, 255, 0.1);
3155
+ background: var(--taskon-color-bg-surface-strong);
3156
+ border-radius: var(--taskon-border-radius);
3157
+ border: 1px solid var(--taskon-color-border);
3226
3158
  }
3227
3159
 
3228
3160
  .taskon-reward-bind-item--bound {
3229
- border-color: rgba(26, 255, 171, 0.3);
3230
- background: rgba(26, 255, 171, 0.05);
3161
+ border-color: var(--taskon-color-secondary);
3162
+ background: var(--taskon-color-secondary-bg);
3231
3163
  }
3232
3164
 
3233
3165
  .taskon-reward-bind-item-label {
3234
3166
  font-size: 14px;
3235
3167
  font-weight: 500;
3236
- color: rgba(255, 255, 255, 0.9);
3168
+ color: var(--taskon-color-text);
3237
3169
  }
3238
3170
 
3239
3171
  .taskon-reward-bind-item-status {
@@ -3241,7 +3173,7 @@ a.taskon-quest-footer-action-btn {
3241
3173
  align-items: center;
3242
3174
  gap: 6px;
3243
3175
  font-size: 13px;
3244
- color: #1affab;
3176
+ color: var(--taskon-color-secondary);
3245
3177
  }
3246
3178
 
3247
3179
  .taskon-reward-bind-item-btn {
@@ -3250,9 +3182,9 @@ a.taskon-quest-footer-action-btn {
3250
3182
  gap: 6px;
3251
3183
  padding: 8px 16px;
3252
3184
  border: none;
3253
- border-radius: 6px;
3254
- background: #cbff01;
3255
- color: #000;
3185
+ border-radius: var(--taskon-border-radius-sm);
3186
+ background: var(--taskon-color-primary);
3187
+ color: var(--taskon-color-text-on-primary);
3256
3188
  font-size: 13px;
3257
3189
  font-weight: 600;
3258
3190
  cursor: pointer;
@@ -3287,10 +3219,10 @@ a.taskon-quest-footer-action-btn {
3287
3219
  width: 100%;
3288
3220
  margin-top: 20px;
3289
3221
  padding: 14px 24px;
3290
- border: 1px solid rgba(255, 255, 255, 0.2);
3291
- border-radius: 8px;
3222
+ border: 1px solid var(--taskon-color-border);
3223
+ border-radius: var(--taskon-border-radius);
3292
3224
  background: transparent;
3293
- color: rgba(255, 255, 255, 0.9);
3225
+ color: var(--taskon-color-text);
3294
3226
  font-size: 14px;
3295
3227
  font-weight: 500;
3296
3228
  cursor: pointer;
@@ -3298,8 +3230,8 @@ a.taskon-quest-footer-action-btn {
3298
3230
  }
3299
3231
 
3300
3232
  .taskon-reward-bind-skip-btn:hover {
3301
- background: rgba(255, 255, 255, 0.05);
3302
- border-color: rgba(255, 255, 255, 0.3);
3233
+ background: var(--taskon-color-bg-surface-strong);
3234
+ border-color: var(--taskon-color-border-secondary);
3303
3235
  }
3304
3236
  /**
3305
3237
  * DiscordBindDialog Styles
@@ -3328,7 +3260,7 @@ a.taskon-quest-footer-action-btn {
3328
3260
  margin-bottom: 24px;
3329
3261
  font-size: 14px;
3330
3262
  line-height: 1.6;
3331
- color: rgba(255, 255, 255, 0.7);
3263
+ color: var(--taskon-color-text-tertiary);
3332
3264
  }
3333
3265
 
3334
3266
  .taskon-discord-bind-dialog-buttons {
@@ -3341,7 +3273,7 @@ a.taskon-quest-footer-action-btn {
3341
3273
  .taskon-discord-bind-dialog-btn {
3342
3274
  width: 100%;
3343
3275
  padding: 14px 24px;
3344
- border-radius: 8px;
3276
+ border-radius: var(--taskon-border-radius);
3345
3277
  font-size: 14px;
3346
3278
  font-weight: 600;
3347
3279
  cursor: pointer;
@@ -3350,8 +3282,8 @@ a.taskon-quest-footer-action-btn {
3350
3282
 
3351
3283
  .taskon-discord-bind-dialog-btn--primary {
3352
3284
  border: none;
3353
- background: #cbff01;
3354
- color: #000;
3285
+ background: var(--taskon-color-primary);
3286
+ color: var(--taskon-color-text-on-primary);
3355
3287
  }
3356
3288
 
3357
3289
  .taskon-discord-bind-dialog-btn--primary:hover {
@@ -3359,46 +3291,49 @@ a.taskon-quest-footer-action-btn {
3359
3291
  }
3360
3292
 
3361
3293
  .taskon-discord-bind-dialog-btn--secondary {
3362
- border: 1px solid rgba(255, 255, 255, 0.2);
3294
+ border: 1px solid var(--taskon-color-border);
3363
3295
  background: transparent;
3364
- color: rgba(255, 255, 255, 0.9);
3296
+ color: var(--taskon-color-text);
3365
3297
  }
3366
3298
 
3367
3299
  .taskon-discord-bind-dialog-btn--secondary:hover {
3368
- background: rgba(255, 255, 255, 0.05);
3369
- border-color: rgba(255, 255, 255, 0.3);
3300
+ background: var(--taskon-color-bg-surface-strong);
3301
+ border-color: var(--taskon-color-border-secondary);
3370
3302
  }
3371
3303
  /**
3372
3304
  * WinnersRow 组件样式
3373
3305
  * 与 QuestRewards 卡片样式保持一致
3374
3306
  */
3375
3307
 
3376
- /* WinnersRow 容器 - 纯色背景,与 reward 卡片一致 */
3308
+ /* WinnersRow 容器 - 使用主题背景层级 */
3309
+
3377
3310
  .taskon-quest-winners-row {
3378
3311
  display: flex;
3379
3312
  align-items: center;
3380
3313
  width: 100%;
3381
3314
  padding: 16px;
3382
- border-radius: 10px;
3315
+ border-radius: var(--taskon-border-radius-lg);
3383
3316
  border: none;
3384
3317
  cursor: pointer;
3385
- background: rgba(255, 255, 255, 0.04);
3318
+ background: var(--taskon-color-bg-surface-subtle);
3386
3319
  transition: background-color 0.2s ease;
3387
3320
  }
3388
3321
 
3389
3322
  .taskon-quest-winners-row:hover {
3390
- background: rgba(255, 255, 255, 0.08);
3323
+ background: var(--taskon-color-bg-surface-strong);
3391
3324
  }
3392
3325
 
3393
3326
  /* Winners 标签 */
3327
+
3394
3328
  .taskon-quest-winners-row-label {
3395
3329
  font-size: 18px;
3396
3330
  font-weight: 500;
3397
3331
  line-height: 23px;
3398
- color: #ffffff;
3332
+ color: var(--taskon-color-text);
3399
3333
  }
3400
3334
 
3401
3335
  /* 数量 */
3336
+
3402
3337
  .taskon-quest-winners-row-count {
3403
3338
  flex: 1;
3404
3339
  margin-left: 8px;
@@ -3406,14 +3341,15 @@ a.taskon-quest-footer-action-btn {
3406
3341
  font-weight: 600;
3407
3342
  line-height: 23px;
3408
3343
  text-align: left;
3409
- color: #00ffa3;
3344
+ color: var(--taskon-color-secondary);
3410
3345
  }
3411
3346
 
3412
3347
  /* 右箭头图标 */
3348
+
3413
3349
  .taskon-quest-winners-row-arrow {
3414
3350
  width: 16px;
3415
3351
  height: 16px;
3416
- color: rgba(255, 255, 255, 0.6);
3352
+ color: var(--taskon-color-text-secondary);
3417
3353
  flex-shrink: 0;
3418
3354
  }
3419
3355
  /**
@@ -3429,31 +3365,33 @@ a.taskon-quest-footer-action-btn {
3429
3365
  /* ==========================================================================
3430
3366
  Container - Match reward module style
3431
3367
  ========================================================================== */
3368
+
3432
3369
  .taskon-winners {
3433
- border-radius: 10px;
3434
- background: var(--taskon-bg-card, rgba(255, 255, 255, 0.04));
3370
+ border-radius: var(--taskon-border-radius-lg);
3371
+ background: var(--taskon-color-bg-surface-subtle);
3435
3372
  overflow: hidden;
3436
3373
  }
3437
3374
 
3438
3375
  /* ==========================================================================
3439
3376
  Status Alert (POW Reviewing / Drawing Winners)
3440
3377
  ========================================================================== */
3378
+
3441
3379
  .taskon-winners-alert {
3442
3380
  display: flex;
3443
3381
  align-items: center;
3444
3382
  justify-content: center;
3445
3383
  gap: 8px;
3446
3384
  padding: 16px;
3447
- background: rgba(255, 255, 255, 0.05);
3385
+ background: var(--taskon-color-bg-surface-strong);
3448
3386
  font-size: 16px;
3449
3387
  font-weight: 500;
3450
- color: rgba(255, 255, 255, 0.7);
3388
+ color: var(--taskon-color-text-secondary);
3451
3389
  text-decoration: none;
3452
3390
  transition: color 0.2s ease;
3453
3391
  }
3454
3392
 
3455
3393
  .taskon-winners-alert:hover {
3456
- color: rgba(255, 255, 255, 0.9);
3394
+ color: var(--taskon-color-text);
3457
3395
  }
3458
3396
 
3459
3397
  .taskon-winners-alert-icon {
@@ -3468,7 +3406,7 @@ a.taskon-quest-footer-action-btn {
3468
3406
 
3469
3407
  .taskon-winners-alert-community {
3470
3408
  font-weight: 600;
3471
- color: rgba(255, 255, 255, 0.9);
3409
+ color: var(--taskon-color-text);
3472
3410
  }
3473
3411
 
3474
3412
  .taskon-winners-alert-link-icon {
@@ -3480,6 +3418,7 @@ a.taskon-quest-footer-action-btn {
3480
3418
  /* ==========================================================================
3481
3419
  POW Review Info Card
3482
3420
  ========================================================================== */
3421
+
3483
3422
  .taskon-winners-content {
3484
3423
  padding: 16px;
3485
3424
  }
@@ -3487,27 +3426,28 @@ a.taskon-quest-footer-action-btn {
3487
3426
  .taskon-winners-pow-info {
3488
3427
  font-size: 12px;
3489
3428
  line-height: 1.5;
3490
- color: rgba(255, 212, 101, 0.6);
3429
+ color: var(--taskon-color-warning);
3491
3430
  margin-bottom: 16px;
3492
3431
  }
3493
3432
 
3494
3433
  .taskon-winners-pow-info-community {
3495
3434
  font-weight: 500;
3496
- color: #ffd465;
3435
+ color: var(--taskon-color-warning);
3497
3436
  }
3498
3437
 
3499
3438
  .taskon-winners-pow-info-only {
3500
3439
  font-weight: 500;
3501
- color: #ffd465;
3440
+ color: var(--taskon-color-warning);
3502
3441
  }
3503
3442
 
3504
3443
  /* ==========================================================================
3505
3444
  Status Info Card - Match reward module card style
3506
3445
  ========================================================================== */
3446
+
3507
3447
  .taskon-winners-card {
3508
3448
  padding: 16px;
3509
- border-radius: 8px;
3510
- background: var(--taskon-bg-card, rgba(255, 255, 255, 0.04));
3449
+ border-radius: var(--taskon-border-radius);
3450
+ background: var(--taskon-color-bg-surface-subtle);
3511
3451
  display: flex;
3512
3452
  flex-direction: column;
3513
3453
  gap: 16px;
@@ -3522,17 +3462,17 @@ a.taskon-quest-footer-action-btn {
3522
3462
 
3523
3463
  .taskon-winners-card-label {
3524
3464
  font-weight: 500;
3525
- color: rgba(255, 255, 255, 0.7);
3465
+ color: var(--taskon-color-text-secondary);
3526
3466
  }
3527
3467
 
3528
3468
  .taskon-winners-card-value {
3529
3469
  font-weight: 500;
3530
- color: #9aff73;
3470
+ color: var(--taskon-color-success);
3531
3471
  }
3532
3472
 
3533
3473
  .taskon-winners-card-value--primary {
3534
3474
  font-weight: 600;
3535
- color: var(--taskon-primary, #cbff01);
3475
+ color: var(--taskon-color-primary);
3536
3476
  }
3537
3477
 
3538
3478
  /* ==========================================================================
@@ -3540,6 +3480,7 @@ a.taskon-quest-footer-action-btn {
3540
3480
  ========================================================================== */
3541
3481
 
3542
3482
  /* Ensure winners row integrates well with status card */
3483
+
3543
3484
  .taskon-winners-card .taskon-quest-winners-row {
3544
3485
  padding: 0;
3545
3486
  background: transparent;
@@ -3550,49 +3491,28 @@ a.taskon-quest-footer-action-btn {
3550
3491
  * @design 参考 Figma 设计稿
3551
3492
  */
3552
3493
 
3553
- /* ============================================================================
3554
- CSS 变量定义
3555
- ============================================================================ */
3494
+ /*
3495
+ * Responsive base styles
3496
+ *
3497
+ * Keep mobile breakpoints and fallback patterns centralized here.
3498
+ * Components should reuse these mixins instead of duplicating query logic.
3499
+ */
3556
3500
 
3557
- .taskon-quest {
3558
- /* 颜色系统 */
3559
- --taskon-quest-bg-body: #111111;
3560
- --taskon-quest-text-lightest: #ffffff;
3561
- --taskon-quest-text-lighter: rgba(255, 255, 255, 0.8);
3562
- --taskon-quest-text-light: rgba(255, 255, 255, 0.6);
3563
- --taskon-quest-text-dark: rgba(255, 255, 255, 0.4);
3564
- --taskon-quest-text-darkest: rgba(255, 255, 255, 0.1);
3565
- --taskon-quest-text-invisible: rgba(255, 255, 255, 0.04);
3566
- --taskon-quest-primary: #cbff01;
3567
- --taskon-quest-secondary: #1affab;
3568
- --taskon-quest-link: #58afff;
3569
- --taskon-quest-button-primary-color: #000000;
3570
-
3571
- /* 间距系统 */
3572
- --taskon-quest-spacing-xxs: 4px;
3573
- --taskon-quest-spacing-xs: 8px;
3574
- --taskon-quest-spacing-s: 12px;
3575
- --taskon-quest-spacing-m: 16px;
3576
- --taskon-quest-spacing-l: 20px;
3577
- --taskon-quest-spacing-xl: 24px;
3578
- --taskon-quest-spacing-xxl: 32px;
3579
- --taskon-quest-spacing-3xl: 40px;
3580
-
3581
- /* 圆角系统 */
3582
- --taskon-quest-radius-s: 4px;
3583
- --taskon-quest-radius-m: 6px;
3584
- --taskon-quest-radius-l: 8px;
3585
- --taskon-quest-radius-xl: 12px;
3586
- }
3501
+ /*
3502
+ * Desktop-up mixin:
3503
+ * 1) Enable desktop enhancement in wider containers
3504
+ * 2) Keep viewport media query as fallback
3505
+ */
3587
3506
 
3588
3507
  /* ============================================================================
3589
3508
  Quest Widget 根容器
3590
3509
  ============================================================================ */
3591
3510
 
3592
3511
  .taskon-quest {
3512
+ container-type: inline-size;
3593
3513
  font-size: 16px;
3594
3514
  line-height: 1.5;
3595
- color: var(--taskon-quest-text-lightest);
3515
+ color: var(--taskon-color-text);
3596
3516
  }
3597
3517
 
3598
3518
  /* ============================================================================
@@ -3600,27 +3520,140 @@ a.taskon-quest-footer-action-btn {
3600
3520
  ============================================================================ */
3601
3521
 
3602
3522
  .taskon-quest-loading {
3523
+ display: flex;
3524
+ width: 100%;
3525
+ }
3526
+
3527
+ .taskon-quest-skeleton-layout {
3528
+ width: 100%;
3529
+ }
3530
+
3531
+ .taskon-quest-skeleton-content,
3532
+ .taskon-quest-skeleton-sidebar {
3533
+ width: 100%;
3534
+ gap: var(--taskon-spacing-md);
3535
+ }
3536
+
3537
+ .taskon-quest-skeleton-group {
3538
+ width: 100%;
3603
3539
  display: flex;
3604
3540
  flex-direction: column;
3605
- align-items: center;
3606
- justify-content: center;
3607
- padding: 48px 24px;
3608
3541
  gap: 12px;
3609
- color: var(--taskon-quest-text-light);
3610
3542
  }
3611
3543
 
3612
- .taskon-quest-loading-spinner {
3613
- width: 32px;
3614
- height: 32px;
3615
- border: 3px solid var(--taskon-quest-text-darkest);
3616
- border-top-color: var(--taskon-quest-primary);
3617
- border-radius: 50%;
3618
- animation: taskon-quest-spin 1s linear infinite;
3544
+ .taskon-quest-skeleton-group--tasks {
3545
+ gap: 14px;
3546
+ }
3547
+
3548
+ .taskon-quest-skeleton-content-divider {
3549
+ margin: 8px 0;
3550
+ }
3551
+
3552
+ .taskon-quest-skeleton-block {
3553
+ position: relative;
3554
+ overflow: hidden;
3555
+ border-radius: var(--taskon-border-radius-lg);
3556
+ background: var(--taskon-color-bg-surface-subtle);
3557
+ }
3558
+
3559
+ .taskon-quest-skeleton-block::after {
3560
+ content: "";
3561
+ position: absolute;
3562
+ inset: 0;
3563
+ transform: translateX(-100%);
3564
+ background: linear-gradient(
3565
+ 90deg,
3566
+ transparent 0%,
3567
+ var(--taskon-color-bg-surface-strong) 50%,
3568
+ transparent 100%
3569
+ );
3570
+ animation: taskon-quest-skeleton-shimmer 1.4s ease-in-out infinite;
3619
3571
  }
3620
3572
 
3621
- @keyframes taskon-quest-spin {
3573
+ .taskon-quest-skeleton-title {
3574
+ width: min(72%, 420px);
3575
+ height: 34px;
3576
+ }
3577
+
3578
+ .taskon-quest-skeleton-meta {
3579
+ width: min(44%, 280px);
3580
+ height: 20px;
3581
+ }
3582
+
3583
+ .taskon-quest-skeleton-banner {
3584
+ width: 100%;
3585
+ height: 168px;
3586
+ border-radius: var(--taskon-border-radius-lg);
3587
+ }
3588
+
3589
+ .taskon-quest-skeleton-description {
3590
+ width: 100%;
3591
+ height: 14px;
3592
+ }
3593
+
3594
+ .taskon-quest-skeleton-description--short {
3595
+ width: 66%;
3596
+ }
3597
+
3598
+ .taskon-quest-skeleton-section-title {
3599
+ width: 128px;
3600
+ height: 28px;
3601
+ }
3602
+
3603
+ .taskon-quest-skeleton-progress {
3604
+ width: 182px;
3605
+ height: 20px;
3606
+ border-radius: 999px;
3607
+ }
3608
+
3609
+ .taskon-quest-skeleton-task {
3610
+ width: 100%;
3611
+ height: 74px;
3612
+ border-radius: var(--taskon-border-radius-lg);
3613
+ }
3614
+
3615
+ .taskon-quest-skeleton-complete-button {
3616
+ width: 100%;
3617
+ height: 48px;
3618
+ border-radius: var(--taskon-border-radius);
3619
+ }
3620
+
3621
+ .taskon-quest-skeleton-divider {
3622
+ background: var(--taskon-color-border-secondary);
3623
+ }
3624
+
3625
+ .taskon-quest-skeleton-panel {
3626
+ display: flex;
3627
+ flex-direction: column;
3628
+ gap: 12px;
3629
+ padding: 20px;
3630
+ border: 1px solid var(--taskon-color-border-secondary);
3631
+ border-radius: var(--taskon-border-radius-lg);
3632
+ }
3633
+
3634
+ .taskon-quest-skeleton-panel-title {
3635
+ width: 45%;
3636
+ height: 22px;
3637
+ }
3638
+
3639
+ .taskon-quest-skeleton-panel-line {
3640
+ width: 100%;
3641
+ height: 14px;
3642
+ }
3643
+
3644
+ .taskon-quest-skeleton-panel-line--short {
3645
+ width: 72%;
3646
+ }
3647
+
3648
+ @keyframes taskon-quest-skeleton-shimmer {
3622
3649
  to {
3623
- transform: rotate(360deg);
3650
+ transform: translateX(100%);
3651
+ }
3652
+ }
3653
+
3654
+ @media (prefers-reduced-motion: reduce) {
3655
+ .taskon-quest-skeleton-block::after {
3656
+ animation: none;
3624
3657
  }
3625
3658
  }
3626
3659
 
@@ -3643,7 +3676,7 @@ a.taskon-quest-footer-action-btn {
3643
3676
  }
3644
3677
 
3645
3678
  .taskon-quest-error-message {
3646
- color: #ef4444;
3679
+ color: var(--taskon-color-error);
3647
3680
  font-size: 14px;
3648
3681
  }
3649
3682
 
@@ -3651,10 +3684,10 @@ a.taskon-quest-footer-action-btn {
3651
3684
  margin-top: 8px;
3652
3685
  padding: 8px 16px;
3653
3686
  font-size: 14px;
3654
- color: var(--taskon-quest-text-lightest);
3655
- background-color: var(--taskon-quest-primary);
3687
+ color: var(--taskon-color-text);
3688
+ background-color: var(--taskon-color-primary);
3656
3689
  border: none;
3657
- border-radius: var(--taskon-quest-radius-m);
3690
+ border-radius: var(--taskon-border-radius);
3658
3691
  cursor: pointer;
3659
3692
  transition: background-color 0.2s;
3660
3693
  }
@@ -3672,7 +3705,7 @@ a.taskon-quest-footer-action-btn {
3672
3705
  align-items: center;
3673
3706
  justify-content: center;
3674
3707
  padding: 48px 24px;
3675
- color: var(--taskon-quest-text-light);
3708
+ color: var(--taskon-color-text-tertiary);
3676
3709
  font-size: 14px;
3677
3710
  }
3678
3711
 
@@ -3682,39 +3715,40 @@ a.taskon-quest-footer-action-btn {
3682
3715
 
3683
3716
  .taskon-quest-layout {
3684
3717
  display: flex;
3685
- gap: var(--taskon-quest-spacing-3xl);
3718
+ flex-direction: column;
3719
+ gap: var(--taskon-spacing-xl);
3686
3720
  align-items: flex-start;
3687
3721
  }
3688
3722
 
3689
3723
  /* 左侧主内容区(固定比例 2:1) */
3724
+
3690
3725
  .taskon-quest-content {
3691
3726
  flex: 2;
3692
3727
  min-width: 0;
3693
3728
  display: flex;
3694
3729
  flex-direction: column;
3695
- gap: var(--taskon-quest-spacing-xl);
3730
+ gap: var(--taskon-spacing-lg);
3696
3731
  }
3697
3732
 
3698
3733
  /* 中间分割线 */
3734
+
3699
3735
  .taskon-quest-divider {
3700
- width: 1px;
3736
+ width: 100%;
3737
+ height: 1px;
3701
3738
  align-self: stretch;
3702
- background: linear-gradient(
3703
- to bottom,
3704
- var(--taskon-quest-text-invisible),
3705
- var(--taskon-quest-text-darkest),
3706
- var(--taskon-quest-text-invisible)
3707
- );
3739
+ background: var(--taskon-color-border-secondary);
3708
3740
  flex-shrink: 0;
3709
3741
  }
3710
3742
 
3711
3743
  /* 右侧边栏(固定比例 2:1) */
3744
+
3712
3745
  .taskon-quest-sidebar {
3713
3746
  flex: 1;
3747
+ width: 100%;
3714
3748
  min-width: 0;
3715
3749
  display: flex;
3716
3750
  flex-direction: column;
3717
- gap: var(--taskon-quest-spacing-xxl);
3751
+ gap: var(--taskon-spacing-xl);
3718
3752
  }
3719
3753
 
3720
3754
  /* ============================================================================
@@ -3724,14 +3758,15 @@ a.taskon-quest-footer-action-btn {
3724
3758
  .taskon-quest-header {
3725
3759
  display: flex;
3726
3760
  flex-direction: column;
3727
- gap: var(--taskon-quest-spacing-l);
3761
+ gap: var(--taskon-spacing-lg);
3728
3762
  }
3729
3763
 
3730
3764
  /* 标题 + 倒计时区域 */
3765
+
3731
3766
  .taskon-quest-header-title-section {
3732
3767
  display: flex;
3733
3768
  flex-direction: column;
3734
- gap: var(--taskon-quest-spacing-xs);
3769
+ gap: var(--taskon-spacing-sm);
3735
3770
  }
3736
3771
 
3737
3772
  .taskon-quest-title {
@@ -3739,93 +3774,127 @@ a.taskon-quest-footer-action-btn {
3739
3774
  font-size: 28px;
3740
3775
  font-weight: 600;
3741
3776
  line-height: 38px;
3742
- color: var(--taskon-quest-text-lightest);
3777
+ color: var(--taskon-color-text);
3743
3778
  }
3744
3779
 
3745
3780
  /* 倒计时 + 时间范围 */
3781
+
3746
3782
  .taskon-quest-header-meta {
3747
3783
  display: flex;
3748
- align-items: center;
3749
- gap: var(--taskon-quest-spacing-s);
3750
- padding: var(--taskon-quest-spacing-xxs) 0;
3751
- border-radius: var(--taskon-quest-radius-s);
3784
+ flex-wrap: wrap;
3785
+ align-items: flex-start;
3786
+ gap: 8px 10px;
3787
+ padding: var(--taskon-spacing-xs) 0;
3788
+ border: none;
3789
+ border-radius: var(--taskon-border-radius-sm);
3790
+ background: transparent;
3752
3791
  }
3753
3792
 
3754
3793
  .taskon-quest-countdown {
3755
3794
  display: flex;
3756
- gap: var(--taskon-quest-spacing-xs);
3795
+ order: 3;
3796
+ flex: 1 1 100%;
3797
+ flex-wrap: wrap;
3798
+ gap: 6px;
3757
3799
  align-items: center;
3800
+ min-width: 0;
3758
3801
  }
3759
3802
 
3760
3803
  .taskon-quest-countdown-icon {
3761
3804
  display: flex;
3762
3805
  align-items: center;
3763
3806
  justify-content: center;
3764
- color: var(--taskon-quest-text-lightest);
3807
+ color: var(--taskon-color-text);
3765
3808
  }
3766
3809
 
3767
3810
  .taskon-quest-countdown-label {
3768
- font-size: 16px;
3811
+ font-size: 14px;
3769
3812
  font-weight: 400;
3770
- line-height: 24px;
3771
- color: var(--taskon-quest-text-lighter);
3813
+ line-height: 20px;
3814
+ color: var(--taskon-color-text-secondary);
3772
3815
  }
3773
3816
 
3774
3817
  /* 已结束状态的标签样式 */
3818
+
3775
3819
  .taskon-quest-countdown-label--ended {
3776
3820
  font-weight: 600;
3777
3821
  text-transform: uppercase;
3778
3822
  }
3779
3823
 
3780
3824
  .taskon-quest-countdown-value {
3781
- font-size: 16px;
3825
+ font-size: 14px;
3782
3826
  font-weight: 600;
3783
- line-height: 24px;
3784
- color: var(--taskon-quest-primary);
3827
+ line-height: 20px;
3828
+ color: var(--taskon-color-primary);
3785
3829
  }
3786
3830
 
3787
3831
  .taskon-quest-countdown-divider {
3788
- width: 1px;
3789
- height: 20px;
3790
- background-color: var(--taskon-quest-text-darkest);
3832
+ display: none;
3791
3833
  }
3792
3834
 
3793
3835
  .taskon-quest-time-range {
3794
- font-size: 16px;
3795
- font-weight: 400;
3796
- line-height: 24px;
3797
- color: var(--taskon-quest-text-lighter);
3836
+ order: 1;
3837
+ display: flex;
3838
+ flex: 1 1 auto;
3839
+ flex-direction: column;
3840
+ gap: 2px;
3841
+ min-width: 0;
3842
+ font-size: 14px;
3843
+ font-weight: 500;
3844
+ line-height: 20px;
3845
+ color: var(--taskon-color-text-secondary);
3846
+ }
3847
+
3848
+ .taskon-quest-time-range-timezone {
3849
+ font-size: 12px;
3850
+ font-weight: 500;
3851
+ line-height: 16px;
3852
+ color: var(--taskon-color-text-tertiary);
3853
+ }
3854
+
3855
+ .taskon-quest-time-range-values {
3856
+ display: flex;
3857
+ flex-wrap: wrap;
3858
+ align-items: center;
3859
+ gap: 6px;
3860
+ word-break: break-word;
3861
+ overflow-wrap: anywhere;
3862
+ }
3863
+
3864
+ .taskon-quest-time-range-separator {
3865
+ color: var(--taskon-color-text-tertiary);
3866
+ }
3867
+
3868
+ .taskon-quest-header-meta .taskon-quest-share-trigger {
3869
+ order: 2;
3870
+ width: 34px;
3871
+ height: 34px;
3872
+ border: none;
3873
+ background: transparent;
3798
3874
  }
3799
3875
 
3800
3876
  /* Banner 图片 */
3877
+
3801
3878
  .taskon-quest-banner {
3802
3879
  display: block;
3803
3880
  margin: 0 auto;
3804
3881
  width: 100%;
3805
- border-radius: 10px;
3882
+ border-radius: var(--taskon-border-radius-lg);
3806
3883
  }
3807
3884
 
3808
3885
  .taskon-quest-banner-img {
3809
3886
  display: block;
3810
3887
  width: 100%;
3811
- border-radius: 10px;
3812
- }
3813
-
3814
- /* 方形图片在 PC 端限制宽度 */
3815
- @media (min-width: 751px) {
3816
- .taskon-quest-banner--square .taskon-quest-banner-img {
3817
- width: 340px;
3818
- max-width: 100%;
3819
- margin: 0 auto;
3820
- }
3888
+ border-radius: var(--taskon-border-radius-lg);
3821
3889
  }
3822
3890
 
3823
3891
  /* 描述 + View More */
3892
+
3824
3893
  .taskon-quest-desc {
3825
3894
  position: relative;
3826
3895
  display: flex;
3827
3896
  flex-direction: column;
3828
- gap: var(--taskon-quest-spacing-m);
3897
+ gap: var(--taskon-spacing-md);
3829
3898
  }
3830
3899
 
3831
3900
  .taskon-quest-desc-text {
@@ -3833,18 +3902,20 @@ a.taskon-quest-footer-action-btn {
3833
3902
  font-size: 16px;
3834
3903
  font-weight: 400;
3835
3904
  line-height: 24px;
3836
- color: var(--taskon-quest-text-lighter);
3905
+ color: var(--taskon-color-text-secondary);
3837
3906
  max-height: 120px;
3838
3907
  overflow: hidden;
3839
3908
  position: relative;
3840
3909
  }
3841
3910
 
3842
3911
  /* 展开后移除高度限制和渐变 */
3912
+
3843
3913
  .taskon-quest-desc-text--expanded {
3844
3914
  max-height: none;
3845
3915
  }
3846
3916
 
3847
3917
  /* 描述渐变遮罩 - 仅在未展开时显示 */
3918
+
3848
3919
  .taskon-quest-desc-text:not(.taskon-quest-desc-text--expanded)::after {
3849
3920
  content: "";
3850
3921
  position: absolute;
@@ -3854,15 +3925,16 @@ a.taskon-quest-footer-action-btn {
3854
3925
  height: 49px;
3855
3926
  background: linear-gradient(
3856
3927
  0.83deg,
3857
- var(--taskon-quest-bg-body) 10.557%,
3858
- rgba(17, 17, 17, 0) 93.799%
3928
+ var(--taskon-color-bg-canvas) 10.557%,
3929
+ transparent 93.799%
3859
3930
  );
3860
3931
  pointer-events: none;
3861
3932
  }
3862
3933
 
3863
3934
  /* 富文本样式重置 */
3935
+
3864
3936
  .taskon-quest-desc-text p {
3865
- margin: 0 0 var(--taskon-quest-spacing-xs) 0;
3937
+ margin: 0 0 var(--taskon-spacing-sm) 0;
3866
3938
  }
3867
3939
 
3868
3940
  .taskon-quest-desc-text p:last-child {
@@ -3870,38 +3942,40 @@ a.taskon-quest-footer-action-btn {
3870
3942
  }
3871
3943
 
3872
3944
  .taskon-quest-desc-text a {
3873
- color: var(--taskon-quest-link);
3945
+ color: var(--taskon-color-link);
3874
3946
  text-decoration: underline;
3875
3947
  }
3876
3948
 
3877
3949
  .taskon-quest-desc-text ul,
3878
3950
  .taskon-quest-desc-text ol {
3879
- margin: var(--taskon-quest-spacing-xs) 0;
3880
- padding-left: var(--taskon-quest-spacing-xl);
3951
+ margin: var(--taskon-spacing-sm) 0;
3952
+ padding-left: var(--taskon-spacing-lg);
3881
3953
  }
3882
3954
 
3883
3955
  .taskon-quest-desc-text li {
3884
- margin: var(--taskon-quest-spacing-xxs) 0;
3956
+ margin: var(--taskon-spacing-xs) 0;
3885
3957
  }
3886
3958
 
3887
3959
  /* 图片样式:限制最大宽度,防止溢出 */
3960
+
3888
3961
  .taskon-quest-desc-text img {
3889
3962
  max-width: 100%;
3890
3963
  height: auto;
3891
- border-radius: var(--taskon-quest-radius-m);
3964
+ border-radius: var(--taskon-border-radius);
3892
3965
  }
3893
3966
 
3894
3967
  /* iframe 样式:限制最大宽度 */
3968
+
3895
3969
  .taskon-quest-desc-text iframe {
3896
3970
  max-width: 100%;
3897
- border-radius: var(--taskon-quest-radius-m);
3971
+ border-radius: var(--taskon-border-radius);
3898
3972
  }
3899
3973
 
3900
3974
  .taskon-quest-desc-more {
3901
3975
  font-size: 16px;
3902
3976
  font-weight: 600;
3903
3977
  line-height: 24px;
3904
- color: var(--taskon-quest-text-lightest);
3978
+ color: var(--taskon-color-text);
3905
3979
  text-decoration: underline;
3906
3980
  text-decoration-skip-ink: none;
3907
3981
  text-underline-position: from-font;
@@ -3917,14 +3991,10 @@ a.taskon-quest-footer-action-btn {
3917
3991
  }
3918
3992
 
3919
3993
  /* 分割线 */
3994
+
3920
3995
  .taskon-quest-content-divider {
3921
3996
  height: 1px;
3922
- background: linear-gradient(
3923
- to right,
3924
- var(--taskon-quest-text-invisible),
3925
- var(--taskon-quest-text-darkest),
3926
- var(--taskon-quest-text-invisible)
3927
- );
3997
+ background: var(--taskon-color-border-secondary);
3928
3998
  }
3929
3999
 
3930
4000
  /* ============================================================================
@@ -3934,13 +4004,14 @@ a.taskon-quest-footer-action-btn {
3934
4004
  .taskon-quest-tasks {
3935
4005
  display: flex;
3936
4006
  flex-direction: column;
3937
- gap: var(--taskon-quest-spacing-m);
4007
+ gap: var(--taskon-spacing-md);
3938
4008
  }
3939
4009
 
3940
4010
  /* Quest 标题 */
4011
+
3941
4012
  .taskon-quest-tasks-header {
3942
4013
  display: flex;
3943
- gap: var(--taskon-quest-spacing-m);
4014
+ gap: var(--taskon-spacing-md);
3944
4015
  align-items: center;
3945
4016
  }
3946
4017
 
@@ -3949,60 +4020,56 @@ a.taskon-quest-footer-action-btn {
3949
4020
  font-size: 24px;
3950
4021
  font-weight: 600;
3951
4022
  line-height: 32px;
3952
- color: var(--taskon-quest-text-lightest);
4023
+ color: var(--taskon-color-text);
3953
4024
  }
3954
4025
 
3955
4026
  /* 任务列表 */
4027
+
3956
4028
  .taskon-quest-tasks-list {
3957
4029
  display: flex;
3958
4030
  flex-direction: column;
3959
- gap: var(--taskon-quest-spacing-m);
4031
+ gap: var(--taskon-spacing-md);
3960
4032
  }
3961
4033
 
3962
4034
  .taskon-quest-task-placeholder {
3963
4035
  display: flex;
3964
4036
  justify-content: space-between;
3965
4037
  align-items: center;
3966
- padding: var(--taskon-quest-spacing-m);
4038
+ padding: var(--taskon-spacing-md);
3967
4039
  height: 66px;
3968
- background:
3969
- linear-gradient(
3970
- 90deg,
3971
- rgba(255, 255, 255, 0.1) 0%,
3972
- rgba(255, 255, 255, 0.1) 100%
3973
- ),
3974
- linear-gradient(90deg, #0d0d0d 0%, #0d0d0d 100%);
3975
- border: 1px solid var(--taskon-quest-text-invisible);
3976
- border-radius: var(--taskon-quest-radius-l);
4040
+ background: var(--taskon-color-bg-surface-strong);
4041
+ border: 1px solid var(--taskon-color-border-secondary);
4042
+ border-radius: var(--taskon-border-radius);
3977
4043
  font-size: 18px;
3978
4044
  font-weight: 600;
3979
- color: var(--taskon-quest-text-lightest);
4045
+ color: var(--taskon-color-text);
3980
4046
  }
3981
4047
 
3982
4048
  .taskon-quest-task-template {
3983
- color: var(--taskon-quest-text-dark);
4049
+ color: var(--taskon-color-text-disabled);
3984
4050
  font-size: 14px;
3985
4051
  font-weight: 500;
3986
4052
  }
3987
4053
 
3988
4054
  /* Complete 按钮 */
4055
+
3989
4056
  .taskon-quest-complete-btn {
3990
4057
  width: 100%;
3991
- margin-top: var(--taskon-quest-spacing-xl);
3992
- padding: var(--taskon-quest-spacing-m) var(--taskon-quest-spacing-3xl);
4058
+ margin-top: var(--taskon-spacing-lg);
4059
+ padding: var(--taskon-spacing-md) var(--taskon-spacing-xl);
3993
4060
  font-size: 18px;
3994
4061
  font-weight: 600;
3995
4062
  line-height: 24px;
3996
- color: var(--taskon-quest-button-primary-color);
3997
- background-color: var(--taskon-quest-primary);
4063
+ color: var(--taskon-color-text-on-primary);
4064
+ background-color: var(--taskon-color-primary);
3998
4065
  border: none;
3999
- border-radius: var(--taskon-quest-radius-l);
4066
+ border-radius: var(--taskon-border-radius);
4000
4067
  cursor: pointer;
4001
4068
  transition: opacity 0.2s;
4002
4069
  display: flex;
4003
4070
  align-items: center;
4004
4071
  justify-content: center;
4005
- gap: var(--taskon-quest-spacing-xs);
4072
+ gap: var(--taskon-spacing-sm);
4006
4073
  }
4007
4074
 
4008
4075
  .taskon-quest-complete-btn:hover:not(:disabled) {
@@ -4021,8 +4088,8 @@ a.taskon-quest-footer-action-btn {
4021
4088
  .taskon-quest-winners-section {
4022
4089
  display: flex;
4023
4090
  flex-direction: column;
4024
- gap: var(--taskon-quest-spacing-m);
4025
- margin-bottom: var(--taskon-quest-spacing-xl);
4091
+ gap: var(--taskon-spacing-md);
4092
+ margin-bottom: var(--taskon-spacing-lg);
4026
4093
  }
4027
4094
 
4028
4095
  .taskon-quest-winners-section-title {
@@ -4030,7 +4097,7 @@ a.taskon-quest-footer-action-btn {
4030
4097
  font-size: 24px;
4031
4098
  font-weight: 600;
4032
4099
  line-height: 32px;
4033
- color: var(--taskon-quest-text-lightest);
4100
+ color: var(--taskon-color-text);
4034
4101
  }
4035
4102
 
4036
4103
  /* ============================================================================
@@ -4040,7 +4107,7 @@ a.taskon-quest-footer-action-btn {
4040
4107
  .taskon-quest-rewards-section {
4041
4108
  display: flex;
4042
4109
  flex-direction: column;
4043
- gap: var(--taskon-quest-spacing-l);
4110
+ gap: var(--taskon-spacing-lg);
4044
4111
  }
4045
4112
 
4046
4113
  .taskon-quest-rewards-section-title {
@@ -4048,22 +4115,7 @@ a.taskon-quest-footer-action-btn {
4048
4115
  font-size: 24px;
4049
4116
  font-weight: 600;
4050
4117
  line-height: 32px;
4051
- color: var(--taskon-quest-text-lightest);
4052
- }
4053
-
4054
- /* QuestRewards 组件 CSS 变量映射 */
4055
- .taskon-quest-rewards-section {
4056
- --taskon-text-primary: var(--taskon-quest-text-lightest);
4057
- --taskon-text-secondary: var(--taskon-quest-text-lighter);
4058
- --taskon-text-tertiary: var(--taskon-quest-text-light);
4059
- --taskon-bg-card: var(--taskon-quest-text-invisible);
4060
- --taskon-bg-secondary: rgba(255, 255, 255, 0.03);
4061
- --taskon-bg-tertiary: var(--taskon-quest-text-darkest);
4062
- --taskon-border-color: var(--taskon-quest-text-darkest);
4063
- --taskon-primary: var(--taskon-quest-primary);
4064
- --taskon-success: var(--taskon-quest-secondary);
4065
- --taskon-link: var(--taskon-quest-link);
4066
- --taskon-warning: #ffc107;
4118
+ color: var(--taskon-color-text);
4067
4119
  }
4068
4120
 
4069
4121
  /* ============================================================================
@@ -4073,7 +4125,7 @@ a.taskon-quest-footer-action-btn {
4073
4125
  .taskon-quest-rewards {
4074
4126
  display: flex;
4075
4127
  flex-direction: column;
4076
- gap: var(--taskon-quest-spacing-l);
4128
+ gap: var(--taskon-spacing-lg);
4077
4129
  }
4078
4130
 
4079
4131
  .taskon-quest-rewards-title {
@@ -4081,24 +4133,24 @@ a.taskon-quest-footer-action-btn {
4081
4133
  font-size: 24px;
4082
4134
  font-weight: 600;
4083
4135
  line-height: 32px;
4084
- color: var(--taskon-quest-text-lightest);
4136
+ color: var(--taskon-color-text);
4085
4137
  }
4086
4138
 
4087
4139
  .taskon-quest-rewards-list {
4088
4140
  display: flex;
4089
4141
  flex-direction: column;
4090
- gap: var(--taskon-quest-spacing-m);
4142
+ gap: var(--taskon-spacing-md);
4091
4143
  }
4092
4144
 
4093
4145
  .taskon-quest-reward-item {
4094
4146
  display: flex;
4095
4147
  justify-content: space-between;
4096
4148
  align-items: center;
4097
- padding: var(--taskon-quest-spacing-m);
4098
- background-color: var(--taskon-quest-text-invisible);
4099
- border-radius: var(--taskon-quest-radius-xl);
4149
+ padding: var(--taskon-spacing-md);
4150
+ background-color: var(--taskon-color-border-secondary);
4151
+ border-radius: var(--taskon-border-radius-lg);
4100
4152
  font-size: 16px;
4101
- color: var(--taskon-quest-text-lightest);
4153
+ color: var(--taskon-color-text);
4102
4154
  }
4103
4155
 
4104
4156
  /* ============================================================================
@@ -4106,14 +4158,14 @@ a.taskon-quest-footer-action-btn {
4106
4158
  ============================================================================ */
4107
4159
 
4108
4160
  .taskon-quest-eligs-section {
4109
- margin-top: var(--taskon-quest-spacing-xl);
4161
+ margin-top: var(--taskon-spacing-lg);
4110
4162
  }
4111
4163
 
4112
4164
  .taskon-quest-eligs-section-header {
4113
4165
  display: flex;
4114
4166
  align-items: center;
4115
4167
  justify-content: space-between;
4116
- margin-bottom: var(--taskon-quest-spacing-m);
4168
+ margin-bottom: var(--taskon-spacing-md);
4117
4169
  }
4118
4170
 
4119
4171
  .taskon-quest-eligs-section-title {
@@ -4121,7 +4173,7 @@ a.taskon-quest-footer-action-btn {
4121
4173
  font-size: 20px;
4122
4174
  font-weight: 600;
4123
4175
  line-height: 28px;
4124
- color: var(--taskon-quest-text-lightest);
4176
+ color: var(--taskon-color-text);
4125
4177
  }
4126
4178
 
4127
4179
  /* ============================================================================
@@ -4131,7 +4183,7 @@ a.taskon-quest-footer-action-btn {
4131
4183
  .taskon-quest-participants {
4132
4184
  display: flex;
4133
4185
  flex-direction: column;
4134
- gap: var(--taskon-quest-spacing-l);
4186
+ gap: var(--taskon-spacing-lg);
4135
4187
  }
4136
4188
 
4137
4189
  .taskon-quest-participants-title {
@@ -4139,7 +4191,7 @@ a.taskon-quest-footer-action-btn {
4139
4191
  font-size: 24px;
4140
4192
  font-weight: 600;
4141
4193
  line-height: 32px;
4142
- color: var(--taskon-quest-text-lightest);
4194
+ color: var(--taskon-color-text);
4143
4195
  }
4144
4196
 
4145
4197
  .taskon-quest-participants-item {
@@ -4152,37 +4204,222 @@ a.taskon-quest-footer-action-btn {
4152
4204
  }
4153
4205
 
4154
4206
  .taskon-quest-participants-label {
4155
- color: var(--taskon-quest-text-lighter);
4207
+ color: var(--taskon-color-text-secondary);
4156
4208
  }
4157
4209
 
4158
4210
  .taskon-quest-participants-value {
4159
- color: var(--taskon-quest-text-lightest);
4211
+ color: var(--taskon-color-text);
4160
4212
  }
4161
4213
 
4162
4214
  /* ============================================================================
4163
- 响应式布局(TODO: Phase 13 完善)
4215
+ 响应式布局
4164
4216
  ============================================================================ */
4165
4217
 
4166
- @media (max-width: 1200px) {
4218
+ @supports (container-type: inline-size) {
4219
+ @container (min-width: 751px) {
4167
4220
  .taskon-quest-layout {
4168
- flex-direction: column;
4221
+ flex-direction: row;
4169
4222
  }
4170
4223
 
4171
4224
  .taskon-quest-divider {
4172
- width: 100%;
4173
- height: 1px;
4174
- background: linear-gradient(
4175
- to right,
4176
- var(--taskon-quest-text-invisible),
4177
- var(--taskon-quest-text-darkest),
4178
- var(--taskon-quest-text-invisible)
4179
- );
4225
+ width: 1px;
4226
+ height: auto;
4180
4227
  }
4181
4228
 
4182
4229
  .taskon-quest-sidebar {
4183
- width: 100%;
4230
+ width: auto;
4231
+ }
4232
+
4233
+ .taskon-quest-header-meta {
4234
+ flex-wrap: nowrap;
4235
+ align-items: center;
4236
+ gap: var(--taskon-spacing-md);
4237
+ padding: var(--taskon-spacing-xs) 0;
4238
+ border: none;
4239
+ background: transparent;
4240
+ }
4241
+
4242
+ .taskon-quest-countdown {
4243
+ order: 0;
4244
+ flex: 0 0 auto;
4245
+ flex-wrap: nowrap;
4246
+ gap: var(--taskon-spacing-sm);
4247
+ }
4248
+
4249
+ .taskon-quest-countdown-label,
4250
+ .taskon-quest-countdown-value {
4251
+ font-size: 16px;
4252
+ line-height: 24px;
4253
+ }
4254
+
4255
+ .taskon-quest-countdown-divider {
4256
+ display: block;
4257
+ width: 1px;
4258
+ height: 20px;
4259
+ background-color: var(--taskon-color-border-secondary);
4260
+ }
4261
+
4262
+ .taskon-quest-time-range {
4263
+ order: 0;
4264
+ flex: 0 1 auto;
4265
+ flex-direction: row;
4266
+ gap: 8px;
4267
+ font-size: 16px;
4268
+ font-weight: 400;
4269
+ line-height: 24px;
4270
+ }
4271
+
4272
+ .taskon-quest-time-range-timezone {
4273
+ font-size: 16px;
4274
+ font-weight: 400;
4275
+ line-height: 24px;
4276
+ color: var(--taskon-color-text-secondary);
4277
+ }
4278
+
4279
+ .taskon-quest-time-range-values {
4280
+ flex-wrap: nowrap;
4281
+ gap: 8px;
4282
+ word-break: normal;
4283
+ overflow-wrap: normal;
4284
+ }
4285
+
4286
+ .taskon-quest-time-range-separator {
4287
+ color: var(--taskon-color-text-secondary);
4288
+ }
4289
+
4290
+ .taskon-quest-header-meta .taskon-quest-share-trigger {
4291
+ order: 0;
4292
+ width: 40px;
4293
+ height: 40px;
4294
+ border: none;
4295
+ background: var(--taskon-color-bg-surface);
4296
+ }
4297
+
4298
+ /* 方形图片在桌面端限制宽度 */
4299
+ .taskon-quest-banner--square .taskon-quest-banner-img {
4300
+ width: 340px;
4301
+ max-width: 100%;
4302
+ margin: 0 auto;
4303
+ }
4304
+
4305
+ .taskon-quest-skeleton-content,
4306
+ .taskon-quest-skeleton-sidebar {
4307
+ width: auto;
4308
+ gap: var(--taskon-spacing-lg);
4309
+ }
4310
+
4311
+ .taskon-quest-skeleton-banner {
4312
+ height: 220px;
4313
+ }
4314
+
4315
+ .taskon-quest-skeleton-task {
4316
+ height: 84px;
4317
+ }
4318
+ }
4319
+ }
4320
+
4321
+ @supports not (container-type: inline-size) {
4322
+ @media (min-width: 751px) {
4323
+ .taskon-quest-layout {
4324
+ flex-direction: row;
4325
+ }
4326
+
4327
+ .taskon-quest-divider {
4328
+ width: 1px;
4329
+ height: auto;
4330
+ }
4331
+
4332
+ .taskon-quest-sidebar {
4333
+ width: auto;
4334
+ }
4335
+
4336
+ .taskon-quest-header-meta {
4337
+ flex-wrap: nowrap;
4338
+ align-items: center;
4339
+ gap: var(--taskon-spacing-md);
4340
+ padding: var(--taskon-spacing-xs) 0;
4341
+ border: none;
4342
+ background: transparent;
4343
+ }
4344
+
4345
+ .taskon-quest-countdown {
4346
+ order: 0;
4347
+ flex: 0 0 auto;
4348
+ flex-wrap: nowrap;
4349
+ gap: var(--taskon-spacing-sm);
4350
+ }
4351
+
4352
+ .taskon-quest-countdown-label,
4353
+ .taskon-quest-countdown-value {
4354
+ font-size: 16px;
4355
+ line-height: 24px;
4356
+ }
4357
+
4358
+ .taskon-quest-countdown-divider {
4359
+ display: block;
4360
+ width: 1px;
4361
+ height: 20px;
4362
+ background-color: var(--taskon-color-border-secondary);
4363
+ }
4364
+
4365
+ .taskon-quest-time-range {
4366
+ order: 0;
4367
+ flex: 0 1 auto;
4368
+ flex-direction: row;
4369
+ gap: 8px;
4370
+ font-size: 16px;
4371
+ font-weight: 400;
4372
+ line-height: 24px;
4373
+ }
4374
+
4375
+ .taskon-quest-time-range-timezone {
4376
+ font-size: 16px;
4377
+ font-weight: 400;
4378
+ line-height: 24px;
4379
+ color: var(--taskon-color-text-secondary);
4380
+ }
4381
+
4382
+ .taskon-quest-time-range-values {
4383
+ flex-wrap: nowrap;
4384
+ gap: 8px;
4385
+ word-break: normal;
4386
+ overflow-wrap: normal;
4387
+ }
4388
+
4389
+ .taskon-quest-time-range-separator {
4390
+ color: var(--taskon-color-text-secondary);
4391
+ }
4392
+
4393
+ .taskon-quest-header-meta .taskon-quest-share-trigger {
4394
+ order: 0;
4395
+ width: 40px;
4396
+ height: 40px;
4397
+ border: none;
4398
+ background: var(--taskon-color-bg-surface);
4399
+ }
4400
+
4401
+ /* 方形图片在桌面端限制宽度 */
4402
+ .taskon-quest-banner--square .taskon-quest-banner-img {
4403
+ width: 340px;
4404
+ max-width: 100%;
4405
+ margin: 0 auto;
4406
+ }
4407
+
4408
+ .taskon-quest-skeleton-content,
4409
+ .taskon-quest-skeleton-sidebar {
4410
+ width: auto;
4411
+ gap: var(--taskon-spacing-lg);
4412
+ }
4413
+
4414
+ .taskon-quest-skeleton-banner {
4415
+ height: 220px;
4416
+ }
4417
+
4418
+ .taskon-quest-skeleton-task {
4419
+ height: 84px;
4420
+ }
4421
+ }
4184
4422
  }
4185
- }
4186
4423
 
4187
4424
  /* Eligibility 组件样式已抽取到独立文件: Quest/components/Eligibility/eligibility.css */
4188
4425
 
@@ -4191,7 +4428,7 @@ a.taskon-quest-footer-action-btn {
4191
4428
  ============================================================================ */
4192
4429
 
4193
4430
  .taskon-quest-blindbox-dialog-wrapper {
4194
- background: #0d0d0d;
4431
+ background: var(--taskon-color-bg-surface);
4195
4432
  padding: 0;
4196
4433
  width: auto;
4197
4434
  max-width: 560px;
@@ -4202,7 +4439,7 @@ a.taskon-quest-footer-action-btn {
4202
4439
  }
4203
4440
 
4204
4441
  .taskon-quest-blindbox-reward-wrapper {
4205
- background: #0d0d0d;
4442
+ background: var(--taskon-color-bg-surface);
4206
4443
  padding: 0;
4207
4444
  width: auto;
4208
4445
  max-width: 560px;