bidirectional-activity.css 22 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222
  1. /* 双向助力活动页专属样式 */
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. box-sizing: border-box;
  6. -webkit-tap-highlight-color: transparent;
  7. -webkit-touch-callout: none;
  8. -webkit-user-select: none;
  9. user-select: none;
  10. }
  11. html,
  12. body {
  13. background: var(--bex-page-bg-welfare, #0e0e0e);
  14. color: var(--bex-text-primary, #ffffff);
  15. min-height: 100vh;
  16. }
  17. body {
  18. font-family:
  19. "PingFang SC",
  20. -apple-system,
  21. BlinkMacSystemFont,
  22. "Segoe UI",
  23. Roboto,
  24. "Helvetica Neue",
  25. Arial,
  26. sans-serif;
  27. font-size: 14px;
  28. line-height: 1.4;
  29. }
  30. .container {
  31. position: relative;
  32. width: 100%;
  33. min-height: 100vh;
  34. overflow-x: hidden;
  35. padding-bottom: env(safe-area-inset-bottom);
  36. }
  37. /* ===== 遮罩 ===== */
  38. .loading-overlay,
  39. .error-overlay,
  40. .modal-overlay {
  41. position: fixed;
  42. inset: 0;
  43. z-index: 1000;
  44. display: flex;
  45. align-items: center;
  46. justify-content: center;
  47. }
  48. .loading-overlay,
  49. .error-overlay {
  50. background: var(--bex-page-bg-welfare, #0e0e0e);
  51. flex-direction: column;
  52. gap: 16px;
  53. }
  54. .loading-spinner {
  55. width: 40px;
  56. height: 40px;
  57. border: 3px solid var(--bex-border, #2c2c2c);
  58. border-top-color: var(--bex-brand, #fd6f23);
  59. border-radius: 50%;
  60. animation: spin 1s linear infinite;
  61. }
  62. @keyframes spin {
  63. to {
  64. transform: rotate(360deg);
  65. }
  66. }
  67. .loading-text,
  68. .error-text {
  69. color: var(--bex-text-secondary, #888888);
  70. font-size: 14px;
  71. }
  72. .error-content {
  73. display: flex;
  74. flex-direction: column;
  75. align-items: center;
  76. gap: 24px;
  77. padding: 32px;
  78. text-align: center;
  79. }
  80. .error-actions {
  81. display: flex;
  82. gap: 12px;
  83. }
  84. .error-retry {
  85. padding: 12px 32px;
  86. background: #ffffff;
  87. border: none;
  88. border-radius: 8px;
  89. color: #121212;
  90. font-size: 14px;
  91. font-weight: 500;
  92. cursor: pointer;
  93. }
  94. .modal-overlay {
  95. background: rgba(0, 0, 0, 0.8);
  96. align-items: flex-end;
  97. padding: 0;
  98. }
  99. .modal-overlay.centered {
  100. align-items: center;
  101. padding: 24px;
  102. }
  103. /* ===== 底部面板 ===== */
  104. .modal-panel {
  105. width: 100%;
  106. max-height: 80vh;
  107. background: var(--bex-page-bg-welfare, #0e0e0e);
  108. border-radius: 16px 16px 0 0;
  109. display: flex;
  110. flex-direction: column;
  111. overflow: hidden;
  112. animation: slideUp 0.25s ease-out;
  113. }
  114. .modal-panel.panel-auto {
  115. max-height: none;
  116. }
  117. .modal-panel.panel-unified {
  118. height: 80vh;
  119. max-height: 90vh;
  120. }
  121. .panel-drag-handle {
  122. width: 32px;
  123. height: 4px;
  124. background: #2f2f2f;
  125. border-radius: 40px;
  126. margin: 8px auto 0;
  127. flex-shrink: 0;
  128. }
  129. .panel-tab-bar {
  130. display: flex;
  131. align-items: flex-end;
  132. padding: 12px 16px 0;
  133. border-bottom: 1px solid #282828;
  134. position: relative;
  135. flex-shrink: 0;
  136. }
  137. .panel-tab {
  138. flex: 1;
  139. text-align: center;
  140. font-family:
  141. "PingFang SC",
  142. -apple-system,
  143. BlinkMacSystemFont,
  144. sans-serif;
  145. font-size: 16px;
  146. font-weight: 600;
  147. color: var(--bex-text-secondary, #888888);
  148. padding-bottom: 12px;
  149. cursor: pointer;
  150. position: relative;
  151. }
  152. .panel-tab.active {
  153. color: var(--bex-text-primary, #ffffff);
  154. }
  155. .panel-tab.active::after {
  156. content: "";
  157. position: absolute;
  158. bottom: -1px;
  159. left: 50%;
  160. transform: translateX(-50%);
  161. width: 14px;
  162. height: 2px;
  163. background: var(--bex-brand, #fd6f23);
  164. border-radius: 2px;
  165. }
  166. .panel-tab-line {
  167. position: absolute;
  168. bottom: 0;
  169. left: 0;
  170. right: 0;
  171. height: 1px;
  172. background: #282828;
  173. }
  174. .panel-body {
  175. flex: 1;
  176. overflow-y: auto;
  177. padding: 16px;
  178. -webkit-overflow-scrolling: touch;
  179. }
  180. /* ===== 居中弹窗卡片 ===== */
  181. .modal-card {
  182. width: 100%;
  183. max-width: 300px;
  184. background: #0f0f0f;
  185. border: 1px solid #191919;
  186. border-radius: 8px;
  187. padding: 24px 16px 16px;
  188. text-align: center;
  189. animation: fadeIn 0.2s ease-out;
  190. }
  191. .modal-card .modal-card-desc {
  192. color: var(--bex-text-secondary, #888888);
  193. font-size: 13px;
  194. margin-bottom: 16px;
  195. }
  196. .modal-checkmark {
  197. width: 44px;
  198. height: 44px;
  199. margin: 0 auto 16px;
  200. border-radius: 50%;
  201. display: flex;
  202. align-items: center;
  203. justify-content: center;
  204. position: relative;
  205. }
  206. .modal-card-title {
  207. font-family:
  208. "PingFang SC",
  209. -apple-system,
  210. BlinkMacSystemFont,
  211. sans-serif;
  212. font-size: 14px;
  213. font-weight: 600;
  214. color: #ffffff;
  215. margin-bottom: 16px;
  216. }
  217. .modal-amount-card {
  218. display: inline-block;
  219. background: #161616;
  220. border-radius: 6px;
  221. padding: 13px 36px;
  222. margin-bottom: 16px;
  223. }
  224. .modal-amount-text {
  225. font-family:
  226. "PingFang SC",
  227. -apple-system,
  228. BlinkMacSystemFont,
  229. sans-serif;
  230. font-size: 20px;
  231. font-weight: 600;
  232. }
  233. .modal-amount-text .highlight {
  234. color: var(--bex-brand, #fd6f23);
  235. }
  236. .modal-amount-text .white {
  237. color: #ffffff;
  238. }
  239. .modal-card-btn {
  240. width: 100%;
  241. height: 42px;
  242. background: #ffffff;
  243. border: none;
  244. border-radius: 8px;
  245. font-family:
  246. "PingFang SC",
  247. -apple-system,
  248. BlinkMacSystemFont,
  249. sans-serif;
  250. font-size: 14px;
  251. font-weight: 500;
  252. color: #121212;
  253. cursor: pointer;
  254. }
  255. @keyframes slideUp {
  256. from {
  257. transform: translateY(100%);
  258. }
  259. to {
  260. transform: translateY(0);
  261. }
  262. }
  263. @keyframes fadeIn {
  264. from {
  265. opacity: 0;
  266. transform: scale(0.96);
  267. }
  268. to {
  269. opacity: 1;
  270. transform: scale(1);
  271. }
  272. }
  273. /* ===== 主页 ===== */
  274. .main-view {
  275. position: relative;
  276. z-index: 1;
  277. padding: 0 16px 20px;
  278. /* min-height: 100vh; */
  279. }
  280. .hero-decor {
  281. z-index: 0;
  282. pointer-events: none;
  283. position: absolute;
  284. }
  285. .hero-decor.bg-round {
  286. right: -80px;
  287. bottom: 0;
  288. width: 280px;
  289. height: 280px;
  290. opacity: 0.4;
  291. }
  292. .hero-decor.tokenomics-left {
  293. right: -20px;
  294. top: 0px;
  295. width: 157px;
  296. opacity: 0.8;
  297. }
  298. .hero-decor.coin {
  299. left: 50%;
  300. transform: translateX(-50%);
  301. top: 24px;
  302. width: 193px;
  303. opacity: 0.9;
  304. }
  305. .hero-content {
  306. position: relative;
  307. z-index: 1;
  308. padding-top: 252px;
  309. }
  310. .hero-title {
  311. font-family:
  312. "PingFang SC",
  313. -apple-system,
  314. BlinkMacSystemFont,
  315. "Segoe UI",
  316. Roboto,
  317. sans-serif;
  318. font-size: 26px;
  319. font-weight: 600;
  320. line-height: 1.38;
  321. color: var(--bex-text-primary, #ffffff);
  322. text-align: center;
  323. margin-bottom: 24px;
  324. }
  325. .hero-title .highlight {
  326. color: var(--bex-brand, #fd6f23);
  327. }
  328. .hero-subtitle {
  329. display: none;
  330. }
  331. /* ===== 倒计时 ===== */
  332. .countdown-card {
  333. display: flex;
  334. flex-direction: column;
  335. align-items: center;
  336. justify-content: center;
  337. width: 254px;
  338. margin: 0 auto 32px;
  339. height: 62px;
  340. }
  341. .countdown-label {
  342. font-size: 12px;
  343. font-weight: 400;
  344. font-family:
  345. "PingFang SC",
  346. -apple-system,
  347. BlinkMacSystemFont,
  348. sans-serif;
  349. color: var(--bex-text-secondary, #888888);
  350. margin-bottom: 10px;
  351. }
  352. .countdown-row {
  353. display: flex;
  354. align-items: center;
  355. gap: 0;
  356. }
  357. .countdown-num {
  358. display: flex;
  359. align-items: center;
  360. justify-content: center;
  361. padding: 0 10px;
  362. height: 40px;
  363. background: var(--bex-card-bg-dark, #1f1f1f);
  364. border-radius: 6px;
  365. font-family:
  366. "HarmonyOS Sans",
  367. "DIN Alternate",
  368. "SF Pro Display",
  369. -apple-system,
  370. BlinkMacSystemFont,
  371. sans-serif;
  372. font-size: 17px;
  373. font-weight: 700;
  374. color: var(--bex-text-primary, #ffffff);
  375. text-align: center;
  376. line-height: 1;
  377. }
  378. .countdown-sep {
  379. width: 16px;
  380. text-align: center;
  381. font-size: 14px;
  382. color: var(--bex-text-secondary, #888888);
  383. }
  384. .countdown-unit {
  385. font-size: 14px;
  386. color: var(--bex-text-secondary, #888888);
  387. margin-left: 6px;
  388. }
  389. /* ===== 双按钮 ===== */
  390. .btn-row {
  391. display: flex;
  392. flex-direction: column;
  393. gap: 14px;
  394. margin-bottom: 16px;
  395. padding: 0;
  396. }
  397. .btn {
  398. width: 100%;
  399. height: 42px;
  400. border: none;
  401. border-radius: 8px;
  402. font-size: 14px;
  403. font-weight: 500;
  404. font-family:
  405. "PingFang SC",
  406. -apple-system,
  407. BlinkMacSystemFont,
  408. sans-serif;
  409. display: flex;
  410. align-items: center;
  411. justify-content: center;
  412. cursor: pointer;
  413. transition: opacity 0.2s;
  414. }
  415. .btn:disabled {
  416. opacity: 0.5;
  417. cursor: not-allowed;
  418. }
  419. .btn-icon {
  420. width: 14px;
  421. height: 14px;
  422. margin-right: 6px;
  423. flex-shrink: 0;
  424. }
  425. .btn-primary {
  426. background: #ffffff;
  427. color: #121212;
  428. }
  429. .btn-primary .highlight {
  430. color: var(--bex-brand, #fd6f23);
  431. }
  432. .btn-outline {
  433. background: transparent;
  434. color: var(--bex-text-primary, #ffffff);
  435. border: 1px solid #292929;
  436. }
  437. .btn-ghost {
  438. background: transparent;
  439. color: var(--bex-text-primary, #ffffff);
  440. }
  441. /* ===== 底部操作行(纵向卡片列表) ===== */
  442. .action-grid {
  443. display: flex;
  444. flex-direction: column;
  445. gap: 16px;
  446. margin-bottom: 12px;
  447. }
  448. .action-item {
  449. width: 100%;
  450. height: 52px;
  451. background: var(--bex-action-bg, rgba(255, 255, 255, 0.03));
  452. border: 1px solid var(--bex-action-border, #292929);
  453. border-radius: 8px;
  454. display: flex;
  455. align-items: center;
  456. padding: 0 16px;
  457. font-size: 14px;
  458. font-weight: 500;
  459. line-height: 14px;
  460. font-family:
  461. "PingFang SC",
  462. -apple-system,
  463. BlinkMacSystemFont,
  464. sans-serif;
  465. color: var(--bex-text-primary, #ffffff);
  466. cursor: pointer;
  467. position: relative;
  468. }
  469. .action-item-icon {
  470. width: 20px;
  471. height: 20px;
  472. margin-right: 8px;
  473. flex-shrink: 0;
  474. }
  475. .action-item-arrow {
  476. width: 18px;
  477. height: 18px;
  478. flex-shrink: 0;
  479. margin-left: auto;
  480. opacity: 0.5;
  481. }
  482. /* ===== 最近参与 ticker(页面顶部) ===== */
  483. .recent-ticker {
  484. width: 100%;
  485. height: 36px;
  486. background: rgba(255, 255, 255, 0.03);
  487. overflow: hidden;
  488. display: flex;
  489. align-items: center;
  490. font-size: 12px;
  491. font-weight: 400;
  492. color: var(--bex-text-secondary, #888888);
  493. position: relative;
  494. z-index: 2;
  495. flex-shrink: 0;
  496. }
  497. .ticker-list {
  498. display: flex;
  499. align-items: center;
  500. gap: 32px;
  501. padding: 0 12px;
  502. white-space: nowrap;
  503. animation: ticker-scroll 240s linear infinite;
  504. }
  505. .ticker-item {
  506. display: flex;
  507. align-items: center;
  508. gap: 4px;
  509. flex-shrink: 0;
  510. font-size: 12px;
  511. line-height: 17px;
  512. color: var(--bex-text-secondary, #888888);
  513. }
  514. @keyframes ticker-scroll {
  515. 0% {
  516. transform: translateX(0);
  517. }
  518. 100% {
  519. transform: translateX(-50%);
  520. }
  521. }
  522. .ticker-avatar {
  523. width: 14px;
  524. height: 14px;
  525. border-radius: 50%;
  526. flex-shrink: 0;
  527. border: 1px solid #d0d0d0;
  528. overflow: hidden;
  529. position: relative;
  530. }
  531. .ticker-avatar::after {
  532. content: "";
  533. position: absolute;
  534. inset: 0;
  535. border-radius: 50%;
  536. box-shadow: inset 0 0 0 0.5px rgba(106, 106, 106, 0.49);
  537. pointer-events: none;
  538. }
  539. .ticker-avatar img {
  540. width: 100%;
  541. height: 100%;
  542. object-fit: cover;
  543. }
  544. .ticker-item .highlight {
  545. color: var(--bex-brand, #fd6f23);
  546. }
  547. /* ===== 邀请列表 ===== */
  548. .invite-stats {
  549. display: flex;
  550. gap: 8px;
  551. margin-bottom: 16px;
  552. }
  553. .stat-card {
  554. flex: 1;
  555. background: var(--bex-card-bg-action, rgba(255, 255, 255, 0.05));
  556. border-radius: 8px;
  557. padding: 12px 16px;
  558. display: flex;
  559. flex-direction: column;
  560. }
  561. .stat-value {
  562. font-family:
  563. "HarmonyOS Sans",
  564. "DIN Alternate",
  565. "SF Pro Display",
  566. -apple-system,
  567. BlinkMacSystemFont,
  568. sans-serif;
  569. font-size: 28px;
  570. font-weight: 700;
  571. color: var(--bex-text-primary, #ffffff);
  572. line-height: 1;
  573. }
  574. .stat-value.brand {
  575. color: var(--bex-brand, #fd6f23);
  576. }
  577. .stat-unit {
  578. font-size: 14px;
  579. font-weight: 400;
  580. color: var(--bex-text-primary, #ffffff);
  581. margin-left: 2px;
  582. }
  583. .stat-unit.brand {
  584. color: var(--bex-brand, #fd6f23);
  585. }
  586. .stat-label {
  587. font-size: 12px;
  588. font-weight: 400;
  589. color: var(--bex-text-secondary, #888888);
  590. margin-top: 4px;
  591. margin-bottom: 4px;
  592. }
  593. /* ===== 筛选标签 ===== */
  594. .filter-tabs {
  595. display: flex;
  596. gap: 8px;
  597. overflow-x: auto;
  598. padding-bottom: 8px;
  599. margin-bottom: 12px;
  600. -webkit-overflow-scrolling: touch;
  601. scrollbar-width: none;
  602. }
  603. .filter-tabs::-webkit-scrollbar {
  604. display: none;
  605. }
  606. .filter-tab {
  607. flex-shrink: 0;
  608. padding: 5px 10px;
  609. border-radius: 4px;
  610. font-size: 12px;
  611. font-weight: 400;
  612. color: var(--bex-text-secondary, #888888);
  613. cursor: pointer;
  614. border: none;
  615. background: transparent;
  616. }
  617. .filter-tab.active {
  618. background: rgba(255, 255, 255, 0.1);
  619. color: var(--bex-text-primary, #ffffff);
  620. font-weight: 500;
  621. }
  622. /* ===== 列表项 ===== */
  623. .divider-line {
  624. height: 1px;
  625. background: #1f1f1f;
  626. margin: 0;
  627. }
  628. .list-item {
  629. display: flex;
  630. align-items: center;
  631. padding: 12px 0;
  632. position: relative;
  633. }
  634. .list-item .list-item-divider {
  635. position: absolute;
  636. bottom: 0;
  637. left: 52px;
  638. right: 0;
  639. height: 1px;
  640. background: #1f1f1f;
  641. }
  642. .avatar {
  643. width: 40px;
  644. height: 40px;
  645. border-radius: 50%;
  646. /* background: var(--bex-border, #1f1f1f); */
  647. border: 1px solid var(--bex-border, #1f1f1f);
  648. display: flex;
  649. align-items: center;
  650. justify-content: center;
  651. font-size: 14px;
  652. font-weight: 600;
  653. color: var(--bex-text-primary, #ffffff);
  654. overflow: hidden;
  655. flex-shrink: 0;
  656. margin-right: 12px;
  657. }
  658. .avatar img {
  659. width: 100%;
  660. height: 100%;
  661. object-fit: cover;
  662. }
  663. .list-info {
  664. flex: 1;
  665. min-width: 0;
  666. }
  667. .list-name {
  668. font-size: 14px;
  669. font-weight: 500;
  670. color: var(--bex-text-primary, #ffffff);
  671. overflow: hidden;
  672. text-overflow: ellipsis;
  673. white-space: nowrap;
  674. margin-bottom: 2px;
  675. }
  676. .list-time {
  677. font-size: 12px;
  678. font-weight: 400;
  679. color: var(--bex-text-secondary, #888888);
  680. }
  681. .status-tag {
  682. flex-shrink: 0;
  683. font-size: 14px;
  684. font-weight: 500;
  685. margin-left: 8px;
  686. }
  687. .status-valid {
  688. color: #23bb6e;
  689. }
  690. .status-pending {
  691. color: var(--bex-brand, #fd6f23);
  692. }
  693. .status-not-qualified {
  694. color: var(--bex-text-secondary, #888888);
  695. }
  696. /* ===== 奖励记录列表 ===== */
  697. .reward-row {
  698. display: flex;
  699. align-items: center;
  700. padding: 12px 0;
  701. position: relative;
  702. cursor: pointer;
  703. }
  704. .reward-row .list-item-divider {
  705. position: absolute;
  706. bottom: 0;
  707. left: 0;
  708. right: 0;
  709. height: 1px;
  710. background: #1f1f1f;
  711. }
  712. .reward-left {
  713. flex: 1;
  714. min-width: 0;
  715. }
  716. .reward-amount-text {
  717. font-family:
  718. "PingFang SC",
  719. -apple-system,
  720. BlinkMacSystemFont,
  721. sans-serif;
  722. font-size: 14px;
  723. font-weight: 500;
  724. line-height: 16px;
  725. }
  726. .reward-amount-text .highlight {
  727. color: var(--bex-brand, #fd6f23);
  728. }
  729. .reward-amount-text .white {
  730. color: var(--bex-text-primary, #ffffff);
  731. }
  732. .reward-date {
  733. font-size: 12px;
  734. font-weight: 400;
  735. color: var(--bex-text-secondary, #888888);
  736. margin-top: 4px;
  737. }
  738. .reward-right {
  739. display: flex;
  740. align-items: center;
  741. gap: 4px;
  742. flex-shrink: 0;
  743. }
  744. .reward-status-text {
  745. font-size: 14px;
  746. font-weight: 500;
  747. color: var(--bex-text-secondary, #888888);
  748. }
  749. .reward-status-text.pending {
  750. color: var(--bex-brand, #fd6f23);
  751. }
  752. .reward-chevron {
  753. width: 12px;
  754. height: 12px;
  755. display: flex;
  756. align-items: center;
  757. justify-content: center;
  758. color: var(--bex-text-secondary, #888888);
  759. font-size: 12px;
  760. }
  761. .empty-state {
  762. padding: 56px 16px;
  763. text-align: center;
  764. color: var(--bex-text-secondary, #888888);
  765. font-size: 12px;
  766. }
  767. .empty-icon {
  768. width: 64px;
  769. height: 64px;
  770. margin: 0 auto 6px;
  771. display: block;
  772. }
  773. .load-more {
  774. text-align: center;
  775. padding: 16px;
  776. color: var(--bex-text-secondary, #888888);
  777. font-size: 12px;
  778. font-weight: 400;
  779. }
  780. /* ===== 邀请分享底部弹窗 ===== */
  781. .invite-sheet-body {
  782. padding: 12px 16px 32px;
  783. }
  784. .invite-sheet-title {
  785. font-size: 16px;
  786. font-weight: 600;
  787. color: var(--bex-text-primary, #ffffff);
  788. text-align: center;
  789. margin-bottom: 20px;
  790. font-family:
  791. "HarmonyOS Sans",
  792. "PingFang SC",
  793. -apple-system,
  794. BlinkMacSystemFont,
  795. sans-serif;
  796. }
  797. .invite-sheet-card {
  798. background: var(--bex-card-bg-dark, #1f1f1f);
  799. border-radius: 8px;
  800. padding: 12px;
  801. margin-bottom: 12px;
  802. }
  803. .invite-sheet-card-title {
  804. font-size: 14px;
  805. font-weight: 600;
  806. color: var(--bex-text-primary, #ffffff);
  807. margin-bottom: 8px;
  808. font-family:
  809. "HarmonyOS Sans",
  810. "PingFang SC",
  811. -apple-system,
  812. BlinkMacSystemFont,
  813. sans-serif;
  814. }
  815. .invite-sheet-card-row {
  816. display: flex;
  817. align-items: end;
  818. gap: 8px;
  819. }
  820. .invite-sheet-plan-content {
  821. flex: 1;
  822. min-width: 0;
  823. display: flex;
  824. flex-direction: column;
  825. gap: 2px;
  826. }
  827. .invite-sheet-card-desc {
  828. font-size: 12px;
  829. color: var(--bex-text-secondary, #888888);
  830. overflow: hidden;
  831. text-overflow: ellipsis;
  832. white-space: nowrap;
  833. }
  834. .invite-sheet-link {
  835. flex: 1;
  836. font-size: 12px;
  837. color: var(--bex-text-secondary, #888888);
  838. overflow: hidden;
  839. text-overflow: ellipsis;
  840. white-space: nowrap;
  841. }
  842. .invite-sheet-link.secondary {
  843. color: var(--bex-text-secondary, #686868);
  844. }
  845. .invite-sheet-copy-btn {
  846. flex-shrink: 0;
  847. background: transparent;
  848. border: none;
  849. cursor: pointer;
  850. display: flex;
  851. align-items: center;
  852. justify-content: center;
  853. padding: 0;
  854. border-radius: 4px;
  855. }
  856. .invite-sheet-copy-btn:active {
  857. opacity: 0.6;
  858. }
  859. /* ===== 规则 ===== */
  860. .rule-content {
  861. text-align: left;
  862. font-size: 14px;
  863. line-height: 1.6;
  864. color: var(--bex-text-secondary, #888888);
  865. white-space: pre-wrap;
  866. max-height: 300px;
  867. overflow-y: scroll;
  868. overflow-x: hidden;
  869. }
  870. /* ===== 关联用户弹窗(在统一面板之上) ===== */
  871. .reward-users-overlay {
  872. position: fixed;
  873. inset: 0;
  874. background: rgba(0, 0, 0, 0.5);
  875. z-index: 1500;
  876. display: flex;
  877. flex-direction: column;
  878. justify-content: flex-end;
  879. }
  880. .reward-users-panel {
  881. background: var(--bex-panel-bg, #0e0e0e);
  882. border-radius: 20px 20px 0 0;
  883. max-height: 70vh;
  884. height: 60vh;
  885. display: flex;
  886. flex-direction: column;
  887. }
  888. .reward-users-panel .panel-drag-handle {
  889. width: 32px;
  890. height: 4px;
  891. background: #2f2f2f;
  892. border-radius: 40px;
  893. margin: 8px auto 0;
  894. }
  895. .reward-users-panel .reward-users-title {
  896. font-size: 16px;
  897. font-weight: 600;
  898. font-family: "PingFang SC", sans-serif;
  899. text-align: left;
  900. padding: 12px 16px 16px;
  901. color: var(--bex-text-primary, #ffffff);
  902. }
  903. .reward-users-panel .reward-users-body {
  904. flex: 1;
  905. overflow-y: auto;
  906. padding: 0 16px 16px;
  907. }
  908. .reward-users-item {
  909. display: flex;
  910. align-items: center;
  911. gap: 10px;
  912. padding: 10px 0;
  913. position: relative;
  914. }
  915. .reward-users-item + .reward-users-item::before {
  916. content: "";
  917. position: absolute;
  918. top: 0;
  919. left: 0;
  920. right: 0;
  921. border-top: 1px solid var(--bex-divider, #1f1f1f);
  922. }
  923. .reward-users-item .reward-users-avatar {
  924. width: 40px;
  925. height: 40px;
  926. border-radius: 50%;
  927. flex-shrink: 0;
  928. background: #7e7e7e;
  929. border: 1px solid #d0d0d0;
  930. overflow: hidden;
  931. position: relative;
  932. }
  933. .reward-users-item .reward-users-avatar::after {
  934. content: "";
  935. position: absolute;
  936. inset: 0;
  937. border-radius: 50%;
  938. box-shadow: inset 0 0 0 0.5px rgba(106, 106, 106, 0.49);
  939. pointer-events: none;
  940. }
  941. .reward-users-item .reward-users-avatar img {
  942. width: 100%;
  943. height: 100%;
  944. object-fit: cover;
  945. }
  946. .reward-users-item .reward-users-info {
  947. flex: 1;
  948. min-width: 0;
  949. }
  950. .reward-users-item .reward-users-name {
  951. font-size: 14px;
  952. font-weight: 500;
  953. line-height: 16px;
  954. color: var(--bex-text-primary, #ffffff);
  955. margin-bottom: 4px;
  956. }
  957. .reward-users-item .reward-users-time {
  958. font-size: 12px;
  959. color: var(--bex-text-secondary, #888888);
  960. }
  961. /* 浅色主题 */
  962. html.theme-light .reward-users-overlay {
  963. background: rgba(0, 0, 0, 0.3);
  964. }
  965. html.theme-light .reward-users-panel {
  966. background: #ffffff;
  967. }
  968. html.theme-light .reward-users-panel .panel-drag-handle {
  969. background: #d0d0d0;
  970. }
  971. html.theme-light .reward-users-panel .reward-users-title {
  972. color: #0e0e0e;
  973. }
  974. html.theme-light .reward-users-item .reward-users-name {
  975. color: #0e0e0e;
  976. }
  977. html.theme-light .reward-users-item + .reward-users-item::before {
  978. border-color: #e5e5e5;
  979. }
  980. /* ===== Toast ===== */
  981. .toast {
  982. position: fixed;
  983. left: 50%;
  984. bottom: 80px;
  985. transform: translateX(-50%);
  986. background: rgba(0, 0, 0, 0.85);
  987. color: #ffffff;
  988. padding: 10px 20px;
  989. border-radius: 20px;
  990. font-size: 14px;
  991. z-index: 2000;
  992. opacity: 0;
  993. transition: opacity 0.3s;
  994. pointer-events: none;
  995. }
  996. .toast.show {
  997. opacity: 1;
  998. }
  999. /* ===== 浅色主题 ===== */
  1000. /* 页面背景 */
  1001. html.theme-light .container {
  1002. background: #ffffff;
  1003. }
  1004. /* 面板背景 */
  1005. html.theme-light .modal-panel {
  1006. background: #ffffff;
  1007. }
  1008. html.theme-light .panel-drag-handle {
  1009. background: #e6e6e6;
  1010. }
  1011. /* 主按钮:深色底白字 */
  1012. html.theme-light .btn-primary {
  1013. background: #121212;
  1014. color: #ffffff;
  1015. }
  1016. /* 描边按钮:浅灰边框深色字 */
  1017. html.theme-light .btn-outline {
  1018. border-color: #e8e8e8;
  1019. color: #121212;
  1020. }
  1021. /* 错误重试按钮 */
  1022. html.theme-light .error-retry {
  1023. background: #121212;
  1024. color: #ffffff;
  1025. }
  1026. /* ===== 居中弹窗卡片 ===== */
  1027. html.theme-light .modal-card {
  1028. background: #ffffff;
  1029. border-color: #e8e8e8;
  1030. }
  1031. html.theme-light .modal-card-title,
  1032. html.theme-light .modal-amount-text .white {
  1033. color: #121212;
  1034. }
  1035. html.theme-light .modal-amount-card {
  1036. background: #f3f3f3;
  1037. }
  1038. html.theme-light .modal-card-btn {
  1039. background: #121212;
  1040. color: #ffffff;
  1041. }
  1042. html.theme-light .modal-card-desc {
  1043. color: #888888;
  1044. }
  1045. /* ===== 操作区(纵向卡片列表) ===== */
  1046. html.theme-light .action-item {
  1047. background: #ffffff;
  1048. border-color: #e8e8e8;
  1049. }
  1050. html.theme-light .action-item:hover {
  1051. background: #f5f5f5;
  1052. }
  1053. /* ===== 统一面板 Tab ===== */
  1054. html.theme-light .panel-tab-bar {
  1055. border-bottom-color: #efefef;
  1056. }
  1057. html.theme-light .panel-tab {
  1058. color: #888888;
  1059. }
  1060. html.theme-light .panel-tab.active {
  1061. color: #121212;
  1062. }
  1063. html.theme-light .panel-tab.active::after {
  1064. background: #fd6f23;
  1065. }
  1066. /* ===== 邀请列表 ===== */
  1067. html.theme-light .stat-card {
  1068. background: #ffffff;
  1069. border: 1px solid #e8e8e8;
  1070. }
  1071. html.theme-light .stat-label {
  1072. color: #888888;
  1073. }
  1074. html.theme-light .stat-value {
  1075. color: #121212;
  1076. }
  1077. html.theme-light .stat-value.brand {
  1078. color: #fd6f23;
  1079. }
  1080. html.theme-light .stat-unit,
  1081. html.theme-light .stat-unit.brand {
  1082. color: #888888;
  1083. }
  1084. /* 筛选标签 */
  1085. html.theme-light .filter-tab {
  1086. color: #888888;
  1087. }
  1088. html.theme-light .filter-tab.active {
  1089. background: rgba(18, 18, 18, 0.06);
  1090. color: #121212;
  1091. }
  1092. /* 列表项 */
  1093. html.theme-light .list-item-avatar {
  1094. background: #7e7e7e;
  1095. border-color: #d0d0d0;
  1096. }
  1097. html.theme-light .list-item-name {
  1098. color: #121212;
  1099. }
  1100. html.theme-light .list-item-time {
  1101. color: #888888;
  1102. }
  1103. html.theme-light .list-item-divider {
  1104. background: #efefef;
  1105. }
  1106. /* 状态标签 */
  1107. html.theme-light .status-valid {
  1108. color: #1a9c5a;
  1109. }
  1110. html.theme-light .status-pending {
  1111. color: #d45a1a;
  1112. }
  1113. html.theme-light .status-claimed {
  1114. color: #888888;
  1115. }
  1116. /* ===== 奖励记录 ===== */
  1117. html.theme-light .reward-amount-text .white {
  1118. color: #121212;
  1119. }
  1120. html.theme-light .reward-date {
  1121. color: #888888;
  1122. }
  1123. html.theme-light .reward-status-text {
  1124. color: #888888;
  1125. }
  1126. html.theme-light .reward-status-text.pending {
  1127. color: #fd6f23;
  1128. }
  1129. /* ===== 邀请分享弹窗 ===== */
  1130. html.theme-light .invite-sheet-title {
  1131. color: #121212;
  1132. }
  1133. html.theme-light .invite-sheet-card {
  1134. background: #f3f3f3;
  1135. }
  1136. html.theme-light .invite-sheet-card-title {
  1137. color: #121212;
  1138. }
  1139. html.theme-light .invite-sheet-card-desc {
  1140. color: #888888;
  1141. }
  1142. html.theme-light .invite-sheet-link {
  1143. color: #888888;
  1144. }
  1145. html.theme-light .invite-sheet-link.secondary {
  1146. color: #888888;
  1147. }
  1148. html.theme-light .invite-sheet-copy-btn svg path {
  1149. stroke: #121212;
  1150. }
  1151. /* ===== 分割线 ===== */
  1152. html.theme-light .divider-line,
  1153. html.theme-light .list-item-divider {
  1154. background: #efefef;
  1155. }
  1156. /* ===== Ticker ===== */
  1157. html.theme-light .recent-ticker {
  1158. background: rgba(0, 0, 0, 0.03);
  1159. }
  1160. html.theme-light .ticker-avatar {
  1161. border-color: #d0d0d0;
  1162. }
  1163. html.theme-light .ticker-item {
  1164. color: #888888;
  1165. }