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

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 (65) hide show
  1. package/README.md +61 -47
  2. package/dist/CommunityTaskList.css +9 -1
  3. package/dist/EligibilityInfo.css +48 -75
  4. package/dist/LeaderboardWidget.css +73 -71
  5. package/dist/PageBuilder.css +5 -0
  6. package/dist/Quest.css +18 -14
  7. package/dist/TaskOnProvider.css +289 -0
  8. package/dist/ThemeProvider.css +227 -0
  9. package/dist/UserCenterWidget.css +6 -6
  10. package/dist/UserCenterWidget2.css +1388 -1621
  11. package/dist/{dynamic-import-helper.css → WidgetShell.css} +0 -227
  12. package/dist/chunks/{CommunityTaskList-CrMvOB8w.js → CommunityTaskList-D0uVD8wD.js} +393 -208
  13. package/dist/chunks/{EligibilityInfo-Beww12QX.js → EligibilityInfo-Cf6hx9-a.js} +459 -679
  14. package/dist/chunks/{LeaderboardWidget-DwuSpVl0.js → LeaderboardWidget-DyoiiNS6.js} +274 -252
  15. package/dist/chunks/{PageBuilder-DsX6Tv0N.js → PageBuilder-DoAFPm6-.js} +5 -5
  16. package/dist/chunks/{Quest-CuD2LElS.js → Quest-ySZlYd4u.js} +74 -57
  17. package/dist/chunks/TaskOnProvider-CxtFIs3n.js +2072 -0
  18. package/dist/chunks/{dynamic-import-helper-WmIF58Sb.js → ThemeProvider-CulHkqqY.js} +1282 -555
  19. package/dist/chunks/UserCenterWidget-BJsc_GSZ.js +3246 -0
  20. package/dist/chunks/{UserCenterWidget-CvU6K4AC.js → UserCenterWidget-STq8kpV4.js} +1174 -1386
  21. package/dist/chunks/WidgetShell-8xn-Jivw.js +659 -0
  22. package/dist/chunks/communitytask-es-CBNnS4o2.js +521 -0
  23. package/dist/chunks/communitytask-ja-GRf9cbdx.js +521 -0
  24. package/dist/chunks/communitytask-ko-Bf24PQKI.js +521 -0
  25. package/dist/chunks/{communitytask-ru-DhySaZL8.js → communitytask-ru-CZm2CPoV.js} +211 -1
  26. package/dist/chunks/leaderboardwidget-es-vKjrjQaz.js +146 -0
  27. package/dist/chunks/leaderboardwidget-ja-Q6u0HxKG.js +146 -0
  28. package/dist/chunks/leaderboardwidget-ko-CG6SWgxf.js +146 -0
  29. package/dist/chunks/leaderboardwidget-ru-DCcHcJGz.js +146 -0
  30. package/dist/chunks/{quest-es-D-b5xcme.js → quest-es-Dyyy0zaw.js} +8 -93
  31. package/dist/chunks/{quest-ja-Dxd2vqBF.js → quest-ja-Depog33y.js} +8 -93
  32. package/dist/chunks/{quest-ko-CSmRWgK_.js → quest-ko-BMu3uRQJ.js} +8 -93
  33. package/dist/chunks/{quest-ru-CkEKv1_F.js → quest-ru-xne814Rw.js} +8 -93
  34. package/dist/chunks/useIsMobile-D6Ybur-6.js +30 -0
  35. package/dist/chunks/useToast-BGJhd3BX.js +93 -0
  36. package/dist/chunks/usercenter-es-Dz3Wp2vV.js +512 -0
  37. package/dist/chunks/usercenter-ja-CKE4DJC6.js +512 -0
  38. package/dist/chunks/usercenter-ko-Dtpkn2qb.js +512 -0
  39. package/dist/chunks/usercenter-ru-DnBGee45.js +512 -0
  40. package/dist/community-task.d.ts +0 -390
  41. package/dist/community-task.js +2 -7
  42. package/dist/core.d.ts +38 -20
  43. package/dist/core.js +9 -10
  44. package/dist/index.d.ts +86 -709
  45. package/dist/index.js +22 -28
  46. package/dist/leaderboard.d.ts +0 -498
  47. package/dist/leaderboard.js +2 -16
  48. package/dist/page-builder.js +1 -1
  49. package/dist/quest.d.ts +0 -971
  50. package/dist/quest.js +2 -7
  51. package/dist/user-center.d.ts +0 -1610
  52. package/dist/user-center.js +2 -494
  53. package/package.json +2 -2
  54. package/dist/chunks/TaskOnProvider-xUeP2Nro.js +0 -1243
  55. package/dist/chunks/ThemeProvider-Bt4UZ33y.js +0 -1334
  56. package/dist/chunks/UserCenterWidget-CB0hnj-L.js +0 -3230
  57. package/dist/chunks/communitytask-es-1zawvXEX.js +0 -311
  58. package/dist/chunks/communitytask-ja-CmW6nP-L.js +0 -311
  59. package/dist/chunks/communitytask-ko-BD0hzQSi.js +0 -311
  60. package/dist/chunks/createLocaleLoader-BameiEhU.js +0 -65
  61. package/dist/chunks/leaderboardwidget-ja-Bj6gz6y1.js +0 -119
  62. package/dist/chunks/leaderboardwidget-ko-f1cLO9ic.js +0 -119
  63. package/dist/chunks/useToast-CaRkylKe.js +0 -304
  64. package/dist/chunks/usercenter-ja-B2465c1O.js +0 -326
  65. package/dist/chunks/usercenter-ko-xAEYxqLg.js +0 -326
@@ -117,741 +117,561 @@
117
117
  font-size: 12px;
118
118
  color: var(--taskon-color-error);
119
119
  line-height: 1.4;
120
+ overflow-wrap: anywhere;
121
+ word-break: break-word;
120
122
  }
121
123
  /**
122
- * ClaimNftDialog 样式
124
+ * TipPopover 组件样式
125
+ * 设计原则:组件内部不包含 margin,需要间距由外部控制
123
126
  */
124
127
 
125
- .taskon-claim-dialog {
126
- max-width: 400px;
127
- }
128
-
129
- .taskon-claim-dialog-content {
130
- display: flex;
131
- flex-direction: column;
132
- align-items: center;
133
- padding: 24px;
134
- text-align: center;
135
- color: var(--taskon-color-text);
136
- }
128
+ /*
129
+ * Responsive base styles
130
+ *
131
+ * Keep mobile breakpoints and fallback patterns centralized here.
132
+ * Components should reuse these mixins instead of duplicating query logic.
133
+ */
137
134
 
138
- /* NFT 图片 */
135
+ /*
136
+ * Desktop-up mixin:
137
+ * 1) Enable desktop enhancement in wider containers
138
+ * 2) Keep viewport media query as fallback
139
+ */
139
140
 
140
- .taskon-claim-dialog-nft {
141
- margin-bottom: 20px;
141
+ .taskon-tip-popover-trigger {
142
+ display: inline-flex;
143
+ align-items: center;
144
+ justify-content: center;
145
+ padding: 0;
146
+ border: none;
147
+ background: transparent;
148
+ cursor: pointer;
149
+ color: var(--taskon-color-text-tertiary);
150
+ outline: none;
142
151
  }
143
152
 
144
- .taskon-claim-dialog-nft__image {
145
- width: 120px;
146
- height: 120px;
147
- border-radius: 12px;
148
- object-fit: cover;
153
+ .taskon-tip-popover-trigger:hover,
154
+ .taskon-tip-popover-trigger:focus {
155
+ color: var(--taskon-color-text-tertiary);
156
+ background: transparent;
157
+ outline: none;
149
158
  }
150
159
 
151
- /* 状态图标区域 */
160
+ /* Custom children trigger - reset button styles */
152
161
 
153
- .taskon-claim-dialog-status {
154
- margin-bottom: 16px;
155
- min-height: 48px;
156
- display: flex;
157
- align-items: center;
158
- justify-content: center;
162
+ .taskon-tip-popover-trigger--custom {
163
+ cursor: pointer;
159
164
  }
160
165
 
161
- /* 加载动画 */
166
+ .taskon-tip-popover-content {
167
+ max-width: 60vw;
168
+ padding: 12px 16px;
169
+ border-radius: var(--taskon-border-radius-sm);
170
+ border: none;
171
+ outline: none;
172
+ background: var(--taskon-color-bg-floating);
173
+ color: var(--taskon-color-text);
174
+ font-size: 13px;
175
+ line-height: 1.5;
176
+ box-shadow: 0 4px 16px var(--taskon-color-bg-mask);
177
+ /* z-index 需要大于 Dialog (9999) 才能在弹窗中正常显示 */
178
+ z-index: 10000;
179
+ animation: taskon-tip-popover-fade-in 0.15s ease;
180
+ }
162
181
 
163
- .taskon-claim-dialog-spinner {
164
- width: 48px;
165
- height: 48px;
166
- position: relative;
182
+ .taskon-tip-popover-content:focus {
183
+ outline: none;
167
184
  }
168
185
 
169
- .taskon-claim-dialog-spinner__circle {
170
- width: 100%;
171
- height: 100%;
172
- border: 3px solid var(--taskon-color-border-secondary);
173
- border-top-color: var(--taskon-color-primary);
174
- border-radius: 50%;
175
- animation: taskon-claim-spin 0.8s linear infinite;
186
+ .taskon-tip-popover-arrow {
187
+ fill: var(--taskon-color-bg-floating);
176
188
  }
177
189
 
178
- @keyframes taskon-claim-spin {
190
+ @keyframes taskon-tip-popover-fade-in {
191
+ from {
192
+ opacity: 0;
193
+ transform: scale(0.96);
194
+ }
179
195
  to {
180
- transform: rotate(360deg);
196
+ opacity: 1;
197
+ transform: scale(1);
181
198
  }
182
199
  }
183
200
 
184
- /* 状态图标 */
185
-
186
- .taskon-claim-dialog-icon {
187
- width: 48px;
188
- height: 48px;
189
- }
201
+ /* Desktop 增强 */
190
202
 
191
- .taskon-claim-dialog-icon--success {
192
- color: var(--taskon-color-success);
193
- }
203
+ @supports (container-type: inline-size) {
204
+ @container (min-width: 751px) {
205
+ .taskon-tip-popover-content {
206
+ max-width: 266px;
207
+ }
208
+ }
209
+ }
194
210
 
195
- .taskon-claim-dialog-icon--error {
196
- color: var(--taskon-color-error);
211
+ @supports not (container-type: inline-size) {
212
+ @media (min-width: 751px) {
213
+ .taskon-tip-popover-content {
214
+ max-width: 266px;
215
+ }
216
+ }
217
+ }
218
+ /**
219
+ * Select 组件样式
220
+ *
221
+ * 基于 Vue ProSelect 组件样式翻译
222
+ * 使用 taskon-select 命名空间避免样式冲突。
223
+ *
224
+ * 主题规范:
225
+ * - 不再定义组件私有主题变量
226
+ * - 统一使用 ThemeProvider 输出的通用 --taskon-* 变量
227
+ */
228
+ /*
229
+ * Responsive base styles
230
+ *
231
+ * Keep mobile breakpoints and fallback patterns centralized here.
232
+ * Components should reuse these mixins instead of duplicating query logic.
233
+ */
234
+ /*
235
+ * Desktop-up mixin:
236
+ * 1) Enable desktop enhancement in wider containers
237
+ * 2) Keep viewport media query as fallback
238
+ */
239
+ /* ========== 根容器 ========== */
240
+ .taskon-select {
241
+ position: relative;
242
+ display: inline-block;
243
+ width: 100%;
197
244
  }
198
-
199
- /* 状态消息 */
200
-
201
- .taskon-claim-dialog-message {
202
- font-size: 16px;
203
- font-weight: 500;
204
- color: var(--taskon-color-text);
205
- margin: 0 0 16px;
206
- line-height: 1.5;
245
+ /* ========== 禁用状态 ========== */
246
+ .taskon-select--disabled {
247
+ opacity: 0.6;
248
+ cursor: not-allowed;
207
249
  }
208
-
209
- /* 交易 Hash */
210
-
211
- .taskon-claim-dialog-tx {
250
+ /* ========== 触发器 ========== */
251
+ .taskon-select__trigger {
212
252
  display: flex;
213
253
  align-items: center;
214
- gap: 8px;
215
- padding: 8px 16px;
254
+ height: 40px;
255
+ min-width: 120px;
256
+ padding: 0 12px;
216
257
  background: var(--taskon-color-bg-surface-subtle);
217
- border-radius: 8px;
218
- margin-bottom: 20px;
219
- font-size: 14px;
258
+ color: var(--taskon-color-text);
259
+ font-size: 13px;
260
+ line-height: 20px;
261
+ border: 1px solid var(--taskon-color-border);
262
+ border-radius: var(--taskon-border-radius-sm);
263
+ cursor: pointer;
264
+ transition:
265
+ background 0.2s,
266
+ border-color 0.2s;
267
+ outline: none;
268
+ user-select: none;
220
269
  }
221
-
222
- .taskon-claim-dialog-tx__label {
223
- color: var(--taskon-color-text-tertiary);
270
+ .taskon-select__trigger:hover:not(.taskon-select__trigger--disabled) {
271
+ background: var(--taskon-color-bg-surface);
272
+ border-color: var(--taskon-color-border-secondary);
224
273
  }
225
-
226
- .taskon-claim-dialog-tx__hash {
227
- color: var(--taskon-color-link);
228
- font-family: monospace;
274
+ .taskon-select__trigger:focus:not(.taskon-select__trigger--disabled) {
275
+ background: var(--taskon-color-bg-surface);
276
+ border-color: var(--taskon-color-border-secondary);
229
277
  }
230
-
231
- /* 操作按钮 */
232
-
233
- .taskon-claim-dialog-actions {
234
- display: flex;
235
- gap: 12px;
236
- width: 100%;
237
- justify-content: center;
278
+ .taskon-select__trigger--open {
279
+ background: var(--taskon-color-bg-surface);
280
+ border-color: var(--taskon-color-border-secondary);
238
281
  }
239
-
240
- .taskon-claim-dialog-btn {
241
- padding: 10px 24px;
242
- border-radius: 8px;
243
- font-size: 14px;
244
- font-weight: 500;
245
- cursor: pointer;
246
- transition: all 0.2s ease;
247
- border: none;
282
+ .taskon-select__trigger--disabled {
283
+ cursor: not-allowed;
284
+ opacity: 0.6;
248
285
  }
249
-
250
- .taskon-claim-dialog-btn--primary {
251
- background: var(--taskon-color-primary);
252
- color: var(--taskon-color-text-on-primary);
286
+ .taskon-select__trigger--error {
287
+ border-color: var(--taskon-color-error) !important;
253
288
  }
254
-
255
- .taskon-claim-dialog-btn--primary:hover {
256
- filter: brightness(0.95);
289
+ /* 深色主题 */
290
+ .taskon-select__trigger--dark {
291
+ background: var(--taskon-color-bg-surface);
257
292
  }
258
-
259
- .taskon-claim-dialog-btn--secondary {
260
- background: transparent;
293
+ /* 浅色主题 */
294
+ .taskon-select__trigger--light {
295
+ background: var(--taskon-color-bg-surface);
261
296
  color: var(--taskon-color-text);
262
- border: 1px solid var(--taskon-color-border);
297
+ border-color: var(--taskon-color-border);
263
298
  }
264
-
265
- .taskon-claim-dialog-btn--secondary:hover {
299
+ .taskon-select__trigger--light:hover:not(.taskon-select__trigger--disabled) {
266
300
  background: var(--taskon-color-bg-surface-strong);
301
+ border-color: var(--taskon-color-border-secondary);
267
302
  }
268
-
269
- @media (max-width: 750px) {
270
- .taskon-claim-dialog {
271
- max-width: 100%;
272
- }
273
-
274
- .taskon-claim-dialog-content {
275
- padding: 16px;
276
- }
277
-
278
- .taskon-claim-dialog-nft {
279
- margin-bottom: 16px;
280
- }
281
-
282
- .taskon-claim-dialog-nft__image {
283
- width: 96px;
284
- height: 96px;
285
- }
286
-
287
- .taskon-claim-dialog-status {
288
- margin-bottom: 12px;
289
- min-height: 40px;
290
- }
291
-
292
- .taskon-claim-dialog-spinner,
293
- .taskon-claim-dialog-icon {
294
- width: 40px;
295
- height: 40px;
296
- }
297
-
298
- .taskon-claim-dialog-message {
299
- font-size: 14px;
300
- margin-bottom: 12px;
301
- }
302
-
303
- .taskon-claim-dialog-tx {
304
- align-items: flex-start;
305
- flex-direction: column;
306
- gap: 4px;
307
- margin-bottom: 16px;
308
- }
309
-
310
- .taskon-claim-dialog-tx__hash {
311
- display: block;
312
- max-width: 100%;
313
- overflow-wrap: anywhere;
314
- }
315
-
316
- .taskon-claim-dialog-actions {
317
- flex-direction: column;
318
- gap: 8px;
319
- }
320
-
321
- .taskon-claim-dialog-btn {
322
- width: 100%;
323
- padding: 9px 12px;
324
- }
325
- }
326
- /**
327
- * PendingTxDialog 样式
328
- */
329
-
330
- .taskon-pending-dialog {
331
- max-width: 460px;
332
- }
333
-
334
- .taskon-pending-dialog-content {
335
- display: flex;
336
- flex-direction: column;
337
- gap: 16px;
338
- }
339
-
340
- .taskon-pending-dialog-title {
341
- margin: 0;
342
- font-size: 16px;
343
- line-height: 24px;
344
- color: var(--taskon-color-text);
345
- }
346
-
347
- .taskon-pending-dialog-desc {
348
- margin: 0;
349
- font-size: 14px;
350
- line-height: 20px;
351
- color: var(--taskon-color-text-tertiary);
352
- }
353
-
354
- .taskon-pending-dialog-hash-wrap {
355
- display: flex;
356
- flex-wrap: wrap;
357
- align-items: center;
358
- gap: 8px;
359
- }
360
-
361
- .taskon-pending-dialog-hash-label {
362
- font-size: 14px;
363
- color: var(--taskon-color-text-tertiary);
303
+ .taskon-select__trigger--light:focus:not(.taskon-select__trigger--disabled),
304
+ .taskon-select__trigger--light.taskon-select__trigger--open {
305
+ background: var(--taskon-color-bg-surface-strong);
306
+ border-color: var(--taskon-color-border-secondary);
364
307
  }
365
-
366
- .taskon-pending-dialog-hash-link,
367
- .taskon-pending-dialog-hash-value {
368
- font-size: 14px;
369
- color: var(--taskon-color-link);
370
- text-decoration: underline;
371
- background: none;
308
+ /* 卡片主题 */
309
+ .taskon-select__trigger--card {
310
+ background: transparent;
372
311
  border: none;
373
- padding: 0;
374
- }
375
-
376
- .taskon-pending-dialog-hash-link {
377
- cursor: pointer;
378
- }
379
-
380
- .taskon-pending-dialog-notice-list {
381
- margin: 0;
382
- padding-left: 18px;
383
- list-style: disc;
384
- display: flex;
385
- flex-direction: column;
386
- gap: 10px;
387
- }
388
-
389
- .taskon-pending-dialog-notice-item {
390
- font-size: 12px;
391
- line-height: 18px;
392
- color: var(--taskon-color-link);
393
- }
394
-
395
- .taskon-pending-dialog-receive-address {
396
- margin-top: 4px;
397
- word-break: break-all;
398
- }
399
-
400
- .taskon-pending-dialog-actions {
401
- display: flex;
402
- justify-content: flex-end;
403
- gap: 12px;
404
- margin-top: 8px;
405
312
  }
406
-
407
- .taskon-pending-dialog-btn {
408
- padding: 10px 18px;
409
- border-radius: 8px;
313
+ .taskon-select__trigger--card:hover:not(.taskon-select__trigger--disabled),
314
+ .taskon-select__trigger--card:focus:not(.taskon-select__trigger--disabled),
315
+ .taskon-select__trigger--card.taskon-select__trigger--open {
316
+ background: var(--taskon-color-bg-surface-subtle);
410
317
  border: none;
411
- font-size: 14px;
412
- font-weight: 500;
413
- cursor: pointer;
414
- transition: all 0.2s ease;
415
- }
416
-
417
- .taskon-pending-dialog-btn--primary {
418
- background: var(--taskon-color-primary);
419
- color: var(--taskon-color-text-on-primary);
420
- }
421
-
422
- .taskon-pending-dialog-btn--primary:hover {
423
- opacity: 0.92;
424
- }
425
-
426
- .taskon-pending-dialog-btn--secondary {
427
- background: transparent;
428
- color: var(--taskon-color-text);
429
- border: 1px solid var(--taskon-color-border);
430
- }
431
-
432
- .taskon-pending-dialog-btn--secondary:hover {
433
- background: var(--taskon-color-bg-surface-strong);
434
318
  }
435
-
436
- @media (max-width: 750px) {
437
- .taskon-pending-dialog {
438
- max-width: 100%;
439
- }
440
-
441
- .taskon-pending-dialog-content {
442
- gap: 12px;
443
- }
444
-
445
- .taskon-pending-dialog-title {
446
- font-size: 15px;
447
- line-height: 22px;
448
- }
449
-
450
- .taskon-pending-dialog-desc,
451
- .taskon-pending-dialog-hash-label,
452
- .taskon-pending-dialog-hash-link,
453
- .taskon-pending-dialog-hash-value {
454
- font-size: 13px;
455
- line-height: 18px;
456
- }
457
-
458
- .taskon-pending-dialog-notice-item {
459
- font-size: 11px;
460
- line-height: 16px;
461
- }
462
-
463
- .taskon-pending-dialog-actions {
464
- align-items: stretch;
465
- flex-direction: column;
466
- gap: 8px;
467
- }
468
-
469
- .taskon-pending-dialog-btn {
470
- width: 100%;
471
- padding: 9px 12px;
472
- }
319
+ /* ========== 触发器图标 ========== */
320
+ .taskon-select__trigger-icon {
321
+ width: 16px;
322
+ height: 16px;
323
+ border-radius: 50%;
324
+ margin-right: 8px;
325
+ flex-shrink: 0;
473
326
  }
474
- /**
475
- * BindWalletDialog 组件样式
476
- * 使用 taskon-bind-wallet-* 命名空间
477
- * 与 taskon-website 保持一致
478
- */
479
-
480
- /*
481
- * Responsive base styles
482
- *
483
- * Keep mobile breakpoints and fallback patterns centralized here.
484
- * Components should reuse these mixins instead of duplicating query logic.
485
- */
486
-
487
- /*
488
- * Desktop-up mixin:
489
- * 1) Enable desktop enhancement in wider containers
490
- * 2) Keep viewport media query as fallback
491
- */
492
-
493
- /* ==================== 容器 ==================== */
494
-
495
- .taskon-bind-wallet-dialog {
496
- position: relative;
497
- display: flex;
498
- flex-direction: column;
327
+ /* ========== 触发器文本 ========== */
328
+ .taskon-select__trigger-text {
329
+ flex: 1;
330
+ overflow: hidden;
331
+ text-overflow: ellipsis;
332
+ white-space: nowrap;
333
+ text-align: left;
499
334
  }
500
-
501
- /* ==================== 标题 ==================== */
502
-
503
- .taskon-bind-wallet-dialog-title {
504
- margin: 0;
505
- font-size: 22px;
506
- font-weight: 700;
507
- line-height: 28px;
508
- color: var(--taskon-color-text);
335
+ /* ========== 触发器占位符 ========== */
336
+ .taskon-select__trigger-placeholder {
337
+ flex: 1;
338
+ color: var(--taskon-color-text-secondary);
339
+ text-align: left;
509
340
  }
510
-
511
- /* ==================== 链类型标签 ==================== */
512
-
513
- .taskon-bind-wallet-dialog-chain-label {
514
- margin-top: var(--taskon-spacing-md);
515
- font-size: 16px;
516
- font-weight: 500;
517
- line-height: 20px;
518
- color: var(--taskon-color-text);
341
+ /* ========== 展开图标 ========== */
342
+ .taskon-select__unfold-icon {
343
+ margin-left: 8px;
344
+ color: currentColor;
345
+ opacity: 0.6;
346
+ transition: transform 0.2s;
347
+ flex-shrink: 0;
519
348
  }
520
-
521
- /* ==================== 钱包网格 ==================== */
522
-
523
- .taskon-bind-wallet-dialog-grid {
524
- margin-top: var(--taskon-spacing-sm);
525
- display: grid;
526
- grid-template-columns: 1fr;
527
- gap: var(--taskon-spacing-md);
349
+ .taskon-select__unfold-icon--rotated {
350
+ transform: rotate(180deg);
528
351
  }
529
-
530
- /* ==================== 钱包项 ==================== */
531
-
532
- .taskon-bind-wallet-item {
533
- position: relative;
534
- display: flex;
535
- align-items: center;
536
- justify-content: center;
537
- height: 50px;
538
- padding: 0 12px;
539
-
540
- background: transparent;
352
+ /* ========== 下拉菜单 ========== */
353
+ .taskon-select__menu {
354
+ position: absolute;
355
+ top: 100%;
356
+ left: 0;
357
+ right: 0;
358
+ margin-top: 4px;
359
+ background: var(--taskon-color-bg-floating);
541
360
  border: 1px solid var(--taskon-color-border);
542
- border-radius: 8px;
543
- cursor: pointer;
544
- transition: all 0.2s ease;
361
+ border-radius: var(--taskon-border-radius-sm);
362
+ overflow: auto;
363
+ z-index: 9999;
545
364
  }
546
-
547
- .taskon-bind-wallet-item:hover,
548
- .taskon-bind-wallet-item:focus {
549
- background: var(--taskon-color-bg-surface-strong);
365
+ /* 深色主题 */
366
+ .taskon-select__menu--dark {
367
+ background: var(--taskon-color-bg-floating);
550
368
  }
551
-
552
- .taskon-bind-wallet-item:active {
553
- transform: scale(0.98);
369
+ /* 浅色主题 */
370
+ .taskon-select__menu--light {
371
+ background: var(--taskon-color-bg-floating);
372
+ border-color: var(--taskon-color-border);
554
373
  }
555
-
556
- /* 钱包图标 */
557
-
558
- .taskon-bind-wallet-item-icon {
374
+ /* ========== 选项 ========== */
375
+ .taskon-select__option {
559
376
  display: flex;
560
377
  align-items: center;
561
- justify-content: center;
562
- width: 24px;
563
- height: 24px;
564
- flex-shrink: 0;
565
- }
566
-
567
- .taskon-bind-wallet-item-icon svg {
568
- width: 24px;
569
- height: 24px;
570
- }
571
-
572
- /* 钱包名称 */
573
-
574
- .taskon-bind-wallet-item-name {
575
- margin-left: 10px;
576
- font-size: 18px;
577
- font-weight: 600;
578
- line-height: 20px;
378
+ padding: 12px 16px;
579
379
  color: var(--taskon-color-text);
380
+ cursor: pointer;
381
+ transition: background 0.15s;
580
382
  }
581
-
582
- /* 已安装标签 */
583
-
584
- .taskon-bind-wallet-item-installed {
585
- position: absolute;
586
- right: 0;
587
- bottom: 0;
588
- padding: 4px 8px;
589
- font-size: 10px;
590
- line-height: 14px;
591
- color: var(--taskon-color-secondary);
592
- background: var(--taskon-color-secondary-bg);
593
- border-radius: 8px 0;
594
- transform-origin: bottom right;
595
- }
596
-
597
- /* ==================== 连接中状态 ==================== */
598
-
599
- .taskon-bind-wallet-item--connecting {
600
- opacity: 0.7;
601
- cursor: wait;
383
+ .taskon-select__option:hover:not(.taskon-select__option--disabled) {
384
+ background: var(--taskon-color-bg-surface);
602
385
  }
603
-
604
- .taskon-bind-wallet-item--connecting:hover,
605
- .taskon-bind-wallet-item--connecting:focus {
606
- background: transparent;
386
+ .taskon-select__option--active {
387
+ background: var(--taskon-color-bg-surface-subtle);
607
388
  }
608
-
609
- /* ==================== 禁用状态 ==================== */
610
-
611
- .taskon-bind-wallet-item--disabled {
612
- opacity: 0.5;
389
+ .taskon-select__option--disabled {
613
390
  cursor: not-allowed;
391
+ opacity: 0.4;
614
392
  }
615
-
616
- .taskon-bind-wallet-item--disabled:hover,
617
- .taskon-bind-wallet-item--disabled:focus {
618
- background: transparent;
619
- }
620
-
621
- .taskon-bind-wallet-item--disabled:active {
622
- transform: none;
623
- }
624
-
625
- /* 不可用标签 */
626
-
627
- .taskon-bind-wallet-item-unavailable {
628
- position: absolute;
629
- right: 0;
630
- bottom: 0;
631
- padding: 4px 8px;
632
- font-size: 10px;
633
- line-height: 14px;
634
- color: var(--taskon-color-text-tertiary);
635
- background: var(--taskon-color-bg-surface-subtle);
636
- border-radius: 8px 0;
637
- }
638
-
639
- /* 连接中 spinner */
640
-
641
- .taskon-bind-wallet-item-connecting {
642
- position: absolute;
643
- right: 8px;
644
- display: flex;
645
- align-items: center;
646
- justify-content: center;
393
+ .taskon-select__option--danger .taskon-select__option-label {
394
+ color: var(--taskon-color-error);
647
395
  }
648
-
649
- .taskon-bind-wallet-spinner {
396
+ /* ========== 选项图标 ========== */
397
+ .taskon-select__option-icon {
650
398
  width: 16px;
651
399
  height: 16px;
652
- color: var(--taskon-color-primary);
653
- animation: taskon-bind-wallet-spin 1s linear infinite;
400
+ border-radius: 50%;
401
+ margin-right: 8px;
402
+ flex-shrink: 0;
654
403
  }
655
-
656
- @keyframes taskon-bind-wallet-spin {
657
- from {
658
- transform: rotate(0deg);
659
- }
660
- to {
661
- transform: rotate(360deg);
662
- }
404
+ /* ========== 选项内容 ========== */
405
+ .taskon-select__option-content {
406
+ flex: 1;
407
+ min-width: 0;
408
+ }
409
+ /* ========== 选项标签 ========== */
410
+ .taskon-select__option-label {
411
+ font-weight: 500;
412
+ font-size: 14px;
413
+ line-height: 20px;
414
+ overflow: hidden;
415
+ white-space: nowrap;
416
+ text-overflow: ellipsis;
417
+ }
418
+ /* ========== 选项描述 ========== */
419
+ .taskon-select__option-desc {
420
+ font-size: 12px;
421
+ line-height: 16px;
422
+ color: var(--taskon-color-text-secondary);
423
+ margin-top: 2px;
663
424
  }
664
-
665
- /* ==================== 提示文字 ==================== */
666
-
667
- .taskon-bind-wallet-dialog-tip {
668
- margin: var(--taskon-spacing-md) 0 0;
669
- font-size: 14px;
670
- line-height: 1.5;
671
- color: var(--taskon-color-text-tertiary);
672
- text-align: center;
425
+ .taskon-select__menu--light .taskon-select__option {
426
+ color: var(--taskon-color-text);
673
427
  }
674
-
675
- /* ==================== 连接中遮层 ==================== */
676
-
677
- .taskon-bind-wallet-loading-overlay {
678
- position: absolute;
679
- /* 使用负值覆盖 Dialog body 的 padding */
680
- inset: -20px;
681
- display: flex;
682
- flex-direction: column;
683
- align-items: center;
684
- justify-content: center;
685
- background: var(--taskon-color-bg-mask);
686
- backdrop-filter: blur(4px);
687
- border-radius: 12px;
428
+ .taskon-select__menu--light .taskon-select__option:hover:not(.taskon-select__option--disabled) {
429
+ background: var(--taskon-color-bg-surface);
688
430
  }
689
-
690
- .taskon-bind-wallet-loading-spinner {
691
- width: 40px;
692
- height: 40px;
693
- color: var(--taskon-color-text-secondary);
694
- animation: taskon-bind-wallet-spin 1s linear infinite;
431
+ .taskon-select__menu--light .taskon-select__option--active {
432
+ background: var(--taskon-color-bg-surface-strong);
695
433
  }
696
-
697
- .taskon-bind-wallet-loading-text {
698
- margin: 20px 0 0;
699
- max-width: 60%;
700
- font-size: 16px;
701
- line-height: 20px;
434
+ .taskon-select__menu--light .taskon-select__option-desc {
702
435
  color: var(--taskon-color-text-secondary);
436
+ }
437
+ /* ========== 选中勾选图标 ========== */
438
+ .taskon-select__option-check {
439
+ margin-left: 8px;
440
+ color: var(--taskon-color-success);
441
+ flex-shrink: 0;
442
+ }
443
+ /* ========== 空状态 ========== */
444
+ .taskon-select__empty {
445
+ padding: 20px;
703
446
  text-align: center;
447
+ color: var(--taskon-color-text-secondary);
448
+ font-size: 14px;
449
+ }
450
+ /* ========== 错误信息 ========== */
451
+ .taskon-select__error {
452
+ margin-top: 4px;
453
+ font-size: 12px;
454
+ color: var(--taskon-color-error);
455
+ overflow-wrap: anywhere;
456
+ word-break: break-word;
704
457
  }
705
-
706
458
  @supports (container-type: inline-size) {
707
459
  @container (min-width: 751px) {
708
- .taskon-bind-wallet-dialog-chain-label {
709
- margin-top: 20px;
460
+ .taskon-select__trigger {
461
+ height: 44px;
462
+ font-size: var(--taskon-font-size);
710
463
  }
711
464
 
712
- .taskon-bind-wallet-dialog-grid {
713
- margin-top: 10px;
714
- grid-template-columns: 1fr 1fr;
715
- gap: 18px;
465
+ .taskon-select__option {
466
+ padding: 15px 20px;
716
467
  }
717
468
 
718
- .taskon-bind-wallet-dialog-tip {
719
- margin-top: 20px;
469
+ .taskon-select__trigger-icon {
470
+ width: 20px;
471
+ height: 20px;
472
+ margin-right: 10px;
473
+ }
474
+
475
+ .taskon-select__option-icon {
476
+ width: 20px;
477
+ height: 20px;
478
+ margin-right: 10px;
720
479
  }
721
480
 
722
- .taskon-bind-wallet-loading-overlay {
723
- inset: -24px;
724
- border-radius: 16px;
481
+ .taskon-select__unfold-icon {
482
+ margin-left: 10px;
725
483
  }
726
484
  }
727
485
  }
728
-
729
486
  @supports not (container-type: inline-size) {
730
487
  @media (min-width: 751px) {
731
- .taskon-bind-wallet-dialog-chain-label {
732
- margin-top: 20px;
488
+ .taskon-select__trigger {
489
+ height: 44px;
490
+ font-size: var(--taskon-font-size);
491
+ }
492
+
493
+ .taskon-select__option {
494
+ padding: 15px 20px;
733
495
  }
734
496
 
735
- .taskon-bind-wallet-dialog-grid {
736
- margin-top: 10px;
737
- grid-template-columns: 1fr 1fr;
738
- gap: 18px;
497
+ .taskon-select__trigger-icon {
498
+ width: 20px;
499
+ height: 20px;
500
+ margin-right: 10px;
739
501
  }
740
502
 
741
- .taskon-bind-wallet-dialog-tip {
742
- margin-top: 20px;
503
+ .taskon-select__option-icon {
504
+ width: 20px;
505
+ height: 20px;
506
+ margin-right: 10px;
743
507
  }
744
508
 
745
- .taskon-bind-wallet-loading-overlay {
746
- inset: -24px;
747
- border-radius: 16px;
509
+ .taskon-select__unfold-icon {
510
+ margin-left: 10px;
748
511
  }
749
512
  }
750
513
  }
751
514
  /**
752
- * TipPopover 组件样式
753
- * 设计原则:组件内部不包含 margin,需要间距由外部控制
515
+ * WithdrawSelectOption 组件样式
516
+ *
517
+ * 基于 Vue WithdrawSelectOption 组件样式翻译
518
+ * 主题规范:仅使用通用 --taskon-* 变量,不定义局部主题变量
754
519
  */
755
-
756
520
  /*
757
521
  * Responsive base styles
758
522
  *
759
523
  * Keep mobile breakpoints and fallback patterns centralized here.
760
524
  * Components should reuse these mixins instead of duplicating query logic.
761
525
  */
762
-
763
526
  /*
764
527
  * Desktop-up mixin:
765
528
  * 1) Enable desktop enhancement in wider containers
766
529
  * 2) Keep viewport media query as fallback
767
530
  */
768
-
769
- .taskon-tip-popover-trigger {
531
+ .taskon-withdraw-option {
532
+ padding: 12px 4px 12px 16px;
533
+ cursor: pointer;
534
+ }
535
+ .taskon-withdraw-option:hover {
536
+ background: var(--taskon-color-bg-surface);
537
+ }
538
+ /* 禁用状态 */
539
+ .taskon-withdraw-option--disabled {
540
+ cursor: not-allowed;
541
+ opacity: 0.4;
542
+ }
543
+ /* ========== 主要内容 ========== */
544
+ .taskon-withdraw-option__content {
545
+ display: flex;
546
+ align-items: center;
547
+ }
548
+ /* 模糊状态(不可提现) */
549
+ .taskon-withdraw-option__content--blurred {
550
+ pointer-events: none;
551
+ opacity: 0.4;
552
+ }
553
+ /* ========== 链信息 ========== */
554
+ .taskon-withdraw-option__chain {
770
555
  display: inline-flex;
771
556
  align-items: center;
772
- justify-content: center;
773
- padding: 0;
774
- border: none;
775
- background: transparent;
776
- cursor: pointer;
777
- color: var(--taskon-color-text-tertiary);
778
- outline: none;
557
+ gap: 8px;
558
+ width: 33.33%;
559
+ min-width: 0;
779
560
  }
780
-
781
- .taskon-tip-popover-trigger:hover,
782
- .taskon-tip-popover-trigger:focus {
783
- color: var(--taskon-color-text-tertiary);
784
- background: transparent;
785
- outline: none;
561
+ .taskon-withdraw-option__chain-icon {
562
+ width: 14px;
563
+ height: 14px;
564
+ border-radius: 50%;
565
+ flex-shrink: 0;
786
566
  }
787
-
788
- /* Custom children trigger - reset button styles */
789
-
790
- .taskon-tip-popover-trigger--custom {
791
- cursor: pointer;
567
+ .taskon-withdraw-option__chain-label {
568
+ font-size: 13px;
569
+ color: var(--taskon-color-text-secondary);
570
+ overflow: hidden;
571
+ text-overflow: ellipsis;
572
+ white-space: nowrap;
792
573
  }
793
-
794
- .taskon-tip-popover-content {
795
- max-width: 60vw;
796
- padding: 12px 16px;
797
- border-radius: var(--taskon-border-radius-sm);
798
- border: none;
799
- outline: none;
800
- background: var(--taskon-color-bg-floating);
574
+ /* ========== Token 信息 ========== */
575
+ .taskon-withdraw-option__token {
576
+ display: flex;
577
+ align-items: center;
578
+ flex: 1;
579
+ min-width: 0;
580
+ }
581
+ .taskon-withdraw-option__token-icon {
582
+ width: 14px;
583
+ height: 14px;
584
+ border-radius: 50%;
585
+ margin-right: 6px;
586
+ flex-shrink: 0;
587
+ }
588
+ .taskon-withdraw-option__token-label {
589
+ font-weight: 500;
590
+ font-size: 13px;
591
+ line-height: 20px;
801
592
  color: var(--taskon-color-text);
593
+ overflow: hidden;
594
+ white-space: nowrap;
595
+ text-overflow: ellipsis;
596
+ }
597
+ /* ========== 尾部信息(余额 + 选中状态) ========== */
598
+ .taskon-withdraw-option__trailing {
599
+ display: flex;
600
+ align-items: center;
601
+ justify-content: flex-end;
602
+ gap: 4px;
603
+ flex-shrink: 0;
604
+ }
605
+ .taskon-withdraw-option__balance {
802
606
  font-size: 13px;
803
- line-height: 1.5;
804
- box-shadow: 0 4px 16px var(--taskon-color-bg-mask);
805
- /* z-index 需要大于 Dialog (9999) 才能在弹窗中正常显示 */
806
- z-index: 10000;
807
- animation: taskon-tip-popover-fade-in 0.15s ease;
607
+ color: var(--taskon-color-text-tertiary);
808
608
  }
809
-
810
- .taskon-tip-popover-content:focus {
811
- outline: none;
609
+ .taskon-withdraw-option__check {
610
+ width: 12px;
611
+ height: 8px;
612
+ color: var(--taskon-color-success);
613
+ visibility: hidden;
812
614
  }
813
-
814
- .taskon-tip-popover-arrow {
815
- fill: var(--taskon-color-bg-floating);
615
+ .taskon-withdraw-option__check--visible {
616
+ visibility: visible;
617
+ }
618
+ /* ========== 警告提示 ========== */
619
+ .taskon-withdraw-option__warning {
620
+ margin-top: 4px;
621
+ font-size: 11px;
622
+ font-weight: 400;
623
+ color: var(--taskon-color-warning);
816
624
  }
625
+ @supports (container-type: inline-size) {
626
+ @container (min-width: 751px) {
627
+ .taskon-withdraw-option {
628
+ padding: 15px 6px 15px 20px;
629
+ }
817
630
 
818
- @keyframes taskon-tip-popover-fade-in {
819
- from {
820
- opacity: 0;
821
- transform: scale(0.96);
631
+ .taskon-withdraw-option__chain-icon,
632
+ .taskon-withdraw-option__token-icon {
633
+ width: 16px;
634
+ height: 16px;
822
635
  }
823
- to {
824
- opacity: 1;
825
- transform: scale(1);
636
+
637
+ .taskon-withdraw-option__chain-label,
638
+ .taskon-withdraw-option__token-label,
639
+ .taskon-withdraw-option__balance {
640
+ font-size: 14px;
826
641
  }
827
- }
828
642
 
829
- /* Desktop 增强 */
643
+ .taskon-withdraw-option__warning {
644
+ font-size: 12px;
645
+ }
646
+ }
647
+ }
648
+ @supports not (container-type: inline-size) {
649
+ @media (min-width: 751px) {
650
+ .taskon-withdraw-option {
651
+ padding: 15px 6px 15px 20px;
652
+ }
830
653
 
831
- @supports (container-type: inline-size) {
832
- @container (min-width: 751px) {
833
- .taskon-tip-popover-content {
834
- max-width: 266px;
654
+ .taskon-withdraw-option__chain-icon,
655
+ .taskon-withdraw-option__token-icon {
656
+ width: 16px;
657
+ height: 16px;
835
658
  }
836
- }
659
+
660
+ .taskon-withdraw-option__chain-label,
661
+ .taskon-withdraw-option__token-label,
662
+ .taskon-withdraw-option__balance {
663
+ font-size: 14px;
837
664
  }
838
665
 
839
- @supports not (container-type: inline-size) {
840
- @media (min-width: 751px) {
841
- .taskon-tip-popover-content {
842
- max-width: 266px;
666
+ .taskon-withdraw-option__warning {
667
+ font-size: 12px;
843
668
  }
844
669
  }
845
670
  }
846
671
  /**
847
- * Select 组件样式
848
- *
849
- * 基于 Vue ProSelect 组件样式翻译
850
- * 使用 taskon-select 命名空间避免样式冲突。
672
+ * FormItem 组件样式
851
673
  *
852
- * 主题规范:
853
- * - 不再定义组件私有主题变量
854
- * - 统一使用 ThemeProvider 输出的通用 --taskon-* 变量
674
+ * 基于 Vue FormItem.vue 样式翻译
855
675
  */
856
676
  /*
857
677
  * Responsive base styles
@@ -865,283 +685,128 @@
865
685
  * 2) Keep viewport media query as fallback
866
686
  */
867
687
  /* ========== 根容器 ========== */
868
- .taskon-select {
688
+ .taskon-form-item {
689
+ --form-item-space: 12px;
690
+ --form-item-label-space: 6px;
691
+ --form-item-font-size: 13px;
692
+ --form-item-line-height: 20px;
693
+
869
694
  position: relative;
870
- display: inline-block;
871
- width: 100%;
872
695
  }
873
- /* ========== 禁用状态 ========== */
874
- .taskon-select--disabled {
875
- opacity: 0.6;
876
- cursor: not-allowed;
696
+ /* 相邻 FormItem 之间的间距 */
697
+ .taskon-form-item + .taskon-form-item {
698
+ margin-top: var(--form-item-space);
877
699
  }
878
- /* ========== 触发器 ========== */
879
- .taskon-select__trigger {
700
+ /* Dialog 模式下的间距 */
701
+ .taskon-form-item--dialog + .taskon-form-item--dialog {
702
+ margin-top: 16px;
703
+ }
704
+ /* ========== 标签行 ========== */
705
+ .taskon-form-item__row {
880
706
  display: flex;
881
707
  align-items: center;
882
- height: 40px;
883
- min-width: 120px;
884
- padding: 0 12px;
885
- background: var(--taskon-color-bg-surface-subtle);
886
- color: var(--taskon-color-text);
887
- font-size: 13px;
888
- line-height: 20px;
889
- border: 1px solid var(--taskon-color-border);
890
- border-radius: var(--taskon-border-radius-sm);
891
- cursor: pointer;
892
- transition:
893
- background 0.2s,
894
- border-color 0.2s;
895
- outline: none;
896
- user-select: none;
897
- }
898
- .taskon-select__trigger:hover:not(.taskon-select__trigger--disabled) {
899
- background: var(--taskon-color-bg-surface);
900
- border-color: var(--taskon-color-border-secondary);
901
- }
902
- .taskon-select__trigger:focus:not(.taskon-select__trigger--disabled) {
903
- background: var(--taskon-color-bg-surface);
904
- border-color: var(--taskon-color-border-secondary);
905
- }
906
- .taskon-select__trigger--open {
907
- background: var(--taskon-color-bg-surface);
908
- border-color: var(--taskon-color-border-secondary);
909
- }
910
- .taskon-select__trigger--disabled {
911
- cursor: not-allowed;
912
- opacity: 0.6;
913
- }
914
- .taskon-select__trigger--error {
915
- border-color: var(--taskon-color-error) !important;
916
- }
917
- /* 深色主题 */
918
- .taskon-select__trigger--dark {
919
- background: var(--taskon-color-bg-surface);
920
- }
921
- /* 浅色主题 */
922
- .taskon-select__trigger--light {
923
- background: var(--taskon-color-bg-surface);
924
- color: var(--taskon-color-text);
925
- border-color: var(--taskon-color-border);
926
- }
927
- .taskon-select__trigger--light:hover:not(.taskon-select__trigger--disabled) {
928
- background: var(--taskon-color-bg-surface-strong);
929
- border-color: var(--taskon-color-border-secondary);
930
- }
931
- .taskon-select__trigger--light:focus:not(.taskon-select__trigger--disabled),
932
- .taskon-select__trigger--light.taskon-select__trigger--open {
933
- background: var(--taskon-color-bg-surface-strong);
934
- border-color: var(--taskon-color-border-secondary);
935
- }
936
- /* 卡片主题 */
937
- .taskon-select__trigger--card {
938
- background: transparent;
939
- border: none;
940
- }
941
- .taskon-select__trigger--card:hover:not(.taskon-select__trigger--disabled),
942
- .taskon-select__trigger--card:focus:not(.taskon-select__trigger--disabled),
943
- .taskon-select__trigger--card.taskon-select__trigger--open {
944
- background: var(--taskon-color-bg-surface-subtle);
945
- border: none;
946
- }
947
- /* ========== 触发器图标 ========== */
948
- .taskon-select__trigger-icon {
949
- width: 16px;
950
- height: 16px;
951
- border-radius: 50%;
952
- margin-right: 8px;
953
- flex-shrink: 0;
954
- }
955
- /* ========== 触发器文本 ========== */
956
- .taskon-select__trigger-text {
957
- flex: 1;
958
- overflow: hidden;
959
- text-overflow: ellipsis;
960
- white-space: nowrap;
961
- text-align: left;
962
- }
963
- /* ========== 触发器占位符 ========== */
964
- .taskon-select__trigger-placeholder {
965
- flex: 1;
966
- color: var(--taskon-color-text-secondary);
967
- text-align: left;
968
- }
969
- /* ========== 展开图标 ========== */
970
- .taskon-select__unfold-icon {
971
- margin-left: 8px;
972
- color: currentColor;
973
- opacity: 0.6;
974
- transition: transform 0.2s;
975
- flex-shrink: 0;
976
- }
977
- .taskon-select__unfold-icon--rotated {
978
- transform: rotate(180deg);
979
708
  }
980
- /* ========== 下拉菜单 ========== */
981
- .taskon-select__menu {
982
- position: absolute;
983
- top: 100%;
984
- left: 0;
985
- right: 0;
986
- margin-top: 4px;
987
- background: var(--taskon-color-bg-floating);
988
- border: 1px solid var(--taskon-color-border);
989
- border-radius: var(--taskon-border-radius-sm);
990
- overflow: auto;
991
- z-index: 9999;
992
- }
993
- /* 深色主题 */
994
- .taskon-select__menu--dark {
995
- background: var(--taskon-color-bg-floating);
709
+ /* 有标签时的下边距 */
710
+ .taskon-form-item__row--has-label {
711
+ margin-bottom: var(--form-item-label-space);
996
712
  }
997
- /* 浅色主题 */
998
- .taskon-select__menu--light {
999
- background: var(--taskon-color-bg-floating);
1000
- border-color: var(--taskon-color-border);
713
+ /* 无下边距 */
714
+ .taskon-form-item__row--no-margin {
715
+ margin-bottom: 0;
1001
716
  }
1002
- /* ========== 选项 ========== */
1003
- .taskon-select__option {
717
+ /* ========== 标签 ========== */
718
+ .taskon-form-item__label {
1004
719
  display: flex;
1005
720
  align-items: center;
1006
- padding: 12px 16px;
1007
- color: var(--taskon-color-text);
1008
- cursor: pointer;
1009
- transition: background 0.15s;
1010
- }
1011
- .taskon-select__option:hover:not(.taskon-select__option--disabled) {
1012
- background: var(--taskon-color-bg-surface);
1013
- }
1014
- .taskon-select__option--active {
1015
- background: var(--taskon-color-bg-surface-subtle);
1016
- }
1017
- .taskon-select__option--disabled {
1018
- cursor: not-allowed;
1019
- opacity: 0.4;
1020
- }
1021
- .taskon-select__option--danger .taskon-select__option-label {
1022
- color: var(--taskon-color-error);
1023
- }
1024
- /* ========== 选项图标 ========== */
1025
- .taskon-select__option-icon {
1026
- width: 16px;
1027
- height: 16px;
1028
- border-radius: 50%;
1029
- margin-right: 8px;
1030
- flex-shrink: 0;
1031
- }
1032
- /* ========== 选项内容 ========== */
1033
- .taskon-select__option-content {
1034
- flex: 1;
1035
- min-width: 0;
1036
- }
1037
- /* ========== 选项标签 ========== */
1038
- .taskon-select__option-label {
1039
721
  font-weight: 500;
1040
- font-size: 14px;
1041
- line-height: 20px;
1042
- overflow: hidden;
1043
- white-space: nowrap;
1044
- text-overflow: ellipsis;
1045
- }
1046
- /* ========== 选项描述 ========== */
1047
- .taskon-select__option-desc {
1048
- font-size: 12px;
1049
- line-height: 16px;
1050
- color: var(--taskon-color-text-secondary);
1051
- margin-top: 2px;
1052
- }
1053
- .taskon-select__menu--light .taskon-select__option {
722
+ font-size: var(--form-item-font-size);
723
+ line-height: var(--form-item-line-height);
1054
724
  color: var(--taskon-color-text);
725
+ white-space: nowrap;
1055
726
  }
1056
- .taskon-select__menu--light .taskon-select__option:hover:not(.taskon-select__option--disabled) {
1057
- background: var(--taskon-color-bg-surface);
1058
- }
1059
- .taskon-select__menu--light .taskon-select__option--active {
1060
- background: var(--taskon-color-bg-surface-strong);
1061
- }
1062
- .taskon-select__menu--light .taskon-select__option-desc {
1063
- color: var(--taskon-color-text-secondary);
727
+ /* ========== 可选标记 ========== */
728
+ .taskon-form-item__optional {
729
+ color: var(--taskon-color-text-disabled);
1064
730
  }
1065
- /* ========== 选中勾选图标 ========== */
1066
- .taskon-select__option-check {
731
+ /* ========== 提示图标 ========== */
732
+ .taskon-form-item__tip {
1067
733
  margin-left: 8px;
1068
- color: var(--taskon-color-success);
1069
- flex-shrink: 0;
734
+ display: inline-flex;
735
+ align-items: center;
1070
736
  }
1071
- /* ========== 空状态 ========== */
1072
- .taskon-select__empty {
1073
- padding: 20px;
1074
- text-align: center;
1075
- color: var(--taskon-color-text-secondary);
737
+ /* ========== 文档链接 ========== */
738
+ .taskon-form-item__doc-link {
739
+ margin-left: auto;
740
+ display: flex;
741
+ align-items: center;
742
+ gap: 4px;
1076
743
  font-size: 14px;
744
+ color: var(--taskon-color-link);
745
+ text-decoration: none;
746
+ cursor: pointer;
747
+ }
748
+ .taskon-form-item__doc-link:hover {
749
+ text-decoration: underline;
750
+ }
751
+ .taskon-form-item__doc-icon {
752
+ width: 8px;
753
+ height: 9px;
1077
754
  }
1078
755
  /* ========== 错误信息 ========== */
1079
- .taskon-select__error {
756
+ .taskon-form-item__error {
1080
757
  margin-top: 4px;
1081
758
  font-size: 12px;
759
+ line-height: 16px;
1082
760
  color: var(--taskon-color-error);
761
+ white-space: pre-wrap;
762
+ overflow-wrap: anywhere;
763
+ word-break: break-word;
764
+ }
765
+ /* 警告样式(橙色) */
766
+ .taskon-form-item__error--warn {
767
+ color: var(--taskon-color-warning);
1083
768
  }
1084
769
  @supports (container-type: inline-size) {
1085
770
  @container (min-width: 751px) {
1086
- .taskon-select__trigger {
1087
- height: 44px;
1088
- font-size: var(--taskon-font-size);
1089
- }
1090
-
1091
- .taskon-select__option {
1092
- padding: 15px 20px;
1093
- }
1094
-
1095
- .taskon-select__trigger-icon {
1096
- width: 20px;
1097
- height: 20px;
1098
- margin-right: 10px;
771
+ .taskon-form-item {
772
+ --form-item-space: 16px;
773
+ --form-item-label-space: 8px;
774
+ --form-item-font-size: 14px;
1099
775
  }
1100
776
 
1101
- .taskon-select__option-icon {
1102
- width: 20px;
1103
- height: 20px;
1104
- margin-right: 10px;
777
+ .taskon-form-item--dialog + .taskon-form-item--dialog {
778
+ margin-top: 20px;
1105
779
  }
1106
780
 
1107
- .taskon-select__unfold-icon {
1108
- margin-left: 10px;
781
+ .taskon-form-item__tip {
782
+ margin-left: 6px;
1109
783
  }
1110
784
  }
1111
785
  }
1112
786
  @supports not (container-type: inline-size) {
1113
787
  @media (min-width: 751px) {
1114
- .taskon-select__trigger {
1115
- height: 44px;
1116
- font-size: var(--taskon-font-size);
1117
- }
1118
-
1119
- .taskon-select__option {
1120
- padding: 15px 20px;
1121
- }
1122
-
1123
- .taskon-select__trigger-icon {
1124
- width: 20px;
1125
- height: 20px;
1126
- margin-right: 10px;
788
+ .taskon-form-item {
789
+ --form-item-space: 16px;
790
+ --form-item-label-space: 8px;
791
+ --form-item-font-size: 14px;
1127
792
  }
1128
793
 
1129
- .taskon-select__option-icon {
1130
- width: 20px;
1131
- height: 20px;
1132
- margin-right: 10px;
794
+ .taskon-form-item--dialog + .taskon-form-item--dialog {
795
+ margin-top: 20px;
1133
796
  }
1134
797
 
1135
- .taskon-select__unfold-icon {
1136
- margin-left: 10px;
798
+ .taskon-form-item__tip {
799
+ margin-left: 6px;
1137
800
  }
1138
801
  }
1139
802
  }
1140
803
  /**
1141
- * WithdrawSelectOption 组件样式
804
+ * Checkbox 复选框组件样式
1142
805
  *
1143
- * 基于 Vue WithdrawSelectOption 组件样式翻译
1144
- * 主题规范:仅使用通用 --taskon-* 变量,不定义局部主题变量
806
+ * 采用 BEM 命名规范
807
+ * 前缀: taskon-checkbox
808
+ *
809
+ * 参考 Vue 版本 BaseCheckBox.vue 样式实现
1145
810
  */
1146
811
  /*
1147
812
  * Responsive base styles
@@ -1154,150 +819,139 @@
1154
819
  * 1) Enable desktop enhancement in wider containers
1155
820
  * 2) Keep viewport media query as fallback
1156
821
  */
1157
- .taskon-withdraw-option {
1158
- padding: 12px 4px 12px 16px;
822
+ /* ============================================================================
823
+ 根元素
824
+ ============================================================================ */
825
+ .taskon-checkbox {
826
+ display: inline-flex;
827
+ align-items: center;
828
+ justify-content: center;
1159
829
  cursor: pointer;
830
+ user-select: none;
831
+ outline: none;
1160
832
  }
1161
- .taskon-withdraw-option:hover {
1162
- background: var(--taskon-color-bg-surface);
833
+ /* 悬停和聚焦效果 */
834
+ .taskon-checkbox:not(.taskon-checkbox--disabled):hover,
835
+ .taskon-checkbox:not(.taskon-checkbox--disabled):focus {
836
+ opacity: 0.8;
1163
837
  }
1164
838
  /* 禁用状态 */
1165
- .taskon-withdraw-option--disabled {
839
+ .taskon-checkbox--disabled {
1166
840
  cursor: not-allowed;
1167
841
  opacity: 0.4;
1168
842
  }
1169
- /* ========== 主要内容 ========== */
1170
- .taskon-withdraw-option__content {
1171
- display: flex;
1172
- align-items: center;
1173
- }
1174
- /* 模糊状态(不可提现) */
1175
- .taskon-withdraw-option__content--blurred {
1176
- pointer-events: none;
843
+ /* 只读状态 */
844
+ .taskon-checkbox--readonly {
845
+ cursor: default;
1177
846
  opacity: 0.4;
1178
847
  }
1179
- /* ========== 链信息 ========== */
1180
- .taskon-withdraw-option__chain {
1181
- display: inline-flex;
1182
- align-items: center;
1183
- gap: 8px;
1184
- width: 33.33%;
1185
- min-width: 0;
1186
- }
1187
- .taskon-withdraw-option__chain-icon {
1188
- width: 14px;
1189
- height: 14px;
1190
- border-radius: 50%;
1191
- flex-shrink: 0;
1192
- }
1193
- .taskon-withdraw-option__chain-label {
1194
- font-size: 13px;
1195
- color: var(--taskon-color-text-secondary);
1196
- overflow: hidden;
1197
- text-overflow: ellipsis;
1198
- white-space: nowrap;
848
+ /* ============================================================================
849
+ 隐藏的原生 input
850
+ ============================================================================ */
851
+ .taskon-checkbox__input {
852
+ display: none;
1199
853
  }
1200
- /* ========== Token 信息 ========== */
1201
- .taskon-withdraw-option__token {
854
+ /* ============================================================================
855
+ 自定义图标容器
856
+ ============================================================================ */
857
+ .taskon-checkbox__icon {
1202
858
  display: flex;
859
+ justify-content: center;
1203
860
  align-items: center;
1204
- flex: 1;
1205
- min-width: 0;
1206
- }
1207
- .taskon-withdraw-option__token-icon {
1208
- width: 14px;
1209
- height: 14px;
1210
- border-radius: 50%;
1211
- margin-right: 6px;
861
+ width: 16px;
862
+ height: 16px;
863
+ border: 2px solid var(--taskon-color-border);
864
+ border-radius: 3px;
865
+ transition: all 0.2s ease;
1212
866
  flex-shrink: 0;
1213
867
  }
1214
- .taskon-withdraw-option__token-label {
1215
- font-weight: 500;
1216
- font-size: 13px;
1217
- line-height: 20px;
1218
- color: var(--taskon-color-text);
1219
- overflow: hidden;
1220
- white-space: nowrap;
1221
- text-overflow: ellipsis;
868
+ /* 选中状态 - 默认绿色背景 */
869
+ .taskon-checkbox__icon--active {
870
+ border: 0 none;
871
+ background-color: var(--taskon-color-secondary);
872
+ border-radius: 4px;
1222
873
  }
1223
- /* ========== 尾部信息(余额 + 选中状态) ========== */
1224
- .taskon-withdraw-option__trailing {
1225
- display: flex;
1226
- align-items: center;
1227
- justify-content: flex-end;
1228
- gap: 4px;
1229
- flex-shrink: 0;
874
+ /* 选中状态显示勾选图标 */
875
+ .taskon-checkbox__icon--active .taskon-checkbox__icon-checked {
876
+ display: block;
1230
877
  }
1231
- .taskon-withdraw-option__balance {
1232
- font-size: 13px;
1233
- color: var(--taskon-color-text-tertiary);
878
+ /* light 类型选中状态 - 浅色背景 */
879
+ .taskon-checkbox__icon--active.taskon-checkbox__icon--light {
880
+ border: 1px solid var(--taskon-color-border);
881
+ background-color: var(--taskon-color-bg-surface);
1234
882
  }
1235
- .taskon-withdraw-option__check {
1236
- width: 12px;
883
+ /* 圆形样式 */
884
+ .taskon-checkbox__icon--round {
885
+ border-radius: 50%;
886
+ }
887
+ /* ============================================================================
888
+ 勾选图标 SVG
889
+ ============================================================================ */
890
+ .taskon-checkbox__icon-checked {
891
+ display: none;
892
+ width: 10px;
1237
893
  height: 8px;
1238
- color: var(--taskon-color-success);
1239
- visibility: hidden;
894
+ color: var(--taskon-color-text-on-primary);
1240
895
  }
1241
- .taskon-withdraw-option__check--visible {
1242
- visibility: visible;
896
+ .taskon-checkbox__icon--active.taskon-checkbox__icon--light .taskon-checkbox__icon-checked {
897
+ color: var(--taskon-color-text);
1243
898
  }
1244
- /* ========== 警告提示 ========== */
1245
- .taskon-withdraw-option__warning {
1246
- margin-top: 4px;
1247
- font-size: 11px;
1248
- font-weight: 400;
1249
- color: var(--taskon-color-warning);
899
+ /* ============================================================================
900
+ 标签文字
901
+ ============================================================================ */
902
+ .taskon-checkbox__label {
903
+ margin-left: 8px;
904
+ color: var(--taskon-color-text-secondary);
905
+ font-size: 14px;
906
+ font-style: normal;
907
+ font-weight: 500;
908
+ line-height: 18px;
1250
909
  }
1251
910
  @supports (container-type: inline-size) {
1252
911
  @container (min-width: 751px) {
1253
- .taskon-withdraw-option {
1254
- padding: 15px 6px 15px 20px;
1255
- }
1256
-
1257
- .taskon-withdraw-option__chain-icon,
1258
- .taskon-withdraw-option__token-icon {
1259
- width: 16px;
1260
- height: 16px;
1261
- }
1262
-
1263
- .taskon-withdraw-option__chain-label,
1264
- .taskon-withdraw-option__token-label,
1265
- .taskon-withdraw-option__balance {
1266
- font-size: 14px;
912
+ .taskon-checkbox__icon {
913
+ width: 20px;
914
+ height: 20px;
915
+ border-radius: 4px;
1267
916
  }
1268
917
 
1269
- .taskon-withdraw-option__warning {
1270
- font-size: 12px;
1271
- }
1272
- }
1273
- }
1274
- @supports not (container-type: inline-size) {
1275
- @media (min-width: 751px) {
1276
- .taskon-withdraw-option {
1277
- padding: 15px 6px 15px 20px;
918
+ .taskon-checkbox__icon-checked {
919
+ width: 12px;
920
+ height: 10px;
1278
921
  }
1279
922
 
1280
- .taskon-withdraw-option__chain-icon,
1281
- .taskon-withdraw-option__token-icon {
1282
- width: 16px;
1283
- height: 16px;
923
+ .taskon-checkbox__label {
924
+ font-size: 16px;
925
+ line-height: 20px;
926
+ }
927
+ }
928
+ }
929
+ @supports not (container-type: inline-size) {
930
+ @media (min-width: 751px) {
931
+ .taskon-checkbox__icon {
932
+ width: 20px;
933
+ height: 20px;
934
+ border-radius: 4px;
1284
935
  }
1285
936
 
1286
- .taskon-withdraw-option__chain-label,
1287
- .taskon-withdraw-option__token-label,
1288
- .taskon-withdraw-option__balance {
1289
- font-size: 14px;
937
+ .taskon-checkbox__icon-checked {
938
+ width: 12px;
939
+ height: 10px;
1290
940
  }
1291
941
 
1292
- .taskon-withdraw-option__warning {
1293
- font-size: 12px;
942
+ .taskon-checkbox__label {
943
+ font-size: 16px;
944
+ line-height: 20px;
1294
945
  }
1295
946
  }
1296
947
  }
1297
948
  /**
1298
- * FormItem 组件样式
949
+ * Switch 开关组件样式
1299
950
  *
1300
- * 基于 Vue FormItem.vue 样式翻译
951
+ * 采用 BEM 命名规范
952
+ * 前缀: taskon-switch
953
+ *
954
+ * 参考 Vue 版本 BaseSwitch.vue 样式实现
1301
955
  */
1302
956
  /*
1303
957
  * Responsive base styles
@@ -1310,420 +964,499 @@
1310
964
  * 1) Enable desktop enhancement in wider containers
1311
965
  * 2) Keep viewport media query as fallback
1312
966
  */
1313
- /* ========== 根容器 ========== */
1314
- .taskon-form-item {
1315
- --form-item-space: 12px;
1316
- --form-item-label-space: 6px;
1317
- --form-item-font-size: 13px;
1318
- --form-item-line-height: 20px;
1319
-
967
+ /* ============================================================================
968
+ 根元素
969
+ ============================================================================ */
970
+ .taskon-switch {
1320
971
  position: relative;
1321
- }
1322
- /* 相邻 FormItem 之间的间距 */
1323
- .taskon-form-item + .taskon-form-item {
1324
- margin-top: var(--form-item-space);
1325
- }
1326
- /* Dialog 模式下的间距 */
1327
- .taskon-form-item--dialog + .taskon-form-item--dialog {
1328
- margin-top: 16px;
1329
- }
1330
- /* ========== 标签行 ========== */
1331
- .taskon-form-item__row {
1332
- display: flex;
972
+ display: inline-flex;
1333
973
  align-items: center;
974
+ vertical-align: middle;
975
+ font-weight: 500;
976
+ font-size: 12px;
977
+ line-height: 130%;
978
+ color: var(--taskon-color-text-secondary);
979
+ cursor: pointer;
980
+ user-select: none;
1334
981
  }
1335
- /* 有标签时的下边距 */
1336
- .taskon-form-item__row--has-label {
1337
- margin-bottom: var(--form-item-label-space);
982
+ /* 禁用状态 */
983
+ .taskon-switch--disabled {
984
+ cursor: not-allowed;
985
+ opacity: 0.5;
1338
986
  }
1339
- /* 无下边距 */
1340
- .taskon-form-item__row--no-margin {
1341
- margin-bottom: 0;
987
+ /* ============================================================================
988
+ 标签文字
989
+ ============================================================================ */
990
+ .taskon-switch__label {
991
+ cursor: pointer;
1342
992
  }
1343
- /* ========== 标签 ========== */
1344
- .taskon-form-item__label {
1345
- display: flex;
1346
- align-items: center;
1347
- font-weight: 500;
1348
- font-size: var(--form-item-font-size);
1349
- line-height: var(--form-item-line-height);
1350
- color: var(--taskon-color-text);
1351
- white-space: nowrap;
993
+ .taskon-switch__label--disabled {
994
+ cursor: not-allowed;
1352
995
  }
1353
- /* ========== 可选标记 ========== */
1354
- .taskon-form-item__optional {
1355
- color: var(--taskon-color-text-disabled);
996
+ /* ============================================================================
997
+ 开关按钮
998
+ ============================================================================ */
999
+ .taskon-switch__button {
1000
+ position: relative;
1001
+ width: 32px;
1002
+ height: 18px;
1003
+ line-height: 20px;
1004
+ background: var(--taskon-color-bg-surface-strong);
1005
+ border: 1px solid var(--taskon-color-border);
1006
+ border-radius: 100px;
1007
+ padding: 2px;
1008
+ margin-left: 10px;
1009
+ transition: all 0.3s ease;
1010
+ flex-shrink: 0;
1356
1011
  }
1357
- /* ========== 提示图标 ========== */
1358
- .taskon-form-item__tip {
1359
- margin-left: 8px;
1360
- display: inline-flex;
1361
- align-items: center;
1012
+ /* 开启状态 - 默认渐变背景 */
1013
+ .taskon-switch__button--active {
1014
+ background: linear-gradient(
1015
+ 90deg,
1016
+ var(--taskon-color-primary) 0%,
1017
+ var(--taskon-color-secondary) 100%
1018
+ );
1019
+ border-color: transparent;
1362
1020
  }
1363
- /* ========== 文档链接 ========== */
1364
- .taskon-form-item__doc-link {
1365
- margin-left: auto;
1366
- display: flex;
1367
- align-items: center;
1368
- gap: 4px;
1369
- font-size: 14px;
1370
- color: var(--taskon-color-link);
1371
- text-decoration: none;
1372
- cursor: pointer;
1021
+ /* 禁用状态 */
1022
+ .taskon-switch__button--disabled {
1023
+ cursor: not-allowed;
1373
1024
  }
1374
- .taskon-form-item__doc-link:hover {
1375
- text-decoration: underline;
1025
+ /* ============================================================================
1026
+ 滑块
1027
+ ============================================================================ */
1028
+ .taskon-switch__slider {
1029
+ width: 12px;
1030
+ height: 12px;
1031
+ border-radius: 50%;
1032
+ background: var(--taskon-color-text);
1033
+ transition: margin-left 0.3s ease;
1376
1034
  }
1377
- .taskon-form-item__doc-icon {
1378
- width: 8px;
1379
- height: 9px;
1035
+ /* 开启状态的滑块位置 */
1036
+ .taskon-switch__button--active .taskon-switch__slider {
1037
+ margin-left: 14px;
1038
+ background: var(--taskon-color-text-on-primary);
1380
1039
  }
1381
- /* ========== 错误信息 ========== */
1382
- .taskon-form-item__error {
1383
- margin-top: 4px;
1384
- font-size: 12px;
1385
- line-height: 16px;
1386
- color: var(--taskon-color-error);
1387
- white-space: pre-wrap;
1040
+ /* ============================================================================
1041
+ 高亮样式 (highlight type)
1042
+ ============================================================================ */
1043
+ .taskon-switch--highlight .taskon-switch__button {
1044
+ background: var(--taskon-color-bg-surface-subtle);
1388
1045
  }
1389
- /* 警告样式(橙色) */
1390
- .taskon-form-item__error--warn {
1391
- color: var(--taskon-color-warning);
1046
+ .taskon-switch--highlight .taskon-switch__button--active {
1047
+ background: var(--taskon-color-primary-bg);
1048
+ border: 1px solid var(--taskon-color-border-secondary);
1049
+ }
1050
+ .taskon-switch--highlight .taskon-switch__button--active .taskon-switch__slider {
1051
+ background: var(--taskon-color-primary);
1392
1052
  }
1393
1053
  @supports (container-type: inline-size) {
1394
1054
  @container (min-width: 751px) {
1395
- .taskon-form-item {
1396
- --form-item-space: 16px;
1397
- --form-item-label-space: 8px;
1398
- --form-item-font-size: 14px;
1055
+ .taskon-switch {
1056
+ font-weight: 400;
1057
+ font-size: 16px;
1058
+ line-height: 23px;
1399
1059
  }
1400
1060
 
1401
- .taskon-form-item--dialog + .taskon-form-item--dialog {
1402
- margin-top: 20px;
1061
+ .taskon-switch__button {
1062
+ width: 38px;
1063
+ height: 20px;
1064
+ padding: 2px 3px;
1065
+ margin-left: 15px;
1403
1066
  }
1404
1067
 
1405
- .taskon-form-item__tip {
1406
- margin-left: 6px;
1068
+ .taskon-switch__slider {
1069
+ width: 14px;
1070
+ height: 14px;
1071
+ }
1072
+
1073
+ .taskon-switch__button--active .taskon-switch__slider {
1074
+ margin-left: 18px;
1407
1075
  }
1408
1076
  }
1409
1077
  }
1410
1078
  @supports not (container-type: inline-size) {
1411
1079
  @media (min-width: 751px) {
1412
- .taskon-form-item {
1413
- --form-item-space: 16px;
1414
- --form-item-label-space: 8px;
1415
- --form-item-font-size: 14px;
1080
+ .taskon-switch {
1081
+ font-weight: 400;
1082
+ font-size: 16px;
1083
+ line-height: 23px;
1416
1084
  }
1417
1085
 
1418
- .taskon-form-item--dialog + .taskon-form-item--dialog {
1419
- margin-top: 20px;
1086
+ .taskon-switch__button {
1087
+ width: 38px;
1088
+ height: 20px;
1089
+ padding: 2px 3px;
1090
+ margin-left: 15px;
1420
1091
  }
1421
1092
 
1422
- .taskon-form-item__tip {
1423
- margin-left: 6px;
1093
+ .taskon-switch__slider {
1094
+ width: 14px;
1095
+ height: 14px;
1096
+ }
1097
+
1098
+ .taskon-switch__button--active .taskon-switch__slider {
1099
+ margin-left: 18px;
1424
1100
  }
1425
1101
  }
1426
1102
  }
1427
1103
  /**
1428
- * Checkbox 复选框组件样式
1429
- *
1430
- * 采用 BEM 命名规范
1431
- * 前缀: taskon-checkbox
1432
- *
1433
- * 参考 Vue 版本 BaseCheckBox.vue 样式实现
1434
- */
1435
- /*
1436
- * Responsive base styles
1437
- *
1438
- * Keep mobile breakpoints and fallback patterns centralized here.
1439
- * Components should reuse these mixins instead of duplicating query logic.
1440
- */
1441
- /*
1442
- * Desktop-up mixin:
1443
- * 1) Enable desktop enhancement in wider containers
1444
- * 2) Keep viewport media query as fallback
1104
+ * ClaimNftDialog 样式
1445
1105
  */
1446
- /* ============================================================================
1447
- 根元素
1448
- ============================================================================ */
1449
- .taskon-checkbox {
1450
- display: inline-flex;
1106
+
1107
+ .taskon-claim-dialog {
1108
+ max-width: 400px;
1109
+ }
1110
+
1111
+ .taskon-claim-dialog-content {
1112
+ display: flex;
1113
+ flex-direction: column;
1114
+ align-items: center;
1115
+ padding: 24px;
1116
+ text-align: center;
1117
+ color: var(--taskon-color-text);
1118
+ }
1119
+
1120
+ /* NFT 图片 */
1121
+
1122
+ .taskon-claim-dialog-nft {
1123
+ margin-bottom: 20px;
1124
+ }
1125
+
1126
+ .taskon-claim-dialog-nft__image {
1127
+ width: 120px;
1128
+ height: 120px;
1129
+ border-radius: 12px;
1130
+ object-fit: cover;
1131
+ }
1132
+
1133
+ /* 状态图标区域 */
1134
+
1135
+ .taskon-claim-dialog-status {
1136
+ margin-bottom: 16px;
1137
+ min-height: 48px;
1138
+ display: flex;
1451
1139
  align-items: center;
1452
1140
  justify-content: center;
1453
- cursor: pointer;
1454
- user-select: none;
1455
- outline: none;
1456
1141
  }
1457
- /* 悬停和聚焦效果 */
1458
- .taskon-checkbox:not(.taskon-checkbox--disabled):hover,
1459
- .taskon-checkbox:not(.taskon-checkbox--disabled):focus {
1460
- opacity: 0.8;
1142
+
1143
+ /* 加载动画 */
1144
+
1145
+ .taskon-claim-dialog-spinner {
1146
+ width: 48px;
1147
+ height: 48px;
1148
+ position: relative;
1461
1149
  }
1462
- /* 禁用状态 */
1463
- .taskon-checkbox--disabled {
1464
- cursor: not-allowed;
1465
- opacity: 0.4;
1150
+
1151
+ .taskon-claim-dialog-spinner__circle {
1152
+ width: 100%;
1153
+ height: 100%;
1154
+ border: 3px solid var(--taskon-color-border-secondary);
1155
+ border-top-color: var(--taskon-color-primary);
1156
+ border-radius: 50%;
1157
+ animation: taskon-claim-spin 0.8s linear infinite;
1466
1158
  }
1467
- /* 只读状态 */
1468
- .taskon-checkbox--readonly {
1469
- cursor: default;
1470
- opacity: 0.4;
1159
+
1160
+ @keyframes taskon-claim-spin {
1161
+ to {
1162
+ transform: rotate(360deg);
1163
+ }
1471
1164
  }
1472
- /* ============================================================================
1473
- 隐藏的原生 input
1474
- ============================================================================ */
1475
- .taskon-checkbox__input {
1476
- display: none;
1165
+
1166
+ /* 状态图标 */
1167
+
1168
+ .taskon-claim-dialog-icon {
1169
+ width: 48px;
1170
+ height: 48px;
1477
1171
  }
1478
- /* ============================================================================
1479
- 自定义图标容器
1480
- ============================================================================ */
1481
- .taskon-checkbox__icon {
1172
+
1173
+ .taskon-claim-dialog-icon--success {
1174
+ color: var(--taskon-color-success);
1175
+ }
1176
+
1177
+ .taskon-claim-dialog-icon--error {
1178
+ color: var(--taskon-color-error);
1179
+ }
1180
+
1181
+ /* 状态消息 */
1182
+
1183
+ .taskon-claim-dialog-message {
1184
+ font-size: var(--taskon-font-size-lg);
1185
+ font-weight: 500;
1186
+ color: var(--taskon-color-text);
1187
+ margin: 0 0 16px;
1188
+ line-height: 1.5;
1189
+ width: 100%;
1190
+ max-width: 100%;
1191
+ overflow-wrap: anywhere;
1192
+ word-break: break-word;
1193
+ }
1194
+
1195
+ /* 交易 Hash */
1196
+
1197
+ .taskon-claim-dialog-tx {
1482
1198
  display: flex;
1483
- justify-content: center;
1484
1199
  align-items: center;
1485
- width: 16px;
1486
- height: 16px;
1487
- border: 2px solid var(--taskon-color-border);
1488
- border-radius: 3px;
1489
- transition: all 0.2s ease;
1490
- flex-shrink: 0;
1200
+ gap: 8px;
1201
+ padding: 8px 16px;
1202
+ background: var(--taskon-color-bg-surface-subtle);
1203
+ border-radius: 8px;
1204
+ margin-bottom: 20px;
1205
+ font-size: var(--taskon-font-size);
1491
1206
  }
1492
- /* 选中状态 - 默认绿色背景 */
1493
- .taskon-checkbox__icon--active {
1494
- border: 0 none;
1495
- background-color: var(--taskon-color-secondary);
1496
- border-radius: 4px;
1207
+
1208
+ .taskon-claim-dialog-tx__label {
1209
+ color: var(--taskon-color-text-tertiary);
1497
1210
  }
1498
- /* 选中状态显示勾选图标 */
1499
- .taskon-checkbox__icon--active .taskon-checkbox__icon-checked {
1500
- display: block;
1211
+
1212
+ .taskon-claim-dialog-tx__hash {
1213
+ color: var(--taskon-color-link);
1214
+ font-family: monospace;
1501
1215
  }
1502
- /* light 类型选中状态 - 浅色背景 */
1503
- .taskon-checkbox__icon--active.taskon-checkbox__icon--light {
1504
- border: 1px solid var(--taskon-color-border);
1505
- background-color: var(--taskon-color-bg-surface);
1216
+
1217
+ /* 操作按钮 */
1218
+
1219
+ .taskon-claim-dialog-actions {
1220
+ display: flex;
1221
+ gap: 12px;
1222
+ width: 100%;
1223
+ justify-content: center;
1506
1224
  }
1507
- /* 圆形样式 */
1508
- .taskon-checkbox__icon--round {
1509
- border-radius: 50%;
1225
+
1226
+ .taskon-claim-dialog-btn {
1227
+ padding: 10px 24px;
1228
+ border-radius: 8px;
1229
+ font-size: var(--taskon-font-size);
1230
+ font-weight: 500;
1231
+ cursor: pointer;
1232
+ transition: all 0.2s ease;
1233
+ border: none;
1510
1234
  }
1511
- /* ============================================================================
1512
- 勾选图标 SVG
1513
- ============================================================================ */
1514
- .taskon-checkbox__icon-checked {
1515
- display: none;
1516
- width: 10px;
1517
- height: 8px;
1235
+
1236
+ .taskon-claim-dialog-btn--primary {
1237
+ background: var(--taskon-color-primary);
1518
1238
  color: var(--taskon-color-text-on-primary);
1519
1239
  }
1520
- .taskon-checkbox__icon--active.taskon-checkbox__icon--light .taskon-checkbox__icon-checked {
1240
+
1241
+ .taskon-claim-dialog-btn--primary:hover {
1242
+ filter: brightness(0.95);
1243
+ }
1244
+
1245
+ .taskon-claim-dialog-btn--secondary {
1246
+ background: transparent;
1521
1247
  color: var(--taskon-color-text);
1248
+ border: 1px solid var(--taskon-color-border);
1522
1249
  }
1523
- /* ============================================================================
1524
- 标签文字
1525
- ============================================================================ */
1526
- .taskon-checkbox__label {
1527
- margin-left: 8px;
1528
- color: var(--taskon-color-text-secondary);
1529
- font-size: 14px;
1530
- font-style: normal;
1531
- font-weight: 500;
1532
- line-height: 18px;
1250
+
1251
+ .taskon-claim-dialog-btn--secondary:hover {
1252
+ background: var(--taskon-color-bg-surface-strong);
1533
1253
  }
1534
- @supports (container-type: inline-size) {
1535
- @container (min-width: 751px) {
1536
- .taskon-checkbox__icon {
1537
- width: 20px;
1538
- height: 20px;
1539
- border-radius: 4px;
1254
+
1255
+ @media (max-width: 750px) {
1256
+ .taskon-claim-dialog {
1257
+ max-width: 100%;
1540
1258
  }
1541
1259
 
1542
- .taskon-checkbox__icon-checked {
1543
- width: 12px;
1544
- height: 10px;
1260
+ .taskon-claim-dialog-content {
1261
+ padding: 16px;
1545
1262
  }
1546
1263
 
1547
- .taskon-checkbox__label {
1548
- font-size: 16px;
1549
- line-height: 20px;
1264
+ .taskon-claim-dialog-nft {
1265
+ margin-bottom: 16px;
1550
1266
  }
1551
- }
1267
+
1268
+ .taskon-claim-dialog-nft__image {
1269
+ width: 96px;
1270
+ height: 96px;
1552
1271
  }
1553
- @supports not (container-type: inline-size) {
1554
- @media (min-width: 751px) {
1555
- .taskon-checkbox__icon {
1556
- width: 20px;
1557
- height: 20px;
1558
- border-radius: 4px;
1272
+
1273
+ .taskon-claim-dialog-status {
1274
+ margin-bottom: 12px;
1275
+ min-height: 40px;
1276
+ }
1277
+
1278
+ .taskon-claim-dialog-spinner,
1279
+ .taskon-claim-dialog-icon {
1280
+ width: 40px;
1281
+ height: 40px;
1282
+ }
1283
+
1284
+ .taskon-claim-dialog-message {
1285
+ font-size: var(--taskon-font-size);
1286
+ margin-bottom: 12px;
1287
+ }
1288
+
1289
+ .taskon-claim-dialog-tx {
1290
+ align-items: flex-start;
1291
+ flex-direction: column;
1292
+ gap: 4px;
1293
+ margin-bottom: 16px;
1559
1294
  }
1560
1295
 
1561
- .taskon-checkbox__icon-checked {
1562
- width: 12px;
1563
- height: 10px;
1564
- }
1296
+ .taskon-claim-dialog-tx__hash {
1297
+ display: block;
1298
+ max-width: 100%;
1299
+ overflow-wrap: anywhere;
1300
+ }
1301
+
1302
+ .taskon-claim-dialog-actions {
1303
+ flex-direction: column;
1304
+ gap: 8px;
1305
+ }
1306
+
1307
+ .taskon-claim-dialog-btn {
1308
+ width: 100%;
1309
+ padding: 9px 12px;
1310
+ }
1311
+ }
1312
+ /**
1313
+ * PendingTxDialog 样式
1314
+ */
1315
+
1316
+ .taskon-pending-dialog {
1317
+ max-width: 460px;
1318
+ }
1319
+
1320
+ .taskon-pending-dialog-content {
1321
+ display: flex;
1322
+ flex-direction: column;
1323
+ gap: 16px;
1324
+ }
1325
+
1326
+ .taskon-pending-dialog-title {
1327
+ margin: 0;
1328
+ font-size: var(--taskon-font-size-lg);
1329
+ line-height: 1.5;
1330
+ color: var(--taskon-color-text);
1331
+ }
1332
+
1333
+ .taskon-pending-dialog-desc {
1334
+ margin: 0;
1335
+ font-size: var(--taskon-font-size);
1336
+ line-height: 1.43;
1337
+ color: var(--taskon-color-text-tertiary);
1338
+ }
1565
1339
 
1566
- .taskon-checkbox__label {
1567
- font-size: 16px;
1568
- line-height: 20px;
1569
- }
1570
- }
1571
- }
1572
- /**
1573
- * Switch 开关组件样式
1574
- *
1575
- * 采用 BEM 命名规范
1576
- * 前缀: taskon-switch
1577
- *
1578
- * 参考 Vue 版本 BaseSwitch.vue 样式实现
1579
- */
1580
- /*
1581
- * Responsive base styles
1582
- *
1583
- * Keep mobile breakpoints and fallback patterns centralized here.
1584
- * Components should reuse these mixins instead of duplicating query logic.
1585
- */
1586
- /*
1587
- * Desktop-up mixin:
1588
- * 1) Enable desktop enhancement in wider containers
1589
- * 2) Keep viewport media query as fallback
1590
- */
1591
- /* ============================================================================
1592
- 根元素
1593
- ============================================================================ */
1594
- .taskon-switch {
1595
- position: relative;
1596
- display: inline-flex;
1340
+ .taskon-pending-dialog-hash-wrap {
1341
+ display: flex;
1342
+ flex-wrap: wrap;
1597
1343
  align-items: center;
1598
- vertical-align: middle;
1599
- font-weight: 500;
1600
- font-size: 12px;
1601
- line-height: 130%;
1602
- color: var(--taskon-color-text-secondary);
1603
- cursor: pointer;
1604
- user-select: none;
1344
+ gap: 8px;
1605
1345
  }
1606
- /* 禁用状态 */
1607
- .taskon-switch--disabled {
1608
- cursor: not-allowed;
1609
- opacity: 0.5;
1346
+
1347
+ .taskon-pending-dialog-hash-label {
1348
+ font-size: var(--taskon-font-size);
1349
+ color: var(--taskon-color-text-tertiary);
1610
1350
  }
1611
- /* ============================================================================
1612
- 标签文字
1613
- ============================================================================ */
1614
- .taskon-switch__label {
1351
+
1352
+ .taskon-pending-dialog-hash-link,
1353
+ .taskon-pending-dialog-hash-value {
1354
+ font-size: var(--taskon-font-size);
1355
+ color: var(--taskon-color-link);
1356
+ text-decoration: underline;
1357
+ background: none;
1358
+ border: none;
1359
+ padding: 0;
1360
+ }
1361
+
1362
+ .taskon-pending-dialog-hash-link {
1615
1363
  cursor: pointer;
1616
1364
  }
1617
- .taskon-switch__label--disabled {
1618
- cursor: not-allowed;
1365
+
1366
+ .taskon-pending-dialog-notice-list {
1367
+ margin: 0;
1368
+ padding-left: 18px;
1369
+ list-style: disc;
1370
+ display: flex;
1371
+ flex-direction: column;
1372
+ gap: 10px;
1619
1373
  }
1620
- /* ============================================================================
1621
- 开关按钮
1622
- ============================================================================ */
1623
- .taskon-switch__button {
1624
- position: relative;
1625
- width: 32px;
1626
- height: 18px;
1627
- line-height: 20px;
1628
- background: var(--taskon-color-bg-surface-strong);
1629
- border: 1px solid var(--taskon-color-border);
1630
- border-radius: 100px;
1631
- padding: 2px;
1632
- margin-left: 10px;
1633
- transition: all 0.3s ease;
1634
- flex-shrink: 0;
1374
+
1375
+ .taskon-pending-dialog-notice-item {
1376
+ font-size: var(--taskon-font-size-sm);
1377
+ line-height: 1.5;
1378
+ color: var(--taskon-color-link);
1635
1379
  }
1636
- /* 开启状态 - 默认渐变背景 */
1637
- .taskon-switch__button--active {
1638
- background: linear-gradient(
1639
- 90deg,
1640
- var(--taskon-color-primary) 0%,
1641
- var(--taskon-color-secondary) 100%
1642
- );
1643
- border-color: transparent;
1380
+
1381
+ .taskon-pending-dialog-receive-address {
1382
+ margin-top: 4px;
1383
+ word-break: break-all;
1644
1384
  }
1645
- /* 禁用状态 */
1646
- .taskon-switch__button--disabled {
1647
- cursor: not-allowed;
1385
+
1386
+ .taskon-pending-dialog-actions {
1387
+ display: flex;
1388
+ justify-content: flex-end;
1389
+ gap: 12px;
1390
+ margin-top: 8px;
1648
1391
  }
1649
- /* ============================================================================
1650
- 滑块
1651
- ============================================================================ */
1652
- .taskon-switch__slider {
1653
- width: 12px;
1654
- height: 12px;
1655
- border-radius: 50%;
1656
- background: var(--taskon-color-text);
1657
- transition: margin-left 0.3s ease;
1392
+
1393
+ .taskon-pending-dialog-btn {
1394
+ padding: 10px 18px;
1395
+ border-radius: 8px;
1396
+ border: none;
1397
+ font-size: var(--taskon-font-size);
1398
+ font-weight: 500;
1399
+ cursor: pointer;
1400
+ transition: all 0.2s ease;
1658
1401
  }
1659
- /* 开启状态的滑块位置 */
1660
- .taskon-switch__button--active .taskon-switch__slider {
1661
- margin-left: 14px;
1662
- background: var(--taskon-color-text-on-primary);
1402
+
1403
+ .taskon-pending-dialog-btn--primary {
1404
+ background: var(--taskon-color-primary);
1405
+ color: var(--taskon-color-text-on-primary);
1663
1406
  }
1664
- /* ============================================================================
1665
- 高亮样式 (highlight type)
1666
- ============================================================================ */
1667
- .taskon-switch--highlight .taskon-switch__button {
1668
- background: var(--taskon-color-bg-surface-subtle);
1407
+
1408
+ .taskon-pending-dialog-btn--primary:hover {
1409
+ opacity: 0.92;
1669
1410
  }
1670
- .taskon-switch--highlight .taskon-switch__button--active {
1671
- background: var(--taskon-color-primary-bg);
1672
- border: 1px solid var(--taskon-color-border-secondary);
1411
+
1412
+ .taskon-pending-dialog-btn--secondary {
1413
+ background: transparent;
1414
+ color: var(--taskon-color-text);
1415
+ border: 1px solid var(--taskon-color-border);
1673
1416
  }
1674
- .taskon-switch--highlight .taskon-switch__button--active .taskon-switch__slider {
1675
- background: var(--taskon-color-primary);
1417
+
1418
+ .taskon-pending-dialog-btn--secondary:hover {
1419
+ background: var(--taskon-color-bg-surface-strong);
1676
1420
  }
1677
- @supports (container-type: inline-size) {
1678
- @container (min-width: 751px) {
1679
- .taskon-switch {
1680
- font-weight: 400;
1681
- font-size: 16px;
1682
- line-height: 23px;
1683
- }
1684
1421
 
1685
- .taskon-switch__button {
1686
- width: 38px;
1687
- height: 20px;
1688
- padding: 2px 3px;
1689
- margin-left: 15px;
1422
+ @media (max-width: 750px) {
1423
+ .taskon-pending-dialog {
1424
+ max-width: 100%;
1690
1425
  }
1691
1426
 
1692
- .taskon-switch__slider {
1693
- width: 14px;
1694
- height: 14px;
1427
+ .taskon-pending-dialog-content {
1428
+ gap: 12px;
1695
1429
  }
1696
1430
 
1697
- .taskon-switch__button--active .taskon-switch__slider {
1698
- margin-left: 18px;
1699
- }
1700
- }
1701
- }
1702
- @supports not (container-type: inline-size) {
1703
- @media (min-width: 751px) {
1704
- .taskon-switch {
1705
- font-weight: 400;
1706
- font-size: 16px;
1707
- line-height: 23px;
1431
+ .taskon-pending-dialog-title {
1432
+ font-size: var(--taskon-font-size);
1433
+ line-height: 1.57;
1708
1434
  }
1709
1435
 
1710
- .taskon-switch__button {
1711
- width: 38px;
1712
- height: 20px;
1713
- padding: 2px 3px;
1714
- margin-left: 15px;
1436
+ .taskon-pending-dialog-desc,
1437
+ .taskon-pending-dialog-hash-label,
1438
+ .taskon-pending-dialog-hash-link,
1439
+ .taskon-pending-dialog-hash-value {
1440
+ font-size: var(--taskon-font-size-sm);
1441
+ line-height: 1.5;
1715
1442
  }
1716
1443
 
1717
- .taskon-switch__slider {
1718
- width: 14px;
1719
- height: 14px;
1444
+ .taskon-pending-dialog-notice-item {
1445
+ font-size: var(--taskon-font-size-sm);
1446
+ line-height: 1.33;
1720
1447
  }
1721
1448
 
1722
- .taskon-switch__button--active .taskon-switch__slider {
1723
- margin-left: 18px;
1449
+ .taskon-pending-dialog-actions {
1450
+ align-items: stretch;
1451
+ flex-direction: column;
1452
+ gap: 8px;
1724
1453
  }
1725
- }
1454
+
1455
+ .taskon-pending-dialog-btn {
1456
+ width: 100%;
1457
+ padding: 9px 12px;
1726
1458
  }
1459
+ }
1727
1460
  /**
1728
1461
  * Points 表格样式
1729
1462
  *
@@ -1751,7 +1484,7 @@
1751
1484
  }
1752
1485
 
1753
1486
  .taskon-points-list__title {
1754
- font-size: 16px;
1487
+ font-size: var(--taskon-font-size-lg);
1755
1488
  font-weight: 600;
1756
1489
  color: var(--taskon-color-text);
1757
1490
  margin: 0;
@@ -1771,7 +1504,7 @@
1771
1504
  }
1772
1505
 
1773
1506
  .taskon-points-list__total-label {
1774
- font-size: 12px;
1507
+ font-size: var(--taskon-font-size-sm);
1775
1508
  color: var(--taskon-color-text-secondary);
1776
1509
  }
1777
1510
 
@@ -1812,7 +1545,7 @@
1812
1545
  }
1813
1546
 
1814
1547
  .taskon-points-list__cell--amount {
1815
- font-size: 14px;
1548
+ font-size: var(--taskon-font-size);
1816
1549
  font-weight: 600;
1817
1550
  white-space: nowrap;
1818
1551
  }
@@ -1826,13 +1559,13 @@
1826
1559
  }
1827
1560
 
1828
1561
  .taskon-points-list__cell--time {
1829
- font-size: 13px;
1562
+ font-size: var(--taskon-font-size-sm);
1830
1563
  color: var(--taskon-color-text-secondary);
1831
1564
  white-space: nowrap;
1832
1565
  }
1833
1566
 
1834
1567
  .taskon-points-list__primary {
1835
- font-size: 14px;
1568
+ font-size: var(--taskon-font-size);
1836
1569
  font-weight: 500;
1837
1570
  color: var(--taskon-color-text);
1838
1571
  white-space: nowrap;
@@ -1841,7 +1574,7 @@
1841
1574
  }
1842
1575
 
1843
1576
  .taskon-points-list__secondary {
1844
- font-size: 12px;
1577
+ font-size: var(--taskon-font-size-sm);
1845
1578
  color: var(--taskon-color-text-secondary);
1846
1579
  white-space: nowrap;
1847
1580
  overflow: hidden;
@@ -1859,13 +1592,13 @@
1859
1592
  }
1860
1593
 
1861
1594
  .taskon-points-list__name {
1862
- font-size: 14px;
1595
+ font-size: var(--taskon-font-size);
1863
1596
  font-weight: 500;
1864
1597
  color: var(--taskon-color-text);
1865
1598
  }
1866
1599
 
1867
1600
  .taskon-points-list__time {
1868
- font-size: 13px;
1601
+ font-size: var(--taskon-font-size-sm);
1869
1602
  color: var(--taskon-color-text-secondary);
1870
1603
  white-space: nowrap;
1871
1604
  }
@@ -1885,7 +1618,7 @@
1885
1618
  }
1886
1619
 
1887
1620
  .taskon-points-list__amount-value {
1888
- font-size: 14px;
1621
+ font-size: var(--taskon-font-size);
1889
1622
  font-weight: 600;
1890
1623
  white-space: nowrap;
1891
1624
  }
@@ -1912,8 +1645,8 @@
1912
1645
  }
1913
1646
 
1914
1647
  .taskon-points-list__title {
1915
- font-size: 14px;
1916
- line-height: 20px;
1648
+ font-size: var(--taskon-font-size);
1649
+ line-height: 1.43;
1917
1650
  }
1918
1651
 
1919
1652
  .taskon-points-list__total {
@@ -1923,16 +1656,16 @@
1923
1656
  }
1924
1657
 
1925
1658
  .taskon-points-list__total-value {
1926
- font-size: 16px;
1659
+ font-size: var(--taskon-font-size-lg);
1927
1660
  }
1928
1661
 
1929
1662
  .taskon-points-list__name,
1930
1663
  .taskon-points-list__amount-value {
1931
- font-size: 13px;
1664
+ font-size: var(--taskon-font-size-sm);
1932
1665
  }
1933
1666
 
1934
1667
  .taskon-points-list__time {
1935
- font-size: 12px;
1668
+ font-size: var(--taskon-font-size-sm);
1936
1669
  }
1937
1670
 
1938
1671
  .taskon-points-list__amount-icon {
@@ -1986,7 +1719,7 @@
1986
1719
 
1987
1720
  .taskon-reward-table__campaign-name {
1988
1721
  color: var(--taskon-color-text);
1989
- font-size: 14px;
1722
+ font-size: var(--taskon-font-size);
1990
1723
  font-weight: 500;
1991
1724
  line-height: 1.5;
1992
1725
  word-break: break-word;
@@ -1996,7 +1729,7 @@
1996
1729
 
1997
1730
  .taskon-reward-table__role-name {
1998
1731
  color: var(--taskon-color-text);
1999
- font-size: 14px;
1732
+ font-size: var(--taskon-font-size);
2000
1733
  font-weight: 500;
2001
1734
  line-height: 1.5;
2002
1735
  }
@@ -2005,7 +1738,7 @@
2005
1738
 
2006
1739
  .taskon-reward-table__time {
2007
1740
  color: var(--taskon-color-text-secondary);
2008
- font-size: 13px;
1741
+ font-size: var(--taskon-font-size-sm);
2009
1742
  white-space: nowrap;
2010
1743
  }
2011
1744
 
@@ -2013,7 +1746,7 @@
2013
1746
 
2014
1747
  .taskon-reward-table__manual-drop {
2015
1748
  color: var(--taskon-color-text-tertiary);
2016
- font-size: 13px;
1749
+ font-size: var(--taskon-font-size-sm);
2017
1750
  }
2018
1751
 
2019
1752
  /* 链接样式 */
@@ -2023,7 +1756,7 @@
2023
1756
  border: none;
2024
1757
  padding: 0;
2025
1758
  color: var(--taskon-color-primary);
2026
- font-size: 13px;
1759
+ font-size: var(--taskon-font-size-sm);
2027
1760
  cursor: pointer;
2028
1761
  text-decoration: none;
2029
1762
  }
@@ -2042,7 +1775,7 @@
2042
1775
  padding: 0 12px;
2043
1776
  background-color: var(--taskon-color-primary);
2044
1777
  color: var(--taskon-color-text-on-primary);
2045
- font-size: 13px;
1778
+ font-size: var(--taskon-font-size-sm);
2046
1779
  font-weight: 500;
2047
1780
  border: none;
2048
1781
  border-radius: 4px;
@@ -2070,7 +1803,7 @@
2070
1803
  }
2071
1804
 
2072
1805
  .taskon-reward-table__points-amount {
2073
- font-size: 14px;
1806
+ font-size: var(--taskon-font-size);
2074
1807
  font-weight: 500;
2075
1808
  }
2076
1809
 
@@ -2139,8 +1872,8 @@
2139
1872
  /* Deposited 标签(TaskOn 托管发放) */
2140
1873
 
2141
1874
  .taskon-token-history__deposited {
2142
- font-size: 12px;
2143
- line-height: 15px;
1875
+ font-size: var(--taskon-font-size-sm);
1876
+ line-height: 1.25;
2144
1877
  background: linear-gradient(84deg, #e3bc4e 3%, #fffdb6 99.34%);
2145
1878
  background-clip: text;
2146
1879
  -webkit-background-clip: text;
@@ -2159,8 +1892,8 @@
2159
1892
 
2160
1893
  .taskon-token-history__distributed-label {
2161
1894
  color: var(--taskon-color-text-tertiary);
2162
- font-size: 12px;
2163
- line-height: 15px;
1895
+ font-size: var(--taskon-font-size-sm);
1896
+ line-height: 1.25;
2164
1897
  }
2165
1898
 
2166
1899
  /* 社区头像 */
@@ -2203,7 +1936,7 @@
2203
1936
  }
2204
1937
 
2205
1938
  .taskon-token-select__chain-label {
2206
- font-size: 14px;
1939
+ font-size: var(--taskon-font-size);
2207
1940
  font-weight: 500;
2208
1941
  color: var(--taskon-color-text);
2209
1942
  overflow: hidden;
@@ -2215,7 +1948,7 @@
2215
1948
  /* ========== 余额显示 ========== */
2216
1949
 
2217
1950
  .taskon-token-select__balance {
2218
- font-size: 14px;
1951
+ font-size: var(--taskon-font-size);
2219
1952
  color: var(--taskon-color-text-tertiary);
2220
1953
  margin-left: auto;
2221
1954
  flex-shrink: 0;
@@ -2230,12 +1963,12 @@
2230
1963
  }
2231
1964
 
2232
1965
  .taskon-token-select__chain-label {
2233
- font-size: 13px;
1966
+ font-size: var(--taskon-font-size-sm);
2234
1967
  max-width: 80px;
2235
1968
  }
2236
1969
 
2237
1970
  .taskon-token-select__balance {
2238
- font-size: 13px;
1971
+ font-size: var(--taskon-font-size-sm);
2239
1972
  }
2240
1973
  }
2241
1974
  /**
@@ -2252,7 +1985,7 @@
2252
1985
  display: flex;
2253
1986
  align-items: center;
2254
1987
  gap: var(--taskon-spacing-sm);
2255
- font-size: 14px;
1988
+ font-size: var(--taskon-font-size);
2256
1989
  }
2257
1990
 
2258
1991
  /* ========== 链信息 ========== */
@@ -2317,7 +2050,7 @@
2317
2050
  width: 100%;
2318
2051
  height: 40px;
2319
2052
  padding: 10px 16px;
2320
- font-size: 13px;
2053
+ font-size: var(--taskon-font-size-sm);
2321
2054
  }
2322
2055
 
2323
2056
  .taskon-receiver-address__chain-icon {
@@ -2360,16 +2093,16 @@
2360
2093
  /* 表头样式 */
2361
2094
 
2362
2095
  .taskon-batch-token-table__table .taskon-table__header {
2363
- font-size: 14px;
2364
- line-height: 32px;
2096
+ font-size: var(--taskon-font-size);
2097
+ line-height: 2.29;
2365
2098
  padding: 0 10px;
2366
2099
  }
2367
2100
 
2368
2101
  /* 单元格样式 */
2369
2102
 
2370
2103
  .taskon-batch-token-table__table .taskon-table__cell {
2371
- font-size: 14px;
2372
- line-height: 20px;
2104
+ font-size: var(--taskon-font-size);
2105
+ line-height: 1.43;
2373
2106
  padding: 0 10px;
2374
2107
  font-weight: 400;
2375
2108
  }
@@ -2407,14 +2140,14 @@
2407
2140
  .taskon-batch-token-table__input {
2408
2141
  width: 96px;
2409
2142
  height: 32px;
2410
- font-size: 14px;
2143
+ font-size: var(--taskon-font-size);
2411
2144
  text-align: center;
2412
2145
  }
2413
2146
 
2414
2147
  .taskon-batch-token-table__input .taskon-input {
2415
2148
  height: 32px;
2416
2149
  padding: 4px 8px;
2417
- font-size: 14px;
2150
+ font-size: var(--taskon-font-size);
2418
2151
  text-align: center;
2419
2152
  }
2420
2153
 
@@ -2439,14 +2172,14 @@
2439
2172
  }
2440
2173
 
2441
2174
  .taskon-batch-token-table__table .taskon-table__header {
2442
- font-size: 12px;
2443
- line-height: 24px;
2175
+ font-size: var(--taskon-font-size-sm);
2176
+ line-height: 2;
2444
2177
  padding: 0 4px;
2445
2178
  }
2446
2179
 
2447
2180
  .taskon-batch-token-table__table .taskon-table__cell {
2448
- font-size: 12px;
2449
- line-height: 16px;
2181
+ font-size: var(--taskon-font-size-sm);
2182
+ line-height: 1.33;
2450
2183
  padding: 0 4px;
2451
2184
  }
2452
2185
 
@@ -2463,7 +2196,7 @@
2463
2196
  .taskon-batch-token-table__input .taskon-input {
2464
2197
  height: 28px;
2465
2198
  padding: 2px 4px;
2466
- font-size: 12px;
2199
+ font-size: var(--taskon-font-size-sm);
2467
2200
  }
2468
2201
 
2469
2202
  .taskon-batch-token-table__pagination {
@@ -2487,7 +2220,7 @@
2487
2220
 
2488
2221
  .taskon-withdraw-form-init__title {
2489
2222
  margin: 0 0 20px 0;
2490
- font-size: 22px;
2223
+ font-size: var(--taskon-font-size-xxl);
2491
2224
  font-weight: 600;
2492
2225
  color: var(--taskon-color-text);
2493
2226
  line-height: 1.3;
@@ -2522,7 +2255,7 @@
2522
2255
 
2523
2256
  @media (max-width: 750px) {
2524
2257
  .taskon-withdraw-form-init__title {
2525
- font-size: 5.867vw;
2258
+ font-size: var(--taskon-font-size-xxl);
2526
2259
  margin-bottom: 5.333vw;
2527
2260
  }
2528
2261
 
@@ -2629,7 +2362,7 @@
2629
2362
  }
2630
2363
 
2631
2364
  .taskon-user-center-empty__message {
2632
- font-size: 14px;
2365
+ font-size: var(--taskon-font-size);
2633
2366
  color: var(--taskon-color-text-disabled);
2634
2367
  margin: 0;
2635
2368
  }
@@ -2661,7 +2394,7 @@
2661
2394
 
2662
2395
  .taskon-user-center-loading__message {
2663
2396
  margin-top: var(--taskon-spacing-md);
2664
- font-size: 14px;
2397
+ font-size: var(--taskon-font-size);
2665
2398
  color: var(--taskon-color-text-disabled);
2666
2399
  }
2667
2400
 
@@ -2699,7 +2432,7 @@
2699
2432
  }
2700
2433
 
2701
2434
  .taskon-user-center-pagination__info {
2702
- font-size: 16px;
2435
+ font-size: var(--taskon-font-size-lg);
2703
2436
  font-weight: 400;
2704
2437
  color: var(--taskon-color-text);
2705
2438
  text-transform: capitalize;
@@ -2714,7 +2447,7 @@
2714
2447
  }
2715
2448
 
2716
2449
  .taskon-user-center-pagination__info {
2717
- font-size: 14px;
2450
+ font-size: var(--taskon-font-size);
2718
2451
  color: var(--taskon-color-text-secondary);
2719
2452
  }
2720
2453
 
@@ -2729,15 +2462,17 @@
2729
2462
  text-align: center;
2730
2463
  }
2731
2464
 
2732
- .taskon-user-center-error__message {
2733
- font-size: 14px;
2734
- color: var(--taskon-color-error);
2735
- margin-bottom: var(--taskon-spacing-md);
2465
+ .taskon-user-center-error__message {
2466
+ font-size: var(--taskon-font-size);
2467
+ color: var(--taskon-color-error);
2468
+ margin-bottom: var(--taskon-spacing-md);
2469
+ overflow-wrap: anywhere;
2470
+ word-break: break-word;
2736
2471
  }
2737
2472
 
2738
2473
  .taskon-user-center-error__retry {
2739
2474
  padding: var(--taskon-spacing-sm) var(--taskon-spacing-lg);
2740
- font-size: 14px;
2475
+ font-size: var(--taskon-font-size);
2741
2476
  color: var(--taskon-color-text-on-primary);
2742
2477
  background-color: var(--taskon-color-primary);
2743
2478
  border: none;
@@ -2770,19 +2505,19 @@
2770
2505
  }
2771
2506
 
2772
2507
  .taskon-activity-history__cell--time {
2773
- font-size: 13px;
2508
+ font-size: var(--taskon-font-size-sm);
2774
2509
  color: var(--taskon-color-text-disabled);
2775
2510
  }
2776
2511
 
2777
2512
  .taskon-activity-history__campaign-name {
2778
- font-size: 14px;
2513
+ font-size: var(--taskon-font-size);
2779
2514
  font-weight: 500;
2780
2515
  color: var(--taskon-color-text);
2781
2516
  word-break: break-word;
2782
2517
  }
2783
2518
 
2784
2519
  .taskon-activity-history__campaign-type {
2785
- font-size: 12px;
2520
+ font-size: var(--taskon-font-size-sm);
2786
2521
  color: var(--taskon-color-text-disabled);
2787
2522
  padding: 2px 6px;
2788
2523
  background-color: var(--taskon-color-bg-surface-subtle);
@@ -2797,7 +2532,7 @@
2797
2532
 
2798
2533
  .taskon-activity-history__load-more-btn {
2799
2534
  padding: var(--taskon-spacing-sm) var(--taskon-spacing-lg);
2800
- font-size: 14px;
2535
+ font-size: var(--taskon-font-size);
2801
2536
  color: var(--taskon-color-primary);
2802
2537
  background: transparent;
2803
2538
  border: 1px solid var(--taskon-color-primary);
@@ -2835,9 +2570,9 @@
2835
2570
  /* "You have earned" 标题 */
2836
2571
 
2837
2572
  .taskon-asset-carousel__title {
2838
- font-size: 16px;
2573
+ font-size: var(--taskon-font-size-lg);
2839
2574
  font-weight: 600;
2840
- line-height: 24px;
2575
+ line-height: 1.5;
2841
2576
  color: var(--taskon-color-text);
2842
2577
  }
2843
2578
 
@@ -2915,7 +2650,7 @@
2915
2650
  /* Whitelist "WL" 文字图标样式 - 基于 Figma 设计 */
2916
2651
 
2917
2652
  .taskon-asset-card__icon-wl {
2918
- font-size: 17.333px;
2653
+ font-size: var(--taskon-font-size-xl);
2919
2654
  font-weight: 900;
2920
2655
  letter-spacing: 0.6933px;
2921
2656
  color: var(--taskon-color-bg-canvas);
@@ -2925,7 +2660,7 @@
2925
2660
  /* NFT 文字图标样式 - 基于 Figma 设计 */
2926
2661
 
2927
2662
  .taskon-asset-card__icon-nft {
2928
- font-size: 12px;
2663
+ font-size: var(--taskon-font-size-sm);
2929
2664
  font-weight: 700;
2930
2665
  letter-spacing: 0.5px;
2931
2666
  color: var(--taskon-color-text);
@@ -2945,9 +2680,9 @@
2945
2680
  /* 标题(如 Token, NFT) */
2946
2681
 
2947
2682
  .taskon-asset-card__title {
2948
- font-size: 14px;
2683
+ font-size: var(--taskon-font-size);
2949
2684
  font-weight: 500;
2950
- line-height: 20px;
2685
+ line-height: 1.43;
2951
2686
  color: var(--taskon-color-text-disabled);
2952
2687
  }
2953
2688
 
@@ -2956,7 +2691,7 @@
2956
2691
  .taskon-asset-card__value {
2957
2692
  font-size: 20px;
2958
2693
  font-weight: 600;
2959
- line-height: 28px;
2694
+ line-height: 1.4;
2960
2695
  color: var(--taskon-color-text);
2961
2696
  }
2962
2697
 
@@ -2980,9 +2715,9 @@
2980
2715
  }
2981
2716
 
2982
2717
  .taskon-my-rewards__section-title {
2983
- font-size: 16px;
2718
+ font-size: var(--taskon-font-size-lg);
2984
2719
  font-weight: 600;
2985
- line-height: 24px;
2720
+ line-height: 1.5;
2986
2721
  color: var(--taskon-color-text);
2987
2722
  }
2988
2723
 
@@ -3025,7 +2760,7 @@
3025
2760
 
3026
2761
  .taskon-withdraw-pending__count {
3027
2762
  padding: 4px 8px;
3028
- font-size: 14px;
2763
+ font-size: var(--taskon-font-size);
3029
2764
  line-height: 1;
3030
2765
  text-align: right;
3031
2766
  white-space: nowrap;
@@ -3036,7 +2771,7 @@
3036
2771
  /* 提示文字 */
3037
2772
 
3038
2773
  .taskon-withdraw-pending__text {
3039
- font-size: 16px;
2774
+ font-size: var(--taskon-font-size-lg);
3040
2775
  white-space: nowrap;
3041
2776
  }
3042
2777
 
@@ -3086,7 +2821,7 @@
3086
2821
  /* Token 符号 */
3087
2822
 
3088
2823
  .taskon-token-assets__symbol {
3089
- font-size: 14px;
2824
+ font-size: var(--taskon-font-size);
3090
2825
  font-weight: 400;
3091
2826
  line-height: normal;
3092
2827
  color: var(--taskon-color-text);
@@ -3096,7 +2831,7 @@
3096
2831
  /* 链名称 */
3097
2832
 
3098
2833
  .taskon-token-assets__chain {
3099
- font-size: 14px;
2834
+ font-size: var(--taskon-font-size);
3100
2835
  font-weight: 400;
3101
2836
  line-height: normal;
3102
2837
  color: var(--taskon-color-text);
@@ -3106,7 +2841,7 @@
3106
2841
  /* 余额 */
3107
2842
 
3108
2843
  .taskon-token-assets__balance {
3109
- font-size: 14px;
2844
+ font-size: var(--taskon-font-size);
3110
2845
  font-weight: 400;
3111
2846
  line-height: normal;
3112
2847
  color: var(--taskon-color-text);
@@ -3124,7 +2859,7 @@
3124
2859
  color: var(--taskon-color-text);
3125
2860
  text-decoration: underline;
3126
2861
  cursor: pointer;
3127
- font-size: 14px;
2862
+ font-size: var(--taskon-font-size);
3128
2863
  font-weight: 500;
3129
2864
  }
3130
2865
 
@@ -3207,7 +2942,7 @@
3207
2942
  }
3208
2943
 
3209
2944
  .taskon-reward-detail__cell--time {
3210
- font-size: 13px;
2945
+ font-size: var(--taskon-font-size-sm);
3211
2946
  color: var(--taskon-color-text-secondary);
3212
2947
  white-space: nowrap;
3213
2948
  }
@@ -3231,7 +2966,7 @@
3231
2966
  }
3232
2967
 
3233
2968
  .taskon-reward-detail__primary {
3234
- font-size: 14px;
2969
+ font-size: var(--taskon-font-size);
3235
2970
  font-weight: 500;
3236
2971
  color: var(--taskon-color-text);
3237
2972
  white-space: nowrap;
@@ -3240,7 +2975,7 @@
3240
2975
  }
3241
2976
 
3242
2977
  .taskon-reward-detail__secondary {
3243
- font-size: 12px;
2978
+ font-size: var(--taskon-font-size-sm);
3244
2979
  color: var(--taskon-color-text-secondary);
3245
2980
  white-space: nowrap;
3246
2981
  overflow: hidden;
@@ -3249,7 +2984,7 @@
3249
2984
 
3250
2985
  .taskon-reward-detail__claim-btn {
3251
2986
  padding: var(--taskon-spacing-xs) var(--taskon-spacing-md);
3252
- font-size: 14px;
2987
+ font-size: var(--taskon-font-size);
3253
2988
  font-weight: 500;
3254
2989
  color: var(--taskon-color-text-on-primary);
3255
2990
  background-color: var(--taskon-color-primary);
@@ -3264,7 +2999,7 @@
3264
2999
  }
3265
3000
 
3266
3001
  .taskon-reward-detail__claimed {
3267
- font-size: 14px;
3002
+ font-size: var(--taskon-font-size);
3268
3003
  color: var(--taskon-color-success);
3269
3004
  }
3270
3005
 
@@ -3313,7 +3048,7 @@
3313
3048
  }
3314
3049
 
3315
3050
  .taskon-withdraw-modal__title {
3316
- font-size: 18px;
3051
+ font-size: var(--taskon-font-size-xl);
3317
3052
  font-weight: 600;
3318
3053
  color: var(--taskon-color-text);
3319
3054
  margin: 0;
@@ -3360,14 +3095,14 @@
3360
3095
  }
3361
3096
 
3362
3097
  .taskon-withdraw-modal__message {
3363
- font-size: 14px;
3098
+ font-size: var(--taskon-font-size);
3364
3099
  color: var(--taskon-color-text);
3365
3100
  text-align: center;
3366
3101
  margin: 0;
3367
3102
  }
3368
3103
 
3369
3104
  .taskon-withdraw-modal__tx-hash {
3370
- font-size: 12px;
3105
+ font-size: var(--taskon-font-size-sm);
3371
3106
  color: var(--taskon-color-text-secondary);
3372
3107
  text-align: center;
3373
3108
  margin-top: var(--taskon-spacing-sm);
@@ -3409,29 +3144,42 @@
3409
3144
  }
3410
3145
 
3411
3146
  .taskon-withdraw-modal__token-symbol {
3412
- font-size: 14px;
3147
+ font-size: var(--taskon-font-size);
3413
3148
  font-weight: 500;
3414
3149
  color: var(--taskon-color-text);
3415
3150
  }
3416
3151
 
3417
3152
  .taskon-withdraw-modal__token-chain {
3418
- font-size: 12px;
3153
+ font-size: var(--taskon-font-size-sm);
3419
3154
  color: var(--taskon-color-text-secondary);
3420
3155
  }
3421
3156
 
3422
3157
  .taskon-withdraw-modal__token-amount {
3423
- font-size: 16px;
3158
+ font-size: var(--taskon-font-size-lg);
3424
3159
  font-weight: 600;
3425
3160
  color: var(--taskon-color-text);
3426
3161
  }
3427
3162
 
3428
- .taskon-withdraw-modal__error {
3429
- margin-top: var(--taskon-spacing-md);
3430
- padding: var(--taskon-spacing-sm) var(--taskon-spacing-md);
3431
- font-size: 14px;
3432
- color: var(--taskon-color-error);
3433
- background-color: var(--taskon-color-error-bg);
3434
- border-radius: var(--taskon-border-radius-sm);
3163
+ .taskon-withdraw-modal__error {
3164
+ margin-top: var(--taskon-spacing-md);
3165
+ padding: var(--taskon-spacing-sm) var(--taskon-spacing-md);
3166
+ font-size: var(--taskon-font-size);
3167
+ color: var(--taskon-color-error);
3168
+ background-color: var(--taskon-color-error-bg);
3169
+ border-radius: var(--taskon-border-radius-sm);
3170
+ overflow-wrap: anywhere;
3171
+ word-break: break-word;
3172
+ }
3173
+
3174
+ .taskon-withdraw-confirm__error {
3175
+ margin-top: var(--taskon-spacing-md);
3176
+ padding: var(--taskon-spacing-sm) var(--taskon-spacing-md);
3177
+ font-size: var(--taskon-font-size);
3178
+ color: var(--taskon-color-error);
3179
+ background-color: var(--taskon-color-error-bg);
3180
+ border-radius: var(--taskon-border-radius-sm);
3181
+ overflow-wrap: anywhere;
3182
+ word-break: break-word;
3435
3183
  }
3436
3184
 
3437
3185
  .taskon-withdraw-modal__footer {
@@ -3444,7 +3192,7 @@
3444
3192
  .taskon-withdraw-modal__btn {
3445
3193
  flex: 1;
3446
3194
  padding: var(--taskon-spacing-sm) var(--taskon-spacing-lg);
3447
- font-size: 14px;
3195
+ font-size: var(--taskon-font-size);
3448
3196
  font-weight: 500;
3449
3197
  border: none;
3450
3198
  border-radius: var(--taskon-border-radius-sm);
@@ -3505,7 +3253,7 @@
3505
3253
  }
3506
3254
 
3507
3255
  .taskon-frozen-assets__title {
3508
- font-size: 16px;
3256
+ font-size: var(--taskon-font-size-lg);
3509
3257
  font-weight: 600;
3510
3258
  color: var(--taskon-color-text);
3511
3259
  margin: 0;
@@ -3555,29 +3303,29 @@
3555
3303
  }
3556
3304
 
3557
3305
  .taskon-frozen-assets__amount {
3558
- font-size: 16px;
3306
+ font-size: var(--taskon-font-size-lg);
3559
3307
  font-weight: 600;
3560
3308
  color: var(--taskon-color-text);
3561
3309
  }
3562
3310
 
3563
3311
  .taskon-frozen-assets__type {
3564
- font-size: 12px;
3312
+ font-size: var(--taskon-font-size-sm);
3565
3313
  color: var(--taskon-color-text-secondary);
3566
3314
  }
3567
3315
 
3568
3316
  .taskon-frozen-assets__campaign {
3569
- font-size: 12px;
3317
+ font-size: var(--taskon-font-size-sm);
3570
3318
  color: var(--taskon-color-text-secondary);
3571
3319
  }
3572
3320
 
3573
3321
  .taskon-frozen-assets__time {
3574
- font-size: 12px;
3322
+ font-size: var(--taskon-font-size-sm);
3575
3323
  color: var(--taskon-color-text-secondary);
3576
3324
  }
3577
3325
 
3578
3326
  .taskon-frozen-assets__resend-btn {
3579
3327
  padding: var(--taskon-spacing-xs) var(--taskon-spacing-md);
3580
- font-size: 14px;
3328
+ font-size: var(--taskon-font-size);
3581
3329
  color: var(--taskon-color-primary);
3582
3330
  background: transparent;
3583
3331
  border: 1px solid var(--taskon-color-primary);
@@ -3617,7 +3365,7 @@
3617
3365
  justify-content: space-between;
3618
3366
  align-items: center;
3619
3367
  margin-top: var(--taskon-spacing-xs);
3620
- font-size: 12px;
3368
+ font-size: var(--taskon-font-size-sm);
3621
3369
  color: var(--taskon-color-text-secondary);
3622
3370
  }
3623
3371
 
@@ -3662,7 +3410,7 @@
3662
3410
  );
3663
3411
  border-radius: 50%;
3664
3412
  color: var(--taskon-color-text-on-primary);
3665
- font-size: 18px;
3413
+ font-size: var(--taskon-font-size-xl);
3666
3414
  font-weight: 700;
3667
3415
  }
3668
3416
 
@@ -3673,7 +3421,7 @@
3673
3421
  }
3674
3422
 
3675
3423
  .taskon-xp-level-card__level-label {
3676
- font-size: 12px;
3424
+ font-size: var(--taskon-font-size-sm);
3677
3425
  color: var(--taskon-color-text-secondary);
3678
3426
  }
3679
3427
 
@@ -3691,12 +3439,12 @@
3691
3439
  }
3692
3440
 
3693
3441
  .taskon-xp-level-card__xp-label {
3694
- font-size: 12px;
3442
+ font-size: var(--taskon-font-size-sm);
3695
3443
  color: var(--taskon-color-text-secondary);
3696
3444
  }
3697
3445
 
3698
3446
  .taskon-xp-level-card__xp-value {
3699
- font-size: 18px;
3447
+ font-size: var(--taskon-font-size-xl);
3700
3448
  font-weight: 600;
3701
3449
  color: var(--taskon-color-text);
3702
3450
  }
@@ -3710,12 +3458,12 @@
3710
3458
  justify-content: space-between;
3711
3459
  align-items: center;
3712
3460
  margin-bottom: var(--taskon-spacing-xs);
3713
- font-size: 12px;
3461
+ font-size: var(--taskon-font-size-sm);
3714
3462
  color: var(--taskon-color-text-secondary);
3715
3463
  }
3716
3464
 
3717
3465
  .taskon-xp-level-card__history-title {
3718
- font-size: 16px;
3466
+ font-size: var(--taskon-font-size-lg);
3719
3467
  font-weight: 600;
3720
3468
  color: var(--taskon-color-text);
3721
3469
  margin-bottom: var(--taskon-spacing-md);
@@ -3745,7 +3493,7 @@
3745
3493
  align-items: center;
3746
3494
  padding: var(--taskon-spacing-xl);
3747
3495
  color: var(--taskon-color-text-tertiary);
3748
- font-size: 14px;
3496
+ font-size: var(--taskon-font-size);
3749
3497
  }
3750
3498
 
3751
3499
  /* ============================================================================
@@ -3764,9 +3512,9 @@
3764
3512
  /* 标题: 24px 加粗白色 */
3765
3513
 
3766
3514
  .taskon-identity-social-section__title {
3767
- font-size: 24px;
3515
+ font-size: var(--taskon-font-size-xxxl);
3768
3516
  font-weight: 600;
3769
- line-height: 32px;
3517
+ line-height: 1.33;
3770
3518
  color: var(--taskon-color-text);
3771
3519
  margin: 0;
3772
3520
  }
@@ -3795,14 +3543,23 @@
3795
3543
  transition: background-color 0.2s ease;
3796
3544
  }
3797
3545
 
3798
- .taskon-identity-social-item:hover {
3799
- background-color: var(--taskon-color-bg-surface-strong);
3546
+ .taskon-identity-social-item:hover {
3547
+ background-color: var(--taskon-color-bg-surface-strong);
3548
+ }
3549
+
3550
+ .taskon-identity-social-item--clickable {
3551
+ cursor: pointer;
3552
+ }
3553
+
3554
+ .taskon-identity-social-item--clickable:focus-visible {
3555
+ outline: 2px solid var(--taskon-color-link);
3556
+ outline-offset: 2px;
3800
3557
  }
3801
3558
 
3802
3559
  /* 已绑定状态 - 可以添加不同的视觉反馈 */
3803
3560
 
3804
- .taskon-identity-social-item--bound {
3805
- background-color: var(--taskon-color-bg-surface-subtle);
3561
+ .taskon-identity-social-item--bound {
3562
+ background-color: var(--taskon-color-bg-surface-subtle);
3806
3563
  }
3807
3564
 
3808
3565
  /* "Linked" 徽章:已绑定默认显示 */
@@ -3813,7 +3570,7 @@
3813
3570
  justify-content: center;
3814
3571
  height: 24px;
3815
3572
  padding: 0 10px;
3816
- font-size: 12px;
3573
+ font-size: var(--taskon-font-size-sm);
3817
3574
  font-weight: 500;
3818
3575
  line-height: 1;
3819
3576
  color: var(--taskon-color-text-tertiary);
@@ -3909,9 +3666,9 @@
3909
3666
  /* 文字样式: 16px 加粗白色 */
3910
3667
 
3911
3668
  .taskon-identity-social-item__name {
3912
- font-size: 16px;
3669
+ font-size: var(--taskon-font-size-lg);
3913
3670
  font-weight: 600;
3914
- line-height: 24px;
3671
+ line-height: 1.5;
3915
3672
  color: var(--taskon-color-text);
3916
3673
  white-space: nowrap;
3917
3674
  overflow: hidden;
@@ -3921,9 +3678,9 @@
3921
3678
  /* 链接样式 */
3922
3679
 
3923
3680
  .taskon-identity-social-item__link {
3924
- font-size: 16px;
3681
+ font-size: var(--taskon-font-size-lg);
3925
3682
  font-weight: 600;
3926
- line-height: 24px;
3683
+ line-height: 1.5;
3927
3684
  color: var(--taskon-color-text);
3928
3685
  text-decoration: none;
3929
3686
  white-space: nowrap;
@@ -3997,9 +3754,9 @@
3997
3754
  /* 标题: 16px 加粗白色 */
3998
3755
 
3999
3756
  .taskon-identity-email-section__title {
4000
- font-size: 16px;
3757
+ font-size: var(--taskon-font-size-lg);
4001
3758
  font-weight: 600;
4002
- line-height: 24px;
3759
+ line-height: 1.5;
4003
3760
  color: var(--taskon-color-text);
4004
3761
  margin: 0;
4005
3762
  }
@@ -4026,9 +3783,9 @@
4026
3783
  /* 标题: 24px 加粗白色 */
4027
3784
 
4028
3785
  .taskon-network-section__title {
4029
- font-size: 24px;
3786
+ font-size: var(--taskon-font-size-xxxl);
4030
3787
  font-weight: 600;
4031
- line-height: 32px;
3788
+ line-height: 1.33;
4032
3789
  color: var(--taskon-color-text);
4033
3790
  margin: 0;
4034
3791
  }
@@ -4077,9 +3834,9 @@
4077
3834
  /* 链标签: 14px medium 白色 */
4078
3835
 
4079
3836
  .taskon-network-card__label {
4080
- font-size: 14px;
3837
+ font-size: var(--taskon-font-size);
4081
3838
  font-weight: 500;
4082
- line-height: 20px;
3839
+ line-height: 1.43;
4083
3840
  color: var(--taskon-color-text);
4084
3841
  }
4085
3842
 
@@ -4090,10 +3847,13 @@
4090
3847
  gap: var(--taskon-spacing-sm);
4091
3848
  }
4092
3849
 
4093
- .taskon-network-card__chain-icon svg {
4094
- width: 24px;
4095
- height: 24px;
4096
- border-radius: 8px;
3850
+ .taskon-network-card__chain-icon svg,
3851
+ .taskon-network-card__chain-icon img {
3852
+ width: 24px;
3853
+ height: 24px;
3854
+ border-radius: 8px;
3855
+ object-fit: contain;
3856
+ flex-shrink: 0;
4097
3857
  }
4098
3858
 
4099
3859
  /* EVM 多链图标行 */
@@ -4105,11 +3865,18 @@
4105
3865
  align-items: center;
4106
3866
  }
4107
3867
 
4108
- .taskon-network-chain-icons svg {
4109
- width: 24px;
4110
- height: 24px;
4111
- border-radius: 8px;
4112
- flex-shrink: 0;
3868
+ .taskon-network-chain-icons svg {
3869
+ width: 24px;
3870
+ height: 24px;
3871
+ border-radius: 8px;
3872
+ flex-shrink: 0;
3873
+ }
3874
+
3875
+ .taskon-network-chain-icons img {
3876
+ display: block;
3877
+ flex-shrink: 0;
3878
+ max-width: 100%;
3879
+ height: auto;
4113
3880
  }
4114
3881
 
4115
3882
  .taskon-network-chain-icons__more {
@@ -4151,9 +3918,9 @@
4151
3918
  }
4152
3919
 
4153
3920
  .taskon-network-address-row__addr {
4154
- font-size: 14px;
3921
+ font-size: var(--taskon-font-size);
4155
3922
  font-weight: 500;
4156
- line-height: 20px;
3923
+ line-height: 1.43;
4157
3924
  color: var(--taskon-color-text);
4158
3925
  }
4159
3926
 
@@ -4177,7 +3944,7 @@
4177
3944
  }
4178
3945
 
4179
3946
  .taskon-network-address-row__type {
4180
- font-size: 14px;
3947
+ font-size: var(--taskon-font-size);
4181
3948
  font-weight: 400;
4182
3949
  line-height: normal;
4183
3950
  text-transform: capitalize;
@@ -4224,9 +3991,9 @@
4224
3991
  justify-content: center;
4225
3992
  height: 20px;
4226
3993
  padding: 0 var(--taskon-spacing-sm);
4227
- font-size: 11px;
3994
+ font-size: var(--taskon-font-size-sm);
4228
3995
  font-weight: 600;
4229
- line-height: 12px;
3996
+ line-height: 1;
4230
3997
  color: var(--taskon-color-text);
4231
3998
  background-color: var(--taskon-color-border);
4232
3999
  border: none;
@@ -4267,9 +4034,9 @@
4267
4034
  }
4268
4035
 
4269
4036
  .taskon-network-address-input__text {
4270
- font-size: 14px;
4037
+ font-size: var(--taskon-font-size);
4271
4038
  font-weight: 500;
4272
- line-height: 20px;
4039
+ line-height: 1.43;
4273
4040
  color: var(--taskon-color-text);
4274
4041
  }
4275
4042
 
@@ -4281,9 +4048,9 @@
4281
4048
  justify-content: center;
4282
4049
  height: 34px;
4283
4050
  padding: var(--taskon-spacing-sm) var(--taskon-spacing-sm);
4284
- font-size: 14px;
4051
+ font-size: var(--taskon-font-size);
4285
4052
  font-weight: 500;
4286
- line-height: 20px;
4053
+ line-height: 1.43;
4287
4054
  color: var(--taskon-color-text-on-primary);
4288
4055
  background-color: var(--taskon-color-text);
4289
4056
  border: none;
@@ -4308,7 +4075,7 @@
4308
4075
  @media (max-width: 750px) {
4309
4076
  .taskon-network-section__title {
4310
4077
  font-size: 20px;
4311
- line-height: 28px;
4078
+ line-height: 1.4;
4312
4079
  }
4313
4080
 
4314
4081
  .taskon-network-grid {
@@ -4341,7 +4108,7 @@
4341
4108
  }
4342
4109
 
4343
4110
  .taskon-network-address-row__type {
4344
- font-size: 12px;
4111
+ font-size: var(--taskon-font-size-sm);
4345
4112
  }
4346
4113
  }
4347
4114
 
@@ -4358,7 +4125,7 @@
4358
4125
  }
4359
4126
 
4360
4127
  .taskon-identity-section__title {
4361
- font-size: 16px;
4128
+ font-size: var(--taskon-font-size-lg);
4362
4129
  font-weight: 600;
4363
4130
  color: var(--taskon-color-text);
4364
4131
  margin: 0;
@@ -4417,7 +4184,7 @@
4417
4184
  }
4418
4185
 
4419
4186
  .taskon-identity-item__name {
4420
- font-size: 14px;
4187
+ font-size: var(--taskon-font-size);
4421
4188
  font-weight: 500;
4422
4189
  color: var(--taskon-color-text);
4423
4190
  }
@@ -4426,7 +4193,7 @@
4426
4193
  display: flex;
4427
4194
  align-items: center;
4428
4195
  gap: var(--taskon-spacing-xs);
4429
- font-size: 13px;
4196
+ font-size: var(--taskon-font-size-sm);
4430
4197
  color: var(--taskon-color-text-tertiary);
4431
4198
  }
4432
4199
 
@@ -4441,14 +4208,14 @@
4441
4208
  }
4442
4209
 
4443
4210
  .taskon-identity-item__address {
4444
- font-size: 13px;
4211
+ font-size: var(--taskon-font-size-sm);
4445
4212
  }
4446
4213
 
4447
4214
  .taskon-identity-item__badge {
4448
4215
  display: inline-flex;
4449
4216
  align-items: center;
4450
4217
  padding: 2px 6px;
4451
- font-size: 11px;
4218
+ font-size: var(--taskon-font-size-sm);
4452
4219
  font-weight: 500;
4453
4220
  color: var(--taskon-color-link);
4454
4221
  background-color: var(--taskon-color-secondary-bg);
@@ -4466,7 +4233,7 @@
4466
4233
  align-items: center;
4467
4234
  justify-content: center;
4468
4235
  padding: var(--taskon-spacing-sm) var(--taskon-spacing-md);
4469
- font-size: 13px;
4236
+ font-size: var(--taskon-font-size-sm);
4470
4237
  font-weight: 500;
4471
4238
  border-radius: var(--taskon-border-radius);
4472
4239
  border: none;
@@ -4535,17 +4302,17 @@
4535
4302
  }
4536
4303
 
4537
4304
  .taskon-confirm-unlink__title {
4538
- font-size: 18px;
4305
+ font-size: var(--taskon-font-size-xl);
4539
4306
  font-weight: 600;
4540
- line-height: 24px;
4307
+ line-height: 1.33;
4541
4308
  color: var(--taskon-color-text);
4542
4309
  margin: 0;
4543
4310
  }
4544
4311
 
4545
4312
  .taskon-confirm-unlink__description {
4546
- font-size: 14px;
4313
+ font-size: var(--taskon-font-size);
4547
4314
  font-weight: 400;
4548
- line-height: 20px;
4315
+ line-height: 1.43;
4549
4316
  color: var(--taskon-color-text-tertiary);
4550
4317
  margin: 0;
4551
4318
  }
@@ -4563,7 +4330,7 @@
4563
4330
  justify-content: center;
4564
4331
  height: 40px;
4565
4332
  padding: 0 var(--taskon-spacing-md);
4566
- font-size: 14px;
4333
+ font-size: var(--taskon-font-size);
4567
4334
  font-weight: 500;
4568
4335
  border-radius: var(--taskon-border-radius);
4569
4336
  border: none;
@@ -4607,11 +4374,11 @@
4607
4374
  }
4608
4375
  }
4609
4376
 
4610
- @media (max-width: 750px) {
4611
- /* 小屏幕:每行 1 个,全宽 */
4612
- .taskon-identity-social-section__title {
4377
+ @media (max-width: 750px) {
4378
+ /* 小屏幕:每行 1 个,全宽 */
4379
+ .taskon-identity-social-section__title {
4613
4380
  font-size: 20px;
4614
- line-height: 28px;
4381
+ line-height: 1.4;
4615
4382
  }
4616
4383
 
4617
4384
  .taskon-identity-social-item {
@@ -4620,7 +4387,7 @@
4620
4387
  }
4621
4388
 
4622
4389
  .taskon-identity-section__title {
4623
- font-size: 14px;
4390
+ font-size: var(--taskon-font-size);
4624
4391
  }
4625
4392
 
4626
4393
  .taskon-identity-item {
@@ -4631,204 +4398,204 @@
4631
4398
  .taskon-identity-item__icon {
4632
4399
  width: 32px;
4633
4400
  height: 32px;
4634
- font-size: 16px;
4401
+ font-size: var(--taskon-font-size-lg);
4635
4402
  }
4636
4403
 
4637
4404
  .taskon-identity-item__name {
4638
- font-size: 13px;
4405
+ font-size: var(--taskon-font-size-sm);
4639
4406
  }
4640
4407
 
4641
4408
  .taskon-identity-item__value {
4642
- font-size: 12px;
4409
+ font-size: var(--taskon-font-size-sm);
4643
4410
  }
4644
4411
 
4645
- .taskon-identity-btn {
4646
- padding: var(--taskon-spacing-xs) var(--taskon-spacing-sm);
4647
- font-size: 12px;
4648
- min-width: 60px;
4649
- height: 28px;
4650
- }
4412
+ .taskon-identity-btn {
4413
+ padding: var(--taskon-spacing-xs) var(--taskon-spacing-sm);
4414
+ font-size: var(--taskon-font-size-sm);
4415
+ min-width: 60px;
4416
+ height: 28px;
4417
+ }
4651
4418
  }
4652
4419
 
4653
- @media (max-width: 750px) {
4654
- .taskon-user-center {
4655
- gap: var(--taskon-spacing-md);
4656
- padding: var(--taskon-spacing-md);
4657
- border-radius: var(--taskon-border-radius-sm);
4658
- }
4659
-
4660
- .taskon-user-center-content {
4661
- min-height: 0;
4662
- }
4663
-
4664
- .taskon-user-center .taskon-table__header,
4665
- .taskon-user-center .taskon-table__cell {
4666
- padding: var(--taskon-spacing-xs) var(--taskon-spacing-sm);
4667
- font-size: 13px;
4668
- line-height: 18px;
4669
- }
4670
-
4671
- .taskon-user-center .taskon-table__row {
4672
- height: 60px;
4673
- }
4674
-
4675
- .taskon-user-center-pagination {
4676
- margin-top: var(--taskon-spacing-lg);
4677
- }
4678
-
4679
- .taskon-my-rewards {
4680
- gap: var(--taskon-spacing-lg);
4681
- }
4682
-
4683
- .taskon-my-rewards__section {
4684
- gap: var(--taskon-spacing-sm);
4685
- }
4686
-
4687
- .taskon-my-rewards__section-title,
4688
- .taskon-asset-carousel__title,
4689
- .taskon-frozen-assets__title,
4690
- .taskon-xp-level-card__history-title {
4691
- font-size: 14px;
4692
- line-height: 20px;
4693
- }
4694
-
4695
- .taskon-asset-carousel {
4696
- gap: var(--taskon-spacing-sm);
4697
- margin-bottom: var(--taskon-spacing-lg);
4698
- }
4699
-
4700
- .taskon-asset-carousel__container {
4701
- gap: var(--taskon-spacing-xs);
4702
- }
4703
-
4704
- .taskon-asset-card {
4705
- min-width: calc(50% - 4px);
4706
- gap: var(--taskon-spacing-sm);
4707
- padding: var(--taskon-spacing-sm);
4708
- }
4709
-
4710
- .taskon-asset-card__icon,
4711
- .taskon-asset-card__icon-img {
4712
- width: 40px;
4713
- height: 40px;
4714
- }
4715
-
4716
- .taskon-asset-card__value {
4717
- font-size: 16px;
4718
- line-height: 22px;
4719
- }
4720
-
4721
- .taskon-withdraw-pending {
4722
- align-items: flex-start;
4723
- gap: var(--taskon-spacing-sm);
4724
- padding: var(--taskon-spacing-sm) var(--taskon-spacing-md);
4725
- }
4726
-
4727
- .taskon-withdraw-pending__text {
4728
- font-size: 14px;
4729
- white-space: normal;
4730
- }
4731
-
4732
- .taskon-withdraw-pending__count {
4733
- font-size: 12px;
4734
- }
4735
-
4736
- .taskon-token-assets__symbol-cell,
4737
- .taskon-token-assets__network-cell {
4738
- gap: var(--taskon-spacing-xs);
4739
- }
4740
-
4741
- .taskon-token-assets__symbol,
4742
- .taskon-token-assets__chain,
4743
- .taskon-token-assets__balance,
4744
- .taskon-token-assets__frozen-btn {
4745
- font-size: 12px;
4746
- }
4747
-
4748
- .taskon-token-assets__withdraw-btn {
4749
- height: 30px !important;
4750
- padding: var(--taskon-spacing-xs) var(--taskon-spacing-sm) !important;
4751
- font-size: 12px !important;
4752
- }
4753
-
4754
- .taskon-activity-history__campaign-name {
4755
- font-size: 13px;
4756
- line-height: 18px;
4757
- }
4758
-
4759
- .taskon-activity-history__campaign-type {
4760
- font-size: 11px;
4761
- line-height: 14px;
4762
- }
4763
-
4764
- .taskon-activity-history__cell--time {
4765
- font-size: 12px;
4766
- line-height: 16px;
4767
- }
4768
-
4769
- .taskon-reward-detail__row {
4770
- align-items: flex-start;
4771
- flex-wrap: wrap;
4772
- gap: var(--taskon-spacing-sm);
4773
- padding: var(--taskon-spacing-sm);
4774
- }
4775
-
4776
- .taskon-reward-detail__row--nft {
4777
- padding: var(--taskon-spacing-sm);
4778
- }
4779
-
4780
- .taskon-reward-detail__cell--time {
4781
- width: 100%;
4782
- font-size: 12px;
4783
- line-height: 16px;
4784
- white-space: normal;
4785
- }
4786
-
4787
- .taskon-reward-detail__cell--action {
4788
- width: 100%;
4789
- margin-left: 0;
4790
- }
4791
-
4792
- .taskon-reward-detail__claim-btn {
4793
- width: 100%;
4794
- }
4795
-
4796
- .taskon-reward-detail__primary {
4797
- font-size: 13px;
4798
- line-height: 18px;
4799
- }
4800
-
4801
- .taskon-frozen-assets__item {
4802
- align-items: flex-start;
4803
- flex-direction: column;
4804
- gap: var(--taskon-spacing-sm);
4805
- }
4806
-
4807
- .taskon-frozen-assets__resend-btn {
4808
- width: 100%;
4809
- }
4810
-
4811
- .taskon-xp-level-card__header {
4812
- align-items: flex-start;
4813
- flex-direction: column;
4814
- gap: var(--taskon-spacing-sm);
4815
- }
4816
-
4817
- .taskon-xp-level-card__xp {
4818
- align-items: flex-start;
4819
- }
4820
-
4821
- .taskon-xp-level-card__level-badge {
4822
- width: 40px;
4823
- height: 40px;
4824
- font-size: 16px;
4825
- }
4826
-
4827
- .taskon-xp-level-card__level-value {
4828
- font-size: 18px;
4829
- }
4830
-
4831
- .taskon-confirm-unlink__actions {
4832
- flex-direction: column;
4833
- }
4834
- }
4420
+ @media (max-width: 750px) {
4421
+ .taskon-user-center {
4422
+ gap: var(--taskon-spacing-md);
4423
+ padding: var(--taskon-spacing-md);
4424
+ border-radius: var(--taskon-border-radius-sm);
4425
+ }
4426
+
4427
+ .taskon-user-center-content {
4428
+ min-height: 0;
4429
+ }
4430
+
4431
+ .taskon-user-center .taskon-table__header,
4432
+ .taskon-user-center .taskon-table__cell {
4433
+ padding: var(--taskon-spacing-xs) var(--taskon-spacing-sm);
4434
+ font-size: var(--taskon-font-size-sm);
4435
+ line-height: 1.5;
4436
+ }
4437
+
4438
+ .taskon-user-center .taskon-table__row {
4439
+ height: 60px;
4440
+ }
4441
+
4442
+ .taskon-user-center-pagination {
4443
+ margin-top: var(--taskon-spacing-lg);
4444
+ }
4445
+
4446
+ .taskon-my-rewards {
4447
+ gap: var(--taskon-spacing-lg);
4448
+ }
4449
+
4450
+ .taskon-my-rewards__section {
4451
+ gap: var(--taskon-spacing-sm);
4452
+ }
4453
+
4454
+ .taskon-my-rewards__section-title,
4455
+ .taskon-asset-carousel__title,
4456
+ .taskon-frozen-assets__title,
4457
+ .taskon-xp-level-card__history-title {
4458
+ font-size: var(--taskon-font-size);
4459
+ line-height: 1.43;
4460
+ }
4461
+
4462
+ .taskon-asset-carousel {
4463
+ gap: var(--taskon-spacing-sm);
4464
+ margin-bottom: var(--taskon-spacing-lg);
4465
+ }
4466
+
4467
+ .taskon-asset-carousel__container {
4468
+ gap: var(--taskon-spacing-xs);
4469
+ }
4470
+
4471
+ .taskon-asset-card {
4472
+ min-width: calc(50% - 4px);
4473
+ gap: var(--taskon-spacing-sm);
4474
+ padding: var(--taskon-spacing-sm);
4475
+ }
4476
+
4477
+ .taskon-asset-card__icon,
4478
+ .taskon-asset-card__icon-img {
4479
+ width: 40px;
4480
+ height: 40px;
4481
+ }
4482
+
4483
+ .taskon-asset-card__value {
4484
+ font-size: var(--taskon-font-size-lg);
4485
+ line-height: 1.38;
4486
+ }
4487
+
4488
+ .taskon-withdraw-pending {
4489
+ align-items: flex-start;
4490
+ gap: var(--taskon-spacing-sm);
4491
+ padding: var(--taskon-spacing-sm) var(--taskon-spacing-md);
4492
+ }
4493
+
4494
+ .taskon-withdraw-pending__text {
4495
+ font-size: var(--taskon-font-size);
4496
+ white-space: normal;
4497
+ }
4498
+
4499
+ .taskon-withdraw-pending__count {
4500
+ font-size: var(--taskon-font-size-sm);
4501
+ }
4502
+
4503
+ .taskon-token-assets__symbol-cell,
4504
+ .taskon-token-assets__network-cell {
4505
+ gap: var(--taskon-spacing-xs);
4506
+ }
4507
+
4508
+ .taskon-token-assets__symbol,
4509
+ .taskon-token-assets__chain,
4510
+ .taskon-token-assets__balance,
4511
+ .taskon-token-assets__frozen-btn {
4512
+ font-size: var(--taskon-font-size-sm);
4513
+ }
4514
+
4515
+ .taskon-token-assets__withdraw-btn {
4516
+ height: 30px !important;
4517
+ padding: var(--taskon-spacing-xs) var(--taskon-spacing-sm) !important;
4518
+ font-size: var(--taskon-font-size-sm) !important;
4519
+ }
4520
+
4521
+ .taskon-activity-history__campaign-name {
4522
+ font-size: var(--taskon-font-size-sm);
4523
+ line-height: 1.5;
4524
+ }
4525
+
4526
+ .taskon-activity-history__campaign-type {
4527
+ font-size: var(--taskon-font-size-sm);
4528
+ line-height: 1.17;
4529
+ }
4530
+
4531
+ .taskon-activity-history__cell--time {
4532
+ font-size: var(--taskon-font-size-sm);
4533
+ line-height: 1.33;
4534
+ }
4535
+
4536
+ .taskon-reward-detail__row {
4537
+ align-items: flex-start;
4538
+ flex-wrap: wrap;
4539
+ gap: var(--taskon-spacing-sm);
4540
+ padding: var(--taskon-spacing-sm);
4541
+ }
4542
+
4543
+ .taskon-reward-detail__row--nft {
4544
+ padding: var(--taskon-spacing-sm);
4545
+ }
4546
+
4547
+ .taskon-reward-detail__cell--time {
4548
+ width: 100%;
4549
+ font-size: var(--taskon-font-size-sm);
4550
+ line-height: 1.33;
4551
+ white-space: normal;
4552
+ }
4553
+
4554
+ .taskon-reward-detail__cell--action {
4555
+ width: 100%;
4556
+ margin-left: 0;
4557
+ }
4558
+
4559
+ .taskon-reward-detail__claim-btn {
4560
+ width: 100%;
4561
+ }
4562
+
4563
+ .taskon-reward-detail__primary {
4564
+ font-size: var(--taskon-font-size-sm);
4565
+ line-height: 1.5;
4566
+ }
4567
+
4568
+ .taskon-frozen-assets__item {
4569
+ align-items: flex-start;
4570
+ flex-direction: column;
4571
+ gap: var(--taskon-spacing-sm);
4572
+ }
4573
+
4574
+ .taskon-frozen-assets__resend-btn {
4575
+ width: 100%;
4576
+ }
4577
+
4578
+ .taskon-xp-level-card__header {
4579
+ align-items: flex-start;
4580
+ flex-direction: column;
4581
+ gap: var(--taskon-spacing-sm);
4582
+ }
4583
+
4584
+ .taskon-xp-level-card__xp {
4585
+ align-items: flex-start;
4586
+ }
4587
+
4588
+ .taskon-xp-level-card__level-badge {
4589
+ width: 40px;
4590
+ height: 40px;
4591
+ font-size: var(--taskon-font-size-lg);
4592
+ }
4593
+
4594
+ .taskon-xp-level-card__level-value {
4595
+ font-size: var(--taskon-font-size-xl);
4596
+ }
4597
+
4598
+ .taskon-confirm-unlink__actions {
4599
+ flex-direction: column;
4600
+ }
4601
+ }