@taskon/widget-react 0.0.1

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 (37) hide show
  1. package/README.md +1064 -0
  2. package/dist/CommunityTaskList.css +5010 -0
  3. package/dist/EligibilityInfo.css +1966 -0
  4. package/dist/LeaderboardWidget.css +815 -0
  5. package/dist/Quest.css +4584 -0
  6. package/dist/Table.css +389 -0
  7. package/dist/TaskOnProvider.css +163 -0
  8. package/dist/WidgetShell.css +182 -0
  9. package/dist/chunks/CommunityTaskList-CrH6r4Av.js +6886 -0
  10. package/dist/chunks/EligibilityInfo-DesW9-k9.js +24900 -0
  11. package/dist/chunks/LeaderboardWidget-BSGpHKTk.js +1156 -0
  12. package/dist/chunks/Quest-uSIVq78I.js +8581 -0
  13. package/dist/chunks/Table-CWGf2FKV.js +449 -0
  14. package/dist/chunks/TaskOnProvider-QMwxGL44.js +1435 -0
  15. package/dist/chunks/ThemeProvider-Cs8IUVQj.js +1118 -0
  16. package/dist/chunks/WidgetShell-NlOgn1x5.js +1517 -0
  17. package/dist/chunks/common-ja-DWhTaFHb.js +23 -0
  18. package/dist/chunks/common-ko-80ezXsMG.js +23 -0
  19. package/dist/chunks/index-CwMvO_wZ.js +777 -0
  20. package/dist/chunks/leaderboardwidget-ja-Bj6gz6y1.js +119 -0
  21. package/dist/chunks/leaderboardwidget-ko-f1cLO9ic.js +119 -0
  22. package/dist/chunks/useToast-BGJhd3BX.js +93 -0
  23. package/dist/chunks/useWidgetLocale-BVcopbZS.js +74 -0
  24. package/dist/chunks/usercenter-ja-DBj_dtuz.js +329 -0
  25. package/dist/chunks/usercenter-ko-DYTkHAld.js +329 -0
  26. package/dist/community-task.d.ts +451 -0
  27. package/dist/community-task.js +9 -0
  28. package/dist/core.d.ts +803 -0
  29. package/dist/core.js +22 -0
  30. package/dist/index.css +3662 -0
  31. package/dist/index.d.ts +1627 -0
  32. package/dist/index.js +7372 -0
  33. package/dist/leaderboard.d.ts +547 -0
  34. package/dist/leaderboard.js +17 -0
  35. package/dist/quest.d.ts +389 -0
  36. package/dist/quest.js +8 -0
  37. package/package.json +97 -0
@@ -0,0 +1,815 @@
1
+ /**
2
+ * LeaderboardWidget 样式
3
+ *
4
+ * 采用 BEM 命名规范
5
+ * 前缀: taskon-leaderboard
6
+ */
7
+
8
+ /* ============================================================================
9
+ CSS 变量定义
10
+ ============================================================================ */
11
+
12
+ .taskon-leaderboard {
13
+ /* 颜色系统 - 与 Quest Widget 保持一致 */
14
+ --taskon-leaderboard-bg-body: #111111;
15
+ --taskon-leaderboard-text-lightest: #ffffff;
16
+ --taskon-leaderboard-text-lighter: rgba(255, 255, 255, 0.8);
17
+ --taskon-leaderboard-text-light: rgba(255, 255, 255, 0.6);
18
+ --taskon-leaderboard-text-dark: rgba(255, 255, 255, 0.4);
19
+ --taskon-leaderboard-text-darkest: rgba(255, 255, 255, 0.1);
20
+ --taskon-leaderboard-text-invisible: rgba(255, 255, 255, 0.04);
21
+ --taskon-leaderboard-primary: #cbff01;
22
+ --taskon-leaderboard-secondary: #1affab;
23
+ --taskon-leaderboard-link: #58afff;
24
+ --taskon-leaderboard-error: #ef4444;
25
+
26
+ /* 排名徽章颜色 */
27
+ --taskon-leaderboard-rank-gold: #ffbf29;
28
+ --taskon-leaderboard-rank-gold-stroke: #ffd465;
29
+ --taskon-leaderboard-rank-silver: #c0c0c0;
30
+ --taskon-leaderboard-rank-silver-stroke: #d8d8d8;
31
+ --taskon-leaderboard-rank-bronze: #cd7f32;
32
+ --taskon-leaderboard-rank-bronze-stroke: #e0a060;
33
+
34
+ /* 间距系统 */
35
+ --taskon-leaderboard-spacing-xxs: 4px;
36
+ --taskon-leaderboard-spacing-xs: 8px;
37
+ --taskon-leaderboard-spacing-s: 12px;
38
+ --taskon-leaderboard-spacing-m: 16px;
39
+ --taskon-leaderboard-spacing-l: 20px;
40
+ --taskon-leaderboard-spacing-xl: 24px;
41
+ --taskon-leaderboard-spacing-xxl: 32px;
42
+
43
+ /* 圆角系统 */
44
+ --taskon-leaderboard-radius-s: 4px;
45
+ --taskon-leaderboard-radius-m: 6px;
46
+ --taskon-leaderboard-radius-l: 8px;
47
+ --taskon-leaderboard-radius-xl: 12px;
48
+ }
49
+
50
+ /* ============================================================================
51
+ 容器
52
+ ============================================================================ */
53
+
54
+ .taskon-leaderboard {
55
+ font-size: 16px;
56
+ line-height: 1.5;
57
+ color: var(--taskon-leaderboard-text-lightest);
58
+ background-color: var(--taskon-leaderboard-bg-body);
59
+ overflow: hidden;
60
+ }
61
+
62
+ .taskon-leaderboard--error {
63
+ padding: 40px 20px;
64
+ text-align: center;
65
+ }
66
+
67
+ .taskon-leaderboard__error {
68
+ display: flex;
69
+ flex-direction: column;
70
+ align-items: center;
71
+ gap: var(--taskon-leaderboard-spacing-s);
72
+ }
73
+
74
+ .taskon-leaderboard__error-text {
75
+ color: var(--taskon-leaderboard-error);
76
+ font-size: 14px;
77
+ margin: 0;
78
+ }
79
+
80
+ .taskon-leaderboard__retry-btn {
81
+ padding: var(--taskon-leaderboard-spacing-xs) var(--taskon-leaderboard-spacing-m);
82
+ font-size: 14px;
83
+ font-weight: 500;
84
+ color: var(--taskon-leaderboard-primary);
85
+ background-color: transparent;
86
+ border: 1px solid var(--taskon-leaderboard-primary);
87
+ border-radius: var(--taskon-leaderboard-radius-m);
88
+ cursor: pointer;
89
+ transition: all 0.2s ease;
90
+ }
91
+
92
+ .taskon-leaderboard__retry-btn:hover {
93
+ background-color: var(--taskon-leaderboard-primary);
94
+ color: var(--taskon-leaderboard-bg-body);
95
+ }
96
+
97
+ /* ============================================================================
98
+ Tabs - 参考 Figma 设计:左对齐布局,12px 间距,8px 圆角
99
+ ============================================================================ */
100
+
101
+ .taskon-leaderboard-tabs {
102
+ display: flex;
103
+ flex-wrap: wrap;
104
+ align-items: center;
105
+ justify-content: flex-start;
106
+ gap: var(--taskon-leaderboard-spacing-s);
107
+ padding: var(--taskon-leaderboard-spacing-m) var(--taskon-leaderboard-spacing-l) var(--taskon-leaderboard-spacing-xs);
108
+ background-color: transparent;
109
+ }
110
+
111
+ /* Tab 按钮 - 默认状态:透明背景 (text-invisible) */
112
+ .taskon-leaderboard-tabs__tab {
113
+ padding: var(--taskon-leaderboard-spacing-xs) var(--taskon-leaderboard-spacing-m);
114
+ font-size: 14px;
115
+ font-weight: 500;
116
+ line-height: 20px;
117
+ color: var(--taskon-leaderboard-text-lightest);
118
+ background-color: var(--taskon-leaderboard-text-invisible);
119
+ border: 1px solid transparent;
120
+ border-radius: var(--taskon-leaderboard-radius-l);
121
+ cursor: pointer;
122
+ transition: all 0.2s ease;
123
+ }
124
+
125
+ /* Tab 悬停状态:较亮背景 (text-darkest) */
126
+ .taskon-leaderboard-tabs__tab:hover {
127
+ background-color: var(--taskon-leaderboard-text-darkest);
128
+ }
129
+
130
+ /* Tab 激活状态:白色背景,黑色文字,边框 */
131
+ .taskon-leaderboard-tabs__tab--active {
132
+ background-color: var(--taskon-leaderboard-text-lightest);
133
+ color: #0d0d0d;
134
+ border-color: rgba(13, 13, 13, 0.1);
135
+ }
136
+
137
+ .taskon-leaderboard-tabs__tab--active:hover {
138
+ background-color: var(--taskon-leaderboard-text-lightest);
139
+ color: #0d0d0d;
140
+ }
141
+
142
+ /* ============================================================================
143
+ Header - 参考 Figma 设计:垂直布局,状态/时间行 + 奖励行
144
+ ============================================================================ */
145
+
146
+ .taskon-leaderboard-header {
147
+ display: flex;
148
+ flex-direction: column;
149
+ gap: var(--taskon-leaderboard-spacing-xxs);
150
+ padding: var(--taskon-leaderboard-spacing-xs) var(--taskon-leaderboard-spacing-l) var(--taskon-leaderboard-spacing-s);
151
+ }
152
+
153
+ /* 状态和时间容器 */
154
+ .taskon-leaderboard-header__info {
155
+ display: flex;
156
+ align-items: center;
157
+ gap: var(--taskon-leaderboard-spacing-s);
158
+ }
159
+
160
+ /* 状态徽章 - 11px SemiBold,绿色文字,深色背景 */
161
+ .taskon-leaderboard-header__status {
162
+ display: inline-flex;
163
+ align-items: center;
164
+ justify-content: center;
165
+ height: 20px;
166
+ padding: 0 var(--taskon-leaderboard-spacing-xs);
167
+ font-size: 11px;
168
+ font-weight: 600;
169
+ line-height: 12px;
170
+ border-radius: var(--taskon-leaderboard-radius-s);
171
+ background-color: var(--taskon-leaderboard-text-darkest);
172
+ }
173
+
174
+ .taskon-leaderboard-header__status--ongoing {
175
+ color: var(--taskon-leaderboard-secondary);
176
+ }
177
+
178
+ .taskon-leaderboard-header__status--ended {
179
+ color: var(--taskon-leaderboard-error);
180
+ }
181
+
182
+ .taskon-leaderboard-header__status--upcoming {
183
+ color: var(--taskon-leaderboard-primary);
184
+ }
185
+
186
+ /* 时间范围 - 16px Regular,80% 白色 */
187
+ .taskon-leaderboard-header__time {
188
+ font-size: 16px;
189
+ font-weight: 400;
190
+ line-height: 24px;
191
+ color: var(--taskon-leaderboard-text-lighter);
192
+ }
193
+
194
+ /* 分隔线 - 竖线 */
195
+ .taskon-leaderboard-header__separator {
196
+ width: 1px;
197
+ height: 16px;
198
+ background-color: var(--taskon-leaderboard-text-dark);
199
+ }
200
+
201
+ /* 参与人数容器 */
202
+ .taskon-leaderboard-header__participants {
203
+ display: flex;
204
+ align-items: center;
205
+ gap: var(--taskon-leaderboard-spacing-xs);
206
+ font-size: 16px;
207
+ font-weight: 500;
208
+ line-height: 24px;
209
+ }
210
+
211
+ /* 参与人数标签 - 60% 白色 */
212
+ .taskon-leaderboard-header__participants-label {
213
+ color: var(--taskon-leaderboard-text-light);
214
+ }
215
+
216
+ /* 参与人数值 - 80% 白色 */
217
+ .taskon-leaderboard-header__participants-value {
218
+ color: var(--taskon-leaderboard-text-lighter);
219
+ }
220
+
221
+ /* ============================================================================
222
+ Header - 旧样式(保留兼容)
223
+ ============================================================================ */
224
+
225
+ .taskon-leaderboard-header__title-row {
226
+ display: flex;
227
+ align-items: center;
228
+ gap: var(--taskon-leaderboard-spacing-s);
229
+ margin-bottom: var(--taskon-leaderboard-spacing-xs);
230
+ }
231
+
232
+ .taskon-leaderboard-header__title {
233
+ margin: 0;
234
+ font-size: 18px;
235
+ font-weight: 600;
236
+ color: var(--taskon-leaderboard-text-lightest);
237
+ }
238
+
239
+ /* 奖励信息容器 - 参考 Figma 设计:水平布局,16px 间距 */
240
+ .taskon-leaderboard-header__reward-info {
241
+ display: flex;
242
+ align-items: center;
243
+ gap: var(--taskon-leaderboard-spacing-m);
244
+ }
245
+
246
+ /* 奖励项 - 水平布局,8px 间距 */
247
+ .taskon-leaderboard-header__reward-item {
248
+ display: flex;
249
+ align-items: center;
250
+ gap: var(--taskon-leaderboard-spacing-xs);
251
+ font-size: 16px;
252
+ line-height: 24px;
253
+ white-space: nowrap;
254
+ }
255
+
256
+ /* 奖励标签 - 16px Regular 白色 */
257
+ .taskon-leaderboard-header__reward-label {
258
+ font-weight: 400;
259
+ color: var(--taskon-leaderboard-text-lightest);
260
+ }
261
+
262
+ /* 奖励数值 - 16px SemiBold 主色 */
263
+ .taskon-leaderboard-header__reward-value {
264
+ font-weight: 600;
265
+ color: var(--taskon-leaderboard-primary);
266
+ }
267
+
268
+ /* 奖励分隔线 - 12px 高度 */
269
+ .taskon-leaderboard-header__reward-separator {
270
+ width: 1px;
271
+ height: 12px;
272
+ background-color: var(--taskon-leaderboard-text-darkest);
273
+ }
274
+
275
+ .taskon-leaderboard-header__reward-rules-btn {
276
+ margin-left: auto;
277
+ padding: var(--taskon-leaderboard-spacing-xxs) var(--taskon-leaderboard-spacing-s);
278
+ font-size: 13px;
279
+ font-weight: 500;
280
+ color: var(--taskon-leaderboard-primary);
281
+ background-color: transparent;
282
+ border: 1px solid var(--taskon-leaderboard-primary);
283
+ border-radius: var(--taskon-leaderboard-radius-m);
284
+ cursor: pointer;
285
+ transition: all 0.2s ease;
286
+ }
287
+
288
+ .taskon-leaderboard-header__reward-rules-btn:hover {
289
+ background-color: var(--taskon-leaderboard-primary);
290
+ color: var(--taskon-leaderboard-bg-body);
291
+ }
292
+
293
+ /* ============================================================================
294
+ LeaderboardTable 容器 - 左右 padding 与 Header 一致
295
+ ============================================================================ */
296
+
297
+ .taskon-leaderboard-table {
298
+ padding: 0 var(--taskon-leaderboard-spacing-l);
299
+ }
300
+
301
+ /* ============================================================================
302
+ LeaderboardTable 特有样式(基于公共 Table 组件)
303
+ ============================================================================ */
304
+
305
+ /* 奖励显示 - 参考 Figma 设计:16px SemiBold 白色 */
306
+ .taskon-leaderboard-table__reward {
307
+ display: inline-flex;
308
+ align-items: center;
309
+ gap: var(--taskon-leaderboard-spacing-xs);
310
+ font-size: 16px;
311
+ font-weight: 600;
312
+ line-height: 24px;
313
+ color: var(--taskon-leaderboard-text-lightest);
314
+ white-space: nowrap;
315
+ flex-wrap: nowrap;
316
+ }
317
+
318
+ /* 奖励类型标签(如 "积分名:") */
319
+ .taskon-leaderboard-table__reward-type {
320
+ color: var(--taskon-leaderboard-text-lightest);
321
+ }
322
+
323
+ /* 奖励值(高亮显示) */
324
+ .taskon-leaderboard-table__reward-value {
325
+ color: var(--taskon-leaderboard-secondary);
326
+ }
327
+
328
+ /* 奖励图标 */
329
+ .taskon-leaderboard-table__reward-icon {
330
+ width: 18px;
331
+ height: 18px;
332
+ flex-shrink: 0;
333
+ }
334
+
335
+ /* 潜在奖励(尚未获得) */
336
+ .taskon-leaderboard-table__reward--potential {
337
+ opacity: 0.8;
338
+ }
339
+
340
+ /* 链信息 */
341
+ .taskon-leaderboard-table__reward-chain {
342
+ font-size: 14px;
343
+ font-weight: 400;
344
+ color: var(--taskon-leaderboard-text-dark);
345
+ }
346
+
347
+ /* 未达标状态 - Not Qualified: rgba(255,255,255,0.6) */
348
+ .taskon-leaderboard-table__reward--not-qualified {
349
+ font-size: 16px;
350
+ font-weight: 600;
351
+ line-height: 24px;
352
+ color: var(--taskon-leaderboard-text-light);
353
+ }
354
+
355
+ /* 禁用提示文本 */
356
+ .taskon-leaderboard-table__disabled-tip {
357
+ width: 100%;
358
+ padding-top: var(--taskon-leaderboard-spacing-xs);
359
+ font-size: 14px;
360
+ font-weight: 500;
361
+ line-height: 20px;
362
+ color: var(--taskon-leaderboard-text-lightest);
363
+ }
364
+
365
+ .taskon-leaderboard-table__disabled-link {
366
+ color: var(--taskon-leaderboard-primary);
367
+ text-decoration: underline;
368
+ cursor: pointer;
369
+ }
370
+
371
+ /* 操作按钮 */
372
+ .taskon-leaderboard-table__action-btn {
373
+ display: inline-flex;
374
+ align-items: center;
375
+ justify-content: center;
376
+ height: 34px;
377
+ padding: var(--taskon-leaderboard-spacing-xs) var(--taskon-leaderboard-spacing-l);
378
+ font-size: 14px;
379
+ font-weight: 500;
380
+ line-height: 20px;
381
+ color: var(--taskon-leaderboard-text-lightest);
382
+ background-color: transparent;
383
+ border: 1px solid var(--taskon-leaderboard-text-darkest);
384
+ border-radius: var(--taskon-leaderboard-radius-m);
385
+ cursor: pointer;
386
+ transition: all 0.2s ease;
387
+ }
388
+
389
+ .taskon-leaderboard-table__action-btn:hover:not(:disabled) {
390
+ background-color: var(--taskon-leaderboard-text-invisible);
391
+ border-color: var(--taskon-leaderboard-text-dark);
392
+ }
393
+
394
+ .taskon-leaderboard-table__action-btn:disabled {
395
+ opacity: 0.4;
396
+ cursor: not-allowed;
397
+ }
398
+
399
+ /* ============================================================================
400
+ Rank Badge - 参考 Figma 设计:27px 六边形徽章
401
+ 支持通过 CSS 变量自定义颜色
402
+ ============================================================================ */
403
+
404
+ .taskon-leaderboard-rank {
405
+ display: inline-flex;
406
+ align-items: center;
407
+ justify-content: center;
408
+ min-width: 27px;
409
+ height: 27px;
410
+ font-size: 16px;
411
+ font-weight: 500;
412
+ line-height: normal;
413
+ color: var(--taskon-leaderboard-text-lightest);
414
+ }
415
+
416
+ /* 六边形徽章样式 */
417
+ .taskon-leaderboard-rank--badge {
418
+ position: relative;
419
+ width: 27px;
420
+ height: 27px;
421
+ }
422
+
423
+ .taskon-leaderboard-rank__hexagon {
424
+ display: block;
425
+ }
426
+
427
+ /* 六边形路径 - 通过 CSS 变量控制颜色 */
428
+ .taskon-leaderboard-rank__hexagon-path {
429
+ stroke-width: 1;
430
+ }
431
+
432
+ /* 金色徽章 - 第1名 */
433
+ .taskon-leaderboard-rank--gold .taskon-leaderboard-rank__hexagon-path {
434
+ fill: var(--taskon-leaderboard-rank-gold);
435
+ stroke: var(--taskon-leaderboard-rank-gold-stroke);
436
+ }
437
+
438
+ /* 银色徽章 - 第2名 */
439
+ .taskon-leaderboard-rank--silver .taskon-leaderboard-rank__hexagon-path {
440
+ fill: var(--taskon-leaderboard-rank-silver);
441
+ stroke: var(--taskon-leaderboard-rank-silver-stroke);
442
+ }
443
+
444
+ /* 铜色徽章 - 第3名 */
445
+ .taskon-leaderboard-rank--bronze .taskon-leaderboard-rank__hexagon-path {
446
+ fill: var(--taskon-leaderboard-rank-bronze);
447
+ stroke: var(--taskon-leaderboard-rank-bronze-stroke);
448
+ }
449
+
450
+ /* 徽章上的数字 */
451
+ .taskon-leaderboard-rank__number-overlay {
452
+ position: absolute;
453
+ top: 50%;
454
+ left: 50%;
455
+ transform: translate(-50%, -50%);
456
+ font-size: 14px;
457
+ font-weight: 600;
458
+ color: var(--taskon-leaderboard-text-lightest);
459
+ text-align: center;
460
+ }
461
+
462
+ /* 未排名状态 */
463
+ .taskon-leaderboard-rank--na,
464
+ .taskon-leaderboard-rank--unranked {
465
+ color: var(--taskon-leaderboard-text-light);
466
+ }
467
+
468
+ /* 普通数字排名 */
469
+ .taskon-leaderboard-rank--number {
470
+ font-size: 16px;
471
+ font-weight: 500;
472
+ }
473
+
474
+ /* ============================================================================
475
+ User Cell - 参考 Figma 设计:
476
+ - 当前用户:只显示 "YOU" 绿色
477
+ - 其他用户:显示地址,16px SemiBold 白色
478
+ ============================================================================ */
479
+
480
+ .taskon-leaderboard-user {
481
+ display: flex;
482
+ align-items: center;
483
+ }
484
+
485
+ .taskon-leaderboard-user--clickable {
486
+ cursor: pointer;
487
+ }
488
+
489
+ .taskon-leaderboard-user--clickable:hover .taskon-leaderboard-user__name {
490
+ opacity: 0.8;
491
+ }
492
+
493
+ /* 用户名 - 16px SemiBold 白色 */
494
+ .taskon-leaderboard-user__name {
495
+ font-size: 16px;
496
+ font-weight: 600;
497
+ line-height: 24px;
498
+ color: var(--taskon-leaderboard-text-lightest);
499
+ white-space: nowrap;
500
+ overflow: hidden;
501
+ text-overflow: ellipsis;
502
+ transition: opacity 0.2s ease;
503
+ }
504
+
505
+ /* YOU 标签 - 16px SemiBold 绿色 (#1affab) */
506
+ .taskon-leaderboard-user__you-badge {
507
+ font-size: 16px;
508
+ font-weight: 600;
509
+ line-height: normal;
510
+ color: var(--taskon-leaderboard-secondary);
511
+ text-transform: uppercase;
512
+ }
513
+
514
+ /* ============================================================================
515
+ Pagination - 参考 Figma 设计:居中布局,圆形按钮
516
+ ============================================================================ */
517
+
518
+ .taskon-leaderboard-pagination {
519
+ display: flex;
520
+ align-items: center;
521
+ justify-content: center;
522
+ gap: var(--taskon-leaderboard-spacing-m);
523
+ padding: var(--taskon-leaderboard-spacing-l) var(--taskon-leaderboard-spacing-m);
524
+ border-top: none;
525
+ }
526
+
527
+ /* 分页按钮 - 圆形 30px */
528
+ .taskon-leaderboard-pagination .taskon-pagination-btn {
529
+ width: 30px;
530
+ height: 30px;
531
+ min-width: 30px;
532
+ padding: 0;
533
+ border-radius: 50%;
534
+ display: inline-flex;
535
+ align-items: center;
536
+ justify-content: center;
537
+ background-color: transparent;
538
+ border: 1px solid var(--taskon-leaderboard-text-darkest);
539
+ color: var(--taskon-leaderboard-text-lightest);
540
+ transition: all 0.2s ease;
541
+ }
542
+
543
+ .taskon-leaderboard-pagination .taskon-pagination-btn:hover:not(:disabled) {
544
+ background-color: var(--taskon-leaderboard-text-invisible);
545
+ border-color: var(--taskon-leaderboard-text-dark);
546
+ }
547
+
548
+ .taskon-leaderboard-pagination .taskon-pagination-btn:disabled {
549
+ opacity: 0.4;
550
+ cursor: not-allowed;
551
+ }
552
+
553
+ /* 分页图标 */
554
+ .taskon-leaderboard-pagination .taskon-pagination-icon {
555
+ width: 16px;
556
+ height: 16px;
557
+ }
558
+
559
+ /* 页码信息 - 16px Regular,格式:1 / 5 */
560
+ .taskon-leaderboard-pagination .taskon-pagination-info {
561
+ display: flex;
562
+ align-items: center;
563
+ font-size: 16px;
564
+ font-weight: 400;
565
+ }
566
+
567
+ /* 当前页码 - 白色 */
568
+ .taskon-leaderboard-pagination .taskon-pagination-info-current {
569
+ color: var(--taskon-leaderboard-text-lightest);
570
+ }
571
+
572
+ /* 分隔符和总页数 - 灰色 */
573
+ .taskon-leaderboard-pagination .taskon-pagination-info-separator,
574
+ .taskon-leaderboard-pagination .taskon-pagination-info-total {
575
+ color: var(--taskon-leaderboard-text-dark);
576
+ }
577
+
578
+ /* 隐藏范围文字 */
579
+ .taskon-leaderboard-pagination .taskon-pagination-range {
580
+ display: none;
581
+ }
582
+
583
+ /* ============================================================================
584
+ Modal - 参考 Figma 设计稿更新
585
+ ============================================================================ */
586
+
587
+ .taskon-leaderboard-modal-overlay {
588
+ position: fixed;
589
+ inset: 0;
590
+ z-index: 1000;
591
+ display: flex;
592
+ align-items: center;
593
+ justify-content: center;
594
+ padding: var(--taskon-leaderboard-spacing-l);
595
+ background-color: rgba(0, 0, 0, 0.5);
596
+ }
597
+
598
+ .taskon-leaderboard-modal {
599
+ position: relative;
600
+ width: 100%;
601
+ max-width: 520px;
602
+ max-height: 80vh;
603
+ background-color: var(--taskon-leaderboard-bg-body);
604
+ border-radius: var(--taskon-leaderboard-radius-xl);
605
+ overflow: hidden;
606
+ display: flex;
607
+ flex-direction: column;
608
+ }
609
+
610
+ .taskon-leaderboard-modal__header {
611
+ display: flex;
612
+ align-items: center;
613
+ justify-content: space-between;
614
+ padding: var(--taskon-leaderboard-spacing-m) var(--taskon-leaderboard-spacing-l);
615
+ border-bottom: 1px solid var(--taskon-leaderboard-text-darkest);
616
+ }
617
+
618
+ /* 弹窗标题 - 24px SemiBold 白色 */
619
+ .taskon-leaderboard-modal__title {
620
+ margin: 0;
621
+ font-size: 24px;
622
+ font-weight: 600;
623
+ line-height: 32px;
624
+ color: var(--taskon-leaderboard-text-lightest);
625
+ }
626
+
627
+ .taskon-leaderboard-modal__close {
628
+ display: flex;
629
+ align-items: center;
630
+ justify-content: center;
631
+ width: 32px;
632
+ height: 32px;
633
+ padding: 0;
634
+ background-color: transparent;
635
+ border: none;
636
+ border-radius: var(--taskon-leaderboard-radius-m);
637
+ cursor: pointer;
638
+ color: var(--taskon-leaderboard-text-dark);
639
+ transition: all 0.2s ease;
640
+ }
641
+
642
+ .taskon-leaderboard-modal__close:hover {
643
+ background-color: var(--taskon-leaderboard-text-darkest);
644
+ color: var(--taskon-leaderboard-text-lightest);
645
+ }
646
+
647
+ .taskon-leaderboard-modal__close svg {
648
+ width: 20px;
649
+ height: 20px;
650
+ }
651
+
652
+ /* 弹窗内容容器 - gap 20px */
653
+ .taskon-leaderboard-modal__content {
654
+ display: flex;
655
+ flex-direction: column;
656
+ gap: var(--taskon-leaderboard-spacing-l);
657
+ padding: var(--taskon-leaderboard-spacing-l);
658
+ overflow-y: auto;
659
+ }
660
+
661
+ /* 描述文本 - 16px Regular 暗色 */
662
+ .taskon-leaderboard-modal__desc {
663
+ margin: 0;
664
+ font-size: 16px;
665
+ font-weight: 400;
666
+ line-height: 24px;
667
+ color: var(--taskon-leaderboard-text-dark);
668
+ }
669
+
670
+ /* 章节容器 - gap 8px */
671
+ .taskon-leaderboard-modal__section {
672
+ display: flex;
673
+ flex-direction: column;
674
+ gap: var(--taskon-leaderboard-spacing-xs);
675
+ }
676
+
677
+ /* 章节标题 - 16px Regular 稍亮暗色 */
678
+ .taskon-leaderboard-modal__section-title {
679
+ margin: 0;
680
+ font-size: 16px;
681
+ font-weight: 400;
682
+ line-height: 24px;
683
+ color: var(--taskon-leaderboard-text-light);
684
+ }
685
+
686
+ /* 时间范围 - 14px Medium 白色 */
687
+ .taskon-leaderboard-modal__period {
688
+ margin: 0;
689
+ font-size: 14px;
690
+ font-weight: 500;
691
+ line-height: normal;
692
+ color: var(--taskon-leaderboard-text-lightest);
693
+ text-overflow: ellipsis;
694
+ overflow: hidden;
695
+ }
696
+
697
+ /* 奖励层级列表 - 无背景无边框,紧凑列表 */
698
+ .taskon-leaderboard-modal__tiers {
699
+ display: flex;
700
+ flex-direction: column;
701
+ gap: var(--taskon-leaderboard-spacing-xs);
702
+ }
703
+
704
+ /* 奖励层级行 - flex 布局,gap 20px */
705
+ .taskon-leaderboard-modal__tier {
706
+ display: flex;
707
+ align-items: center;
708
+ gap: var(--taskon-leaderboard-spacing-l);
709
+ padding: 0;
710
+ background-color: transparent;
711
+ border-radius: 0;
712
+ }
713
+
714
+ /* 排名范围 - 14px Regular 白色 */
715
+ .taskon-leaderboard-modal__tier-rank {
716
+ flex-shrink: 0;
717
+ min-width: 70px;
718
+ font-size: 14px;
719
+ font-weight: 400;
720
+ line-height: 20px;
721
+ color: var(--taskon-leaderboard-text-lightest);
722
+ text-overflow: ellipsis;
723
+ overflow: hidden;
724
+ white-space: nowrap;
725
+ }
726
+
727
+ /* 奖励内容容器 */
728
+ .taskon-leaderboard-modal__tier-reward {
729
+ display: flex;
730
+ align-items: center;
731
+ gap: 10px;
732
+ font-size: 16px;
733
+ font-weight: 600;
734
+ line-height: 24px;
735
+ color: var(--taskon-leaderboard-text-lightest);
736
+ }
737
+
738
+ /* 分配方式文本 - 16px SemiBold 白色 */
739
+ .taskon-leaderboard-modal__tier-distribute {
740
+ font-size: 16px;
741
+ font-weight: 600;
742
+ line-height: 24px;
743
+ color: var(--taskon-leaderboard-text-lightest);
744
+ }
745
+
746
+ /* Token 图标容器 */
747
+ .taskon-leaderboard-modal__tier-token {
748
+ display: flex;
749
+ align-items: center;
750
+ gap: var(--taskon-leaderboard-spacing-xs);
751
+ }
752
+
753
+ /* Token 图标 */
754
+ .taskon-leaderboard-modal__tier-token-icon {
755
+ width: 26px;
756
+ height: 24px;
757
+ object-fit: contain;
758
+ }
759
+
760
+ /* 奖励金额 - 数字绿色,单位白色 */
761
+ .taskon-leaderboard-modal__tier-amount {
762
+ font-size: 16px;
763
+ font-weight: 600;
764
+ line-height: 24px;
765
+ }
766
+
767
+ .taskon-leaderboard-modal__tier-amount-value {
768
+ color: var(--taskon-leaderboard-primary);
769
+ }
770
+
771
+ .taskon-leaderboard-modal__tier-amount-symbol {
772
+ color: var(--taskon-leaderboard-text-lightest);
773
+ }
774
+
775
+ /* 隐藏旧的 tier-header 和 tier-count */
776
+ .taskon-leaderboard-modal__tier-header {
777
+ display: none;
778
+ }
779
+
780
+ .taskon-leaderboard-modal__tier-count {
781
+ display: none;
782
+ }
783
+
784
+ /* ============================================================================
785
+ 响应式
786
+ ============================================================================ */
787
+
788
+ @media (max-width: 640px) {
789
+ .taskon-leaderboard-tabs {
790
+ overflow-x: auto;
791
+ -webkit-overflow-scrolling: touch;
792
+ }
793
+
794
+ .taskon-leaderboard-tabs__tab {
795
+ white-space: nowrap;
796
+ }
797
+
798
+ .taskon-leaderboard-header__reward-info {
799
+ flex-direction: column;
800
+ align-items: flex-start;
801
+ }
802
+
803
+ .taskon-leaderboard-header__reward-rules-btn {
804
+ margin-left: 0;
805
+ width: 100%;
806
+ }
807
+
808
+ .taskon-leaderboard-pagination {
809
+ flex-wrap: wrap;
810
+ }
811
+
812
+ .taskon-leaderboard-pagination__btn-text {
813
+ display: none;
814
+ }
815
+ }