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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/dist/CommunityTaskList.css +1340 -1292
  3. package/dist/EligibilityInfo.css +512 -332
  4. package/dist/LeaderboardWidget.css +355 -152
  5. package/dist/Quest.css +911 -629
  6. package/dist/TaskOnProvider.css +35 -16
  7. package/dist/UserCenterWidget.css +116 -71
  8. package/dist/UserCenterWidget2.css +1285 -748
  9. package/dist/chunks/{CommunityTaskList-C9mPl_31.js → CommunityTaskList-CrMvOB8w.js} +784 -452
  10. package/dist/chunks/{EligibilityInfo-DGBffKN8.js → EligibilityInfo-Beww12QX.js} +1569 -597
  11. package/dist/chunks/{LeaderboardWidget-DPOQVXkT.js → LeaderboardWidget-DwuSpVl0.js} +2 -2
  12. package/dist/chunks/{PageBuilder-WCZvxL2j.js → PageBuilder-DsX6Tv0N.js} +5 -5
  13. package/dist/chunks/{Quest-DjGH_8bx.js → Quest-CuD2LElS.js} +713 -484
  14. package/dist/chunks/{TaskOnProvider-iannERG1.js → TaskOnProvider-xUeP2Nro.js} +78 -65
  15. package/dist/chunks/{ThemeProvider-DNJqI2lD.js → ThemeProvider-Bt4UZ33y.js} +33 -9
  16. package/dist/chunks/{UserCenterWidget-CAhgp46j.js → UserCenterWidget-CB0hnj-L.js} +69 -31
  17. package/dist/chunks/{UserCenterWidget-B0O-f_xl.js → UserCenterWidget-CvU6K4AC.js} +21 -7
  18. package/dist/chunks/communitytask-es-1zawvXEX.js +311 -0
  19. package/dist/chunks/communitytask-ja-CmW6nP-L.js +311 -0
  20. package/dist/chunks/communitytask-ko-BD0hzQSi.js +311 -0
  21. package/dist/chunks/communitytask-ru-DhySaZL8.js +311 -0
  22. package/dist/chunks/createLocaleLoader-BameiEhU.js +65 -0
  23. package/dist/chunks/{dynamic-import-helper-B2j_dZ4V.js → dynamic-import-helper-WmIF58Sb.js} +1 -1
  24. package/dist/chunks/quest-es-D-b5xcme.js +948 -0
  25. package/dist/chunks/quest-ja-Dxd2vqBF.js +948 -0
  26. package/dist/chunks/quest-ko-CSmRWgK_.js +948 -0
  27. package/dist/chunks/quest-ru-CkEKv1_F.js +948 -0
  28. package/dist/chunks/taskwidget-es-Do9b3Mqw.js +245 -0
  29. package/dist/chunks/taskwidget-ja-CqSu-yWA.js +245 -0
  30. package/dist/chunks/taskwidget-ko-EHgXFV4B.js +245 -0
  31. package/dist/chunks/taskwidget-ru-CMbLQDK4.js +245 -0
  32. package/dist/community-task.js +1 -1
  33. package/dist/core.d.ts +17 -5
  34. package/dist/core.js +8 -7
  35. package/dist/dynamic-import-helper.css +424 -303
  36. package/dist/index.d.ts +56 -5
  37. package/dist/index.js +18 -16
  38. package/dist/leaderboard.js +2 -2
  39. package/dist/page-builder.js +1 -1
  40. package/dist/quest.d.ts +682 -0
  41. package/dist/quest.js +3 -1
  42. package/dist/user-center.d.ts +3 -1
  43. package/dist/user-center.js +5 -5
  44. package/package.json +7 -1
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;
@@ -127,9 +134,10 @@
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
142
  color: var(--taskon-color-text-secondary);
135
143
  text-align: center;
@@ -145,10 +153,11 @@
145
153
  }
146
154
 
147
155
  /* 资格条件区域 */
156
+
148
157
  .taskon-eligs-dialog-eligs {
149
158
  width: 100%;
150
159
  border: 1px solid var(--taskon-color-border);
151
- border-radius: 10px;
160
+ border-radius: var(--taskon-border-radius-lg);
152
161
  overflow: hidden;
153
162
  }
154
163
 
@@ -163,7 +172,7 @@
163
172
  border: none;
164
173
  cursor: pointer;
165
174
  color: var(--taskon-color-text);
166
- font-size: 14px;
175
+ font-size: var(--taskon-font-size);
167
176
  text-align: left;
168
177
  transition: background 0.2s;
169
178
  }
@@ -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;
216
+ border-radius: var(--taskon-border-radius);
207
217
  background: var(--taskon-color-primary);
208
218
  color: var(--taskon-color-text-on-primary);
209
- font-size: 16px;
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;
@@ -256,6 +266,7 @@
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;
@@ -264,32 +275,35 @@
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
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
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
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,13 +311,14 @@
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
320
  background: var(--taskon-color-bg-surface-strong);
306
- border-radius: 8px;
321
+ border-radius: var(--taskon-border-radius);
307
322
  border: 1px solid var(--taskon-color-border);
308
323
  }
309
324
 
@@ -313,18 +328,19 @@
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
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
345
  color: var(--taskon-color-text-on-primary);
330
346
  background: linear-gradient(
@@ -333,7 +349,7 @@
333
349
  var(--taskon-color-secondary) 100%
334
350
  );
335
351
  border: none;
336
- border-radius: 6px;
352
+ border-radius: var(--taskon-border-radius-sm);
337
353
  cursor: pointer;
338
354
  transition: opacity 0.2s;
339
355
  }
@@ -348,6 +364,7 @@
348
364
  }
349
365
 
350
366
  /* 绑定中的加载动画 */
367
+
351
368
  .taskon-eligs-bind-item-spinner {
352
369
  width: 14px;
353
370
  height: 14px;
@@ -364,11 +381,12 @@
364
381
  }
365
382
 
366
383
  /* 已绑定状态 */
384
+
367
385
  .taskon-eligs-bind-item-status {
368
386
  display: inline-flex;
369
387
  align-items: center;
370
388
  gap: 4px;
371
- font-size: 13px;
389
+ font-size: var(--taskon-font-size-sm);
372
390
  font-weight: 500;
373
391
  color: var(--taskon-color-success);
374
392
  }
@@ -379,6 +397,7 @@
379
397
  */
380
398
 
381
399
  /* 分享触发按钮 - 方形图标按钮(SimpleBox 样式) */
400
+
382
401
  .taskon-quest-share-trigger {
383
402
  display: flex;
384
403
  align-items: center;
@@ -389,7 +408,7 @@
389
408
  margin-left: auto;
390
409
  background: var(--taskon-color-bg-surface);
391
410
  border: none;
392
- border-radius: 6px;
411
+ border-radius: var(--taskon-border-radius-sm);
393
412
  cursor: pointer;
394
413
  transition: background 0.2s;
395
414
  flex-shrink: 0;
@@ -404,10 +423,11 @@
404
423
  }
405
424
 
406
425
  /* 下拉菜单 */
426
+
407
427
  .taskon-quest-share-menu {
408
428
  width: 230px;
409
429
  background: var(--taskon-color-bg-surface);
410
- border-radius: 10px;
430
+ border-radius: var(--taskon-border-radius-lg);
411
431
  overflow: hidden;
412
432
  box-shadow: 0 4px 16px var(--taskon-color-bg-mask);
413
433
  z-index: 100;
@@ -415,12 +435,13 @@
415
435
  }
416
436
 
417
437
  /* 菜单项 */
438
+
418
439
  .taskon-quest-share-menu-item {
419
440
  display: flex;
420
441
  align-items: center;
421
442
  width: 100%;
422
443
  padding: 12px;
423
- font-size: 14px;
444
+ font-size: var(--taskon-font-size);
424
445
  font-weight: 500;
425
446
  color: var(--taskon-color-text);
426
447
  background: transparent;
@@ -457,6 +478,7 @@
457
478
  ============================================================================ */
458
479
 
459
480
  /* 覆盖 Dialog 默认样式 - 移除卡片背景,让内容区域完全透明 */
481
+
460
482
  .taskon-quest-qr-dialog-content {
461
483
  background: transparent !important;
462
484
  border-radius: 0 !important;
@@ -474,17 +496,20 @@
474
496
  }
475
497
 
476
498
  /* 海报外层容器 */
499
+
477
500
  .taskon-quest-qr-poster-outer {
478
- border-radius: 12px;
501
+ border-radius: var(--taskon-border-radius-lg);
479
502
  overflow: hidden;
480
503
  }
481
504
 
482
505
  /* 海报内容 */
506
+
483
507
  .taskon-quest-qr-poster {
484
508
  width: 100%;
485
509
  }
486
510
 
487
511
  /* 海报顶部 - 绿色渐变区域 */
512
+
488
513
  .taskon-quest-qr-poster-header {
489
514
  background: linear-gradient(
490
515
  89.87deg,
@@ -496,6 +521,7 @@
496
521
  }
497
522
 
498
523
  /* 社区信息 */
524
+
499
525
  .taskon-quest-qr-owner {
500
526
  display: flex;
501
527
  align-items: center;
@@ -511,7 +537,7 @@
511
537
  }
512
538
 
513
539
  .taskon-quest-qr-owner-name {
514
- font-size: 24px;
540
+ font-size: var(--taskon-font-size-xxxl);
515
541
  font-weight: 600;
516
542
  white-space: nowrap;
517
543
  overflow: hidden;
@@ -519,11 +545,12 @@
519
545
  }
520
546
 
521
547
  /* 活动名称 */
548
+
522
549
  .taskon-quest-qr-campaign-name {
523
550
  margin-top: 14px;
524
551
  margin-bottom: 8px;
525
- font-size: 16px;
526
- line-height: 24px;
552
+ font-size: var(--taskon-font-size-lg);
553
+ line-height: 1.5;
527
554
  font-weight: 600;
528
555
  display: -webkit-box;
529
556
  -webkit-line-clamp: 2;
@@ -534,13 +561,15 @@
534
561
  }
535
562
 
536
563
  /* Banner 图片 */
564
+
537
565
  .taskon-quest-qr-banner {
538
566
  width: 100%;
539
- border-radius: 10px;
567
+ border-radius: var(--taskon-border-radius-lg);
540
568
  display: block;
541
569
  }
542
570
 
543
571
  /* 海报底部 - 黑色区域 */
572
+
544
573
  .taskon-quest-qr-poster-footer {
545
574
  padding: 30px;
546
575
  background: var(--taskon-color-bg-canvas);
@@ -550,11 +579,13 @@
550
579
  }
551
580
 
552
581
  /* 信息区域 */
582
+
553
583
  .taskon-quest-qr-info {
554
584
  width: calc(100% - 80px);
555
585
  }
556
586
 
557
587
  /* 奖励标题 */
588
+
558
589
  .taskon-quest-qr-reward-title {
559
590
  display: flex;
560
591
  align-items: center;
@@ -567,12 +598,13 @@
567
598
  }
568
599
 
569
600
  /* 时间范围 */
601
+
570
602
  .taskon-quest-qr-time {
571
603
  display: flex;
572
604
  align-items: center;
573
605
  margin-top: 15px;
574
606
  margin-bottom: 6px;
575
- font-size: 14px;
607
+ font-size: var(--taskon-font-size);
576
608
  font-weight: 500;
577
609
  color: var(--taskon-color-text);
578
610
  }
@@ -583,10 +615,11 @@
583
615
  }
584
616
 
585
617
  /* 二维码 */
618
+
586
619
  .taskon-quest-qr-code {
587
620
  width: 80px;
588
621
  height: 80px;
589
- border-radius: 6px;
622
+ border-radius: var(--taskon-border-radius-sm);
590
623
  overflow: hidden;
591
624
  flex-shrink: 0;
592
625
  }
@@ -598,6 +631,7 @@
598
631
  }
599
632
 
600
633
  /* 操作按钮 */
634
+
601
635
  .taskon-quest-qr-actions {
602
636
  display: grid;
603
637
  grid-template-columns: 1fr 1fr;
@@ -607,6 +641,7 @@
607
641
  }
608
642
 
609
643
  /* 奖励列表 - 与原版 RewardsLabels.vue 一致 */
644
+
610
645
  .taskon-quest-qr-rewards-list {
611
646
  display: inline-flex;
612
647
  align-items: center;
@@ -617,21 +652,24 @@
617
652
  }
618
653
 
619
654
  /* 单个奖励项 */
655
+
620
656
  .taskon-quest-qr-reward-item {
621
657
  display: inline-flex;
622
658
  align-items: center;
623
659
  white-space: nowrap;
624
660
  color: var(--taskon-color-text);
625
- font-size: 16px;
661
+ font-size: var(--taskon-font-size-lg);
626
662
  font-weight: 400;
627
663
  }
628
664
 
629
665
  /* 奖励标签 - 高亮绿色 */
666
+
630
667
  .taskon-quest-qr-reward-label {
631
668
  color: var(--taskon-color-primary);
632
669
  }
633
670
 
634
671
  /* 链图标 */
672
+
635
673
  .taskon-quest-qr-reward-chain-icon {
636
674
  width: 15px;
637
675
  height: 15px;
@@ -640,6 +678,7 @@
640
678
  }
641
679
 
642
680
  /* 奖励间的 & 符号 */
681
+
643
682
  .taskon-quest-qr-reward-and {
644
683
  margin-left: 6px;
645
684
  color: var(--taskon-color-text);
@@ -699,9 +738,9 @@
699
738
 
700
739
  .taskon-quest-participants-info-title {
701
740
  margin: 0;
702
- font-size: 24px;
741
+ font-size: var(--taskon-font-size-xxxl);
703
742
  font-weight: 600;
704
- line-height: 32px;
743
+ line-height: 1.33;
705
744
  color: var(--taskon-color-text);
706
745
  }
707
746
 
@@ -724,13 +763,14 @@
724
763
  display: flex;
725
764
  justify-content: space-between;
726
765
  align-items: center;
727
- font-size: 16px;
766
+ font-size: var(--taskon-font-size-lg);
728
767
  font-weight: 500;
729
- line-height: 24px;
768
+ line-height: 1.5;
730
769
  width: 100%;
731
770
  }
732
771
 
733
772
  /* Winners 行可点击样式 */
773
+
734
774
  .taskon-quest-participants-info-row--clickable {
735
775
  padding: 0;
736
776
  margin: 0;
@@ -761,6 +801,7 @@
761
801
  }
762
802
 
763
803
  /* Winners 行的可点击值样式 */
804
+
764
805
  .taskon-quest-participants-info-value--clickable {
765
806
  display: flex;
766
807
  align-items: center;
@@ -788,9 +829,9 @@
788
829
 
789
830
  .taskon-quest-participants-dialog-title {
790
831
  margin: 0 0 var(--taskon-spacing-lg) 0;
791
- font-size: 22px;
832
+ font-size: var(--taskon-font-size-xxl);
792
833
  font-weight: 600;
793
- line-height: 28px;
834
+ line-height: 1.27;
794
835
  color: var(--taskon-color-text);
795
836
  }
796
837
 
@@ -799,21 +840,22 @@
799
840
  }
800
841
 
801
842
  .taskon-quest-participants-dialog-subtitle {
802
- font-size: 16px;
843
+ font-size: var(--taskon-font-size-lg);
803
844
  font-weight: 600;
804
- line-height: 24px;
845
+ line-height: 1.5;
805
846
  color: var(--taskon-color-text);
806
847
  }
807
848
 
808
849
  .taskon-quest-participants-dialog-desc {
809
850
  margin-top: var(--taskon-spacing-xs);
810
- font-size: 14px;
851
+ font-size: var(--taskon-font-size);
811
852
  font-weight: 500;
812
- line-height: 20px;
853
+ line-height: 1.43;
813
854
  color: var(--taskon-color-text-tertiary);
814
855
  }
815
856
 
816
857
  /* Flow Chart */
858
+
817
859
  .taskon-quest-participants-dialog-chart {
818
860
  display: flex;
819
861
  align-items: flex-start;
@@ -862,20 +904,21 @@
862
904
  }
863
905
 
864
906
  .taskon-quest-participants-dialog-card-title {
865
- font-size: 14px;
907
+ font-size: var(--taskon-font-size);
866
908
  font-weight: 600;
867
- line-height: 20px;
909
+ line-height: 1.43;
868
910
  color: var(--taskon-color-text);
869
911
  }
870
912
 
871
913
  .taskon-quest-participants-dialog-card-desc {
872
- font-size: 12px;
914
+ font-size: var(--taskon-font-size-sm);
873
915
  font-weight: 500;
874
- line-height: 16px;
916
+ line-height: 1.33;
875
917
  color: var(--taskon-color-text-tertiary);
876
918
  }
877
919
 
878
920
  /* Confirm Button */
921
+
879
922
  .taskon-quest-participants-dialog-btn {
880
923
  width: 100%;
881
924
  }
@@ -908,9 +951,9 @@
908
951
 
909
952
  .taskon-quest-winner-title {
910
953
  margin: 0;
911
- font-size: 22px;
954
+ font-size: var(--taskon-font-size-xxl);
912
955
  font-weight: 600;
913
- line-height: 28px;
956
+ line-height: 1.27;
914
957
  color: var(--taskon-color-text);
915
958
  }
916
959
 
@@ -972,9 +1015,9 @@
972
1015
  .taskon-quest-winner-table th {
973
1016
  padding: 12px 16px;
974
1017
  text-align: left;
975
- font-size: 14px;
1018
+ font-size: var(--taskon-font-size);
976
1019
  font-weight: 500;
977
- line-height: 20px;
1020
+ line-height: 1.43;
978
1021
  color: var(--taskon-color-text-secondary);
979
1022
  border-bottom: 1px solid var(--taskon-color-border);
980
1023
  }
@@ -985,9 +1028,9 @@
985
1028
 
986
1029
  .taskon-quest-winner-table td {
987
1030
  padding: 12px 16px;
988
- font-size: 14px;
1031
+ font-size: var(--taskon-font-size);
989
1032
  font-weight: 500;
990
- line-height: 20px;
1033
+ line-height: 1.43;
991
1034
  color: var(--taskon-color-text);
992
1035
  border-bottom: 1px solid var(--taskon-color-border-secondary);
993
1036
  vertical-align: middle;
@@ -1089,9 +1132,9 @@
1089
1132
  padding: var(--taskon-spacing-xs) var(--taskon-spacing-sm);
1090
1133
  background: var(--taskon-color-bg-surface-strong);
1091
1134
  border-radius: var(--taskon-border-radius-sm);
1092
- font-size: 12px;
1135
+ font-size: var(--taskon-font-size-sm);
1093
1136
  font-weight: 500;
1094
- line-height: 16px;
1137
+ line-height: 1.33;
1095
1138
  white-space: nowrap;
1096
1139
  }
1097
1140
 
@@ -1112,13 +1155,27 @@
1112
1155
  * - 状态修饰:.taskon-quest-rewards-{element}--{state}
1113
1156
  */
1114
1157
 
1158
+ /*
1159
+ * Responsive base styles
1160
+ *
1161
+ * Keep mobile breakpoints and fallback patterns centralized here.
1162
+ * Components should reuse these mixins instead of duplicating query logic.
1163
+ */
1164
+
1165
+ /*
1166
+ * Desktop-up mixin:
1167
+ * 1) Enable desktop enhancement in wider containers
1168
+ * 2) Keep viewport media query as fallback
1169
+ */
1170
+
1115
1171
  /* ============================================================================
1116
1172
  主容器
1117
1173
  ============================================================================ */
1118
1174
 
1119
1175
  .taskon-quest-rewards {
1176
+ container-type: inline-size;
1120
1177
  overflow: hidden;
1121
- border-radius: 10px;
1178
+ border-radius: var(--taskon-border-radius-lg);
1122
1179
  background: var(--taskon-color-bg-surface-subtle);
1123
1180
  }
1124
1181
 
@@ -1153,9 +1210,9 @@
1153
1210
  white-space: nowrap;
1154
1211
  text-overflow: ellipsis;
1155
1212
  color: var(--taskon-color-text);
1156
- font-size: 22px;
1213
+ font-size: var(--taskon-font-size-xxl);
1157
1214
  font-weight: 500;
1158
- line-height: 28px;
1215
+ line-height: 1.27;
1159
1216
  }
1160
1217
 
1161
1218
  /* ============================================================================
@@ -1164,7 +1221,7 @@
1164
1221
 
1165
1222
  .taskon-quest-rewards-ranking-point {
1166
1223
  padding: 16px;
1167
- border-radius: 10px;
1224
+ border-radius: var(--taskon-border-radius-lg);
1168
1225
  border: 1px solid var(--taskon-color-border-secondary);
1169
1226
  background: var(--taskon-color-bg-surface-subtle);
1170
1227
  }
@@ -1182,12 +1239,13 @@
1182
1239
  display: flex;
1183
1240
  align-items: center;
1184
1241
  color: var(--taskon-color-text-tertiary);
1185
- font-size: 16px;
1242
+ font-size: var(--taskon-font-size-lg);
1186
1243
  font-weight: 500;
1187
- line-height: 20px;
1244
+ line-height: 1.25;
1188
1245
  }
1189
1246
 
1190
1247
  /* Tip icon margin (controlled externally as TipPopover has no internal margin) */
1248
+
1191
1249
  .taskon-quest-rewards-ranking-point-tip-icon {
1192
1250
  margin-left: 6px;
1193
1251
  }
@@ -1199,9 +1257,9 @@
1199
1257
 
1200
1258
  .taskon-quest-rewards-ranking-point-number {
1201
1259
  color: var(--taskon-color-primary);
1202
- font-size: 22px;
1260
+ font-size: var(--taskon-font-size-xxl);
1203
1261
  font-weight: 700;
1204
- line-height: 28px;
1262
+ line-height: 1.27;
1205
1263
  }
1206
1264
 
1207
1265
  .taskon-quest-rewards-ranking-point-tier {
@@ -1209,26 +1267,26 @@
1209
1267
  top: 100%;
1210
1268
  right: 0;
1211
1269
  color: var(--taskon-color-text-tertiary);
1212
- font-size: 13px;
1270
+ font-size: var(--taskon-font-size-sm);
1213
1271
  font-weight: 500;
1214
- line-height: 16px;
1272
+ line-height: 1.33;
1215
1273
  white-space: nowrap;
1216
1274
  }
1217
1275
 
1218
1276
  .taskon-quest-rewards-ranking-point-amount {
1219
1277
  margin-left: auto;
1220
1278
  color: var(--taskon-color-secondary);
1221
- font-size: 22px;
1279
+ font-size: var(--taskon-font-size-xxl);
1222
1280
  font-weight: 700;
1223
- line-height: 28px;
1281
+ line-height: 1.27;
1224
1282
  }
1225
1283
 
1226
1284
  .taskon-quest-rewards-ranking-point-tip {
1227
1285
  text-align: right;
1228
1286
  margin-left: auto;
1229
1287
  width: 50%;
1230
- font-size: 12px;
1231
- line-height: 16px;
1288
+ font-size: var(--taskon-font-size-sm);
1289
+ line-height: 1.33;
1232
1290
  color: var(--taskon-color-text-tertiary);
1233
1291
  }
1234
1292
 
@@ -1254,8 +1312,8 @@
1254
1312
 
1255
1313
  .taskon-quest-rewards-group-title {
1256
1314
  margin: 0;
1257
- font-size: 16px;
1258
- line-height: 20px;
1315
+ font-size: var(--taskon-font-size-lg);
1316
+ line-height: 1.25;
1259
1317
  font-weight: 500;
1260
1318
  color: var(--taskon-color-text);
1261
1319
  }
@@ -1272,7 +1330,7 @@
1272
1330
  .taskon-quest-rewards-card {
1273
1331
  margin-top: 12px;
1274
1332
  background: var(--taskon-color-bg-surface-subtle);
1275
- border-radius: 8px;
1333
+ border-radius: var(--taskon-border-radius);
1276
1334
  overflow: hidden;
1277
1335
  }
1278
1336
 
@@ -1285,6 +1343,7 @@
1285
1343
  }
1286
1344
 
1287
1345
  /* Tier 表头(仅 PointRanking 模式) */
1346
+
1288
1347
  .taskon-quest-rewards-card-tier {
1289
1348
  display: flex;
1290
1349
  align-items: center;
@@ -1292,8 +1351,8 @@
1292
1351
  gap: 8px;
1293
1352
  padding: 8px 16px;
1294
1353
  background: var(--taskon-color-bg-inset);
1295
- font-size: 16px;
1296
- line-height: 20px;
1354
+ font-size: var(--taskon-font-size-lg);
1355
+ line-height: 1.25;
1297
1356
  }
1298
1357
 
1299
1358
  .taskon-quest-rewards-card-tier--active {
@@ -1322,6 +1381,7 @@
1322
1381
  }
1323
1382
 
1324
1383
  /* 卡片主体 */
1384
+
1325
1385
  .taskon-quest-rewards-card-body {
1326
1386
  padding: 20px;
1327
1387
  display: flex;
@@ -1358,8 +1418,8 @@
1358
1418
 
1359
1419
  .taskon-quest-rewards-whitelist-desc-content {
1360
1420
  margin-top: 8px;
1361
- font-size: 14px;
1362
- line-height: 20px;
1421
+ font-size: var(--taskon-font-size);
1422
+ line-height: 1.43;
1363
1423
  color: var(--taskon-color-text-secondary);
1364
1424
  }
1365
1425
 
@@ -1375,8 +1435,8 @@
1375
1435
  }
1376
1436
 
1377
1437
  .taskon-quest-rewards-row-label {
1378
- font-size: 18px;
1379
- line-height: 24px;
1438
+ font-size: var(--taskon-font-size-xl);
1439
+ line-height: 1.33;
1380
1440
  font-weight: 500;
1381
1441
  color: var(--taskon-color-text);
1382
1442
  flex-shrink: 0;
@@ -1386,8 +1446,8 @@
1386
1446
  display: flex;
1387
1447
  align-items: center;
1388
1448
  gap: 8px;
1389
- font-size: 14px;
1390
- line-height: 16px;
1449
+ font-size: var(--taskon-font-size);
1450
+ line-height: 1.14;
1391
1451
  color: var(--taskon-color-text);
1392
1452
  }
1393
1453
 
@@ -1401,14 +1461,15 @@
1401
1461
  }
1402
1462
 
1403
1463
  /* Chain Icon Tooltip */
1464
+
1404
1465
  .taskon-quest-rewards-chain-tooltip {
1405
1466
  padding: 6px 10px;
1406
1467
  background: var(--taskon-color-bg-floating);
1407
1468
  border: 1px solid var(--taskon-color-border);
1408
- border-radius: 6px;
1469
+ border-radius: var(--taskon-border-radius-sm);
1409
1470
  box-shadow: 0 4px 12px var(--taskon-color-bg-mask);
1410
- font-size: 12px;
1411
- line-height: 16px;
1471
+ font-size: var(--taskon-font-size-sm);
1472
+ line-height: 1.33;
1412
1473
  color: var(--taskon-color-text);
1413
1474
  z-index: 1000;
1414
1475
  white-space: nowrap;
@@ -1432,8 +1493,8 @@
1432
1493
  display: flex;
1433
1494
  align-items: center;
1434
1495
  gap: 8px;
1435
- font-size: 16px;
1436
- line-height: 20px;
1496
+ font-size: var(--taskon-font-size-lg);
1497
+ line-height: 1.25;
1437
1498
  font-weight: 600;
1438
1499
  margin-bottom: 20px;
1439
1500
  opacity: 0.9;
@@ -1458,23 +1519,23 @@
1458
1519
  }
1459
1520
 
1460
1521
  .taskon-quest-rewards-token-amount {
1461
- font-size: 22px;
1462
- line-height: 28px;
1522
+ font-size: var(--taskon-font-size-xxl);
1523
+ line-height: 1.27;
1463
1524
  color: var(--taskon-color-primary);
1464
1525
  }
1465
1526
 
1466
1527
  .taskon-quest-rewards-token-name {
1467
- font-size: 22px;
1468
- line-height: 28px;
1528
+ font-size: var(--taskon-font-size-xxl);
1529
+ line-height: 1.27;
1469
1530
  color: var(--taskon-color-primary);
1470
1531
  }
1471
1532
 
1472
1533
  .taskon-quest-rewards-token-usdt-tag {
1473
- font-size: 12px;
1474
- line-height: 14px;
1534
+ font-size: var(--taskon-font-size-sm);
1535
+ line-height: 1.17;
1475
1536
  padding: 2px 6px;
1476
1537
  background: var(--taskon-color-secondary-bg);
1477
- border-radius: 4px;
1538
+ border-radius: var(--taskon-border-radius-sm);
1478
1539
  color: var(--taskon-color-text-secondary);
1479
1540
  }
1480
1541
 
@@ -1486,27 +1547,28 @@
1486
1547
  }
1487
1548
 
1488
1549
  .taskon-quest-rewards-token-per-label {
1489
- font-size: 14px;
1490
- line-height: 16px;
1550
+ font-size: var(--taskon-font-size);
1551
+ line-height: 1.14;
1491
1552
  color: var(--taskon-color-text-tertiary);
1492
1553
  }
1493
1554
 
1494
1555
  .taskon-quest-rewards-token-per-value {
1495
1556
  margin-left: auto;
1496
- font-size: 14px;
1497
- line-height: 16px;
1557
+ font-size: var(--taskon-font-size);
1558
+ line-height: 1.14;
1498
1559
  color: var(--taskon-color-text-secondary);
1499
1560
  }
1500
1561
 
1501
1562
  /* BRC20 标签 */
1563
+
1502
1564
  .taskon-quest-rewards-token-brc20 {
1503
1565
  padding: 2px 6px;
1504
- font-size: 12px;
1505
- line-height: 14px;
1566
+ font-size: var(--taskon-font-size-sm);
1567
+ line-height: 1.17;
1506
1568
  font-weight: 500;
1507
1569
  color: var(--taskon-color-warning);
1508
1570
  background: var(--taskon-color-warning-bg);
1509
- border-radius: 4px;
1571
+ border-radius: var(--taskon-border-radius-sm);
1510
1572
  }
1511
1573
 
1512
1574
  /* ============================================================================
@@ -1527,8 +1589,8 @@
1527
1589
  .taskon-quest-rewards-minted-nft-name,
1528
1590
  .taskon-quest-rewards-cap-name,
1529
1591
  .taskon-quest-rewards-whitelist-name {
1530
- font-size: 22px;
1531
- line-height: 28px;
1592
+ font-size: var(--taskon-font-size-xxl);
1593
+ line-height: 1.27;
1532
1594
  font-weight: 600;
1533
1595
  color: var(--taskon-color-text);
1534
1596
  overflow: hidden;
@@ -1538,8 +1600,8 @@
1538
1600
  }
1539
1601
 
1540
1602
  .taskon-quest-rewards-minted-nft-quantity {
1541
- font-size: 14px;
1542
- line-height: 16px;
1603
+ font-size: var(--taskon-font-size);
1604
+ line-height: 1.14;
1543
1605
  color: var(--taskon-color-text-secondary);
1544
1606
  }
1545
1607
 
@@ -1551,15 +1613,15 @@
1551
1613
  padding: 12px 16px;
1552
1614
  background: var(--taskon-color-bg-floating);
1553
1615
  border: 1px solid var(--taskon-color-border);
1554
- border-radius: 8px;
1616
+ border-radius: var(--taskon-border-radius);
1555
1617
  box-shadow: 0 4px 12px var(--taskon-color-bg-mask);
1556
1618
  max-width: 300px;
1557
1619
  z-index: 1000;
1558
1620
  }
1559
1621
 
1560
1622
  .taskon-quest-rewards-popover-name {
1561
- font-size: 14px;
1562
- line-height: 18px;
1623
+ font-size: var(--taskon-font-size);
1624
+ line-height: 1.29;
1563
1625
  color: var(--taskon-color-text);
1564
1626
  word-break: break-all;
1565
1627
  }
@@ -1569,8 +1631,8 @@
1569
1631
  }
1570
1632
 
1571
1633
  .taskon-quest-rewards-popover-address-title {
1572
- font-size: 14px;
1573
- line-height: 18px;
1634
+ font-size: var(--taskon-font-size);
1635
+ line-height: 1.29;
1574
1636
  font-weight: 500;
1575
1637
  color: var(--taskon-color-text);
1576
1638
  }
@@ -1591,8 +1653,8 @@
1591
1653
 
1592
1654
  .taskon-quest-rewards-popover-address-text {
1593
1655
  flex: 1;
1594
- font-size: 12px;
1595
- line-height: 16px;
1656
+ font-size: var(--taskon-font-size-sm);
1657
+ line-height: 1.33;
1596
1658
  color: var(--taskon-color-text-tertiary);
1597
1659
  word-break: break-all;
1598
1660
  }
@@ -1632,16 +1694,16 @@
1632
1694
 
1633
1695
  .taskon-quest-rewards-points-amount,
1634
1696
  .taskon-quest-rewards-exp-amount {
1635
- font-size: 22px;
1636
- line-height: 28px;
1697
+ font-size: var(--taskon-font-size-xxl);
1698
+ line-height: 1.27;
1637
1699
  font-weight: 600;
1638
1700
  color: var(--taskon-color-primary);
1639
1701
  }
1640
1702
 
1641
1703
  .taskon-quest-rewards-points-name,
1642
1704
  .taskon-quest-rewards-exp-label {
1643
- font-size: 22px;
1644
- line-height: 28px;
1705
+ font-size: var(--taskon-font-size-xxl);
1706
+ line-height: 1.27;
1645
1707
  color: var(--taskon-color-text);
1646
1708
  }
1647
1709
 
@@ -1656,8 +1718,8 @@
1656
1718
  }
1657
1719
 
1658
1720
  .taskon-quest-rewards-discord-role-name {
1659
- font-size: 22px;
1660
- line-height: 28px;
1721
+ font-size: var(--taskon-font-size-xxl);
1722
+ line-height: 1.27;
1661
1723
  color: var(--taskon-color-link);
1662
1724
  cursor: pointer;
1663
1725
  }
@@ -1667,8 +1729,8 @@
1667
1729
  }
1668
1730
 
1669
1731
  .taskon-quest-rewards-discord-role-warning {
1670
- font-size: 12px;
1671
- line-height: 14px;
1732
+ font-size: var(--taskon-font-size-sm);
1733
+ line-height: 1.17;
1672
1734
  color: var(--taskon-color-warning);
1673
1735
  }
1674
1736
 
@@ -1677,8 +1739,8 @@
1677
1739
  ============================================================================ */
1678
1740
 
1679
1741
  .taskon-quest-rewards-winner-open {
1680
- font-size: 22px;
1681
- line-height: 28px;
1742
+ font-size: var(--taskon-font-size-xxl);
1743
+ line-height: 1.27;
1682
1744
  color: var(--taskon-color-secondary);
1683
1745
  }
1684
1746
 
@@ -1692,8 +1754,8 @@
1692
1754
  .taskon-quest-rewards-winner-fcfs-row {
1693
1755
  display: flex;
1694
1756
  align-items: baseline;
1695
- font-size: 18px;
1696
- line-height: 24px;
1757
+ font-size: var(--taskon-font-size-xl);
1758
+ line-height: 1.33;
1697
1759
  }
1698
1760
 
1699
1761
  .taskon-quest-rewards-winner-available {
@@ -1709,20 +1771,20 @@
1709
1771
  }
1710
1772
 
1711
1773
  .taskon-quest-rewards-winner-label {
1712
- font-size: 14px;
1713
- line-height: 16px;
1774
+ font-size: var(--taskon-font-size);
1775
+ line-height: 1.14;
1714
1776
  color: var(--taskon-color-text-secondary);
1715
1777
  }
1716
1778
 
1717
1779
  .taskon-quest-rewards-winner-count {
1718
- font-size: 22px;
1719
- line-height: 28px;
1780
+ font-size: var(--taskon-font-size-xxl);
1781
+ line-height: 1.27;
1720
1782
  color: var(--taskon-color-secondary);
1721
1783
  }
1722
1784
 
1723
1785
  .taskon-quest-rewards-winner-ranking {
1724
- font-size: 22px;
1725
- line-height: 28px;
1786
+ font-size: var(--taskon-font-size-xxl);
1787
+ line-height: 1.27;
1726
1788
  color: var(--taskon-color-secondary);
1727
1789
  }
1728
1790
 
@@ -1732,28 +1794,59 @@
1732
1794
 
1733
1795
  .taskon-quest-rewards-gas {
1734
1796
  display: flex;
1735
- align-items: center;
1736
- gap: 12px;
1797
+ flex-direction: column;
1798
+ align-items: flex-start;
1799
+ gap: 8px;
1737
1800
  margin-top: 8px;
1738
1801
  }
1739
1802
 
1740
1803
  .taskon-quest-rewards-gas-label {
1741
- font-size: 14px;
1742
- line-height: 16px;
1804
+ font-size: var(--taskon-font-size);
1805
+ line-height: 1.14;
1743
1806
  color: var(--taskon-color-text-tertiary);
1744
1807
  white-space: nowrap;
1745
1808
  }
1746
1809
 
1747
1810
  .taskon-quest-rewards-gas-bar {
1748
1811
  flex: 1;
1812
+ width: 100%;
1749
1813
  position: relative;
1750
1814
  height: 8px;
1751
1815
  background: var(--taskon-color-bg-surface-strong);
1752
- border-radius: 2px;
1816
+ border-radius: var(--taskon-border-radius-sm);
1753
1817
  overflow: hidden;
1754
1818
  }
1755
1819
 
1820
+ @supports (container-type: inline-size) {
1821
+ @container (min-width: 751px) {
1822
+ .taskon-quest-rewards-gas {
1823
+ flex-direction: row;
1824
+ align-items: center;
1825
+ gap: 12px;
1826
+ }
1827
+
1828
+ .taskon-quest-rewards-gas-bar {
1829
+ width: auto;
1830
+ }
1831
+ }
1832
+ }
1833
+
1834
+ @supports not (container-type: inline-size) {
1835
+ @media (min-width: 751px) {
1836
+ .taskon-quest-rewards-gas {
1837
+ flex-direction: row;
1838
+ align-items: center;
1839
+ gap: 12px;
1840
+ }
1841
+
1842
+ .taskon-quest-rewards-gas-bar {
1843
+ width: auto;
1844
+ }
1845
+ }
1846
+ }
1847
+
1756
1848
  /* 进度条靠右对齐(显示剩余量) */
1849
+
1757
1850
  .taskon-quest-rewards-gas-progress {
1758
1851
  position: absolute;
1759
1852
  right: 0;
@@ -1767,11 +1860,12 @@
1767
1860
  var(--taskon-color-secondary) -229.89%,
1768
1861
  var(--taskon-color-primary) 100%
1769
1862
  );
1770
- border-radius: 2px;
1863
+ border-radius: var(--taskon-border-radius-sm);
1771
1864
  overflow: hidden;
1772
1865
  }
1773
1866
 
1774
1867
  /* 波浪纹条纹 */
1868
+
1775
1869
  .taskon-quest-rewards-gas-wave {
1776
1870
  width: 3px;
1777
1871
  flex-shrink: 0;
@@ -1788,14 +1882,14 @@
1788
1882
  width: 100%;
1789
1883
  padding: 26px;
1790
1884
  border: 1px solid var(--taskon-color-border);
1791
- border-radius: 8px;
1885
+ border-radius: var(--taskon-border-radius);
1792
1886
  box-sizing: border-box;
1793
1887
  }
1794
1888
 
1795
1889
  .taskon-quest-rewards-preview-image,
1796
1890
  .taskon-quest-rewards-preview-video {
1797
1891
  width: 100%;
1798
- border-radius: 8px;
1892
+ border-radius: var(--taskon-border-radius);
1799
1893
  display: block;
1800
1894
  }
1801
1895
 
@@ -1807,7 +1901,7 @@
1807
1901
  position: relative;
1808
1902
  padding: 16px;
1809
1903
  background: transparent;
1810
- border-radius: 8px;
1904
+ border-radius: var(--taskon-border-radius);
1811
1905
  border: 1px solid var(--taskon-color-secondary-bg);
1812
1906
  overflow: hidden;
1813
1907
  }
@@ -1820,8 +1914,8 @@
1820
1914
  }
1821
1915
 
1822
1916
  .taskon-quest-rewards-estimated-title {
1823
- font-size: 14px;
1824
- line-height: 16px;
1917
+ font-size: var(--taskon-font-size);
1918
+ line-height: 1.14;
1825
1919
  font-weight: 500;
1826
1920
  color: var(--taskon-color-text-secondary);
1827
1921
  }
@@ -1830,8 +1924,8 @@
1830
1924
  display: flex;
1831
1925
  align-items: baseline;
1832
1926
  gap: 4px;
1833
- font-size: 18px;
1834
- line-height: 24px;
1927
+ font-size: var(--taskon-font-size-xl);
1928
+ line-height: 1.33;
1835
1929
  font-weight: 600;
1836
1930
  text-align: right;
1837
1931
  }
@@ -1845,22 +1939,22 @@
1845
1939
  }
1846
1940
 
1847
1941
  .taskon-quest-rewards-estimated-formula {
1848
- font-size: 12px;
1849
- line-height: 14px;
1942
+ font-size: var(--taskon-font-size-sm);
1943
+ line-height: 1.17;
1850
1944
  color: var(--taskon-color-text-tertiary);
1851
1945
  margin-top: 4px;
1852
1946
  }
1853
1947
 
1854
1948
  .taskon-quest-rewards-estimated-label {
1855
- font-size: 14px;
1856
- line-height: 16px;
1949
+ font-size: var(--taskon-font-size);
1950
+ line-height: 1.14;
1857
1951
  font-weight: 500;
1858
1952
  color: var(--taskon-color-text-secondary);
1859
1953
  }
1860
1954
 
1861
1955
  .taskon-quest-rewards-estimated-points {
1862
- font-size: 18px;
1863
- line-height: 24px;
1956
+ font-size: var(--taskon-font-size-xl);
1957
+ line-height: 1.33;
1864
1958
  font-weight: 700;
1865
1959
  color: var(--taskon-color-text);
1866
1960
  }
@@ -1870,12 +1964,13 @@
1870
1964
  align-items: center;
1871
1965
  justify-content: space-between;
1872
1966
  gap: 8px;
1873
- font-size: 14px;
1874
- line-height: 16px;
1967
+ font-size: var(--taskon-font-size);
1968
+ line-height: 1.14;
1875
1969
  color: var(--taskon-color-text-secondary);
1876
1970
  }
1877
1971
 
1878
1972
  /* 未完成遮罩层 */
1973
+
1879
1974
  .taskon-quest-rewards-estimated-mask {
1880
1975
  position: absolute;
1881
1976
  inset: 0;
@@ -1884,7 +1979,7 @@
1884
1979
  align-items: center;
1885
1980
  justify-content: center;
1886
1981
  background: var(--taskon-color-bg-mask);
1887
- border-radius: 8px;
1982
+ border-radius: var(--taskon-border-radius);
1888
1983
  backdrop-filter: blur(4px);
1889
1984
  padding: 16px;
1890
1985
  }
@@ -1896,8 +1991,8 @@
1896
1991
 
1897
1992
  .taskon-quest-rewards-estimated-mask-title {
1898
1993
  margin-top: 8px;
1899
- font-size: 14px;
1900
- line-height: 16px;
1994
+ font-size: var(--taskon-font-size);
1995
+ line-height: 1.14;
1901
1996
  font-weight: 500;
1902
1997
  color: var(--taskon-color-secondary);
1903
1998
  text-align: center;
@@ -1905,8 +2000,8 @@
1905
2000
 
1906
2001
  .taskon-quest-rewards-estimated-mask-subtitle {
1907
2002
  margin-top: 4px;
1908
- font-size: 12px;
1909
- line-height: 14px;
2003
+ font-size: var(--taskon-font-size-sm);
2004
+ line-height: 1.17;
1910
2005
  color: var(--taskon-color-text);
1911
2006
  text-align: center;
1912
2007
  }
@@ -1920,8 +2015,8 @@
1920
2015
  }
1921
2016
 
1922
2017
  .taskon-quest-rewards-bonus-title {
1923
- font-size: 16px;
1924
- line-height: 20px;
2018
+ font-size: var(--taskon-font-size-lg);
2019
+ line-height: 1.25;
1925
2020
  font-weight: 500;
1926
2021
  color: var(--taskon-color-text);
1927
2022
  }
@@ -1932,21 +2027,22 @@
1932
2027
  display: flex;
1933
2028
  flex-direction: column;
1934
2029
  gap: 24px;
1935
- border-radius: 10px;
2030
+ border-radius: var(--taskon-border-radius-lg);
1936
2031
  background: var(--taskon-color-bg-surface-subtle);
1937
2032
  }
1938
2033
 
1939
2034
  /* 覆盖 BaseRow 的 label 样式,匹配 Vue 版本 */
2035
+
1940
2036
  .taskon-quest-rewards-bonus-card .taskon-quest-rewards-row-label {
1941
2037
  color: var(--taskon-color-text-secondary);
1942
- font-size: 16px;
1943
- line-height: 20px;
2038
+ font-size: var(--taskon-font-size-lg);
2039
+ line-height: 1.25;
1944
2040
  }
1945
2041
 
1946
2042
  .taskon-quest-rewards-bonus-desc {
1947
2043
  color: var(--taskon-color-text-tertiary);
1948
- font-size: 14px;
1949
- line-height: 18px;
2044
+ font-size: var(--taskon-font-size);
2045
+ line-height: 1.29;
1950
2046
  text-align: right;
1951
2047
  }
1952
2048
 
@@ -1955,7 +2051,7 @@
1955
2051
  align-items: flex-end;
1956
2052
  color: var(--taskon-color-text);
1957
2053
  text-align: right;
1958
- font-size: 16px;
2054
+ font-size: var(--taskon-font-size-lg);
1959
2055
  font-weight: 600;
1960
2056
  line-height: normal;
1961
2057
  }
@@ -1965,167 +2061,10 @@
1965
2061
  }
1966
2062
 
1967
2063
  .taskon-quest-rewards-bonus-unit {
1968
- font-size: 14px;
2064
+ font-size: var(--taskon-font-size);
1969
2065
  font-weight: 400;
1970
2066
  }
1971
2067
 
1972
- /* ============================================================================
1973
- 移动端响应式
1974
- ============================================================================ */
1975
-
1976
- @media (max-width: 750px) {
1977
- .taskon-quest-rewards {
1978
- margin-top: 4vw;
1979
- }
1980
-
1981
- .taskon-quest-rewards-container {
1982
- padding: 4vw;
1983
- gap: 7.2vw;
1984
- }
1985
-
1986
- /* 用户信息移动端样式 */
1987
- .taskon-quest-rewards-user-avatar {
1988
- margin-right: 2.933vw;
1989
- width: 10.667vw;
1990
- height: 10.667vw;
1991
- }
1992
-
1993
- .taskon-quest-rewards-user-name {
1994
- font-size: 4.8vw;
1995
- line-height: 6vw;
1996
- }
1997
-
1998
- /* 排名积分移动端样式 */
1999
- .taskon-quest-rewards-ranking-point {
2000
- padding: 3.467vw 4vw;
2001
- }
2002
-
2003
- .taskon-quest-rewards-ranking-point-label {
2004
- font-size: 3.733vw;
2005
- line-height: 4.667vw;
2006
- }
2007
-
2008
- .taskon-quest-rewards-ranking-point-number,
2009
- .taskon-quest-rewards-ranking-point-amount {
2010
- font-size: 4.533vw;
2011
- line-height: 5.733vw;
2012
- }
2013
-
2014
- .taskon-quest-rewards-ranking-point-row--points {
2015
- margin-top: 6.4vw;
2016
- }
2017
-
2018
- .taskon-quest-rewards-ranking-point-tier {
2019
- font-size: 2.933vw;
2020
- line-height: 3.733vw;
2021
- }
2022
-
2023
- .taskon-quest-rewards-card {
2024
- margin-top: 1.6vw;
2025
- }
2026
-
2027
- .taskon-quest-rewards-card-tier {
2028
- gap: 0.8vw;
2029
- padding: 0.8vw 1.333vw;
2030
- font-size: 3.467vw;
2031
- line-height: 4.4vw;
2032
- }
2033
-
2034
- .taskon-quest-rewards-card-body {
2035
- padding: 1.6vw;
2036
- gap: 2.133vw;
2037
- }
2038
-
2039
- .taskon-quest-rewards-row-label {
2040
- font-size: 3.867vw;
2041
- line-height: 4.8vw;
2042
- }
2043
-
2044
- .taskon-quest-rewards-token-amount,
2045
- .taskon-quest-rewards-token-name,
2046
- .taskon-quest-rewards-nft-name,
2047
- .taskon-quest-rewards-minted-nft-name,
2048
- .taskon-quest-rewards-cap-name,
2049
- .taskon-quest-rewards-whitelist-name,
2050
- .taskon-quest-rewards-points-amount,
2051
- .taskon-quest-rewards-points-name,
2052
- .taskon-quest-rewards-exp-amount,
2053
- .taskon-quest-rewards-exp-label,
2054
- .taskon-quest-rewards-discord-role-name,
2055
- .taskon-quest-rewards-winner-count,
2056
- .taskon-quest-rewards-winner-ranking,
2057
- .taskon-quest-rewards-winner-open {
2058
- font-size: 4.267vw;
2059
- line-height: 5.333vw;
2060
- }
2061
-
2062
- .taskon-quest-rewards-preview {
2063
- padding: 6.267vw;
2064
- }
2065
-
2066
- /* Bonus 模块移动端样式 */
2067
- .taskon-quest-rewards-bonus-card {
2068
- margin-top: 2.667vw;
2069
- padding: 4vw;
2070
- gap: 5.333vw;
2071
- }
2072
-
2073
- .taskon-quest-rewards-bonus-card .taskon-quest-rewards-row-label {
2074
- font-size: 3.467vw;
2075
- line-height: 4.4vw;
2076
- }
2077
-
2078
- .taskon-quest-rewards-bonus-desc {
2079
- font-size: 3.2vw;
2080
- line-height: 4vw;
2081
- }
2082
-
2083
- .taskon-quest-rewards-bonus-value {
2084
- font-size: 3.733vw;
2085
- line-height: 4vw;
2086
- }
2087
-
2088
- .taskon-quest-rewards-bonus-amount {
2089
- margin-right: 0.8vw;
2090
- }
2091
-
2092
- .taskon-quest-rewards-bonus-unit {
2093
- font-size: 3.2vw;
2094
- }
2095
-
2096
- /* View Leaderboard 按钮移动端样式 */
2097
- .taskon-quest-rewards-view-leaderboard {
2098
- font-size: 3.2vw;
2099
- line-height: 4vw;
2100
- }
2101
-
2102
- .taskon-quest-rewards-view-leaderboard-arrow {
2103
- margin-left: 1.867vw;
2104
- }
2105
-
2106
- /* Gas Station 移动端样式 */
2107
- .taskon-quest-rewards-gas {
2108
- flex-direction: column;
2109
- align-items: flex-start;
2110
- gap: 2vw;
2111
- }
2112
-
2113
- .taskon-quest-rewards-gas-label {
2114
- font-size: 3.2vw;
2115
- line-height: 4vw;
2116
- }
2117
-
2118
- .taskon-quest-rewards-gas-bar {
2119
- width: 100%;
2120
- height: 1.6vw;
2121
- }
2122
-
2123
- .taskon-quest-rewards-gas-wave {
2124
- width: 0.6vw;
2125
- gap: 1.2vw;
2126
- }
2127
- }
2128
-
2129
2068
  /* ============================================================================
2130
2069
  View Leaderboard 按钮(链接样式,与原版一致)
2131
2070
  ============================================================================ */
@@ -2139,8 +2078,8 @@
2139
2078
  border: none;
2140
2079
  cursor: pointer;
2141
2080
  color: var(--taskon-color-link);
2142
- font-size: 14px;
2143
- line-height: 18px;
2081
+ font-size: var(--taskon-font-size);
2082
+ line-height: 1.29;
2144
2083
  transition: opacity 0.2s ease;
2145
2084
  }
2146
2085
 
@@ -2153,12 +2092,12 @@
2153
2092
  }
2154
2093
 
2155
2094
  .taskon-quest-rewards-view-leaderboard-text {
2156
- font-size: 14px;
2095
+ font-size: var(--taskon-font-size);
2157
2096
  font-weight: 400;
2158
2097
  }
2159
2098
 
2160
2099
  .taskon-quest-rewards-view-leaderboard-arrow {
2161
- font-size: 12px;
2100
+ font-size: var(--taskon-font-size-sm);
2162
2101
  margin-left: 4px;
2163
2102
  }
2164
2103
 
@@ -2170,14 +2109,14 @@
2170
2109
 
2171
2110
  .taskon-quest-leaderboard-title {
2172
2111
  margin: 0;
2173
- font-size: 24px;
2112
+ font-size: var(--taskon-font-size-xxxl);
2174
2113
  font-weight: 600;
2175
2114
  color: var(--taskon-color-text);
2176
2115
  }
2177
2116
 
2178
2117
  .taskon-quest-leaderboard-subtitle {
2179
2118
  margin: 0;
2180
- font-size: 14px;
2119
+ font-size: var(--taskon-font-size);
2181
2120
  color: var(--taskon-color-text-secondary);
2182
2121
  }
2183
2122
 
@@ -2273,22 +2212,25 @@
2273
2212
  }
2274
2213
 
2275
2214
  /* 排名徽章 */
2215
+
2276
2216
  .taskon-quest-leaderboard-rank {
2277
2217
  display: inline-flex;
2278
2218
  align-items: center;
2279
- font-size: 14px;
2219
+ font-size: var(--taskon-font-size);
2280
2220
  font-weight: 500;
2281
2221
  color: var(--taskon-color-text);
2282
2222
  }
2283
2223
 
2284
2224
  /* Unranked / N/A 状态 */
2225
+
2285
2226
  .taskon-quest-leaderboard-rank--unranked {
2286
- font-size: 14px;
2227
+ font-size: var(--taskon-font-size);
2287
2228
  font-weight: 500;
2288
2229
  color: var(--taskon-color-text-tertiary);
2289
2230
  }
2290
2231
 
2291
2232
  /* 表头带提示框的容器 */
2233
+
2292
2234
  .taskon-quest-leaderboard-header {
2293
2235
  display: inline-flex;
2294
2236
  align-items: center;
@@ -2296,13 +2238,15 @@
2296
2238
  }
2297
2239
 
2298
2240
  /* 层级列 */
2241
+
2299
2242
  .taskon-quest-leaderboard-tier {
2300
- font-size: 14px;
2243
+ font-size: var(--taskon-font-size);
2301
2244
  font-weight: 500;
2302
2245
  color: var(--taskon-color-text);
2303
2246
  }
2304
2247
 
2305
2248
  /* 用户单元格 */
2249
+
2306
2250
  .taskon-quest-leaderboard-user {
2307
2251
  display: flex;
2308
2252
  align-items: center;
@@ -2314,15 +2258,15 @@
2314
2258
 
2315
2259
  .taskon-quest-leaderboard-user-badge {
2316
2260
  padding: 2px 8px;
2317
- font-size: 12px;
2261
+ font-size: var(--taskon-font-size-sm);
2318
2262
  font-weight: 600;
2319
2263
  color: var(--taskon-color-text-on-primary);
2320
2264
  background: var(--taskon-color-secondary);
2321
- border-radius: 4px;
2265
+ border-radius: var(--taskon-border-radius-sm);
2322
2266
  }
2323
2267
 
2324
2268
  .taskon-quest-leaderboard-user-name {
2325
- font-size: 14px;
2269
+ font-size: var(--taskon-font-size);
2326
2270
  color: var(--taskon-color-text);
2327
2271
  overflow: hidden;
2328
2272
  text-overflow: ellipsis;
@@ -2330,13 +2274,15 @@
2330
2274
  }
2331
2275
 
2332
2276
  /* 积分 */
2277
+
2333
2278
  .taskon-quest-leaderboard-points {
2334
- font-size: 14px;
2279
+ font-size: var(--taskon-font-size);
2335
2280
  font-weight: 500;
2336
2281
  color: var(--taskon-color-text);
2337
2282
  }
2338
2283
 
2339
2284
  /* 奖励 */
2285
+
2340
2286
  .taskon-quest-leaderboard-reward-cell {
2341
2287
  display: inline-flex;
2342
2288
  align-items: center;
@@ -2345,25 +2291,25 @@
2345
2291
  }
2346
2292
 
2347
2293
  .taskon-quest-leaderboard-reward-type {
2348
- font-size: 14px;
2294
+ font-size: var(--taskon-font-size);
2349
2295
  font-weight: 600;
2350
2296
  color: var(--taskon-color-text);
2351
2297
  }
2352
2298
 
2353
2299
  .taskon-quest-leaderboard-reward {
2354
- font-size: 14px;
2300
+ font-size: var(--taskon-font-size);
2355
2301
  font-weight: 600;
2356
2302
  color: var(--taskon-color-primary);
2357
2303
  }
2358
2304
 
2359
2305
  .taskon-quest-leaderboard-not-qualified {
2360
- font-size: 14px;
2306
+ font-size: var(--taskon-font-size);
2361
2307
  font-weight: 600;
2362
2308
  color: var(--taskon-color-text-tertiary);
2363
2309
  }
2364
2310
 
2365
2311
  .taskon-quest-leaderboard-no-reward {
2366
- font-size: 14px;
2312
+ font-size: var(--taskon-font-size);
2367
2313
  color: var(--taskon-color-text-tertiary);
2368
2314
  }
2369
2315
  /**
@@ -2371,26 +2317,51 @@
2371
2317
  * Following Widget naming convention: .taskon-quest-footer-*
2372
2318
  */
2373
2319
 
2320
+ /*
2321
+ * Responsive base styles
2322
+ *
2323
+ * Keep mobile breakpoints and fallback patterns centralized here.
2324
+ * Components should reuse these mixins instead of duplicating query logic.
2325
+ */
2326
+
2327
+ /*
2328
+ * Desktop-up mixin:
2329
+ * 1) Enable desktop enhancement in wider containers
2330
+ * 2) Keep viewport media query as fallback
2331
+ */
2332
+
2374
2333
  /* ============================================================================
2375
2334
  Main Container
2376
2335
  ============================================================================ */
2377
2336
 
2378
2337
  .taskon-quest-footer {
2379
- margin-top: 20px;
2338
+ container-type: inline-size;
2339
+ margin-top: 0;
2380
2340
  position: relative;
2381
2341
  }
2382
2342
 
2383
- @media (max-width: 750px) {
2343
+ @supports (container-type: inline-size) {
2344
+ @container (min-width: 751px) {
2384
2345
  .taskon-quest-footer {
2385
- margin-top: 0;
2346
+ margin-top: 20px;
2347
+ }
2348
+ }
2349
+ }
2350
+
2351
+ @supports not (container-type: inline-size) {
2352
+ @media (min-width: 751px) {
2353
+ .taskon-quest-footer {
2354
+ margin-top: 20px;
2355
+ }
2356
+ }
2386
2357
  }
2387
- }
2388
2358
 
2389
2359
  /* ============================================================================
2390
2360
  Status Card - New Design (v2)
2391
2361
  ============================================================================ */
2392
2362
 
2393
2363
  /* Container for the entire status section */
2364
+
2394
2365
  .taskon-quest-footer-status {
2395
2366
  display: flex;
2396
2367
  flex-direction: column;
@@ -2398,6 +2369,7 @@
2398
2369
  }
2399
2370
 
2400
2371
  /* Title row: title + badge */
2372
+
2401
2373
  .taskon-quest-footer-title-row {
2402
2374
  display: flex;
2403
2375
  align-items: center;
@@ -2405,16 +2377,17 @@
2405
2377
  }
2406
2378
 
2407
2379
  /* Badge styles */
2380
+
2408
2381
  .taskon-quest-footer-badge {
2409
2382
  display: inline-flex;
2410
2383
  align-items: center;
2411
2384
  justify-content: center;
2412
2385
  height: 20px;
2413
2386
  padding: 0 8px;
2414
- border-radius: 12px;
2415
- font-size: 12px;
2387
+ border-radius: var(--taskon-border-radius-lg);
2388
+ font-size: var(--taskon-font-size-sm);
2416
2389
  font-weight: 600;
2417
- line-height: 16px;
2390
+ line-height: 1.33;
2418
2391
  text-transform: uppercase;
2419
2392
  }
2420
2393
 
@@ -2430,29 +2403,23 @@
2430
2403
  }
2431
2404
 
2432
2405
  /* Dark content card */
2406
+
2433
2407
  .taskon-quest-footer-card {
2434
2408
  display: flex;
2435
- gap: 12px;
2436
- align-items: center;
2409
+ flex-direction: column;
2410
+ gap: 8px;
2411
+ align-items: stretch;
2437
2412
  padding: 12px;
2438
- border-radius: 8px;
2413
+ border-radius: var(--taskon-border-radius);
2439
2414
  background: var(--taskon-color-bg-surface-strong);
2440
2415
  }
2441
2416
 
2442
- @media (max-width: 750px) {
2443
- .taskon-quest-footer-card {
2444
- flex-direction: column;
2445
- align-items: stretch;
2446
- gap: 8px;
2447
- padding: 3.2vw;
2448
- }
2449
- }
2450
-
2451
2417
  /* Card message text (for simple messages) */
2418
+
2452
2419
  .taskon-quest-footer-card-message {
2453
- font-size: 16px;
2420
+ font-size: var(--taskon-font-size-lg);
2454
2421
  font-weight: 600;
2455
- line-height: 24px;
2422
+ line-height: 1.5;
2456
2423
  color: var(--taskon-color-text);
2457
2424
  }
2458
2425
 
@@ -2461,6 +2428,7 @@
2461
2428
  ============================================================================ */
2462
2429
 
2463
2430
  /* Card content area */
2431
+
2464
2432
  .taskon-quest-footer-card-content {
2465
2433
  display: flex;
2466
2434
  flex-direction: column;
@@ -2474,33 +2442,18 @@
2474
2442
  .taskon-quest-footer-title {
2475
2443
  font-size: 20px;
2476
2444
  font-weight: 600;
2477
- line-height: 28px;
2445
+ line-height: 1.4;
2478
2446
  color: var(--taskon-color-text);
2479
2447
  }
2480
2448
 
2481
- @media (max-width: 750px) {
2482
- .taskon-quest-footer-title {
2483
- font-size: 4.267vw;
2484
- line-height: 5.867vw;
2485
- }
2486
- }
2487
-
2488
2449
  .taskon-quest-footer-desc {
2489
2450
  margin-top: 2px;
2490
- font-size: 14px;
2451
+ font-size: var(--taskon-font-size);
2491
2452
  font-weight: 500;
2492
- line-height: 18px;
2453
+ line-height: 1.29;
2493
2454
  color: var(--taskon-color-text-tertiary);
2494
2455
  }
2495
2456
 
2496
- @media (max-width: 750px) {
2497
- .taskon-quest-footer-desc {
2498
- margin-top: 0.533vw;
2499
- font-size: 3.2vw;
2500
- line-height: 3.733vw;
2501
- }
2502
- }
2503
-
2504
2457
  /* ============================================================================
2505
2458
  Connect Wallet
2506
2459
  ============================================================================ */
@@ -2513,12 +2466,12 @@
2513
2466
  .taskon-quest-footer-connect-btn {
2514
2467
  width: 100%;
2515
2468
  padding: 12px 24px;
2516
- font-size: 16px;
2469
+ font-size: var(--taskon-font-size-lg);
2517
2470
  font-weight: 600;
2518
2471
  color: var(--taskon-color-text-on-primary);
2519
2472
  background-color: var(--taskon-color-primary);
2520
2473
  border: none;
2521
- border-radius: 8px;
2474
+ border-radius: var(--taskon-border-radius);
2522
2475
  cursor: pointer;
2523
2476
  transition: background-color 0.2s ease;
2524
2477
  }
@@ -2534,12 +2487,12 @@
2534
2487
  .taskon-quest-footer-complete-btn {
2535
2488
  width: 100%;
2536
2489
  padding: 12px 24px;
2537
- font-size: 16px;
2490
+ font-size: var(--taskon-font-size-lg);
2538
2491
  font-weight: 600;
2539
2492
  color: var(--taskon-color-text-on-primary);
2540
2493
  background-color: var(--taskon-color-primary);
2541
2494
  border: none;
2542
- border-radius: 8px;
2495
+ border-radius: var(--taskon-border-radius);
2543
2496
  cursor: pointer;
2544
2497
  transition: background-color 0.2s ease, opacity 0.2s ease;
2545
2498
  }
@@ -2553,14 +2506,8 @@
2553
2506
  cursor: not-allowed;
2554
2507
  }
2555
2508
 
2556
- @media (max-width: 750px) {
2557
- .taskon-quest-footer-complete-btn {
2558
- height: 13.33vw;
2559
- font-weight: bold;
2560
- }
2561
- }
2562
-
2563
2509
  /* Complete Button Loading State */
2510
+
2564
2511
  .taskon-quest-footer-complete-btn--loading {
2565
2512
  pointer-events: none;
2566
2513
  }
@@ -2600,18 +2547,11 @@
2600
2547
  }
2601
2548
 
2602
2549
  .taskon-quest-footer-earned-hint {
2603
- font-size: 14px;
2550
+ font-size: var(--taskon-font-size);
2604
2551
  font-weight: 500;
2605
2552
  color: var(--taskon-color-text-tertiary);
2606
2553
  }
2607
2554
 
2608
- @media (max-width: 750px) {
2609
- .taskon-quest-footer-earned-placeholder {
2610
- margin-top: 2vw;
2611
- gap: 2.267vw;
2612
- }
2613
- }
2614
-
2615
2555
  /* ============================================================================
2616
2556
  Earned Rewards - New Design (v2)
2617
2557
  ============================================================================ */
@@ -2624,12 +2564,6 @@
2624
2564
  margin-top: 0;
2625
2565
  }
2626
2566
 
2627
- @media (max-width: 750px) {
2628
- .taskon-quest-footer-earned {
2629
- gap: 0;
2630
- }
2631
- }
2632
-
2633
2567
  .taskon-quest-footer-earned-list {
2634
2568
  display: flex;
2635
2569
  flex-direction: column;
@@ -2637,12 +2571,13 @@
2637
2571
  }
2638
2572
 
2639
2573
  /* Single reward inner card */
2574
+
2640
2575
  .taskon-quest-footer-earned-single {
2641
2576
  display: flex;
2642
2577
  flex-direction: column;
2643
2578
  gap: 0;
2644
2579
  padding: 8px;
2645
- border-radius: 8px;
2580
+ border-radius: var(--taskon-border-radius);
2646
2581
  border: 1px solid var(--taskon-color-border-secondary);
2647
2582
  background: var(--taskon-color-bg-surface-strong);
2648
2583
  }
@@ -2667,14 +2602,14 @@
2667
2602
  }
2668
2603
 
2669
2604
  .taskon-quest-footer-earned-single-type {
2670
- font-size: 18px;
2605
+ font-size: var(--taskon-font-size-xl);
2671
2606
  font-weight: 600;
2672
- line-height: 24px;
2607
+ line-height: 1.33;
2673
2608
  color: var(--taskon-color-text);
2674
2609
  }
2675
2610
 
2676
2611
  .taskon-quest-footer-earned-single-name {
2677
- font-size: 12px;
2612
+ font-size: var(--taskon-font-size-sm);
2678
2613
  font-weight: 500;
2679
2614
  line-height: normal;
2680
2615
  color: var(--taskon-color-text-disabled);
@@ -2682,6 +2617,7 @@
2682
2617
  }
2683
2618
 
2684
2619
  /* Multi reward row */
2620
+
2685
2621
  .taskon-quest-footer-earned-multi {
2686
2622
  display: flex;
2687
2623
  align-items: center;
@@ -2689,13 +2625,14 @@
2689
2625
  }
2690
2626
 
2691
2627
  .taskon-quest-footer-earned-multi-text {
2692
- font-size: 16px;
2628
+ font-size: var(--taskon-font-size-lg);
2693
2629
  font-weight: 600;
2694
- line-height: 24px;
2630
+ line-height: 1.5;
2695
2631
  color: var(--taskon-color-text);
2696
2632
  }
2697
2633
 
2698
2634
  /* Redirect mode row (same layout as multi) */
2635
+
2699
2636
  .taskon-quest-footer-earned-redirect {
2700
2637
  display: flex;
2701
2638
  align-items: center;
@@ -2703,40 +2640,30 @@
2703
2640
  }
2704
2641
 
2705
2642
  .taskon-quest-footer-earned-redirect-text {
2706
- font-size: 16px;
2643
+ font-size: var(--taskon-font-size-lg);
2707
2644
  font-weight: 600;
2708
- line-height: 24px;
2645
+ line-height: 1.5;
2709
2646
  color: var(--taskon-color-text);
2710
2647
  flex: 1;
2711
2648
  }
2712
2649
 
2713
2650
  /* Hide first reward on mobile when has multiple rewards */
2714
- @media (max-width: 750px) {
2715
- .taskon-quest-footer-earned-first--hide-mobile {
2716
- display: none;
2717
- }
2651
+
2652
+ .taskon-quest-footer-earned-first--hide-mobile {
2653
+ display: none;
2718
2654
  }
2719
2655
 
2720
2656
  .taskon-quest-footer-earned-more {
2721
2657
  display: flex;
2722
- flex-direction: column;
2723
- justify-content: center;
2724
- align-items: flex-start;
2658
+ flex-direction: row;
2659
+ justify-content: flex-start;
2660
+ align-items: center;
2725
2661
  flex: 1;
2726
- gap: 4px;
2662
+ gap: 12px;
2727
2663
  overflow: hidden;
2728
- border-radius: 4px;
2664
+ border-radius: var(--taskon-border-radius-sm);
2729
2665
  background-color: var(--taskon-color-bg-inset);
2730
- padding: 4px 8px;
2731
- }
2732
-
2733
- @media (max-width: 750px) {
2734
- .taskon-quest-footer-earned-more {
2735
- flex-direction: row;
2736
- align-items: center;
2737
- gap: 3vw;
2738
- padding: 2vw;
2739
- }
2666
+ padding: 8px;
2740
2667
  }
2741
2668
 
2742
2669
  /* ============================================================================
@@ -2748,17 +2675,11 @@
2748
2675
  flex-direction: column;
2749
2676
  justify-content: center;
2750
2677
  flex: 1;
2751
- border-radius: 4px;
2678
+ border-radius: var(--taskon-border-radius-sm);
2752
2679
  background-color: var(--taskon-color-bg-inset);
2753
2680
  padding: 4px 8px;
2754
2681
  }
2755
2682
 
2756
- @media (max-width: 750px) {
2757
- .taskon-quest-footer-reward {
2758
- padding: 2vw;
2759
- }
2760
- }
2761
-
2762
2683
  /* ============================================================================
2763
2684
  Base Info (for future implementation)
2764
2685
  ============================================================================ */
@@ -2767,13 +2688,7 @@
2767
2688
  display: flex;
2768
2689
  align-items: center;
2769
2690
  gap: 4px;
2770
- font-size: 18px;
2771
- }
2772
-
2773
- @media (max-width: 750px) {
2774
- .taskon-quest-footer-reward-info {
2775
- gap: 2vw;
2776
- }
2691
+ font-size: var(--taskon-font-size-xl);
2777
2692
  }
2778
2693
 
2779
2694
  .taskon-quest-footer-reward-info img {
@@ -2783,13 +2698,6 @@
2783
2698
  object-fit: cover;
2784
2699
  }
2785
2700
 
2786
- @media (max-width: 750px) {
2787
- .taskon-quest-footer-reward-info img {
2788
- height: 8vw;
2789
- width: 8vw;
2790
- }
2791
- }
2792
-
2793
2701
  .taskon-quest-footer-reward-amount {
2794
2702
  color: var(--taskon-color-primary);
2795
2703
  }
@@ -2810,7 +2718,7 @@
2810
2718
  display: flex;
2811
2719
  align-items: center;
2812
2720
  gap: 4px;
2813
- font-size: 14px;
2721
+ font-size: var(--taskon-font-size);
2814
2722
  color: var(--taskon-color-text-tertiary);
2815
2723
  cursor: pointer;
2816
2724
  transition: color 0.2s ease;
@@ -2830,12 +2738,12 @@
2830
2738
 
2831
2739
  .taskon-quest-footer-claim-btn {
2832
2740
  padding: 4px 12px;
2833
- font-size: 14px;
2741
+ font-size: var(--taskon-font-size);
2834
2742
  font-weight: 600;
2835
2743
  color: var(--taskon-color-text-on-primary);
2836
2744
  background-color: var(--taskon-color-primary);
2837
2745
  border: none;
2838
- border-radius: 4px;
2746
+ border-radius: var(--taskon-border-radius-sm);
2839
2747
  cursor: pointer;
2840
2748
  transition: background-color 0.2s ease, opacity 0.2s ease;
2841
2749
  }
@@ -2867,7 +2775,7 @@
2867
2775
  ============================================================================ */
2868
2776
 
2869
2777
  .taskon-quest-footer-earned-more-text {
2870
- font-size: 14px;
2778
+ font-size: var(--taskon-font-size);
2871
2779
  font-weight: 600;
2872
2780
  color: var(--taskon-color-text);
2873
2781
  }
@@ -2897,11 +2805,11 @@
2897
2805
  display: inline-flex;
2898
2806
  align-items: center;
2899
2807
  padding: 2px 6px;
2900
- font-size: 12px;
2808
+ font-size: var(--taskon-font-size-sm);
2901
2809
  font-weight: 500;
2902
2810
  color: var(--taskon-color-text-on-primary);
2903
2811
  background-color: var(--taskon-color-primary);
2904
- border-radius: 2px;
2812
+ border-radius: var(--taskon-border-radius-sm);
2905
2813
  }
2906
2814
 
2907
2815
  .taskon-quest-footer-reward-badge-icon {
@@ -2911,14 +2819,6 @@
2911
2819
  object-fit: cover;
2912
2820
  }
2913
2821
 
2914
- @media (max-width: 750px) {
2915
- .taskon-quest-footer-reward-badge-icon {
2916
- margin-left: 1.067vw;
2917
- width: 3.2vw;
2918
- height: 3.2vw;
2919
- }
2920
- }
2921
-
2922
2822
  .taskon-quest-footer-reward-badge-line {
2923
2823
  margin-left: 4px;
2924
2824
  width: 1px;
@@ -2927,13 +2827,6 @@
2927
2827
  background: var(--taskon-color-border-secondary);
2928
2828
  }
2929
2829
 
2930
- @media (max-width: 750px) {
2931
- .taskon-quest-footer-reward-badge-line {
2932
- margin-left: 0.8vw;
2933
- height: 2.267vw;
2934
- }
2935
- }
2936
-
2937
2830
  /* ============================================================================
2938
2831
  Reward - Tx Hash
2939
2832
  ============================================================================ */
@@ -2942,7 +2835,7 @@
2942
2835
  display: flex;
2943
2836
  align-items: center;
2944
2837
  gap: 4px;
2945
- font-size: 14px;
2838
+ font-size: var(--taskon-font-size);
2946
2839
  }
2947
2840
 
2948
2841
  .taskon-quest-footer-reward-tx-label {
@@ -2964,7 +2857,7 @@
2964
2857
 
2965
2858
  .taskon-quest-footer-reward-dropping {
2966
2859
  margin-top: 4px;
2967
- font-size: 14px;
2860
+ font-size: var(--taskon-font-size);
2968
2861
  color: var(--taskon-color-text-tertiary);
2969
2862
  }
2970
2863
 
@@ -2979,13 +2872,6 @@
2979
2872
  object-fit: cover;
2980
2873
  }
2981
2874
 
2982
- @media (max-width: 750px) {
2983
- .taskon-quest-footer-reward-chain-icon {
2984
- width: 8vw;
2985
- height: 8vw;
2986
- }
2987
- }
2988
-
2989
2875
  /* ============================================================================
2990
2876
  Detail Panel Dialog
2991
2877
  ============================================================================ */
@@ -2999,31 +2885,18 @@
2999
2885
  }
3000
2886
 
3001
2887
  .taskon-quest-footer-detail-title {
3002
- font-size: 22px;
2888
+ font-size: var(--taskon-font-size-xxl);
3003
2889
  font-weight: 600;
3004
2890
  color: var(--taskon-color-text);
3005
2891
  margin: 0 0 20px 0;
3006
2892
  }
3007
2893
 
3008
- @media (max-width: 750px) {
3009
- .taskon-quest-footer-detail-title {
3010
- font-size: 4.8vw;
3011
- margin-bottom: 4vw;
3012
- }
3013
- }
3014
-
3015
2894
  .taskon-quest-footer-detail-content {
3016
2895
  display: flex;
3017
2896
  flex-direction: column;
3018
2897
  gap: 24px;
3019
2898
  }
3020
2899
 
3021
- @media (max-width: 750px) {
3022
- .taskon-quest-footer-detail-content {
3023
- gap: 5vw;
3024
- }
3025
- }
3026
-
3027
2900
  /* ============================================================================
3028
2901
  Selection Item
3029
2902
  ============================================================================ */
@@ -3036,14 +2909,8 @@
3036
2909
  margin-top: 24px;
3037
2910
  }
3038
2911
 
3039
- @media (max-width: 750px) {
3040
- .taskon-quest-footer-selection-item + .taskon-quest-footer-selection-item {
3041
- margin-top: 5vw;
3042
- }
3043
- }
3044
-
3045
2912
  .taskon-quest-footer-selection-label {
3046
- font-size: 16px;
2913
+ font-size: var(--taskon-font-size-lg);
3047
2914
  font-weight: 500;
3048
2915
  color: var(--taskon-color-text-secondary);
3049
2916
  }
@@ -3055,25 +2922,20 @@
3055
2922
  gap: 24px;
3056
2923
  }
3057
2924
 
3058
- @media (max-width: 750px) {
3059
- .taskon-quest-footer-selection-rewards {
3060
- margin-top: 2vw;
3061
- gap: 5vw;
3062
- }
3063
- }
3064
-
3065
2925
  /* Selection Item - Transparent reward card background */
2926
+
3066
2927
  .taskon-quest-footer-selection-rewards .taskon-quest-footer-reward {
3067
2928
  background: transparent;
3068
2929
  }
3069
2930
 
3070
2931
  /* Selection Failed */
2932
+
3071
2933
  .taskon-quest-footer-selection-failed {
3072
2934
  display: flex;
3073
2935
  align-items: center;
3074
2936
  gap: 6px;
3075
- font-size: 14px;
3076
- line-height: 18px;
2937
+ font-size: var(--taskon-font-size);
2938
+ line-height: 1.29;
3077
2939
  color: var(--taskon-color-text-tertiary);
3078
2940
  }
3079
2941
 
@@ -3083,13 +2945,14 @@
3083
2945
  }
3084
2946
 
3085
2947
  /* Selection Wait */
2948
+
3086
2949
  .taskon-quest-footer-selection-wait {
3087
2950
  display: flex;
3088
2951
  align-items: center;
3089
2952
  gap: 8px;
3090
- font-size: 14px;
2953
+ font-size: var(--taskon-font-size);
3091
2954
  font-weight: 500;
3092
- line-height: 16px;
2955
+ line-height: 1.14;
3093
2956
  color: var(--taskon-color-text);
3094
2957
  }
3095
2958
 
@@ -3103,22 +2966,70 @@
3103
2966
  ============================================================================ */
3104
2967
 
3105
2968
  .taskon-quest-footer-detail-bonus {
3106
- margin-top: 24px;
3107
- padding-top: 24px;
2969
+ margin-top: 20px;
2970
+ padding-top: 0;
3108
2971
  display: flex;
3109
- border-top: 1px solid var(--taskon-color-border-secondary);
2972
+ border-top: none;
3110
2973
  }
3111
2974
 
3112
- @media (max-width: 750px) {
2975
+ @supports (container-type: inline-size) {
2976
+ @container (min-width: 751px) {
2977
+ .taskon-quest-footer-card {
2978
+ flex-direction: row;
2979
+ align-items: center;
2980
+ gap: 12px;
2981
+ }
2982
+
2983
+ .taskon-quest-footer-earned-first--hide-mobile {
2984
+ display: flex;
2985
+ }
2986
+
2987
+ .taskon-quest-footer-earned-more {
2988
+ flex-direction: column;
2989
+ justify-content: center;
2990
+ align-items: flex-start;
2991
+ gap: 4px;
2992
+ padding: 4px 8px;
2993
+ }
2994
+
3113
2995
  .taskon-quest-footer-detail-bonus {
3114
- margin-top: 5vw;
3115
- padding-top: 0;
3116
- border-top: none;
2996
+ margin-top: 24px;
2997
+ padding-top: 24px;
2998
+ border-top: 1px solid var(--taskon-color-border-secondary);
2999
+ }
3000
+ }
3001
+ }
3002
+
3003
+ @supports not (container-type: inline-size) {
3004
+ @media (min-width: 751px) {
3005
+ .taskon-quest-footer-card {
3006
+ flex-direction: row;
3007
+ align-items: center;
3008
+ gap: 12px;
3009
+ }
3010
+
3011
+ .taskon-quest-footer-earned-first--hide-mobile {
3012
+ display: flex;
3013
+ }
3014
+
3015
+ .taskon-quest-footer-earned-more {
3016
+ flex-direction: column;
3017
+ justify-content: center;
3018
+ align-items: flex-start;
3019
+ gap: 4px;
3020
+ padding: 4px 8px;
3021
+ }
3022
+
3023
+ .taskon-quest-footer-detail-bonus {
3024
+ margin-top: 24px;
3025
+ padding-top: 24px;
3026
+ border-top: 1px solid var(--taskon-color-border-secondary);
3027
+ }
3028
+ }
3117
3029
  }
3118
- }
3119
3030
 
3120
3031
  .taskon-quest-footer-detail-bonus-label {
3121
- font-size: 16px;
3032
+ font-size: var(--taskon-font-size-lg);
3122
3033
  font-weight: 500;
3123
3034
  color: var(--taskon-color-text-secondary);
3124
3035
  }
@@ -3129,7 +3040,7 @@
3129
3040
  }
3130
3041
 
3131
3042
  .taskon-quest-footer-detail-bonus-item {
3132
- font-size: 14px;
3043
+ font-size: var(--taskon-font-size);
3133
3044
  font-weight: 600;
3134
3045
  text-align: right;
3135
3046
  color: var(--taskon-color-text);
@@ -3139,12 +3050,6 @@
3139
3050
  margin-top: 8px;
3140
3051
  }
3141
3052
 
3142
- @media (max-width: 750px) {
3143
- .taskon-quest-footer-detail-bonus-item + .taskon-quest-footer-detail-bonus-item {
3144
- margin-top: 2vw;
3145
- }
3146
- }
3147
-
3148
3053
  /* ============================================================================
3149
3054
  Action Button - Arrow icon
3150
3055
  ============================================================================ */
@@ -3155,6 +3060,7 @@
3155
3060
  }
3156
3061
 
3157
3062
  /* Link style for ActionButton */
3063
+
3158
3064
  a.taskon-quest-footer-action-btn {
3159
3065
  text-decoration: none;
3160
3066
  }
@@ -3184,7 +3090,7 @@ a.taskon-quest-footer-action-btn {
3184
3090
  .taskon-task-validation-dialog-message {
3185
3091
  margin: 0;
3186
3092
  margin-bottom: 16px;
3187
- font-size: 16px;
3093
+ font-size: var(--taskon-font-size-lg);
3188
3094
  line-height: 1.5;
3189
3095
  color: var(--taskon-color-text);
3190
3096
  }
@@ -3192,7 +3098,7 @@ a.taskon-quest-footer-action-btn {
3192
3098
  .taskon-task-validation-dialog-progress {
3193
3099
  margin: 0;
3194
3100
  margin-bottom: 16px;
3195
- font-size: 14px;
3101
+ font-size: var(--taskon-font-size);
3196
3102
  line-height: 1.5;
3197
3103
  color: var(--taskon-color-text-tertiary);
3198
3104
  }
@@ -3202,10 +3108,10 @@ a.taskon-quest-footer-action-btn {
3202
3108
  max-width: 200px;
3203
3109
  padding: 12px 24px;
3204
3110
  border: none;
3205
- border-radius: 8px;
3111
+ border-radius: var(--taskon-border-radius);
3206
3112
  background: var(--taskon-color-primary);
3207
3113
  color: var(--taskon-color-text-on-primary);
3208
- font-size: 16px;
3114
+ font-size: var(--taskon-font-size-lg);
3209
3115
  font-weight: 600;
3210
3116
  cursor: pointer;
3211
3117
  transition: opacity 0.2s ease;
@@ -3230,7 +3136,7 @@ a.taskon-quest-footer-action-btn {
3230
3136
  .taskon-reward-bind-tip {
3231
3137
  margin: 0;
3232
3138
  margin-bottom: 20px;
3233
- font-size: 14px;
3139
+ font-size: var(--taskon-font-size);
3234
3140
  line-height: 1.6;
3235
3141
  color: var(--taskon-color-text-tertiary);
3236
3142
  }
@@ -3247,7 +3153,7 @@ a.taskon-quest-footer-action-btn {
3247
3153
  justify-content: space-between;
3248
3154
  padding: 12px 16px;
3249
3155
  background: var(--taskon-color-bg-surface-strong);
3250
- border-radius: 8px;
3156
+ border-radius: var(--taskon-border-radius);
3251
3157
  border: 1px solid var(--taskon-color-border);
3252
3158
  }
3253
3159
 
@@ -3257,7 +3163,7 @@ a.taskon-quest-footer-action-btn {
3257
3163
  }
3258
3164
 
3259
3165
  .taskon-reward-bind-item-label {
3260
- font-size: 14px;
3166
+ font-size: var(--taskon-font-size);
3261
3167
  font-weight: 500;
3262
3168
  color: var(--taskon-color-text);
3263
3169
  }
@@ -3266,7 +3172,7 @@ a.taskon-quest-footer-action-btn {
3266
3172
  display: flex;
3267
3173
  align-items: center;
3268
3174
  gap: 6px;
3269
- font-size: 13px;
3175
+ font-size: var(--taskon-font-size-sm);
3270
3176
  color: var(--taskon-color-secondary);
3271
3177
  }
3272
3178
 
@@ -3276,10 +3182,10 @@ a.taskon-quest-footer-action-btn {
3276
3182
  gap: 6px;
3277
3183
  padding: 8px 16px;
3278
3184
  border: none;
3279
- border-radius: 6px;
3185
+ border-radius: var(--taskon-border-radius-sm);
3280
3186
  background: var(--taskon-color-primary);
3281
3187
  color: var(--taskon-color-text-on-primary);
3282
- font-size: 13px;
3188
+ font-size: var(--taskon-font-size-sm);
3283
3189
  font-weight: 600;
3284
3190
  cursor: pointer;
3285
3191
  transition: opacity 0.2s ease;
@@ -3314,10 +3220,10 @@ a.taskon-quest-footer-action-btn {
3314
3220
  margin-top: 20px;
3315
3221
  padding: 14px 24px;
3316
3222
  border: 1px solid var(--taskon-color-border);
3317
- border-radius: 8px;
3223
+ border-radius: var(--taskon-border-radius);
3318
3224
  background: transparent;
3319
3225
  color: var(--taskon-color-text);
3320
- font-size: 14px;
3226
+ font-size: var(--taskon-font-size);
3321
3227
  font-weight: 500;
3322
3228
  cursor: pointer;
3323
3229
  transition: all 0.2s ease;
@@ -3352,7 +3258,7 @@ a.taskon-quest-footer-action-btn {
3352
3258
  .taskon-discord-bind-dialog-desc {
3353
3259
  margin: 0;
3354
3260
  margin-bottom: 24px;
3355
- font-size: 14px;
3261
+ font-size: var(--taskon-font-size);
3356
3262
  line-height: 1.6;
3357
3263
  color: var(--taskon-color-text-tertiary);
3358
3264
  }
@@ -3367,8 +3273,8 @@ a.taskon-quest-footer-action-btn {
3367
3273
  .taskon-discord-bind-dialog-btn {
3368
3274
  width: 100%;
3369
3275
  padding: 14px 24px;
3370
- border-radius: 8px;
3371
- font-size: 14px;
3276
+ border-radius: var(--taskon-border-radius);
3277
+ font-size: var(--taskon-font-size);
3372
3278
  font-weight: 600;
3373
3279
  cursor: pointer;
3374
3280
  transition: all 0.2s ease;
@@ -3400,12 +3306,13 @@ a.taskon-quest-footer-action-btn {
3400
3306
  */
3401
3307
 
3402
3308
  /* WinnersRow 容器 - 使用主题背景层级 */
3309
+
3403
3310
  .taskon-quest-winners-row {
3404
3311
  display: flex;
3405
3312
  align-items: center;
3406
3313
  width: 100%;
3407
3314
  padding: 16px;
3408
- border-radius: 10px;
3315
+ border-radius: var(--taskon-border-radius-lg);
3409
3316
  border: none;
3410
3317
  cursor: pointer;
3411
3318
  background: var(--taskon-color-bg-surface-subtle);
@@ -3417,25 +3324,28 @@ a.taskon-quest-footer-action-btn {
3417
3324
  }
3418
3325
 
3419
3326
  /* Winners 标签 */
3327
+
3420
3328
  .taskon-quest-winners-row-label {
3421
- font-size: 18px;
3329
+ font-size: var(--taskon-font-size-xl);
3422
3330
  font-weight: 500;
3423
- line-height: 23px;
3331
+ line-height: 1.28;
3424
3332
  color: var(--taskon-color-text);
3425
3333
  }
3426
3334
 
3427
3335
  /* 数量 */
3336
+
3428
3337
  .taskon-quest-winners-row-count {
3429
3338
  flex: 1;
3430
3339
  margin-left: 8px;
3431
- font-size: 18px;
3340
+ font-size: var(--taskon-font-size-xl);
3432
3341
  font-weight: 600;
3433
- line-height: 23px;
3342
+ line-height: 1.28;
3434
3343
  text-align: left;
3435
3344
  color: var(--taskon-color-secondary);
3436
3345
  }
3437
3346
 
3438
3347
  /* 右箭头图标 */
3348
+
3439
3349
  .taskon-quest-winners-row-arrow {
3440
3350
  width: 16px;
3441
3351
  height: 16px;
@@ -3455,8 +3365,9 @@ a.taskon-quest-footer-action-btn {
3455
3365
  /* ==========================================================================
3456
3366
  Container - Match reward module style
3457
3367
  ========================================================================== */
3368
+
3458
3369
  .taskon-winners {
3459
- border-radius: 10px;
3370
+ border-radius: var(--taskon-border-radius-lg);
3460
3371
  background: var(--taskon-color-bg-surface-subtle);
3461
3372
  overflow: hidden;
3462
3373
  }
@@ -3464,6 +3375,7 @@ a.taskon-quest-footer-action-btn {
3464
3375
  /* ==========================================================================
3465
3376
  Status Alert (POW Reviewing / Drawing Winners)
3466
3377
  ========================================================================== */
3378
+
3467
3379
  .taskon-winners-alert {
3468
3380
  display: flex;
3469
3381
  align-items: center;
@@ -3471,7 +3383,7 @@ a.taskon-quest-footer-action-btn {
3471
3383
  gap: 8px;
3472
3384
  padding: 16px;
3473
3385
  background: var(--taskon-color-bg-surface-strong);
3474
- font-size: 16px;
3386
+ font-size: var(--taskon-font-size-lg);
3475
3387
  font-weight: 500;
3476
3388
  color: var(--taskon-color-text-secondary);
3477
3389
  text-decoration: none;
@@ -3506,12 +3418,13 @@ a.taskon-quest-footer-action-btn {
3506
3418
  /* ==========================================================================
3507
3419
  POW Review Info Card
3508
3420
  ========================================================================== */
3421
+
3509
3422
  .taskon-winners-content {
3510
3423
  padding: 16px;
3511
3424
  }
3512
3425
 
3513
3426
  .taskon-winners-pow-info {
3514
- font-size: 12px;
3427
+ font-size: var(--taskon-font-size-sm);
3515
3428
  line-height: 1.5;
3516
3429
  color: var(--taskon-color-warning);
3517
3430
  margin-bottom: 16px;
@@ -3530,9 +3443,10 @@ a.taskon-quest-footer-action-btn {
3530
3443
  /* ==========================================================================
3531
3444
  Status Info Card - Match reward module card style
3532
3445
  ========================================================================== */
3446
+
3533
3447
  .taskon-winners-card {
3534
3448
  padding: 16px;
3535
- border-radius: 8px;
3449
+ border-radius: var(--taskon-border-radius);
3536
3450
  background: var(--taskon-color-bg-surface-subtle);
3537
3451
  display: flex;
3538
3452
  flex-direction: column;
@@ -3543,7 +3457,7 @@ a.taskon-quest-footer-action-btn {
3543
3457
  display: flex;
3544
3458
  align-items: center;
3545
3459
  justify-content: space-between;
3546
- font-size: 16px;
3460
+ font-size: var(--taskon-font-size-lg);
3547
3461
  }
3548
3462
 
3549
3463
  .taskon-winners-card-label {
@@ -3566,6 +3480,7 @@ a.taskon-quest-footer-action-btn {
3566
3480
  ========================================================================== */
3567
3481
 
3568
3482
  /* Ensure winners row integrates well with status card */
3483
+
3569
3484
  .taskon-winners-card .taskon-quest-winners-row {
3570
3485
  padding: 0;
3571
3486
  background: transparent;
@@ -3576,12 +3491,26 @@ a.taskon-quest-footer-action-btn {
3576
3491
  * @design 参考 Figma 设计稿
3577
3492
  */
3578
3493
 
3494
+ /*
3495
+ * Responsive base styles
3496
+ *
3497
+ * Keep mobile breakpoints and fallback patterns centralized here.
3498
+ * Components should reuse these mixins instead of duplicating query logic.
3499
+ */
3500
+
3501
+ /*
3502
+ * Desktop-up mixin:
3503
+ * 1) Enable desktop enhancement in wider containers
3504
+ * 2) Keep viewport media query as fallback
3505
+ */
3506
+
3579
3507
  /* ============================================================================
3580
3508
  Quest Widget 根容器
3581
3509
  ============================================================================ */
3582
3510
 
3583
3511
  .taskon-quest {
3584
- font-size: 16px;
3512
+ container-type: inline-size;
3513
+ font-size: var(--taskon-font-size-lg);
3585
3514
  line-height: 1.5;
3586
3515
  color: var(--taskon-color-text);
3587
3516
  }
@@ -3591,27 +3520,140 @@ a.taskon-quest-footer-action-btn {
3591
3520
  ============================================================================ */
3592
3521
 
3593
3522
  .taskon-quest-loading {
3523
+ display: flex;
3524
+ width: 100%;
3525
+ }
3526
+
3527
+ .taskon-quest-skeleton-layout {
3528
+ width: 100%;
3529
+ }
3530
+
3531
+ .taskon-quest-skeleton-content,
3532
+ .taskon-quest-skeleton-sidebar {
3533
+ width: 100%;
3534
+ gap: var(--taskon-spacing-md);
3535
+ }
3536
+
3537
+ .taskon-quest-skeleton-group {
3538
+ width: 100%;
3594
3539
  display: flex;
3595
3540
  flex-direction: column;
3596
- align-items: center;
3597
- justify-content: center;
3598
- padding: 48px 24px;
3599
3541
  gap: 12px;
3600
- color: var(--taskon-color-text-tertiary);
3601
3542
  }
3602
3543
 
3603
- .taskon-quest-loading-spinner {
3604
- width: 32px;
3605
- height: 32px;
3606
- border: 3px solid var(--taskon-color-border);
3607
- border-top-color: var(--taskon-color-primary);
3608
- border-radius: 50%;
3609
- animation: taskon-quest-spin 1s linear infinite;
3544
+ .taskon-quest-skeleton-group--tasks {
3545
+ gap: 14px;
3546
+ }
3547
+
3548
+ .taskon-quest-skeleton-content-divider {
3549
+ margin: 8px 0;
3550
+ }
3551
+
3552
+ .taskon-quest-skeleton-block {
3553
+ position: relative;
3554
+ overflow: hidden;
3555
+ border-radius: var(--taskon-border-radius-lg);
3556
+ background: var(--taskon-color-bg-surface-subtle);
3557
+ }
3558
+
3559
+ .taskon-quest-skeleton-block::after {
3560
+ content: "";
3561
+ position: absolute;
3562
+ inset: 0;
3563
+ transform: translateX(-100%);
3564
+ background: linear-gradient(
3565
+ 90deg,
3566
+ transparent 0%,
3567
+ var(--taskon-color-bg-surface-strong) 50%,
3568
+ transparent 100%
3569
+ );
3570
+ animation: taskon-quest-skeleton-shimmer 1.4s ease-in-out infinite;
3571
+ }
3572
+
3573
+ .taskon-quest-skeleton-title {
3574
+ width: min(72%, 420px);
3575
+ height: 34px;
3610
3576
  }
3611
3577
 
3612
- @keyframes taskon-quest-spin {
3578
+ .taskon-quest-skeleton-meta {
3579
+ width: min(44%, 280px);
3580
+ height: 20px;
3581
+ }
3582
+
3583
+ .taskon-quest-skeleton-banner {
3584
+ width: 100%;
3585
+ height: 168px;
3586
+ border-radius: var(--taskon-border-radius-lg);
3587
+ }
3588
+
3589
+ .taskon-quest-skeleton-description {
3590
+ width: 100%;
3591
+ height: 14px;
3592
+ }
3593
+
3594
+ .taskon-quest-skeleton-description--short {
3595
+ width: 66%;
3596
+ }
3597
+
3598
+ .taskon-quest-skeleton-section-title {
3599
+ width: 128px;
3600
+ height: 28px;
3601
+ }
3602
+
3603
+ .taskon-quest-skeleton-progress {
3604
+ width: 182px;
3605
+ height: 20px;
3606
+ border-radius: 999px;
3607
+ }
3608
+
3609
+ .taskon-quest-skeleton-task {
3610
+ width: 100%;
3611
+ height: 74px;
3612
+ border-radius: var(--taskon-border-radius-lg);
3613
+ }
3614
+
3615
+ .taskon-quest-skeleton-complete-button {
3616
+ width: 100%;
3617
+ height: 48px;
3618
+ border-radius: var(--taskon-border-radius);
3619
+ }
3620
+
3621
+ .taskon-quest-skeleton-divider {
3622
+ background: var(--taskon-color-border-secondary);
3623
+ }
3624
+
3625
+ .taskon-quest-skeleton-panel {
3626
+ display: flex;
3627
+ flex-direction: column;
3628
+ gap: 12px;
3629
+ padding: 20px;
3630
+ border: 1px solid var(--taskon-color-border-secondary);
3631
+ border-radius: var(--taskon-border-radius-lg);
3632
+ }
3633
+
3634
+ .taskon-quest-skeleton-panel-title {
3635
+ width: 45%;
3636
+ height: 22px;
3637
+ }
3638
+
3639
+ .taskon-quest-skeleton-panel-line {
3640
+ width: 100%;
3641
+ height: 14px;
3642
+ }
3643
+
3644
+ .taskon-quest-skeleton-panel-line--short {
3645
+ width: 72%;
3646
+ }
3647
+
3648
+ @keyframes taskon-quest-skeleton-shimmer {
3613
3649
  to {
3614
- transform: rotate(360deg);
3650
+ transform: translateX(100%);
3651
+ }
3652
+ }
3653
+
3654
+ @media (prefers-reduced-motion: reduce) {
3655
+ .taskon-quest-skeleton-block::after {
3656
+ animation: none;
3615
3657
  }
3616
3658
  }
3617
3659
 
@@ -3635,13 +3677,13 @@ a.taskon-quest-footer-action-btn {
3635
3677
 
3636
3678
  .taskon-quest-error-message {
3637
3679
  color: var(--taskon-color-error);
3638
- font-size: 14px;
3680
+ font-size: var(--taskon-font-size);
3639
3681
  }
3640
3682
 
3641
3683
  .taskon-quest-error-retry {
3642
3684
  margin-top: 8px;
3643
3685
  padding: 8px 16px;
3644
- font-size: 14px;
3686
+ font-size: var(--taskon-font-size);
3645
3687
  color: var(--taskon-color-text);
3646
3688
  background-color: var(--taskon-color-primary);
3647
3689
  border: none;
@@ -3664,7 +3706,7 @@ a.taskon-quest-footer-action-btn {
3664
3706
  justify-content: center;
3665
3707
  padding: 48px 24px;
3666
3708
  color: var(--taskon-color-text-tertiary);
3667
- font-size: 14px;
3709
+ font-size: var(--taskon-font-size);
3668
3710
  }
3669
3711
 
3670
3712
  /* ============================================================================
@@ -3673,11 +3715,13 @@ a.taskon-quest-footer-action-btn {
3673
3715
 
3674
3716
  .taskon-quest-layout {
3675
3717
  display: flex;
3718
+ flex-direction: column;
3676
3719
  gap: var(--taskon-spacing-xl);
3677
3720
  align-items: flex-start;
3678
3721
  }
3679
3722
 
3680
3723
  /* 左侧主内容区(固定比例 2:1) */
3724
+
3681
3725
  .taskon-quest-content {
3682
3726
  flex: 2;
3683
3727
  min-width: 0;
@@ -3687,16 +3731,20 @@ a.taskon-quest-footer-action-btn {
3687
3731
  }
3688
3732
 
3689
3733
  /* 中间分割线 */
3734
+
3690
3735
  .taskon-quest-divider {
3691
- width: 1px;
3736
+ width: 100%;
3737
+ height: 1px;
3692
3738
  align-self: stretch;
3693
3739
  background: var(--taskon-color-border-secondary);
3694
3740
  flex-shrink: 0;
3695
3741
  }
3696
3742
 
3697
3743
  /* 右侧边栏(固定比例 2:1) */
3744
+
3698
3745
  .taskon-quest-sidebar {
3699
3746
  flex: 1;
3747
+ width: 100%;
3700
3748
  min-width: 0;
3701
3749
  display: flex;
3702
3750
  flex-direction: column;
@@ -3714,6 +3762,7 @@ a.taskon-quest-footer-action-btn {
3714
3762
  }
3715
3763
 
3716
3764
  /* 标题 + 倒计时区域 */
3765
+
3717
3766
  .taskon-quest-header-title-section {
3718
3767
  display: flex;
3719
3768
  flex-direction: column;
@@ -3724,23 +3773,31 @@ a.taskon-quest-footer-action-btn {
3724
3773
  margin: 0;
3725
3774
  font-size: 28px;
3726
3775
  font-weight: 600;
3727
- line-height: 38px;
3776
+ line-height: 1.36;
3728
3777
  color: var(--taskon-color-text);
3729
3778
  }
3730
3779
 
3731
3780
  /* 倒计时 + 时间范围 */
3781
+
3732
3782
  .taskon-quest-header-meta {
3733
3783
  display: flex;
3734
- align-items: center;
3735
- gap: var(--taskon-spacing-md);
3784
+ flex-wrap: wrap;
3785
+ align-items: flex-start;
3786
+ gap: 8px 10px;
3736
3787
  padding: var(--taskon-spacing-xs) 0;
3788
+ border: none;
3737
3789
  border-radius: var(--taskon-border-radius-sm);
3790
+ background: transparent;
3738
3791
  }
3739
3792
 
3740
3793
  .taskon-quest-countdown {
3741
3794
  display: flex;
3742
- gap: var(--taskon-spacing-sm);
3795
+ order: 3;
3796
+ flex: 1 1 100%;
3797
+ flex-wrap: wrap;
3798
+ gap: 6px;
3743
3799
  align-items: center;
3800
+ min-width: 0;
3744
3801
  }
3745
3802
 
3746
3803
  .taskon-quest-countdown-icon {
@@ -3751,62 +3808,88 @@ a.taskon-quest-footer-action-btn {
3751
3808
  }
3752
3809
 
3753
3810
  .taskon-quest-countdown-label {
3754
- font-size: 16px;
3811
+ font-size: var(--taskon-font-size);
3755
3812
  font-weight: 400;
3756
- line-height: 24px;
3813
+ line-height: 1.43;
3757
3814
  color: var(--taskon-color-text-secondary);
3758
3815
  }
3759
3816
 
3760
3817
  /* 已结束状态的标签样式 */
3818
+
3761
3819
  .taskon-quest-countdown-label--ended {
3762
3820
  font-weight: 600;
3763
3821
  text-transform: uppercase;
3764
3822
  }
3765
3823
 
3766
3824
  .taskon-quest-countdown-value {
3767
- font-size: 16px;
3825
+ font-size: var(--taskon-font-size);
3768
3826
  font-weight: 600;
3769
- line-height: 24px;
3827
+ line-height: 1.43;
3770
3828
  color: var(--taskon-color-primary);
3771
3829
  }
3772
3830
 
3773
3831
  .taskon-quest-countdown-divider {
3774
- width: 1px;
3775
- height: 20px;
3776
- background-color: var(--taskon-color-border-secondary);
3832
+ display: none;
3777
3833
  }
3778
3834
 
3779
3835
  .taskon-quest-time-range {
3780
- font-size: 16px;
3781
- font-weight: 400;
3782
- line-height: 24px;
3836
+ order: 1;
3837
+ display: flex;
3838
+ flex: 1 1 auto;
3839
+ flex-direction: column;
3840
+ gap: 2px;
3841
+ min-width: 0;
3842
+ font-size: var(--taskon-font-size);
3843
+ font-weight: 500;
3844
+ line-height: 1.43;
3783
3845
  color: var(--taskon-color-text-secondary);
3784
3846
  }
3785
3847
 
3848
+ .taskon-quest-time-range-timezone {
3849
+ font-size: var(--taskon-font-size-sm);
3850
+ font-weight: 500;
3851
+ line-height: 1.33;
3852
+ color: var(--taskon-color-text-tertiary);
3853
+ }
3854
+
3855
+ .taskon-quest-time-range-values {
3856
+ display: flex;
3857
+ flex-wrap: wrap;
3858
+ align-items: center;
3859
+ gap: 6px;
3860
+ word-break: break-word;
3861
+ overflow-wrap: anywhere;
3862
+ }
3863
+
3864
+ .taskon-quest-time-range-separator {
3865
+ color: var(--taskon-color-text-tertiary);
3866
+ }
3867
+
3868
+ .taskon-quest-header-meta .taskon-quest-share-trigger {
3869
+ order: 2;
3870
+ width: 34px;
3871
+ height: 34px;
3872
+ border: none;
3873
+ background: transparent;
3874
+ }
3875
+
3786
3876
  /* Banner 图片 */
3877
+
3787
3878
  .taskon-quest-banner {
3788
3879
  display: block;
3789
3880
  margin: 0 auto;
3790
3881
  width: 100%;
3791
- border-radius: 10px;
3882
+ border-radius: var(--taskon-border-radius-lg);
3792
3883
  }
3793
3884
 
3794
3885
  .taskon-quest-banner-img {
3795
3886
  display: block;
3796
3887
  width: 100%;
3797
- border-radius: 10px;
3798
- }
3799
-
3800
- /* 方形图片在 PC 端限制宽度 */
3801
- @media (min-width: 751px) {
3802
- .taskon-quest-banner--square .taskon-quest-banner-img {
3803
- width: 340px;
3804
- max-width: 100%;
3805
- margin: 0 auto;
3806
- }
3888
+ border-radius: var(--taskon-border-radius-lg);
3807
3889
  }
3808
3890
 
3809
3891
  /* 描述 + View More */
3892
+
3810
3893
  .taskon-quest-desc {
3811
3894
  position: relative;
3812
3895
  display: flex;
@@ -3816,9 +3899,9 @@ a.taskon-quest-footer-action-btn {
3816
3899
 
3817
3900
  .taskon-quest-desc-text {
3818
3901
  margin: 0;
3819
- font-size: 16px;
3902
+ font-size: var(--taskon-font-size-lg);
3820
3903
  font-weight: 400;
3821
- line-height: 24px;
3904
+ line-height: 1.5;
3822
3905
  color: var(--taskon-color-text-secondary);
3823
3906
  max-height: 120px;
3824
3907
  overflow: hidden;
@@ -3826,11 +3909,13 @@ a.taskon-quest-footer-action-btn {
3826
3909
  }
3827
3910
 
3828
3911
  /* 展开后移除高度限制和渐变 */
3912
+
3829
3913
  .taskon-quest-desc-text--expanded {
3830
3914
  max-height: none;
3831
3915
  }
3832
3916
 
3833
3917
  /* 描述渐变遮罩 - 仅在未展开时显示 */
3918
+
3834
3919
  .taskon-quest-desc-text:not(.taskon-quest-desc-text--expanded)::after {
3835
3920
  content: "";
3836
3921
  position: absolute;
@@ -3847,6 +3932,7 @@ a.taskon-quest-footer-action-btn {
3847
3932
  }
3848
3933
 
3849
3934
  /* 富文本样式重置 */
3935
+
3850
3936
  .taskon-quest-desc-text p {
3851
3937
  margin: 0 0 var(--taskon-spacing-sm) 0;
3852
3938
  }
@@ -3871,6 +3957,7 @@ a.taskon-quest-footer-action-btn {
3871
3957
  }
3872
3958
 
3873
3959
  /* 图片样式:限制最大宽度,防止溢出 */
3960
+
3874
3961
  .taskon-quest-desc-text img {
3875
3962
  max-width: 100%;
3876
3963
  height: auto;
@@ -3878,15 +3965,16 @@ a.taskon-quest-footer-action-btn {
3878
3965
  }
3879
3966
 
3880
3967
  /* iframe 样式:限制最大宽度 */
3968
+
3881
3969
  .taskon-quest-desc-text iframe {
3882
3970
  max-width: 100%;
3883
3971
  border-radius: var(--taskon-border-radius);
3884
3972
  }
3885
3973
 
3886
3974
  .taskon-quest-desc-more {
3887
- font-size: 16px;
3975
+ font-size: var(--taskon-font-size-lg);
3888
3976
  font-weight: 600;
3889
- line-height: 24px;
3977
+ line-height: 1.5;
3890
3978
  color: var(--taskon-color-text);
3891
3979
  text-decoration: underline;
3892
3980
  text-decoration-skip-ink: none;
@@ -3903,6 +3991,7 @@ a.taskon-quest-footer-action-btn {
3903
3991
  }
3904
3992
 
3905
3993
  /* 分割线 */
3994
+
3906
3995
  .taskon-quest-content-divider {
3907
3996
  height: 1px;
3908
3997
  background: var(--taskon-color-border-secondary);
@@ -3919,6 +4008,7 @@ a.taskon-quest-footer-action-btn {
3919
4008
  }
3920
4009
 
3921
4010
  /* Quest 标题 */
4011
+
3922
4012
  .taskon-quest-tasks-header {
3923
4013
  display: flex;
3924
4014
  gap: var(--taskon-spacing-md);
@@ -3927,13 +4017,14 @@ a.taskon-quest-footer-action-btn {
3927
4017
 
3928
4018
  .taskon-quest-tasks-title {
3929
4019
  margin: 0;
3930
- font-size: 24px;
4020
+ font-size: var(--taskon-font-size-xxxl);
3931
4021
  font-weight: 600;
3932
- line-height: 32px;
4022
+ line-height: 1.33;
3933
4023
  color: var(--taskon-color-text);
3934
4024
  }
3935
4025
 
3936
4026
  /* 任务列表 */
4027
+
3937
4028
  .taskon-quest-tasks-list {
3938
4029
  display: flex;
3939
4030
  flex-direction: column;
@@ -3949,25 +4040,26 @@ a.taskon-quest-footer-action-btn {
3949
4040
  background: var(--taskon-color-bg-surface-strong);
3950
4041
  border: 1px solid var(--taskon-color-border-secondary);
3951
4042
  border-radius: var(--taskon-border-radius);
3952
- font-size: 18px;
4043
+ font-size: var(--taskon-font-size-xl);
3953
4044
  font-weight: 600;
3954
4045
  color: var(--taskon-color-text);
3955
4046
  }
3956
4047
 
3957
4048
  .taskon-quest-task-template {
3958
4049
  color: var(--taskon-color-text-disabled);
3959
- font-size: 14px;
4050
+ font-size: var(--taskon-font-size);
3960
4051
  font-weight: 500;
3961
4052
  }
3962
4053
 
3963
4054
  /* Complete 按钮 */
4055
+
3964
4056
  .taskon-quest-complete-btn {
3965
4057
  width: 100%;
3966
4058
  margin-top: var(--taskon-spacing-lg);
3967
4059
  padding: var(--taskon-spacing-md) var(--taskon-spacing-xl);
3968
- font-size: 18px;
4060
+ font-size: var(--taskon-font-size-xl);
3969
4061
  font-weight: 600;
3970
- line-height: 24px;
4062
+ line-height: 1.33;
3971
4063
  color: var(--taskon-color-text-on-primary);
3972
4064
  background-color: var(--taskon-color-primary);
3973
4065
  border: none;
@@ -4002,9 +4094,9 @@ a.taskon-quest-footer-action-btn {
4002
4094
 
4003
4095
  .taskon-quest-winners-section-title {
4004
4096
  margin: 0;
4005
- font-size: 24px;
4097
+ font-size: var(--taskon-font-size-xxxl);
4006
4098
  font-weight: 600;
4007
- line-height: 32px;
4099
+ line-height: 1.33;
4008
4100
  color: var(--taskon-color-text);
4009
4101
  }
4010
4102
 
@@ -4020,9 +4112,9 @@ a.taskon-quest-footer-action-btn {
4020
4112
 
4021
4113
  .taskon-quest-rewards-section-title {
4022
4114
  margin: 0;
4023
- font-size: 24px;
4115
+ font-size: var(--taskon-font-size-xxxl);
4024
4116
  font-weight: 600;
4025
- line-height: 32px;
4117
+ line-height: 1.33;
4026
4118
  color: var(--taskon-color-text);
4027
4119
  }
4028
4120
 
@@ -4038,9 +4130,9 @@ a.taskon-quest-footer-action-btn {
4038
4130
 
4039
4131
  .taskon-quest-rewards-title {
4040
4132
  margin: 0;
4041
- font-size: 24px;
4133
+ font-size: var(--taskon-font-size-xxxl);
4042
4134
  font-weight: 600;
4043
- line-height: 32px;
4135
+ line-height: 1.33;
4044
4136
  color: var(--taskon-color-text);
4045
4137
  }
4046
4138
 
@@ -4057,7 +4149,7 @@ a.taskon-quest-footer-action-btn {
4057
4149
  padding: var(--taskon-spacing-md);
4058
4150
  background-color: var(--taskon-color-border-secondary);
4059
4151
  border-radius: var(--taskon-border-radius-lg);
4060
- font-size: 16px;
4152
+ font-size: var(--taskon-font-size-lg);
4061
4153
  color: var(--taskon-color-text);
4062
4154
  }
4063
4155
 
@@ -4080,7 +4172,7 @@ a.taskon-quest-footer-action-btn {
4080
4172
  margin: 0;
4081
4173
  font-size: 20px;
4082
4174
  font-weight: 600;
4083
- line-height: 28px;
4175
+ line-height: 1.4;
4084
4176
  color: var(--taskon-color-text);
4085
4177
  }
4086
4178
 
@@ -4096,9 +4188,9 @@ a.taskon-quest-footer-action-btn {
4096
4188
 
4097
4189
  .taskon-quest-participants-title {
4098
4190
  margin: 0;
4099
- font-size: 24px;
4191
+ font-size: var(--taskon-font-size-xxxl);
4100
4192
  font-weight: 600;
4101
- line-height: 32px;
4193
+ line-height: 1.33;
4102
4194
  color: var(--taskon-color-text);
4103
4195
  }
4104
4196
 
@@ -4106,9 +4198,9 @@ a.taskon-quest-footer-action-btn {
4106
4198
  display: flex;
4107
4199
  justify-content: space-between;
4108
4200
  align-items: center;
4109
- font-size: 16px;
4201
+ font-size: var(--taskon-font-size-lg);
4110
4202
  font-weight: 500;
4111
- line-height: 24px;
4203
+ line-height: 1.5;
4112
4204
  }
4113
4205
 
4114
4206
  .taskon-quest-participants-label {
@@ -4120,24 +4212,214 @@ a.taskon-quest-footer-action-btn {
4120
4212
  }
4121
4213
 
4122
4214
  /* ============================================================================
4123
- 响应式布局(TODO: Phase 13 完善)
4215
+ 响应式布局
4124
4216
  ============================================================================ */
4125
4217
 
4126
- @media (max-width: 1200px) {
4218
+ @supports (container-type: inline-size) {
4219
+ @container (min-width: 751px) {
4127
4220
  .taskon-quest-layout {
4128
- flex-direction: column;
4221
+ flex-direction: row;
4129
4222
  }
4130
4223
 
4131
4224
  .taskon-quest-divider {
4132
- width: 100%;
4133
- height: 1px;
4134
- background: var(--taskon-color-border-secondary);
4225
+ width: 1px;
4226
+ height: auto;
4135
4227
  }
4136
4228
 
4137
4229
  .taskon-quest-sidebar {
4138
- width: 100%;
4230
+ width: auto;
4231
+ }
4232
+
4233
+ .taskon-quest-header-meta {
4234
+ flex-wrap: nowrap;
4235
+ align-items: center;
4236
+ gap: var(--taskon-spacing-md);
4237
+ padding: var(--taskon-spacing-xs) 0;
4238
+ border: none;
4239
+ background: transparent;
4240
+ }
4241
+
4242
+ .taskon-quest-countdown {
4243
+ order: 0;
4244
+ flex: 0 0 auto;
4245
+ flex-wrap: nowrap;
4246
+ gap: var(--taskon-spacing-sm);
4247
+ }
4248
+
4249
+ .taskon-quest-countdown-label,
4250
+ .taskon-quest-countdown-value {
4251
+ font-size: var(--taskon-font-size-lg);
4252
+ line-height: 1.5;
4253
+ }
4254
+
4255
+ .taskon-quest-countdown-divider {
4256
+ display: block;
4257
+ width: 1px;
4258
+ height: 20px;
4259
+ background-color: var(--taskon-color-border-secondary);
4260
+ }
4261
+
4262
+ .taskon-quest-time-range {
4263
+ order: 0;
4264
+ flex: 0 1 auto;
4265
+ flex-direction: row;
4266
+ gap: 8px;
4267
+ font-size: var(--taskon-font-size-lg);
4268
+ font-weight: 400;
4269
+ line-height: 1.5;
4270
+ }
4271
+
4272
+ .taskon-quest-time-range-timezone {
4273
+ font-size: var(--taskon-font-size-lg);
4274
+ font-weight: 400;
4275
+ line-height: 1.5;
4276
+ color: var(--taskon-color-text-secondary);
4277
+ }
4278
+
4279
+ .taskon-quest-time-range-values {
4280
+ flex-wrap: nowrap;
4281
+ gap: 8px;
4282
+ word-break: normal;
4283
+ overflow-wrap: normal;
4284
+ }
4285
+
4286
+ .taskon-quest-time-range-separator {
4287
+ color: var(--taskon-color-text-secondary);
4288
+ }
4289
+
4290
+ .taskon-quest-header-meta .taskon-quest-share-trigger {
4291
+ order: 0;
4292
+ width: 40px;
4293
+ height: 40px;
4294
+ border: none;
4295
+ background: var(--taskon-color-bg-surface);
4296
+ }
4297
+
4298
+ /* 方形图片在桌面端限制宽度 */
4299
+ .taskon-quest-banner--square .taskon-quest-banner-img {
4300
+ width: 340px;
4301
+ max-width: 100%;
4302
+ margin: 0 auto;
4303
+ }
4304
+
4305
+ .taskon-quest-skeleton-content,
4306
+ .taskon-quest-skeleton-sidebar {
4307
+ width: auto;
4308
+ gap: var(--taskon-spacing-lg);
4309
+ }
4310
+
4311
+ .taskon-quest-skeleton-banner {
4312
+ height: 220px;
4313
+ }
4314
+
4315
+ .taskon-quest-skeleton-task {
4316
+ height: 84px;
4317
+ }
4318
+ }
4319
+ }
4320
+
4321
+ @supports not (container-type: inline-size) {
4322
+ @media (min-width: 751px) {
4323
+ .taskon-quest-layout {
4324
+ flex-direction: row;
4325
+ }
4326
+
4327
+ .taskon-quest-divider {
4328
+ width: 1px;
4329
+ height: auto;
4330
+ }
4331
+
4332
+ .taskon-quest-sidebar {
4333
+ width: auto;
4334
+ }
4335
+
4336
+ .taskon-quest-header-meta {
4337
+ flex-wrap: nowrap;
4338
+ align-items: center;
4339
+ gap: var(--taskon-spacing-md);
4340
+ padding: var(--taskon-spacing-xs) 0;
4341
+ border: none;
4342
+ background: transparent;
4343
+ }
4344
+
4345
+ .taskon-quest-countdown {
4346
+ order: 0;
4347
+ flex: 0 0 auto;
4348
+ flex-wrap: nowrap;
4349
+ gap: var(--taskon-spacing-sm);
4350
+ }
4351
+
4352
+ .taskon-quest-countdown-label,
4353
+ .taskon-quest-countdown-value {
4354
+ font-size: var(--taskon-font-size-lg);
4355
+ line-height: 1.5;
4356
+ }
4357
+
4358
+ .taskon-quest-countdown-divider {
4359
+ display: block;
4360
+ width: 1px;
4361
+ height: 20px;
4362
+ background-color: var(--taskon-color-border-secondary);
4363
+ }
4364
+
4365
+ .taskon-quest-time-range {
4366
+ order: 0;
4367
+ flex: 0 1 auto;
4368
+ flex-direction: row;
4369
+ gap: 8px;
4370
+ font-size: var(--taskon-font-size-lg);
4371
+ font-weight: 400;
4372
+ line-height: 1.5;
4373
+ }
4374
+
4375
+ .taskon-quest-time-range-timezone {
4376
+ font-size: var(--taskon-font-size-lg);
4377
+ font-weight: 400;
4378
+ line-height: 1.5;
4379
+ color: var(--taskon-color-text-secondary);
4380
+ }
4381
+
4382
+ .taskon-quest-time-range-values {
4383
+ flex-wrap: nowrap;
4384
+ gap: 8px;
4385
+ word-break: normal;
4386
+ overflow-wrap: normal;
4387
+ }
4388
+
4389
+ .taskon-quest-time-range-separator {
4390
+ color: var(--taskon-color-text-secondary);
4391
+ }
4392
+
4393
+ .taskon-quest-header-meta .taskon-quest-share-trigger {
4394
+ order: 0;
4395
+ width: 40px;
4396
+ height: 40px;
4397
+ border: none;
4398
+ background: var(--taskon-color-bg-surface);
4399
+ }
4400
+
4401
+ /* 方形图片在桌面端限制宽度 */
4402
+ .taskon-quest-banner--square .taskon-quest-banner-img {
4403
+ width: 340px;
4404
+ max-width: 100%;
4405
+ margin: 0 auto;
4406
+ }
4407
+
4408
+ .taskon-quest-skeleton-content,
4409
+ .taskon-quest-skeleton-sidebar {
4410
+ width: auto;
4411
+ gap: var(--taskon-spacing-lg);
4412
+ }
4413
+
4414
+ .taskon-quest-skeleton-banner {
4415
+ height: 220px;
4416
+ }
4417
+
4418
+ .taskon-quest-skeleton-task {
4419
+ height: 84px;
4420
+ }
4421
+ }
4139
4422
  }
4140
- }
4141
4423
 
4142
4424
  /* Eligibility 组件样式已抽取到独立文件: Quest/components/Eligibility/eligibility.css */
4143
4425