@taskon/widget-react 0.0.1 → 0.0.2

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