map.wxss 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293
  1. .page {
  2. height: 100vh;
  3. position: relative;
  4. overflow: hidden;
  5. background: #dbeed4;
  6. color: #163020;
  7. }
  8. .app-edge-glow {
  9. position: absolute;
  10. inset: 0;
  11. border-radius: 0;
  12. pointer-events: none;
  13. z-index: 40;
  14. }
  15. .app-edge-glow--orange {
  16. animation: app-edge-breathe-orange 1.55s ease-in-out infinite;
  17. }
  18. .app-edge-glow--red {
  19. animation: app-edge-breathe-red 1.15s ease-in-out infinite;
  20. }
  21. .map-stage {
  22. position: absolute;
  23. inset: 0;
  24. overflow: hidden;
  25. background: #dbeed4;
  26. }
  27. .map-content {
  28. position: absolute;
  29. inset: 0;
  30. }
  31. .map-canvas {
  32. position: absolute;
  33. inset: 0;
  34. width: 100%;
  35. height: 100%;
  36. display: block;
  37. }
  38. .map-canvas--base {
  39. z-index: 1;
  40. }
  41. .map-canvas--labels {
  42. z-index: 2;
  43. pointer-events: none;
  44. }
  45. .map-stage__map-pulse {
  46. position: absolute;
  47. width: 44rpx;
  48. height: 44rpx;
  49. margin-left: -22rpx;
  50. margin-top: -22rpx;
  51. border-radius: 50%;
  52. pointer-events: none;
  53. z-index: 6;
  54. }
  55. .map-stage__map-pulse--control {
  56. animation: map-pulse-control 0.82s ease-out 1;
  57. }
  58. .map-stage__map-pulse--ready {
  59. animation: map-pulse-ready 0.72s ease-out 1;
  60. }
  61. .map-stage__map-pulse--finish {
  62. animation: map-pulse-finish 0.82s ease-out 1;
  63. }
  64. .map-stage__stage-fx {
  65. position: absolute;
  66. inset: 0;
  67. pointer-events: none;
  68. z-index: 5;
  69. }
  70. .map-stage__stage-fx--finish {
  71. animation: stage-fx-finish 0.76s ease-out 1;
  72. }
  73. .map-stage__stage-fx--control {
  74. animation: stage-fx-control 0.52s ease-out 1;
  75. }
  76. .map-stage__overlay {
  77. position: absolute;
  78. inset: 0;
  79. display: flex;
  80. flex-direction: column;
  81. justify-content: flex-end;
  82. padding: 0 24rpx 248rpx;
  83. box-sizing: border-box;
  84. pointer-events: none;
  85. z-index: 4;
  86. }
  87. .map-stage__overlay-center-layer {
  88. position: absolute;
  89. inset: 0;
  90. pointer-events: none;
  91. z-index: 4;
  92. }
  93. .center-scale-ruler {
  94. position: absolute;
  95. width: 220rpx;
  96. transform: translate(-50%, -100%);
  97. pointer-events: none;
  98. z-index: 12;
  99. }
  100. .center-scale-ruler__axis {
  101. position: absolute;
  102. left: 50%;
  103. top: 0;
  104. bottom: 0;
  105. width: 4rpx;
  106. margin-left: -2rpx;
  107. border-radius: 999rpx;
  108. background: rgba(19, 20, 18, 0.92);
  109. }
  110. .center-scale-ruler__arrow {
  111. position: absolute;
  112. left: 50%;
  113. top: -34rpx;
  114. width: 0;
  115. height: 0;
  116. margin-left: -14rpx;
  117. border-left: 14rpx solid transparent;
  118. border-right: 14rpx solid transparent;
  119. border-bottom: 34rpx solid rgba(19, 20, 18, 0.96);
  120. }
  121. .center-scale-ruler__tick {
  122. position: absolute;
  123. left: 50%;
  124. width: 18rpx;
  125. height: 4rpx;
  126. margin-left: -9rpx;
  127. margin-top: -2rpx;
  128. border-radius: 999rpx;
  129. background: rgba(19, 20, 18, 0.82);
  130. }
  131. .center-scale-ruler__tick--major {
  132. width: 32rpx;
  133. margin-left: -16rpx;
  134. height: 5rpx;
  135. margin-top: -2.5rpx;
  136. background: rgba(12, 14, 12, 0.96);
  137. }
  138. .center-scale-ruler__tick--zero {
  139. width: 34rpx;
  140. margin-left: -17rpx;
  141. }
  142. .center-scale-ruler__label {
  143. position: absolute;
  144. left: 50%;
  145. margin-left: 18rpx;
  146. transform: translateY(-50%);
  147. font-size: 22rpx;
  148. line-height: 1;
  149. font-weight: 800;
  150. color: rgba(19, 20, 18, 0.96);
  151. text-shadow: 0 1rpx 0 rgba(255, 255, 255, 0.28);
  152. white-space: nowrap;
  153. }
  154. .center-scale-ruler__label--zero {
  155. transform: translateY(-24%);
  156. font-size: 24rpx;
  157. }
  158. .map-stage__topbar {
  159. display: flex;
  160. align-items: flex-start;
  161. justify-content: flex-start;
  162. }
  163. .map-stage__meta {
  164. max-width: 68%;
  165. padding: 18rpx 20rpx 20rpx;
  166. border-radius: 28rpx;
  167. background: rgba(248, 251, 244, 0.92);
  168. box-shadow: 0 14rpx 36rpx rgba(22, 48, 32, 0.12);
  169. backdrop-filter: blur(12rpx);
  170. }
  171. .map-stage__eyebrow {
  172. font-size: 20rpx;
  173. letter-spacing: 4rpx;
  174. color: #5f7a65;
  175. }
  176. .map-stage__title {
  177. margin-top: 8rpx;
  178. font-size: 38rpx;
  179. font-weight: 600;
  180. }
  181. .map-stage__badge {
  182. display: inline-flex;
  183. margin-top: 14rpx;
  184. padding: 8rpx 18rpx;
  185. border-radius: 999rpx;
  186. background: rgba(22, 48, 32, 0.9);
  187. color: #f7fbf2;
  188. font-size: 22rpx;
  189. }
  190. .screen-button-layer {
  191. position: absolute;
  192. width: 116rpx;
  193. min-height: 116rpx;
  194. padding: 18rpx 0 14rpx;
  195. border-radius: 30rpx;
  196. background: rgba(248, 251, 244, 0.96);
  197. box-shadow: 0 14rpx 36rpx rgba(22, 48, 32, 0.14);
  198. display: flex;
  199. flex-direction: column;
  200. align-items: center;
  201. justify-content: center;
  202. box-sizing: border-box;
  203. z-index: 20;
  204. }
  205. .screen-button-layer__icon {
  206. position: relative;
  207. width: 54rpx;
  208. height: 32rpx;
  209. margin: 0 auto;
  210. border: 4rpx solid #163020;
  211. border-radius: 8rpx;
  212. box-sizing: border-box;
  213. }
  214. .screen-button-layer__line {
  215. position: absolute;
  216. left: 8rpx;
  217. right: 8rpx;
  218. bottom: 6rpx;
  219. height: 4rpx;
  220. border-radius: 999rpx;
  221. background: rgba(22, 48, 32, 0.3);
  222. }
  223. .screen-button-layer__stand {
  224. position: absolute;
  225. left: 50%;
  226. bottom: -12rpx;
  227. width: 18rpx;
  228. height: 4rpx;
  229. margin-left: -9rpx;
  230. border-radius: 999rpx;
  231. background: #163020;
  232. }
  233. .screen-button-layer__text {
  234. margin-top: 18rpx;
  235. text-align: center;
  236. font-size: 22rpx;
  237. font-weight: 600;
  238. color: #163020;
  239. line-height: 1.2;
  240. }
  241. .map-stage__bottom {
  242. display: flex;
  243. align-items: flex-end;
  244. justify-content: center;
  245. width: 100%;
  246. }
  247. .screen-button-layer--bottom-left {
  248. left: 24rpx;
  249. bottom: 244rpx;
  250. }
  251. .screen-button-layer--start-left {
  252. left: 24rpx;
  253. bottom: 378rpx;
  254. min-height: 96rpx;
  255. padding: 0 18rpx;
  256. background: rgba(255, 226, 88, 0.96);
  257. box-shadow: 0 14rpx 36rpx rgba(120, 89, 0, 0.2), 0 0 0 3rpx rgba(255, 246, 186, 0.38);
  258. }
  259. .screen-button-layer__text--start {
  260. margin-top: 0;
  261. font-size: 30rpx;
  262. font-weight: 800;
  263. color: #6d4b00;
  264. letter-spacing: 2rpx;
  265. }
  266. .map-side-toggle {
  267. position: absolute;
  268. z-index: 19;
  269. }
  270. .map-side-toggle--left {
  271. left: 24rpx;
  272. }
  273. .map-side-toggle--right {
  274. right: 24rpx;
  275. }
  276. .map-side-column {
  277. position: absolute;
  278. display: flex;
  279. flex-direction: column;
  280. gap: 16rpx;
  281. padding-top: 12rpx;
  282. z-index: 18;
  283. }
  284. .map-side-column--left {
  285. left: 24rpx;
  286. }
  287. .map-side-column--right-group {
  288. right: 24rpx;
  289. }
  290. .map-side-column--left-group {
  291. padding-top: 106rpx;
  292. }
  293. .map-side-column--right-main {
  294. right: 118rpx;
  295. }
  296. .map-side-column--right-sub {
  297. right: 24rpx;
  298. }
  299. .map-side-button {
  300. width: 78rpx;
  301. height: 78rpx;
  302. border-radius: 22rpx;
  303. background: rgba(248, 251, 244, 0.96);
  304. box-shadow: 0 10rpx 26rpx rgba(22, 48, 32, 0.14);
  305. display: flex;
  306. align-items: center;
  307. justify-content: center;
  308. box-sizing: border-box;
  309. }
  310. .map-side-button--default {
  311. background: rgba(248, 251, 244, 0.96);
  312. }
  313. .map-side-button--icon {
  314. width: 90rpx;
  315. height: 90rpx;
  316. padding: 0;
  317. background: transparent;
  318. box-shadow: none;
  319. border-radius: 0;
  320. }
  321. .map-side-button__image {
  322. width: 100%;
  323. height: 100%;
  324. }
  325. .map-side-button__rotate-image {
  326. width: 100%;
  327. height: 100%;
  328. border-radius: 16rpx;
  329. box-sizing: border-box;
  330. }
  331. .map-side-button__rotate-image--active {
  332. border: 1px solid rgba(231, 54, 33, 0.98);
  333. }
  334. .map-side-button--muted {
  335. background: rgba(229, 233, 230, 0.92);
  336. }
  337. .map-side-button--muted .map-side-button__action-image {
  338. opacity: 0.46;
  339. filter: grayscale(1);
  340. }
  341. .map-side-button--active {
  342. background: rgba(255, 226, 88, 0.98);
  343. box-shadow: 0 0 0 4rpx rgba(255, 241, 158, 0.18), 0 12rpx 28rpx rgba(120, 89, 0, 0.2);
  344. }
  345. .map-side-button__text {
  346. font-size: 18rpx;
  347. line-height: 1.1;
  348. font-weight: 700;
  349. color: #163020;
  350. text-align: center;
  351. letter-spacing: 1rpx;
  352. }
  353. .map-side-button__action-image {
  354. width: 100%;
  355. height: 100%;
  356. border-radius: 22rpx;
  357. }
  358. .map-side-button--active .map-side-button__action-image {
  359. opacity: 1;
  360. }
  361. .compass-widget {
  362. display: flex;
  363. flex-direction: column;
  364. align-items: center;
  365. gap: 6rpx;
  366. flex-shrink: 0;
  367. position: relative;
  368. z-index: 20;
  369. }
  370. .compass-widget__heading-wrap {
  371. display: flex;
  372. flex-direction: column;
  373. align-items: center;
  374. gap: 0;
  375. position: relative;
  376. z-index: 21;
  377. }
  378. .compass-widget__heading {
  379. min-width: 96rpx;
  380. padding: 6rpx 12rpx;
  381. font-size: 20rpx;
  382. line-height: 1;
  383. font-weight: 600;
  384. color: rgba(32, 42, 34, 0.72);
  385. text-shadow: 0 1rpx 0 rgba(255, 255, 255, 0.35);
  386. text-align: center;
  387. }
  388. .compass-widget__edge-arrow-wrap {
  389. display: flex;
  390. align-items: center;
  391. justify-content: center;
  392. width: 40rpx;
  393. height: 20rpx;
  394. margin-top: -2rpx;
  395. margin-bottom: -4rpx;
  396. }
  397. .compass-widget__dial {
  398. position: relative;
  399. width: 196rpx;
  400. height: 196rpx;
  401. border-radius: 50%;
  402. background: radial-gradient(circle at 48% 44%, rgba(255, 255, 255, 0.3) 0%, rgba(242, 241, 214, 0.32) 46%, rgba(183, 188, 159, 0.4) 72%, rgba(64, 68, 58, 0.62) 100%);
  403. border: 2rpx solid rgba(18, 24, 18, 0.48);
  404. box-shadow: 0 6rpx 14rpx rgba(0, 0, 0, 0.14), inset 0 0 0 2rpx rgba(255, 255, 255, 0.24);
  405. overflow: hidden;
  406. }
  407. .compass-widget__dial--active {
  408. border-color: rgba(250, 252, 187, 0.98);
  409. box-shadow: 0 0 0 2rpx rgba(253, 255, 214, 0.92), 0 0 18rpx rgba(247, 255, 173, 0.46), 0 6rpx 14rpx rgba(0, 0, 0, 0.14), inset 0 0 0 2rpx rgba(255, 255, 255, 0.28);
  410. }
  411. .compass-widget__glass,
  412. .compass-widget__inner-shadow {
  413. position: absolute;
  414. inset: 0;
  415. border-radius: 50%;
  416. pointer-events: none;
  417. }
  418. .compass-widget__glass {
  419. background: radial-gradient(circle at 38% 30%, rgba(255, 255, 255, 0.24) 0%, rgba(255, 255, 255, 0.1) 24%, rgba(255, 255, 255, 0) 52%);
  420. }
  421. .compass-widget__inner-shadow {
  422. box-shadow: inset 0 0 0 12rpx rgba(0, 0, 0, 0.07), inset 0 0 18rpx rgba(255, 255, 255, 0.22);
  423. }
  424. .compass-widget__card {
  425. position: absolute;
  426. inset: 0;
  427. transform-origin: center;
  428. }
  429. .compass-widget__north-arrow {
  430. position: absolute;
  431. left: 50%;
  432. top: 50%;
  433. width: 54rpx;
  434. height: 176rpx;
  435. transform: translate(-50%, -52%);
  436. display: block;
  437. pointer-events: none;
  438. z-index: 1;
  439. opacity: 0.42;
  440. }
  441. .compass-widget__north-arrow-outline,
  442. .compass-widget__north-arrow-fill,
  443. .compass-widget__north-arrow-tail-outline,
  444. .compass-widget__north-arrow-tail-fill {
  445. display: none;
  446. }
  447. .compass-widget__tick-anchor,
  448. .compass-widget__mark-anchor,
  449. .compass-widget__needle-anchor {
  450. position: absolute;
  451. left: 50%;
  452. top: 50%;
  453. }
  454. .compass-widget__tick {
  455. position: absolute;
  456. left: 50%;
  457. top: 50%;
  458. width: 2rpx;
  459. border-radius: 999rpx;
  460. transform: translate(-50%, -90rpx);
  461. background: rgba(28, 33, 28, 0.72);
  462. }
  463. .compass-widget__tick--short {
  464. height: 8rpx;
  465. }
  466. .compass-widget__tick--long {
  467. height: 12rpx;
  468. }
  469. .compass-widget__tick--major {
  470. width: 3rpx;
  471. height: 18rpx;
  472. background: rgba(18, 22, 18, 0.88);
  473. }
  474. .compass-widget__mark {
  475. position: absolute;
  476. left: 50%;
  477. top: 50%;
  478. line-height: 1;
  479. color: rgba(40, 42, 37, 0.88);
  480. text-shadow: 0 1rpx 0 rgba(255, 255, 255, 0.22);
  481. white-space: nowrap;
  482. transform-origin: center;
  483. }
  484. .compass-widget__mark--cardinal {
  485. font-size: 26rpx;
  486. font-weight: 700;
  487. }
  488. .compass-widget__mark--intermediate {
  489. font-size: 14rpx;
  490. font-weight: 600;
  491. }
  492. .compass-widget__mark--north {
  493. color: #d62323;
  494. }
  495. .compass-widget__mark--northeast,
  496. .compass-widget__mark--northwest {
  497. color: #577347;
  498. }
  499. .compass-widget__needle-anchor {
  500. width: 0;
  501. height: 0;
  502. }
  503. .compass-widget__needle-north,
  504. .compass-widget__needle-south {
  505. position: absolute;
  506. left: 50%;
  507. top: 50%;
  508. }
  509. .compass-widget__needle-north {
  510. width: 0;
  511. height: 0;
  512. border-left: 8rpx solid transparent;
  513. border-right: 8rpx solid transparent;
  514. border-bottom: 64rpx solid #ef2f2f;
  515. transform: translate(-50%, -74rpx);
  516. filter: drop-shadow(0 2rpx 3rpx rgba(96, 0, 0, 0.24));
  517. }
  518. .compass-widget__needle-south {
  519. width: 7rpx;
  520. height: 72rpx;
  521. border-radius: 999rpx;
  522. background: linear-gradient(180deg, rgba(236, 238, 232, 0.98) 0%, rgba(146, 151, 143, 0.98) 100%);
  523. transform: translate(-50%, 2rpx);
  524. box-shadow: 0 1rpx 3rpx rgba(32, 34, 31, 0.18);
  525. }
  526. .compass-widget__hub {
  527. position: absolute;
  528. left: 50%;
  529. top: 50%;
  530. width: 26rpx;
  531. height: 26rpx;
  532. transform: translate(-50%, -52%);
  533. border-radius: 50%;
  534. background: radial-gradient(circle at 34% 32%, #f4f3e7 0%, #d7d2bd 40%, #928b78 72%, #5a554b 100%);
  535. box-shadow: inset 0 0 0 2rpx rgba(255, 255, 255, 0.32), 0 2rpx 5rpx rgba(0, 0, 0, 0.16);
  536. }
  537. .compass-widget__hub-core {
  538. position: absolute;
  539. left: 50%;
  540. top: 50%;
  541. width: 10rpx;
  542. height: 10rpx;
  543. transform: translate(-50%, -52%);
  544. border-radius: 50%;
  545. background: rgba(173, 170, 156, 0.92);
  546. box-shadow: inset 0 0 0 2rpx rgba(255, 255, 255, 0.2);
  547. }
  548. .compass-widget__edge-arrow {
  549. width: 0;
  550. height: 0;
  551. border-left: 8rpx solid transparent;
  552. border-right: 8rpx solid transparent;
  553. border-top: 14rpx solid rgba(58, 49, 37, 0.72);
  554. filter: drop-shadow(0 1rpx 1rpx rgba(255, 255, 255, 0.18));
  555. }
  556. .compass-widget__hint {
  557. max-width: 196rpx;
  558. padding: 4rpx 10rpx;
  559. border-radius: 999rpx;
  560. background: rgba(219, 238, 212, 0.94);
  561. font-size: 16rpx;
  562. line-height: 1.3;
  563. color: #d62828;
  564. text-align: center;
  565. font-weight: 700;
  566. text-shadow: 0 1rpx 0 rgba(255, 255, 255, 0.24);
  567. box-shadow: 0 2rpx 8rpx rgba(22, 48, 32, 0.08);
  568. }
  569. .race-panel-swiper {
  570. position: absolute;
  571. left: 0;
  572. right: 0;
  573. bottom: 0;
  574. height: 216rpx;
  575. z-index: 15;
  576. }
  577. .race-panel {
  578. position: relative;
  579. height: 100%;
  580. background: linear-gradient(180deg, #1d8fd2 0%, #197dba 100%);
  581. box-shadow: 0 -10rpx 24rpx rgba(18, 101, 150, 0.2);
  582. overflow: hidden;
  583. }
  584. .race-panel--tone-blue {
  585. background: linear-gradient(180deg, #1d8fd2 0%, #197dba 100%);
  586. box-shadow: 0 -10rpx 24rpx rgba(18, 101, 150, 0.22);
  587. }
  588. .race-panel--tone-purple {
  589. background: linear-gradient(180deg, #5317d4 0%, #4310b7 100%);
  590. box-shadow: 0 -10rpx 24rpx rgba(58, 16, 145, 0.24);
  591. }
  592. .race-panel--tone-green {
  593. background: linear-gradient(180deg, #08c805 0%, #05ab03 100%);
  594. box-shadow: 0 -10rpx 24rpx rgba(6, 112, 9, 0.24);
  595. }
  596. .race-panel--tone-yellow {
  597. background: linear-gradient(180deg, #ffbf1f 0%, #ffad0f 100%);
  598. box-shadow: 0 -10rpx 24rpx rgba(163, 105, 0, 0.24);
  599. }
  600. .race-panel--tone-yellow .race-panel__cell,
  601. .race-panel--tone-yellow .race-panel__tag,
  602. .race-panel--tone-orange .race-panel__tag,
  603. .race-panel--tone-red .race-panel__tag {
  604. color: #fff;
  605. }
  606. .race-panel--tone-orange {
  607. background: linear-gradient(180deg, #ff7b12 0%, #ff6500 100%);
  608. box-shadow: 0 -10rpx 24rpx rgba(156, 68, 0, 0.26);
  609. }
  610. .race-panel--tone-red {
  611. background: linear-gradient(180deg, #e1122c 0%, #c90e27 100%);
  612. box-shadow: 0 -10rpx 24rpx rgba(141, 16, 38, 0.28);
  613. }
  614. @keyframes app-edge-breathe-orange {
  615. 0%,
  616. 100% {
  617. box-shadow:
  618. inset 0 0 22rpx 6rpx rgba(255, 123, 18, 0.12),
  619. inset 0 0 54rpx 14rpx rgba(255, 148, 46, 0.06);
  620. }
  621. 50% {
  622. box-shadow:
  623. inset 0 0 34rpx 12rpx rgba(255, 133, 36, 0.24),
  624. inset 0 0 78rpx 24rpx rgba(255, 160, 78, 0.12);
  625. }
  626. }
  627. @keyframes app-edge-breathe-red {
  628. 0%,
  629. 100% {
  630. box-shadow:
  631. inset 0 0 24rpx 7rpx rgba(225, 18, 44, 0.14),
  632. inset 0 0 58rpx 16rpx rgba(233, 44, 67, 0.07);
  633. }
  634. 50% {
  635. box-shadow:
  636. inset 0 0 38rpx 14rpx rgba(233, 44, 67, 0.28),
  637. inset 0 0 86rpx 26rpx rgba(241, 82, 104, 0.14);
  638. }
  639. }
  640. .race-panel-pager {
  641. position: absolute;
  642. left: 50%;
  643. bottom: 18rpx;
  644. transform: translateX(-50%);
  645. display: flex;
  646. align-items: center;
  647. gap: 10rpx;
  648. z-index: 16;
  649. pointer-events: none;
  650. }
  651. .race-panel-pager__dot {
  652. width: 12rpx;
  653. height: 12rpx;
  654. border-radius: 50%;
  655. background: rgba(255, 255, 255, 0.35);
  656. box-shadow: 0 0 0 2rpx rgba(255, 255, 255, 0.08);
  657. }
  658. .race-panel-pager__dot--active {
  659. background: rgba(255, 255, 255, 0.92);
  660. box-shadow: 0 0 0 4rpx rgba(255, 255, 255, 0.12);
  661. }
  662. .race-panel__grid {
  663. position: relative;
  664. z-index: 2;
  665. display: grid;
  666. grid-template-columns: 1fr 1fr 1fr;
  667. grid-template-rows: 1fr 1fr;
  668. width: 100%;
  669. height: 100%;
  670. }
  671. .race-panel__cell {
  672. position: relative;
  673. display: flex;
  674. align-items: center;
  675. justify-content: center;
  676. color: #ffffff;
  677. box-sizing: border-box;
  678. }
  679. .race-panel__cell--action,
  680. .race-panel__cell--timer,
  681. .race-panel__cell--mileage {
  682. padding-top: 10rpx;
  683. }
  684. .race-panel__cell--distance,
  685. .race-panel__cell--progress,
  686. .race-panel__cell--speed {
  687. padding-top: 2rpx;
  688. }
  689. .race-panel__cell--action {
  690. justify-content: center;
  691. padding-left: 0;
  692. }
  693. .race-panel__cell--timer {
  694. padding-left: 0;
  695. padding-right: 0;
  696. }
  697. .race-panel__cell--mileage {
  698. justify-content: center;
  699. padding-right: 0;
  700. }
  701. .race-panel__cell--distance {
  702. justify-content: center;
  703. padding-left: 0;
  704. }
  705. .race-panel__cell--progress {
  706. padding-left: 0;
  707. padding-right: 0;
  708. }
  709. .race-panel__cell--speed {
  710. justify-content: center;
  711. padding-right: 0;
  712. }
  713. .race-panel__play {
  714. width: 0;
  715. height: 0;
  716. margin-left: 2rpx;
  717. border-top: 20rpx solid transparent;
  718. border-bottom: 20rpx solid transparent;
  719. border-left: 30rpx solid #ffffff;
  720. filter: drop-shadow(0 2rpx 0 rgba(255, 255, 255, 0.25));
  721. transform: translateX(16rpx);
  722. }
  723. .race-panel__timer {
  724. max-width: 100%;
  725. box-sizing: border-box;
  726. font-size: 50rpx;
  727. line-height: 1;
  728. letter-spacing: 2rpx;
  729. font-family: 'Courier New', monospace;
  730. text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.2);
  731. }
  732. .race-panel__timer--fx-tick {
  733. animation: race-panel-timer-tick 0.32s cubic-bezier(0.24, 0.86, 0.3, 1) 1;
  734. }
  735. .race-panel__mileage {
  736. max-width: 100%;
  737. box-sizing: border-box;
  738. font-size: 40rpx;
  739. line-height: 1;
  740. font-weight: 300;
  741. text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.16);
  742. }
  743. .race-panel__mileage-wrap {
  744. display: flex;
  745. align-items: center;
  746. justify-content: center;
  747. gap: 10rpx;
  748. transform: translateX(-16rpx);
  749. }
  750. .race-panel__mileage-wrap--fx-update {
  751. animation: race-panel-mileage-update 0.36s cubic-bezier(0.22, 0.88, 0.34, 1) 1;
  752. }
  753. .race-panel__metric-group {
  754. max-width: 100%;
  755. box-sizing: border-box;
  756. display: flex;
  757. align-items: baseline;
  758. color: #ffffff;
  759. }
  760. .race-panel__metric-group--left {
  761. justify-content: center;
  762. transform: translateX(16rpx);
  763. }
  764. .race-panel__metric-group--fx-distance-success {
  765. animation: race-panel-distance-success 0.56s cubic-bezier(0.22, 0.88, 0.34, 1) 1;
  766. }
  767. .race-panel__metric-group--right {
  768. justify-content: center;
  769. transform: translateX(-16rpx);
  770. }
  771. .race-panel__metric-group--fx-speed-update {
  772. animation: race-panel-speed-update 0.36s cubic-bezier(0.22, 0.88, 0.34, 1) 1;
  773. }
  774. .race-panel__metric-group--fx-heart-rate-update {
  775. animation: race-panel-heart-rate-update 0.4s cubic-bezier(0.2, 0.9, 0.3, 1) 1;
  776. }
  777. .race-panel__metric-value {
  778. line-height: 1;
  779. text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.16);
  780. }
  781. .race-panel__metric-value--distance {
  782. font-size: 54rpx;
  783. font-weight: 700;
  784. }
  785. .race-panel__metric-value--speed {
  786. font-size: 48rpx;
  787. font-weight: 400;
  788. }
  789. .race-panel__metric-value--telemetry {
  790. font-size: 46rpx;
  791. font-weight: 600;
  792. }
  793. .race-panel__metric-value--telemetry-secondary {
  794. font-size: 42rpx;
  795. font-weight: 500;
  796. }
  797. .race-panel__metric-unit {
  798. line-height: 1;
  799. margin-left: 6rpx;
  800. opacity: 0.95;
  801. }
  802. .race-panel__metric-unit--distance {
  803. font-size: 24rpx;
  804. font-weight: 600;
  805. }
  806. .race-panel__metric-unit--speed {
  807. font-size: 18rpx;
  808. font-weight: 500;
  809. }
  810. .race-panel__metric-unit--telemetry {
  811. font-size: 18rpx;
  812. font-weight: 600;
  813. }
  814. .race-panel__progress {
  815. max-width: 100%;
  816. box-sizing: border-box;
  817. font-size: 50rpx;
  818. line-height: 1;
  819. font-weight: 400;
  820. text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.16);
  821. }
  822. .race-panel__progress--fx-success {
  823. animation: race-panel-progress-success 0.56s cubic-bezier(0.2, 0.88, 0.32, 1) 1;
  824. }
  825. .race-panel__progress--fx-finish {
  826. animation: race-panel-progress-finish 0.68s cubic-bezier(0.18, 0.92, 0.28, 1) 1;
  827. }
  828. @keyframes race-panel-timer-tick {
  829. 0% { transform: translateY(0) scale(1); opacity: 0.94; }
  830. 35% { transform: translateY(-2rpx) scale(1.04); opacity: 1; }
  831. 100% { transform: translateY(0) scale(1); opacity: 1; }
  832. }
  833. @keyframes race-panel-mileage-update {
  834. 0% { transform: translateX(-16rpx) scale(1); opacity: 0.94; }
  835. 40% { transform: translateX(-16rpx) scale(1.05); opacity: 1; }
  836. 100% { transform: translateX(-16rpx) scale(1); opacity: 1; }
  837. }
  838. @keyframes race-panel-speed-update {
  839. 0% { transform: translateX(-16rpx) scale(1); opacity: 0.94; }
  840. 40% { transform: translateX(-16rpx) scale(1.06); opacity: 1; }
  841. 100% { transform: translateX(-16rpx) scale(1); opacity: 1; }
  842. }
  843. @keyframes race-panel-heart-rate-update {
  844. 0% { transform: translateX(16rpx) scale(1); opacity: 0.94; }
  845. 38% { transform: translateX(16rpx) scale(1.05); opacity: 1; }
  846. 100% { transform: translateX(16rpx) scale(1); opacity: 1; }
  847. }
  848. .race-panel__zone {
  849. display: flex;
  850. flex-direction: column;
  851. align-items: center;
  852. justify-content: center;
  853. gap: 6rpx;
  854. max-width: calc(100% - 12rpx);
  855. text-align: center;
  856. }
  857. .race-panel__zone-name {
  858. font-size: 32rpx;
  859. line-height: 1.08;
  860. font-weight: 700;
  861. color: #ffffff;
  862. text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.14);
  863. }
  864. .race-panel__zone-range {
  865. font-size: 20rpx;
  866. line-height: 1;
  867. color: rgba(255, 255, 255, 0.86);
  868. letter-spacing: 1rpx;
  869. }
  870. .race-panel__tag {
  871. position: absolute;
  872. z-index: 3;
  873. min-width: 56rpx;
  874. height: 32rpx;
  875. padding: 0 10rpx;
  876. background: #000000;
  877. color: #ffffff;
  878. font-size: 16rpx;
  879. line-height: 32rpx;
  880. text-align: center;
  881. letter-spacing: 2rpx;
  882. }
  883. .race-panel__tag--top-left {
  884. top: 0;
  885. left: 0;
  886. }
  887. .race-panel__tag--top-right {
  888. top: 0;
  889. right: 0;
  890. }
  891. .race-panel__tag--bottom-left {
  892. left: 0;
  893. bottom: 0;
  894. }
  895. .race-panel__tag--bottom-right {
  896. right: 0;
  897. bottom: 0;
  898. }
  899. @keyframes race-panel-distance-success {
  900. 0% {
  901. transform: translateX(16rpx) scale(1);
  902. opacity: 1;
  903. }
  904. 28% {
  905. transform: translateX(16rpx) scale(1.09);
  906. opacity: 1;
  907. }
  908. 62% {
  909. transform: translateX(16rpx) scale(0.98);
  910. opacity: 0.96;
  911. }
  912. 100% {
  913. transform: translateX(16rpx) scale(1);
  914. opacity: 1;
  915. }
  916. }
  917. @keyframes race-panel-progress-success {
  918. 0% {
  919. transform: scale(1) translateY(0);
  920. opacity: 1;
  921. }
  922. 24% {
  923. transform: scale(1.16) translateY(-4rpx);
  924. opacity: 1;
  925. }
  926. 60% {
  927. transform: scale(0.98) translateY(0);
  928. opacity: 0.96;
  929. }
  930. 100% {
  931. transform: scale(1) translateY(0);
  932. opacity: 1;
  933. }
  934. }
  935. @keyframes race-panel-progress-finish {
  936. 0% {
  937. transform: scale(1) translateY(0);
  938. opacity: 1;
  939. }
  940. 20% {
  941. transform: scale(1.2) translateY(-6rpx);
  942. opacity: 1;
  943. }
  944. 46% {
  945. transform: scale(1.08) translateY(-2rpx);
  946. opacity: 1;
  947. }
  948. 100% {
  949. transform: scale(1) translateY(0);
  950. opacity: 1;
  951. }
  952. }
  953. .map-punch-button {
  954. position: absolute;
  955. right: 24rpx;
  956. bottom: 244rpx;
  957. width: 92rpx;
  958. height: 92rpx;
  959. border-radius: 50%;
  960. background: rgba(78, 92, 106, 0.82);
  961. box-shadow: 0 12rpx 28rpx rgba(22, 34, 46, 0.22), inset 0 0 0 2rpx rgba(255, 255, 255, 0.08);
  962. z-index: 18;
  963. }
  964. .map-punch-button__text {
  965. font-size: 20rpx;
  966. line-height: 92rpx;
  967. font-weight: 800;
  968. text-align: center;
  969. color: rgba(236, 241, 246, 0.88);
  970. }
  971. .map-punch-button--active {
  972. background: rgba(92, 255, 237, 0.96);
  973. box-shadow: 0 0 0 5rpx rgba(149, 255, 244, 0.18), 0 0 30rpx rgba(92, 255, 237, 0.5);
  974. animation: punch-button-ready 1s ease-in-out infinite;
  975. }
  976. .map-punch-button--active .map-punch-button__text {
  977. color: #064d46;
  978. }
  979. .map-punch-button--fx-ready-a,
  980. .map-punch-button--fx-ready-b {
  981. animation: punch-button-burst 0.92s ease-out 1;
  982. }
  983. .map-punch-button--fx-warning-a,
  984. .map-punch-button--fx-warning-b {
  985. animation: punch-button-warning 0.56s ease-in-out 1;
  986. }
  987. .map-content-entry {
  988. position: absolute;
  989. right: 22rpx;
  990. bottom: 352rpx;
  991. min-width: 96rpx;
  992. height: 52rpx;
  993. padding: 0 18rpx;
  994. border-radius: 28rpx;
  995. background: rgba(33, 47, 58, 0.88);
  996. box-shadow: 0 10rpx 24rpx rgba(18, 28, 38, 0.2);
  997. z-index: 18;
  998. }
  999. .map-content-entry__text {
  1000. font-size: 22rpx;
  1001. line-height: 52rpx;
  1002. font-weight: 700;
  1003. text-align: center;
  1004. color: rgba(244, 248, 252, 0.94);
  1005. }
  1006. .race-panel__line {
  1007. position: absolute;
  1008. z-index: 1;
  1009. height: 2rpx;
  1010. box-shadow: 0 0 6rpx rgba(255, 255, 255, 0.2);
  1011. }
  1012. .race-panel__line--center {
  1013. left: 33.3333%;
  1014. right: 33.3333%;
  1015. top: 50%;
  1016. transform: translateY(-50%);
  1017. background: rgba(255, 255, 255, 0.86);
  1018. }
  1019. .race-panel__line--left-mid {
  1020. left: 0;
  1021. width: 33.3333%;
  1022. top: 50%;
  1023. transform: translateY(-50%);
  1024. background: linear-gradient(90deg, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0.78) 100%);
  1025. }
  1026. .race-panel__line--right-mid {
  1027. right: 0;
  1028. width: 33.3333%;
  1029. top: 50%;
  1030. transform: translateY(-50%);
  1031. background: linear-gradient(90deg, rgba(255, 255, 255, 0.78) 0%, rgba(255, 255, 255, 0.08) 100%);
  1032. }
  1033. .race-panel__line--left-top,
  1034. .race-panel__line--left-bottom,
  1035. .race-panel__line--right-top,
  1036. .race-panel__line--right-bottom {
  1037. width: 23%;
  1038. top: 50%;
  1039. }
  1040. .race-panel__line--left-top {
  1041. right: 66.6667%;
  1042. transform-origin: right center;
  1043. transform: translateY(-50%) rotate(70deg);
  1044. background: linear-gradient(90deg, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0.82) 100%);
  1045. }
  1046. .race-panel__line--left-bottom {
  1047. right: 66.6667%;
  1048. transform-origin: right center;
  1049. transform: translateY(-50%) rotate(-70deg);
  1050. background: linear-gradient(90deg, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0.82) 100%);
  1051. }
  1052. .race-panel__line--right-top {
  1053. left: 66.6667%;
  1054. transform-origin: left center;
  1055. transform: translateY(-50%) rotate(-70deg);
  1056. background: linear-gradient(90deg, rgba(255, 255, 255, 0.82) 0%, rgba(255, 255, 255, 0.08) 100%);
  1057. }
  1058. .race-panel__line--right-bottom {
  1059. left: 66.6667%;
  1060. transform-origin: left center;
  1061. transform: translateY(-50%) rotate(70deg);
  1062. background: linear-gradient(90deg, rgba(255, 255, 255, 0.82) 0%, rgba(255, 255, 255, 0.08) 100%);
  1063. }
  1064. .race-panel__chevrons {
  1065. position: relative;
  1066. width: 24rpx;
  1067. height: 24rpx;
  1068. opacity: 0.5;
  1069. flex-shrink: 0;
  1070. }
  1071. .race-panel__chevron {
  1072. position: absolute;
  1073. right: 6rpx;
  1074. top: 50%;
  1075. width: 10rpx;
  1076. height: 10rpx;
  1077. border-top: 3rpx solid rgba(255, 255, 255, 0.78);
  1078. border-right: 3rpx solid rgba(255, 255, 255, 0.78);
  1079. transform: translateY(-50%) rotate(45deg);
  1080. }
  1081. .race-panel__chevron--offset {
  1082. right: 0;
  1083. }
  1084. .game-info-modal {
  1085. position: absolute;
  1086. inset: 0;
  1087. display: flex;
  1088. align-items: flex-end;
  1089. justify-content: center;
  1090. padding: 0 20rpx 28rpx;
  1091. box-sizing: border-box;
  1092. background: rgba(7, 18, 12, 0.34);
  1093. z-index: 31;
  1094. }
  1095. .game-info-modal__dialog {
  1096. width: 100%;
  1097. max-height: 72vh;
  1098. border-radius: 36rpx;
  1099. background: rgba(248, 251, 244, 0.98);
  1100. box-shadow: 0 20rpx 60rpx rgba(7, 18, 12, 0.24);
  1101. overflow: hidden;
  1102. }
  1103. .game-info-modal__header {
  1104. display: flex;
  1105. align-items: center;
  1106. justify-content: space-between;
  1107. gap: 24rpx;
  1108. padding: 22rpx 28rpx 18rpx;
  1109. border-bottom: 1rpx solid rgba(22, 48, 32, 0.08);
  1110. }
  1111. .game-info-modal__header-main {
  1112. flex: 1;
  1113. min-width: 0;
  1114. }
  1115. .game-info-modal__header-actions {
  1116. flex-shrink: 0;
  1117. display: flex;
  1118. align-items: center;
  1119. justify-content: flex-end;
  1120. }
  1121. .game-info-modal__eyebrow {
  1122. font-size: 22rpx;
  1123. font-weight: 800;
  1124. letter-spacing: 4rpx;
  1125. color: #5f7a65;
  1126. line-height: 1;
  1127. }
  1128. .game-info-modal__title {
  1129. margin-top: 12rpx;
  1130. font-size: 42rpx;
  1131. line-height: 1.08;
  1132. font-weight: 700;
  1133. color: #163020;
  1134. }
  1135. .game-info-modal__subtitle {
  1136. margin-top: 10rpx;
  1137. font-size: 22rpx;
  1138. line-height: 1.3;
  1139. color: #5f7a65;
  1140. }
  1141. .game-info-modal__close {
  1142. flex-shrink: 0;
  1143. min-width: 108rpx;
  1144. padding: 14rpx 22rpx;
  1145. border-radius: 999rpx;
  1146. background: #163020;
  1147. color: #f7fbf2;
  1148. font-size: 24rpx;
  1149. text-align: center;
  1150. }
  1151. .game-info-modal__content {
  1152. max-height: calc(72vh - 132rpx);
  1153. padding: 12rpx 24rpx 30rpx;
  1154. box-sizing: border-box;
  1155. }
  1156. .result-scene-modal {
  1157. position: absolute;
  1158. inset: 0;
  1159. display: flex;
  1160. align-items: center;
  1161. justify-content: center;
  1162. padding: 0 28rpx;
  1163. box-sizing: border-box;
  1164. background: rgba(7, 18, 12, 0.38);
  1165. z-index: 32;
  1166. }
  1167. .result-scene-modal__dialog {
  1168. width: 100%;
  1169. max-width: 680rpx;
  1170. padding: 36rpx 32rpx 30rpx;
  1171. border-radius: 40rpx;
  1172. background: rgba(248, 251, 244, 0.98);
  1173. box-shadow: 0 22rpx 68rpx rgba(7, 18, 12, 0.24);
  1174. box-sizing: border-box;
  1175. }
  1176. .result-scene-modal__eyebrow {
  1177. font-size: 22rpx;
  1178. font-weight: 800;
  1179. letter-spacing: 4rpx;
  1180. color: #5f7a65;
  1181. line-height: 1;
  1182. }
  1183. .result-scene-modal__title {
  1184. margin-top: 14rpx;
  1185. font-size: 46rpx;
  1186. line-height: 1.08;
  1187. font-weight: 700;
  1188. color: #163020;
  1189. }
  1190. .result-scene-modal__subtitle {
  1191. margin-top: 12rpx;
  1192. font-size: 24rpx;
  1193. line-height: 1.35;
  1194. color: #5f7a65;
  1195. }
  1196. .result-scene-modal__hero {
  1197. margin-top: 28rpx;
  1198. padding: 26rpx 24rpx 22rpx;
  1199. border-radius: 28rpx;
  1200. background: linear-gradient(180deg, rgba(35, 135, 87, 0.12), rgba(35, 135, 87, 0.06));
  1201. }
  1202. .result-scene-modal__hero-label {
  1203. font-size: 22rpx;
  1204. font-weight: 700;
  1205. color: #4d6852;
  1206. }
  1207. .result-scene-modal__hero-value {
  1208. margin-top: 12rpx;
  1209. font-size: 68rpx;
  1210. line-height: 1;
  1211. font-weight: 800;
  1212. color: #163020;
  1213. }
  1214. .result-scene-modal__rows {
  1215. margin-top: 24rpx;
  1216. border-radius: 28rpx;
  1217. overflow: hidden;
  1218. background: rgba(22, 48, 32, 0.04);
  1219. }
  1220. .result-scene-modal__row {
  1221. display: flex;
  1222. align-items: center;
  1223. justify-content: space-between;
  1224. gap: 24rpx;
  1225. padding: 22rpx 24rpx;
  1226. border-bottom: 1rpx solid rgba(22, 48, 32, 0.08);
  1227. }
  1228. .result-scene-modal__row:last-child {
  1229. border-bottom: none;
  1230. }
  1231. .result-scene-modal__row-label {
  1232. font-size: 24rpx;
  1233. color: #5f7a65;
  1234. }
  1235. .result-scene-modal__row-value {
  1236. font-size: 26rpx;
  1237. font-weight: 700;
  1238. color: #163020;
  1239. text-align: right;
  1240. }
  1241. .result-scene-modal__actions {
  1242. margin-top: 28rpx;
  1243. display: flex;
  1244. align-items: center;
  1245. gap: 18rpx;
  1246. }
  1247. .result-scene-modal__action {
  1248. flex: 1;
  1249. padding: 24rpx 18rpx;
  1250. border-radius: 999rpx;
  1251. text-align: center;
  1252. font-size: 26rpx;
  1253. font-weight: 700;
  1254. }
  1255. .result-scene-modal__action--secondary {
  1256. background: rgba(22, 48, 32, 0.08);
  1257. color: #163020;
  1258. }
  1259. .result-scene-modal__action--primary {
  1260. background: #163020;
  1261. color: #f7fbf2;
  1262. }
  1263. .debug-section--info {
  1264. margin-top: 14rpx;
  1265. }
  1266. .debug-modal {
  1267. position: absolute;
  1268. inset: 0;
  1269. display: flex;
  1270. align-items: flex-end;
  1271. justify-content: center;
  1272. padding: 0 20rpx 28rpx;
  1273. box-sizing: border-box;
  1274. background: rgba(7, 18, 12, 0.34);
  1275. z-index: 30;
  1276. }
  1277. .debug-modal__dialog {
  1278. width: 100%;
  1279. max-height: 72vh;
  1280. border-radius: 36rpx;
  1281. background: rgba(248, 251, 244, 0.98);
  1282. box-shadow: 0 20rpx 60rpx rgba(7, 18, 12, 0.24);
  1283. overflow: hidden;
  1284. }
  1285. .debug-modal__header {
  1286. display: flex;
  1287. align-items: center;
  1288. justify-content: space-between;
  1289. gap: 24rpx;
  1290. padding: 22rpx 28rpx 18rpx;
  1291. border-bottom: 1rpx solid rgba(22, 48, 32, 0.08);
  1292. }
  1293. .debug-modal__header-main {
  1294. flex: 1;
  1295. min-width: 0;
  1296. }
  1297. .debug-modal__header-actions {
  1298. flex-shrink: 0;
  1299. display: flex;
  1300. align-items: center;
  1301. justify-content: flex-end;
  1302. }
  1303. .debug-modal__eyebrow {
  1304. font-size: 22rpx;
  1305. font-weight: 800;
  1306. letter-spacing: 4rpx;
  1307. color: #5f7a65;
  1308. line-height: 1;
  1309. flex-shrink: 0;
  1310. }
  1311. .debug-modal__build {
  1312. margin-top: 10rpx;
  1313. display: inline-flex;
  1314. padding: 8rpx 14rpx;
  1315. border-radius: 999rpx;
  1316. background: rgba(22, 48, 32, 0.08);
  1317. color: #45624b;
  1318. font-size: 20rpx;
  1319. line-height: 1;
  1320. letter-spacing: 1rpx;
  1321. flex-shrink: 0;
  1322. }
  1323. .debug-modal__close {
  1324. flex-shrink: 0;
  1325. min-width: 108rpx;
  1326. padding: 14rpx 22rpx;
  1327. border-radius: 999rpx;
  1328. background: #163020;
  1329. color: #f7fbf2;
  1330. font-size: 24rpx;
  1331. text-align: center;
  1332. }
  1333. .debug-modal__content {
  1334. max-height: calc(72vh - 108rpx);
  1335. padding: 12rpx 24rpx 30rpx;
  1336. box-sizing: border-box;
  1337. }
  1338. .debug-section {
  1339. margin-top: 16rpx;
  1340. padding: 18rpx 20rpx 22rpx;
  1341. border-radius: 24rpx;
  1342. background: rgba(242, 247, 239, 0.98);
  1343. box-shadow: inset 0 0 0 1rpx rgba(22, 48, 32, 0.05);
  1344. }
  1345. .debug-section:first-child {
  1346. margin-top: 0;
  1347. }
  1348. .debug-section__header {
  1349. margin-bottom: 12rpx;
  1350. }
  1351. .debug-section__header-row {
  1352. display: flex;
  1353. align-items: flex-start;
  1354. justify-content: space-between;
  1355. gap: 16rpx;
  1356. }
  1357. .debug-section__header-main {
  1358. flex: 1;
  1359. min-width: 0;
  1360. }
  1361. .debug-section__title {
  1362. font-size: 24rpx;
  1363. line-height: 1.2;
  1364. font-weight: 800;
  1365. letter-spacing: 2rpx;
  1366. color: #163020;
  1367. text-transform: uppercase;
  1368. }
  1369. .debug-section__desc {
  1370. margin-top: 6rpx;
  1371. font-size: 20rpx;
  1372. line-height: 1.45;
  1373. color: #6a826f;
  1374. }
  1375. .debug-section__lock {
  1376. min-width: 76rpx;
  1377. height: 52rpx;
  1378. padding: 0 16rpx;
  1379. flex: none;
  1380. display: flex;
  1381. align-items: center;
  1382. justify-content: center;
  1383. border-radius: 999rpx;
  1384. background: rgba(233, 242, 228, 0.92);
  1385. box-shadow: inset 0 0 0 1rpx rgba(22, 48, 32, 0.08);
  1386. }
  1387. .debug-section__lock--active {
  1388. background: rgba(45, 106, 79, 0.18);
  1389. box-shadow: inset 0 0 0 2rpx rgba(45, 106, 79, 0.18);
  1390. }
  1391. .debug-section__lock-text {
  1392. font-size: 20rpx;
  1393. line-height: 1;
  1394. font-weight: 700;
  1395. color: #45624b;
  1396. letter-spacing: 1rpx;
  1397. }
  1398. .debug-section__lock--active .debug-section__lock-text {
  1399. color: #2d6a4f;
  1400. }
  1401. .info-panel__row {
  1402. display: flex;
  1403. align-items: flex-start;
  1404. justify-content: space-between;
  1405. gap: 24rpx;
  1406. padding: 10rpx 0;
  1407. border-bottom: 1rpx solid rgba(22, 48, 32, 0.08);
  1408. }
  1409. .info-panel__row--stack {
  1410. align-items: flex-start;
  1411. }
  1412. .info-panel__row:last-of-type {
  1413. border-bottom: none;
  1414. }
  1415. .info-panel__label {
  1416. width: 148rpx;
  1417. flex-shrink: 0;
  1418. font-size: 22rpx;
  1419. letter-spacing: 2rpx;
  1420. color: #5f7a65;
  1421. text-align: left;
  1422. text-transform: uppercase;
  1423. }
  1424. .info-panel__value {
  1425. flex: 1;
  1426. min-width: 0;
  1427. font-size: 25rpx;
  1428. line-height: 1.45;
  1429. color: #163020;
  1430. text-align: right;
  1431. word-break: break-all;
  1432. }
  1433. .info-panel__row--stack .info-panel__value {
  1434. margin-top: 0;
  1435. text-align: right;
  1436. color: #45624b;
  1437. }
  1438. .debug-input {
  1439. flex: 1;
  1440. min-height: 72rpx;
  1441. padding: 0 22rpx;
  1442. border-radius: 18rpx;
  1443. background: rgba(255, 255, 255, 0.92);
  1444. box-shadow: inset 0 0 0 2rpx rgba(22, 48, 32, 0.08);
  1445. font-size: 24rpx;
  1446. color: #244132;
  1447. text-align: left;
  1448. }
  1449. .debug-inline-stack {
  1450. flex: 1;
  1451. display: flex;
  1452. flex-direction: column;
  1453. gap: 14rpx;
  1454. }
  1455. .debug-device-list {
  1456. display: flex;
  1457. flex-direction: column;
  1458. gap: 12rpx;
  1459. margin-top: 16rpx;
  1460. }
  1461. .debug-device-card {
  1462. display: flex;
  1463. align-items: center;
  1464. justify-content: space-between;
  1465. gap: 16rpx;
  1466. padding: 16rpx 18rpx;
  1467. border-radius: 18rpx;
  1468. background: rgba(255, 255, 255, 0.82);
  1469. box-shadow: inset 0 0 0 2rpx rgba(22, 48, 32, 0.06);
  1470. }
  1471. .debug-device-card__main {
  1472. flex: 1;
  1473. min-width: 0;
  1474. }
  1475. .debug-device-card__title-row {
  1476. display: flex;
  1477. align-items: center;
  1478. gap: 10rpx;
  1479. }
  1480. .debug-device-card__name {
  1481. flex: 1;
  1482. min-width: 0;
  1483. font-size: 24rpx;
  1484. line-height: 1.3;
  1485. font-weight: 700;
  1486. color: #163020;
  1487. word-break: break-all;
  1488. }
  1489. .debug-device-card__badge {
  1490. flex-shrink: 0;
  1491. padding: 4rpx 10rpx;
  1492. border-radius: 999rpx;
  1493. background: rgba(45, 106, 79, 0.14);
  1494. color: #2d6a4f;
  1495. font-size: 18rpx;
  1496. line-height: 1;
  1497. font-weight: 700;
  1498. }
  1499. .debug-device-card__meta {
  1500. margin-top: 8rpx;
  1501. font-size: 20rpx;
  1502. line-height: 1.2;
  1503. color: #6a826f;
  1504. }
  1505. .debug-device-card__action {
  1506. flex-shrink: 0;
  1507. min-width: 96rpx;
  1508. padding: 16rpx 18rpx;
  1509. border-radius: 999rpx;
  1510. background: #eef6ea;
  1511. color: #2d6a4f;
  1512. font-size: 22rpx;
  1513. line-height: 1;
  1514. text-align: center;
  1515. font-weight: 700;
  1516. }
  1517. .debug-device-card__action--active {
  1518. background: #2d6a4f;
  1519. color: #f7fbf2;
  1520. }
  1521. .control-row {
  1522. display: flex;
  1523. gap: 14rpx;
  1524. margin-top: 18rpx;
  1525. }
  1526. .control-row--compact {
  1527. margin-top: 0;
  1528. }
  1529. .control-row--compact .control-chip {
  1530. padding: 16rpx 10rpx;
  1531. font-size: 22rpx;
  1532. }
  1533. .control-row--single .control-chip {
  1534. flex: none;
  1535. width: 100%;
  1536. }
  1537. .debug-section .control-row:last-child {
  1538. margin-bottom: 0;
  1539. }
  1540. .debug-group-title {
  1541. margin-top: 18rpx;
  1542. margin-bottom: 8rpx;
  1543. font-size: 20rpx;
  1544. font-weight: 800;
  1545. letter-spacing: 2rpx;
  1546. color: #6a826f;
  1547. text-transform: uppercase;
  1548. }
  1549. .control-row--triple .control-chip {
  1550. font-size: 23rpx;
  1551. }
  1552. .control-chip {
  1553. flex: 1;
  1554. min-width: 0;
  1555. padding: 20rpx 16rpx;
  1556. border-radius: 999rpx;
  1557. background: #d7e8da;
  1558. color: #163020;
  1559. font-size: 26rpx;
  1560. text-align: center;
  1561. box-sizing: border-box;
  1562. }
  1563. .control-chip--primary {
  1564. background: #2d6a4f;
  1565. color: #f7fbf2;
  1566. }
  1567. .control-chip--secondary {
  1568. background: #eef6ea;
  1569. color: #45624b;
  1570. }
  1571. .control-chip--active {
  1572. background: #2d6a4f;
  1573. color: #f7fbf2;
  1574. }
  1575. .control-chip--disabled {
  1576. opacity: 0.48;
  1577. }
  1578. .race-panel__cell--action {
  1579. justify-content: flex-start;
  1580. padding-left: 44rpx;
  1581. }
  1582. .race-panel__cell--timer {
  1583. padding-left: 12rpx;
  1584. padding-right: 12rpx;
  1585. }
  1586. .race-panel__cell--mileage {
  1587. justify-content: flex-end;
  1588. padding-right: 56rpx;
  1589. }
  1590. .race-panel__cell--distance {
  1591. justify-content: flex-start;
  1592. padding-left: 28rpx;
  1593. }
  1594. .race-panel__cell--progress {
  1595. padding-left: 8rpx;
  1596. padding-right: 8rpx;
  1597. }
  1598. .race-panel__cell--speed {
  1599. justify-content: flex-end;
  1600. padding-right: 32rpx;
  1601. }
  1602. .race-panel__timer,
  1603. .race-panel__progress,
  1604. .race-panel__mileage,
  1605. .race-panel__metric-group {
  1606. max-width: 100%;
  1607. box-sizing: border-box;
  1608. }
  1609. .race-panel__metric-group--panel {
  1610. max-width: calc(100% - 8rpx);
  1611. }
  1612. .game-punch-hint {
  1613. position: absolute;
  1614. left: 50%;
  1615. top: 0;
  1616. transform: translateX(-50%);
  1617. max-width: calc(100vw - 112rpx);
  1618. display: flex;
  1619. align-items: center;
  1620. gap: 12rpx;
  1621. padding: 14rpx 18rpx 14rpx 24rpx;
  1622. border-radius: 999rpx;
  1623. background: rgba(18, 33, 24, 0.78);
  1624. color: #f7fbf2;
  1625. font-size: 24rpx;
  1626. line-height: 1.2;
  1627. text-align: left;
  1628. z-index: 40;
  1629. pointer-events: auto;
  1630. }
  1631. .game-punch-hint__text {
  1632. flex: 1;
  1633. min-width: 0;
  1634. }
  1635. .game-punch-hint__close {
  1636. width: 56rpx;
  1637. height: 56rpx;
  1638. flex: 0 0 56rpx;
  1639. border-radius: 999rpx;
  1640. display: flex;
  1641. align-items: center;
  1642. justify-content: center;
  1643. color: rgba(247, 251, 242, 0.9);
  1644. font-size: 32rpx;
  1645. line-height: 1;
  1646. background: rgba(255, 255, 255, 0.08);
  1647. }
  1648. .game-punch-feedback {
  1649. position: absolute;
  1650. left: 50%;
  1651. top: 18%;
  1652. transform: translateX(-50%);
  1653. min-width: 240rpx;
  1654. padding: 20rpx 28rpx;
  1655. border-radius: 24rpx;
  1656. color: #ffffff;
  1657. font-size: 24rpx;
  1658. font-weight: 700;
  1659. text-align: center;
  1660. box-shadow: 0 16rpx 36rpx rgba(0, 0, 0, 0.18);
  1661. z-index: 17;
  1662. pointer-events: none;
  1663. }
  1664. .game-punch-feedback--neutral {
  1665. background: rgba(27, 109, 189, 0.92);
  1666. }
  1667. .game-punch-feedback--success {
  1668. background: rgba(37, 134, 88, 0.94);
  1669. }
  1670. .game-punch-feedback--warning {
  1671. background: rgba(196, 117, 18, 0.94);
  1672. }
  1673. .game-punch-feedback--fx-pop {
  1674. animation: feedback-toast-pop 0.42s ease-out;
  1675. }
  1676. .game-punch-feedback--fx-success {
  1677. animation: feedback-toast-success 0.58s ease-out;
  1678. }
  1679. .game-punch-feedback--fx-warning {
  1680. animation: feedback-toast-warning 0.56s ease-out;
  1681. }
  1682. .game-content-card {
  1683. position: absolute;
  1684. left: 50%;
  1685. top: 26%;
  1686. width: 440rpx;
  1687. max-width: calc(100vw - 72rpx);
  1688. transform: translateX(-50%);
  1689. padding: 28rpx 28rpx 24rpx;
  1690. border-radius: 28rpx;
  1691. background: rgba(248, 251, 244, 0.96);
  1692. box-shadow: 0 18rpx 48rpx rgba(22, 48, 32, 0.18);
  1693. box-sizing: border-box;
  1694. z-index: 17;
  1695. }
  1696. .game-content-card__title {
  1697. font-size: 34rpx;
  1698. line-height: 1.2;
  1699. font-weight: 700;
  1700. color: #163020;
  1701. }
  1702. .game-content-card__body {
  1703. margin-top: 12rpx;
  1704. font-size: 24rpx;
  1705. line-height: 1.5;
  1706. color: #45624b;
  1707. }
  1708. .game-content-card__hint {
  1709. margin-top: 16rpx;
  1710. font-size: 20rpx;
  1711. color: #809284;
  1712. }
  1713. .game-content-card--fx-pop {
  1714. animation: content-card-pop 0.5s cubic-bezier(0.18, 0.88, 0.2, 1);
  1715. }
  1716. .game-content-card--fx-finish {
  1717. animation: content-card-finish 0.68s cubic-bezier(0.18, 0.88, 0.2, 1);
  1718. }
  1719. .race-panel__action-button {
  1720. display: flex;
  1721. align-items: center;
  1722. justify-content: center;
  1723. min-width: 116rpx;
  1724. min-height: 72rpx;
  1725. padding: 0 20rpx;
  1726. border-radius: 999rpx;
  1727. background: rgba(78, 92, 106, 0.54);
  1728. border: 2rpx solid rgba(210, 220, 228, 0.18);
  1729. box-sizing: border-box;
  1730. box-shadow: inset 0 0 0 2rpx rgba(255, 255, 255, 0.06);
  1731. }
  1732. .race-panel__action-button--active {
  1733. background: rgba(255, 226, 88, 0.98);
  1734. border-color: rgba(255, 247, 194, 0.98);
  1735. box-shadow: 0 0 0 4rpx rgba(255, 241, 158, 0.18), 0 0 28rpx rgba(255, 239, 122, 0.42);
  1736. animation: punch-button-ready 1s ease-in-out infinite;
  1737. }
  1738. .race-panel__action-button-text {
  1739. font-size: 24rpx;
  1740. line-height: 1;
  1741. font-weight: 700;
  1742. color: rgba(236, 241, 246, 0.86);
  1743. }
  1744. .race-panel__action-button--active .race-panel__action-button-text {
  1745. color: #775000;
  1746. }
  1747. @keyframes punch-button-ready {
  1748. 0% {
  1749. transform: scale(1);
  1750. box-shadow: 0 0 0 0 rgba(255, 241, 158, 0.22), 0 0 18rpx rgba(255, 239, 122, 0.28);
  1751. }
  1752. 50% {
  1753. transform: scale(1.06);
  1754. box-shadow: 0 0 0 8rpx rgba(255, 241, 158, 0.08), 0 0 34rpx rgba(255, 239, 122, 0.52);
  1755. }
  1756. 100% {
  1757. transform: scale(1);
  1758. box-shadow: 0 0 0 0 rgba(255, 241, 158, 0.22), 0 0 18rpx rgba(255, 239, 122, 0.28);
  1759. }
  1760. }
  1761. @keyframes punch-button-burst {
  1762. 0% {
  1763. transform: scale(1);
  1764. box-shadow: 0 12rpx 28rpx rgba(22, 34, 46, 0.22);
  1765. }
  1766. 34% {
  1767. transform: scale(1.12);
  1768. box-shadow: 0 0 0 9rpx rgba(149, 255, 244, 0.18), 0 0 34rpx rgba(92, 255, 237, 0.58);
  1769. }
  1770. 100% {
  1771. transform: scale(1);
  1772. box-shadow: 0 12rpx 28rpx rgba(22, 34, 46, 0.22);
  1773. }
  1774. }
  1775. @keyframes punch-button-warning {
  1776. 0%, 100% {
  1777. transform: translateX(0);
  1778. }
  1779. 20% {
  1780. transform: translateX(-6rpx) scale(1.02);
  1781. }
  1782. 40% {
  1783. transform: translateX(6rpx) scale(1.04);
  1784. }
  1785. 60% {
  1786. transform: translateX(-4rpx) scale(1.02);
  1787. }
  1788. 80% {
  1789. transform: translateX(4rpx);
  1790. }
  1791. }
  1792. @keyframes feedback-toast-pop {
  1793. 0% {
  1794. opacity: 0;
  1795. transform: translateX(-50%) translateY(18rpx) scale(0.88);
  1796. }
  1797. 100% {
  1798. opacity: 1;
  1799. transform: translateX(-50%) translateY(0) scale(1);
  1800. }
  1801. }
  1802. @keyframes feedback-toast-success {
  1803. 0% {
  1804. opacity: 0;
  1805. transform: translateX(-50%) translateY(18rpx) scale(0.88);
  1806. }
  1807. 55% {
  1808. opacity: 1;
  1809. transform: translateX(-50%) translateY(-6rpx) scale(1.04);
  1810. }
  1811. 100% {
  1812. opacity: 1;
  1813. transform: translateX(-50%) translateY(0) scale(1);
  1814. }
  1815. }
  1816. @keyframes feedback-toast-warning {
  1817. 0% {
  1818. opacity: 0;
  1819. transform: translateX(-50%) translateY(12rpx) scale(0.92);
  1820. }
  1821. 30% {
  1822. opacity: 1;
  1823. transform: translateX(calc(-50% - 6rpx)) translateY(0) scale(1.02);
  1824. }
  1825. 60% {
  1826. transform: translateX(calc(-50% + 6rpx)) translateY(0) scale(1.02);
  1827. }
  1828. 100% {
  1829. opacity: 1;
  1830. transform: translateX(-50%) translateY(0) scale(1);
  1831. }
  1832. }
  1833. @keyframes content-card-pop {
  1834. 0% {
  1835. opacity: 0;
  1836. transform: translateX(-50%) translateY(30rpx) scale(0.92);
  1837. }
  1838. 100% {
  1839. opacity: 1;
  1840. transform: translateX(-50%) translateY(0) scale(1);
  1841. }
  1842. }
  1843. @keyframes content-card-finish {
  1844. 0% {
  1845. opacity: 0;
  1846. transform: translateX(-50%) translateY(34rpx) scale(0.9);
  1847. box-shadow: 0 18rpx 48rpx rgba(22, 48, 32, 0.18);
  1848. }
  1849. 45% {
  1850. opacity: 1;
  1851. transform: translateX(-50%) translateY(-6rpx) scale(1.03);
  1852. box-shadow: 0 0 0 6rpx rgba(255, 232, 147, 0.18), 0 22rpx 52rpx rgba(22, 48, 32, 0.2);
  1853. }
  1854. 100% {
  1855. opacity: 1;
  1856. transform: translateX(-50%) translateY(0) scale(1);
  1857. box-shadow: 0 18rpx 48rpx rgba(22, 48, 32, 0.18);
  1858. }
  1859. }
  1860. @keyframes map-pulse-control {
  1861. 0% {
  1862. opacity: 0.94;
  1863. transform: scale(0.28);
  1864. border: 6rpx solid rgba(92, 255, 237, 0.98);
  1865. box-shadow: 0 0 0 0 rgba(92, 255, 237, 0.42);
  1866. }
  1867. 70% {
  1868. opacity: 0.32;
  1869. transform: scale(3.4);
  1870. border: 4rpx solid rgba(92, 255, 237, 0.52);
  1871. box-shadow: 0 0 0 10rpx rgba(92, 255, 237, 0.08);
  1872. }
  1873. 100% {
  1874. opacity: 0;
  1875. transform: scale(4.1);
  1876. border: 2rpx solid rgba(92, 255, 237, 0);
  1877. box-shadow: 0 0 0 0 rgba(92, 255, 237, 0);
  1878. }
  1879. }
  1880. @keyframes map-pulse-ready {
  1881. 0% {
  1882. opacity: 0.92;
  1883. transform: scale(0.22);
  1884. border: 5rpx solid rgba(255, 248, 184, 0.98);
  1885. box-shadow: 0 0 0 0 rgba(255, 248, 184, 0.28);
  1886. }
  1887. 68% {
  1888. opacity: 0.22;
  1889. transform: scale(2.4);
  1890. border: 3rpx solid rgba(255, 248, 184, 0.46);
  1891. box-shadow: 0 0 0 8rpx rgba(255, 248, 184, 0.08);
  1892. }
  1893. 100% {
  1894. opacity: 0;
  1895. transform: scale(3);
  1896. border: 2rpx solid rgba(255, 248, 184, 0);
  1897. box-shadow: 0 0 0 0 rgba(255, 248, 184, 0);
  1898. }
  1899. }
  1900. @keyframes map-pulse-finish {
  1901. 0% {
  1902. opacity: 0.98;
  1903. transform: scale(0.24);
  1904. border: 6rpx solid rgba(255, 231, 117, 1);
  1905. box-shadow: 0 0 0 0 rgba(255, 231, 117, 0.46);
  1906. }
  1907. 48% {
  1908. opacity: 0.52;
  1909. transform: scale(3.8);
  1910. border: 4rpx solid rgba(255, 231, 117, 0.72);
  1911. box-shadow: 0 0 0 14rpx rgba(255, 231, 117, 0.14);
  1912. }
  1913. 100% {
  1914. opacity: 0;
  1915. transform: scale(4.8);
  1916. border: 2rpx solid rgba(255, 231, 117, 0);
  1917. box-shadow: 0 0 0 0 rgba(255, 231, 117, 0);
  1918. }
  1919. }
  1920. @keyframes stage-fx-finish {
  1921. 0% {
  1922. opacity: 0;
  1923. background: radial-gradient(circle at 50% 50%, rgba(255, 241, 168, 0.22) 0%, rgba(255, 241, 168, 0.08) 28%, rgba(255, 255, 255, 0) 62%);
  1924. backdrop-filter: brightness(1);
  1925. }
  1926. 24% {
  1927. opacity: 1;
  1928. background: radial-gradient(circle at 50% 50%, rgba(255, 241, 168, 0.34) 0%, rgba(255, 241, 168, 0.14) 32%, rgba(255, 255, 255, 0.04) 74%);
  1929. backdrop-filter: brightness(1.08);
  1930. }
  1931. 100% {
  1932. opacity: 0;
  1933. background: radial-gradient(circle at 50% 50%, rgba(255, 241, 168, 0) 0%, rgba(255, 241, 168, 0) 100%);
  1934. backdrop-filter: brightness(1);
  1935. }
  1936. }
  1937. @keyframes stage-fx-control {
  1938. 0% {
  1939. opacity: 0;
  1940. background: radial-gradient(circle at 50% 50%, rgba(138, 255, 235, 0.16) 0%, rgba(138, 255, 235, 0.06) 26%, rgba(255, 255, 255, 0) 60%);
  1941. backdrop-filter: brightness(1);
  1942. }
  1943. 36% {
  1944. opacity: 1;
  1945. background: radial-gradient(circle at 50% 50%, rgba(138, 255, 235, 0.24) 0%, rgba(138, 255, 235, 0.1) 32%, rgba(255, 255, 255, 0.03) 72%);
  1946. backdrop-filter: brightness(1.03);
  1947. }
  1948. 100% {
  1949. opacity: 0;
  1950. background: radial-gradient(circle at 50% 50%, rgba(138, 255, 235, 0) 0%, rgba(138, 255, 235, 0) 100%);
  1951. backdrop-filter: brightness(1);
  1952. }
  1953. }