map.wxss 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. .page {
  2. height: 100vh;
  3. padding: 20rpx 20rpx 24rpx;
  4. box-sizing: border-box;
  5. display: flex;
  6. flex-direction: column;
  7. overflow: hidden;
  8. background:
  9. radial-gradient(circle at top left, #d8f3dc 0%, rgba(216, 243, 220, 0) 32%),
  10. linear-gradient(180deg, #f7fbf2 0%, #eef6ea 100%);
  11. color: #163020;
  12. }
  13. .page__header {
  14. display: flex;
  15. align-items: flex-start;
  16. justify-content: space-between;
  17. margin-bottom: 16rpx;
  18. flex-shrink: 0;
  19. }
  20. .page__eyebrow {
  21. font-size: 20rpx;
  22. letter-spacing: 4rpx;
  23. color: #5f7a65;
  24. }
  25. .page__title {
  26. margin-top: 8rpx;
  27. font-size: 44rpx;
  28. font-weight: 600;
  29. }
  30. .page__badge {
  31. padding: 10rpx 18rpx;
  32. border-radius: 999rpx;
  33. background: #163020;
  34. color: #f7fbf2;
  35. font-size: 22rpx;
  36. }
  37. .map-stage-wrap {
  38. position: relative;
  39. width: 100%;
  40. height: 66vh;
  41. min-height: 520rpx;
  42. max-height: 72vh;
  43. flex-shrink: 0;
  44. margin-bottom: 16rpx;
  45. }
  46. .map-stage {
  47. position: relative;
  48. width: 100%;
  49. height: 100%;
  50. overflow: hidden;
  51. border: 2rpx solid rgba(22, 48, 32, 0.08);
  52. border-radius: 32rpx;
  53. background: #dbeed4;
  54. box-shadow: 0 18rpx 40rpx rgba(22, 48, 32, 0.08);
  55. }
  56. .map-content {
  57. position: absolute;
  58. inset: 0;
  59. }
  60. .map-canvas {
  61. position: absolute;
  62. inset: 0;
  63. width: 100%;
  64. height: 100%;
  65. display: block;
  66. }
  67. .map-canvas--base {
  68. z-index: 1;
  69. }
  70. .map-stage__crosshair {
  71. position: absolute;
  72. left: 50%;
  73. top: 50%;
  74. width: 44rpx;
  75. height: 44rpx;
  76. transform: translate(-50%, -50%);
  77. border: 3rpx solid rgba(255, 255, 255, 0.95);
  78. border-radius: 50%;
  79. box-shadow: 0 0 0 4rpx rgba(22, 48, 32, 0.2);
  80. pointer-events: none;
  81. z-index: 3;
  82. }
  83. .map-stage__crosshair::before,
  84. .map-stage__crosshair::after {
  85. content: '';
  86. position: absolute;
  87. background: rgba(255, 255, 255, 0.95);
  88. }
  89. .map-stage__crosshair::before {
  90. left: 50%;
  91. top: -18rpx;
  92. width: 2rpx;
  93. height: 76rpx;
  94. transform: translateX(-50%);
  95. }
  96. .map-stage__crosshair::after {
  97. left: -18rpx;
  98. top: 50%;
  99. width: 76rpx;
  100. height: 2rpx;
  101. transform: translateY(-50%);
  102. }
  103. .map-stage__overlay {
  104. position: absolute;
  105. inset: 0;
  106. display: flex;
  107. align-items: flex-start;
  108. justify-content: space-between;
  109. padding: 24rpx;
  110. box-sizing: border-box;
  111. pointer-events: none;
  112. z-index: 4;
  113. }
  114. .overlay-card {
  115. width: 68%;
  116. padding: 22rpx;
  117. border-radius: 24rpx;
  118. background: rgba(247, 251, 242, 0.92);
  119. box-shadow: 0 12rpx 30rpx rgba(22, 48, 32, 0.08);
  120. }
  121. .overlay-card__label {
  122. font-size: 20rpx;
  123. letter-spacing: 3rpx;
  124. color: #5f7a65;
  125. }
  126. .overlay-card__title {
  127. margin-top: 10rpx;
  128. font-size: 34rpx;
  129. font-weight: 600;
  130. }
  131. .overlay-card__desc {
  132. margin-top: 12rpx;
  133. font-size: 24rpx;
  134. line-height: 1.6;
  135. color: #45624b;
  136. }
  137. .compass-widget {
  138. display: flex;
  139. flex-direction: column;
  140. align-items: center;
  141. gap: 10rpx;
  142. }
  143. .compass-widget__ring {
  144. position: relative;
  145. width: 108rpx;
  146. height: 108rpx;
  147. border-radius: 50%;
  148. background: rgba(247, 251, 242, 0.94);
  149. border: 2rpx solid rgba(22, 48, 32, 0.12);
  150. box-shadow: 0 10rpx 24rpx rgba(22, 48, 32, 0.1);
  151. }
  152. .compass-widget__north {
  153. position: absolute;
  154. left: 50%;
  155. top: 10rpx;
  156. transform: translateX(-50%);
  157. font-size: 20rpx;
  158. font-weight: 700;
  159. color: #d62828;
  160. }
  161. .compass-widget__needle {
  162. position: absolute;
  163. left: 50%;
  164. top: 18rpx;
  165. width: 4rpx;
  166. height: 72rpx;
  167. transform-origin: 50% 36rpx;
  168. background: linear-gradient(180deg, #d62828 0%, #163020 100%);
  169. border-radius: 999rpx;
  170. }
  171. .compass-widget__center {
  172. position: absolute;
  173. left: 50%;
  174. top: 50%;
  175. width: 14rpx;
  176. height: 14rpx;
  177. transform: translate(-50%, -50%);
  178. border-radius: 50%;
  179. background: #163020;
  180. }
  181. .compass-widget__label {
  182. min-width: 92rpx;
  183. padding: 6rpx 10rpx;
  184. border-radius: 999rpx;
  185. background: rgba(247, 251, 242, 0.94);
  186. font-size: 20rpx;
  187. text-align: center;
  188. color: #163020;
  189. box-shadow: 0 8rpx 18rpx rgba(22, 48, 32, 0.08);
  190. }
  191. .info-panel {
  192. flex: 1;
  193. min-height: 0;
  194. padding: 22rpx 20rpx 28rpx;
  195. box-sizing: border-box;
  196. border-radius: 28rpx;
  197. background: rgba(255, 255, 255, 0.88);
  198. box-shadow: 0 12rpx 32rpx rgba(22, 48, 32, 0.08);
  199. }
  200. .info-panel__row {
  201. display: flex;
  202. align-items: center;
  203. justify-content: space-between;
  204. gap: 16rpx;
  205. padding: 10rpx 0;
  206. border-bottom: 1rpx solid rgba(22, 48, 32, 0.08);
  207. }
  208. .info-panel__row--stack {
  209. display: block;
  210. }
  211. .info-panel__row:last-of-type {
  212. border-bottom: none;
  213. }
  214. .info-panel__label {
  215. flex-shrink: 0;
  216. font-size: 22rpx;
  217. letter-spacing: 2rpx;
  218. color: #5f7a65;
  219. text-transform: uppercase;
  220. }
  221. .info-panel__value {
  222. font-size: 25rpx;
  223. color: #163020;
  224. text-align: right;
  225. word-break: break-all;
  226. }
  227. .info-panel__row--stack .info-panel__value {
  228. display: block;
  229. margin-top: 10rpx;
  230. text-align: left;
  231. color: #45624b;
  232. line-height: 1.5;
  233. }
  234. .info-panel__actions {
  235. display: flex;
  236. gap: 14rpx;
  237. margin-top: 18rpx;
  238. }
  239. .info-panel__actions--triple .info-panel__action {
  240. font-size: 23rpx;
  241. }
  242. .info-panel__action {
  243. flex: 1;
  244. min-width: 0;
  245. border-radius: 999rpx;
  246. background: #d7e8da;
  247. color: #163020;
  248. font-size: 26rpx;
  249. }
  250. .info-panel__action--primary {
  251. background: #2d6a4f;
  252. color: #f7fbf2;
  253. }
  254. .info-panel__action--secondary {
  255. background: #eef6ea;
  256. color: #45624b;
  257. }
  258. .info-panel__action--active {
  259. background: #2d6a4f;
  260. color: #f7fbf2;
  261. }
  262. .control-row {
  263. display: flex;
  264. gap: 14rpx;
  265. margin-top: 18rpx;
  266. }
  267. .control-row--triple .control-chip {
  268. font-size: 23rpx;
  269. }
  270. .control-chip {
  271. flex: 1;
  272. min-width: 0;
  273. padding: 20rpx 16rpx;
  274. border-radius: 999rpx;
  275. background: #d7e8da;
  276. color: #163020;
  277. font-size: 26rpx;
  278. text-align: center;
  279. box-sizing: border-box;
  280. }
  281. .control-chip--primary {
  282. background: #2d6a4f;
  283. color: #f7fbf2;
  284. }
  285. .control-chip--secondary {
  286. background: #eef6ea;
  287. color: #45624b;
  288. }
  289. .control-chip--active {
  290. background: #2d6a4f;
  291. color: #f7fbf2;
  292. }