与牧同行-小程序用户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

505 lines
8.6 KiB

  1. /* pages/login/login.wxss */
  2. .login-container {
  3. height: 100vh;
  4. width: 100%;
  5. position: relative;
  6. overflow: hidden;
  7. background: linear-gradient(180deg, #f8fafc 0%, #f0f9ff 100%);
  8. }
  9. /* 波浪背景 */
  10. .wave-background {
  11. position: absolute;
  12. top: 0;
  13. left: 0;
  14. width: 100%;
  15. height: 400rpx;
  16. overflow: hidden;
  17. }
  18. .wave {
  19. position: absolute;
  20. bottom: 0;
  21. width: 200%;
  22. height: 100%;
  23. background: linear-gradient(90deg, #86D8D0 0%, #A8E6CF 100%);
  24. border-radius: 0 0 50% 50%;
  25. animation: waveMove 15s linear infinite;
  26. }
  27. .wave-1 {
  28. opacity: 0.7;
  29. animation-delay: 0s;
  30. }
  31. .wave-2 {
  32. opacity: 0.5;
  33. animation-delay: 5s;
  34. background: linear-gradient(90deg, #7ACCC4 0%, #98D6C6 100%);
  35. }
  36. .wave-3 {
  37. opacity: 0.3;
  38. animation-delay: 10s;
  39. background: linear-gradient(90deg, #6EC0B8 0%, #88C6BD 100%);
  40. }
  41. @keyframes waveMove {
  42. 0% {
  43. transform: translateX(0) rotate(0deg);
  44. }
  45. 50% {
  46. transform: translateX(-25%) rotate(1deg);
  47. }
  48. 100% {
  49. transform: translateX(-50%) rotate(0deg);
  50. }
  51. }
  52. /* 装饰元素 */
  53. .decorations {
  54. position: absolute;
  55. width: 100%;
  56. height: 100%;
  57. pointer-events: none;
  58. }
  59. .cloud {
  60. position: absolute;
  61. background-color: rgba(255, 255, 255, 0.9);
  62. border-radius: 100rpx;
  63. }
  64. .cloud-1 {
  65. width: 120rpx;
  66. height: 40rpx;
  67. top: 120rpx;
  68. left: 10%;
  69. box-shadow:
  70. 20rpx 0 0 0 rgba(255, 255, 255, 0.9),
  71. 40rpx 0 0 0 rgba(255, 255, 255, 0.9);
  72. }
  73. .cloud-2 {
  74. width: 90rpx;
  75. height: 30rpx;
  76. top: 80rpx;
  77. right: 15%;
  78. box-shadow:
  79. 15rpx 0 0 0 rgba(255, 255, 255, 0.9),
  80. 30rpx 0 0 0 rgba(255, 255, 255, 0.9);
  81. }
  82. .cloud-3 {
  83. width: 70rpx;
  84. height: 25rpx;
  85. top: 180rpx;
  86. left: 70%;
  87. box-shadow:
  88. 12rpx 0 0 0 rgba(255, 255, 255, 0.9),
  89. 24rpx 0 0 0 rgba(255, 255, 255, 0.9);
  90. }
  91. .grass {
  92. position: absolute;
  93. bottom: 0;
  94. width: 8rpx;
  95. background-color: #86D8D0;
  96. border-radius: 4rpx 4rpx 0 0;
  97. }
  98. .grass-1 {
  99. height: 80rpx;
  100. left: 20%;
  101. }
  102. .grass-2 {
  103. height: 60rpx;
  104. left: 35%;
  105. }
  106. .grass-3 {
  107. height: 100rpx;
  108. left: 50%;
  109. }
  110. .grass:before,
  111. .grass:after {
  112. content: '';
  113. position: absolute;
  114. width: 8rpx;
  115. background-color: #86D8D0;
  116. border-radius: 4rpx;
  117. }
  118. .grass:before {
  119. height: 40rpx;
  120. transform: rotate(-30deg);
  121. top: -20rpx;
  122. left: -10rpx;
  123. }
  124. .grass:after {
  125. height: 30rpx;
  126. transform: rotate(30deg);
  127. top: -15rpx;
  128. right: -10rpx;
  129. }
  130. .sheep {
  131. position: absolute;
  132. bottom: 120rpx;
  133. right: 20%;
  134. width: 80rpx;
  135. height: 50rpx;
  136. background-color: white;
  137. border-radius: 50%;
  138. box-shadow:
  139. -15rpx -10rpx 0 0 white,
  140. 15rpx -8rpx 0 0 white;
  141. }
  142. .sheep:before {
  143. content: '';
  144. position: absolute;
  145. width: 20rpx;
  146. height: 20rpx;
  147. background-color: #333;
  148. border-radius: 50%;
  149. top: -5rpx;
  150. left: 15rpx;
  151. }
  152. /* 主要内容区域 */
  153. .main-content {
  154. position: relative;
  155. z-index: 10;
  156. height: 100%;
  157. display: flex;
  158. flex-direction: column;
  159. padding: 0 60rpx;
  160. padding-top: 120rpx;
  161. }
  162. /* Logo区域 */
  163. .logo-section {
  164. display: flex;
  165. flex-direction: column;
  166. align-items: center;
  167. margin-bottom: 120rpx;
  168. }
  169. .logo-container {
  170. margin-bottom: 40rpx;
  171. }
  172. .logo-circle {
  173. width: 180rpx;
  174. height: 180rpx;
  175. border-radius: 50%;
  176. background: linear-gradient(135deg, #86D8D0 0%, #6BC4BC 100%);
  177. display: flex;
  178. align-items: center;
  179. justify-content: center;
  180. box-shadow:
  181. 0 20rpx 40rpx rgba(134, 216, 208, 0.3),
  182. inset 0 -4rpx 8rpx rgba(107, 196, 188, 0.4),
  183. inset 0 4rpx 8rpx rgba(255, 255, 255, 0.8);
  184. position: relative;
  185. }
  186. .logo-circle:before {
  187. content: '';
  188. position: absolute;
  189. width: 160rpx;
  190. height: 160rpx;
  191. border-radius: 50%;
  192. border: 2rpx solid rgba(255, 255, 255, 0.3);
  193. }
  194. .logo-inner {
  195. width: 140rpx;
  196. height: 140rpx;
  197. border-radius: 50%;
  198. background: white;
  199. display: flex;
  200. align-items: center;
  201. justify-content: center;
  202. box-shadow:
  203. inset 0 4rpx 8rpx rgba(134, 216, 208, 0.2),
  204. 0 4rpx 8rpx rgba(0, 0, 0, 0.1);
  205. }
  206. .logo-text {
  207. font-size: 64rpx;
  208. font-weight: bold;
  209. color: #86D8D0;
  210. letter-spacing: 4rpx;
  211. }
  212. .app-title {
  213. font-size: 56rpx;
  214. font-weight: 700;
  215. color: #333;
  216. margin-bottom: 16rpx;
  217. letter-spacing: 2rpx;
  218. }
  219. /* 登录区域 */
  220. .login-section {
  221. display: flex;
  222. flex-direction: column;
  223. align-items: center;
  224. }
  225. .welcome-text {
  226. text-align: center;
  227. margin-bottom: 80rpx;
  228. }
  229. .welcome-main {
  230. display: block;
  231. font-size: 44rpx;
  232. font-weight: 600;
  233. color: #333;
  234. margin-bottom: 16rpx;
  235. }
  236. .welcome-desc {
  237. display: block;
  238. font-size: 28rpx;
  239. color: #888;
  240. font-weight: 300;
  241. }
  242. /* 手机号登录按钮 */
  243. .phone-login-btn {
  244. width: 100%;
  245. height: 100rpx;
  246. border-radius: 50rpx;
  247. background: linear-gradient(to right, #86D8D0, #6BC4BC);
  248. box-shadow:
  249. 0 12rpx 24rpx rgba(134, 216, 208, 0.3),
  250. 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
  251. margin-bottom: 50rpx;
  252. transition: all 0.3s ease;
  253. }
  254. .phone-btn-hover {
  255. transform: translateY(-4rpx);
  256. box-shadow:
  257. 0 16rpx 32rpx rgba(134, 216, 208, 0.4),
  258. 0 6rpx 16rpx rgba(0, 0, 0, 0.12);
  259. }
  260. .btn-inner {
  261. display: flex;
  262. align-items: center;
  263. justify-content: center;
  264. height: 100%;
  265. }
  266. .btn-inner image {
  267. width: 45rpx;
  268. height: 45rpx;
  269. padding: 0 20rpx;
  270. }
  271. .btn-text {
  272. color: white;
  273. font-size: 34rpx;
  274. font-weight: 500;
  275. letter-spacing: 2rpx;
  276. }
  277. /* 协议确认 */
  278. .agreement-section {
  279. display: flex;
  280. align-items: center;
  281. justify-content: center;
  282. }
  283. .agreement-checkbox {
  284. width: 30rpx;
  285. height: 30rpx;
  286. border: 2rpx solid #ccc;
  287. border-radius: 6rpx;
  288. margin-right: 16rpx;
  289. display: flex;
  290. align-items: center;
  291. justify-content: center;
  292. transition: all 0.2s ease;
  293. }
  294. .agreement-checkbox.checked {
  295. background-color: #86D8D0;
  296. border-color: #86D8D0;
  297. }
  298. .checkmark {
  299. color: white;
  300. font-size: 24rpx;
  301. font-weight: bold;
  302. }
  303. .agreement-text {
  304. font-size: 24rpx;
  305. color: #888;
  306. display: flex;
  307. align-items: center;
  308. }
  309. .link {
  310. color: #86D8D0;
  311. }
  312. /* 底部装饰 */
  313. .bottom-decor {
  314. position: absolute;
  315. bottom: 0;
  316. left: 0;
  317. width: 100%;
  318. height: 60rpx;
  319. overflow: hidden;
  320. }
  321. .bottom-wave {
  322. position: absolute;
  323. top: 0;
  324. left: 0;
  325. width: 200%;
  326. height: 200%;
  327. background: linear-gradient(90deg, #86D8D0 0%, #A8E6CF 100%);
  328. border-radius: 50% 50% 0 0;
  329. animation: bottomWave 20s linear infinite;
  330. }
  331. @keyframes bottomWave {
  332. 0% {
  333. transform: translateX(0) rotate(0deg);
  334. }
  335. 50% {
  336. transform: translateX(-25%) rotate(0.5deg);
  337. }
  338. 100% {
  339. transform: translateX(-50%) rotate(0deg);
  340. }
  341. }
  342. /* 协议弹窗 */
  343. .agreement-modal {
  344. position: fixed;
  345. top: 0;
  346. left: 0;
  347. width: 100%;
  348. height: 100%;
  349. z-index: 1000;
  350. display: flex;
  351. align-items: center;
  352. justify-content: center;
  353. }
  354. .modal-mask {
  355. position: absolute;
  356. top: 0;
  357. left: 0;
  358. width: 100%;
  359. height: 100%;
  360. background-color: rgba(0, 0, 0, 0.5);
  361. }
  362. .modal-content {
  363. position: relative;
  364. width: 85%;
  365. max-height: 80%;
  366. background-color: white;
  367. border-radius: 24rpx;
  368. overflow: hidden;
  369. box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.15);
  370. }
  371. .modal-header {
  372. padding: 40rpx;
  373. border-bottom: 1rpx solid #f0f0f0;
  374. display: flex;
  375. align-items: center;
  376. justify-content: space-between;
  377. }
  378. .modal-title {
  379. font-size: 36rpx;
  380. font-weight: 600;
  381. color: #333;
  382. }
  383. .modal-close {
  384. font-size: 48rpx;
  385. color: #999;
  386. line-height: 1;
  387. }
  388. .modal-body {
  389. max-height: 600rpx;
  390. padding: 20rpx;
  391. box-sizing: border-box;
  392. }
  393. .modal-text {
  394. font-size: 28rpx;
  395. color: #666;
  396. line-height: 1.8;
  397. padding: 20rpx 0;
  398. }
  399. /* 加载提示 */
  400. .loading-mask {
  401. position: fixed;
  402. top: 0;
  403. left: 0;
  404. width: 100%;
  405. height: 100%;
  406. background-color: rgba(0, 0, 0, 0.5);
  407. z-index: 1001;
  408. display: flex;
  409. align-items: center;
  410. justify-content: center;
  411. }
  412. .loading-content {
  413. display: flex;
  414. flex-direction: column;
  415. align-items: center;
  416. }
  417. .loading-spinner {
  418. width: 80rpx;
  419. height: 80rpx;
  420. border: 6rpx solid rgba(134, 216, 208, 0.2);
  421. border-top-color: #86D8D0;
  422. border-radius: 50%;
  423. animation: loadingSpin 1s linear infinite;
  424. margin-bottom: 30rpx;
  425. }
  426. @keyframes loadingSpin {
  427. 0% {
  428. transform: rotate(0deg);
  429. }
  430. 100% {
  431. transform: rotate(360deg);
  432. }
  433. }
  434. .loading-text {
  435. font-size: 28rpx;
  436. color: #fff;
  437. font-weight: 300;
  438. }