styles.css 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718
  1. :root {
  2. color-scheme: light;
  3. --bg: #eef2f7;
  4. --phone: #f7f9fc;
  5. --text: #172033;
  6. --muted: #758197;
  7. --line: #e4e9f0;
  8. --primary: #0b8f71;
  9. --primary-dark: #087158;
  10. --accent: #f2b84b;
  11. --soft: #e8f6f1;
  12. --card: #ffffff;
  13. --danger: #d85f45;
  14. }
  15. * {
  16. box-sizing: border-box;
  17. }
  18. body {
  19. margin: 0;
  20. min-height: 100vh;
  21. font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", sans-serif;
  22. color: var(--text);
  23. background:
  24. linear-gradient(135deg, rgba(11, 143, 113, 0.10), rgba(242, 184, 75, 0.14)),
  25. var(--bg);
  26. }
  27. button,
  28. input,
  29. select,
  30. textarea {
  31. font: inherit;
  32. }
  33. button {
  34. cursor: pointer;
  35. }
  36. .preview-shell {
  37. min-height: 100vh;
  38. display: grid;
  39. place-items: center;
  40. padding: 24px;
  41. }
  42. .phone {
  43. position: relative;
  44. width: min(390px, 100%);
  45. height: min(844px, calc(100vh - 48px));
  46. min-height: 700px;
  47. display: flex;
  48. flex-direction: column;
  49. overflow: hidden;
  50. border: 10px solid #111827;
  51. border-radius: 34px;
  52. background: var(--phone);
  53. box-shadow: 0 28px 80px rgba(17, 24, 39, 0.22);
  54. }
  55. .status-bar {
  56. height: 34px;
  57. display: flex;
  58. align-items: center;
  59. justify-content: space-between;
  60. padding: 0 20px;
  61. font-size: 12px;
  62. font-weight: 700;
  63. background: #ffffff;
  64. }
  65. .status-icons {
  66. letter-spacing: 0;
  67. }
  68. .miniapp-top {
  69. height: 48px;
  70. display: grid;
  71. grid-template-columns: 40px 1fr 72px;
  72. align-items: center;
  73. gap: 6px;
  74. padding: 0 12px;
  75. border-bottom: 1px solid var(--line);
  76. background: #ffffff;
  77. }
  78. .miniapp-top strong {
  79. text-align: center;
  80. font-size: 16px;
  81. }
  82. .icon-btn {
  83. width: 32px;
  84. height: 32px;
  85. border: 0;
  86. border-radius: 50%;
  87. background: transparent;
  88. color: var(--text);
  89. font-size: 26px;
  90. line-height: 1;
  91. }
  92. .capsule {
  93. justify-self: end;
  94. width: 66px;
  95. height: 30px;
  96. display: flex;
  97. align-items: center;
  98. justify-content: space-around;
  99. border: 1px solid var(--line);
  100. border-radius: 18px;
  101. background: #fff;
  102. }
  103. .capsule span,
  104. .capsule i {
  105. width: 5px;
  106. height: 5px;
  107. border-radius: 50%;
  108. background: #111827;
  109. }
  110. .capsule i {
  111. width: 14px;
  112. height: 14px;
  113. border: 2px solid #111827;
  114. background: transparent;
  115. }
  116. .page-stack {
  117. position: relative;
  118. flex: 1;
  119. overflow: hidden;
  120. }
  121. .page {
  122. position: absolute;
  123. inset: 0;
  124. display: none;
  125. overflow-y: auto;
  126. padding: 16px 14px 96px;
  127. }
  128. .page.active {
  129. display: block;
  130. }
  131. .hero-panel {
  132. padding: 20px;
  133. border-radius: 20px;
  134. color: #fff;
  135. background:
  136. linear-gradient(145deg, rgba(8, 113, 88, 0.96), rgba(17, 38, 67, 0.94)),
  137. #0b8f71;
  138. }
  139. .hero-panel p,
  140. .page-heading p,
  141. .content-block p,
  142. .customer-card p,
  143. .pipeline p,
  144. .board-summary p,
  145. .form-card .toast {
  146. margin: 0;
  147. color: var(--muted);
  148. font-size: 12px;
  149. line-height: 1.5;
  150. }
  151. .hero-panel p {
  152. color: rgba(255, 255, 255, 0.78);
  153. }
  154. .hero-panel h1,
  155. .page-heading h1,
  156. .customer-main h1 {
  157. margin: 6px 0 0;
  158. font-size: 24px;
  159. line-height: 1.2;
  160. }
  161. .metric-row {
  162. display: grid;
  163. grid-template-columns: repeat(3, 1fr);
  164. gap: 10px;
  165. margin-top: 18px;
  166. }
  167. .metric-row article {
  168. min-width: 0;
  169. padding: 12px 8px;
  170. border-radius: 14px;
  171. background: rgba(255, 255, 255, 0.14);
  172. }
  173. .metric-row strong {
  174. display: block;
  175. font-size: 22px;
  176. }
  177. .metric-row span {
  178. display: block;
  179. margin-top: 2px;
  180. color: rgba(255, 255, 255, 0.76);
  181. font-size: 12px;
  182. }
  183. .quick-actions {
  184. display: grid;
  185. grid-template-columns: repeat(3, minmax(0, 1fr));
  186. gap: 10px;
  187. margin: 14px 0;
  188. }
  189. .quick-actions button,
  190. .block-title button,
  191. .segmented button {
  192. min-height: 38px;
  193. border: 1px solid var(--line);
  194. border-radius: 12px;
  195. background: #ffffff;
  196. color: var(--text);
  197. font-size: 13px;
  198. }
  199. .content-block,
  200. .form-card,
  201. .customer-card,
  202. .pipeline article,
  203. .board-summary article {
  204. border: 1px solid var(--line);
  205. border-radius: 16px;
  206. background: var(--card);
  207. box-shadow: 0 8px 24px rgba(31, 41, 55, 0.05);
  208. }
  209. .content-block {
  210. padding: 14px;
  211. margin-top: 12px;
  212. }
  213. .content-block.compact {
  214. margin-top: 14px;
  215. }
  216. .block-title,
  217. .stage-head {
  218. display: flex;
  219. align-items: center;
  220. justify-content: space-between;
  221. gap: 12px;
  222. margin-bottom: 12px;
  223. }
  224. .block-title h2 {
  225. margin: 0;
  226. font-size: 16px;
  227. }
  228. .block-title span,
  229. .stage-head span {
  230. color: var(--primary);
  231. font-size: 12px;
  232. font-weight: 700;
  233. }
  234. .task-list {
  235. display: grid;
  236. gap: 12px;
  237. margin: 0;
  238. padding: 0;
  239. list-style: none;
  240. }
  241. .task-list li,
  242. .feed-item,
  243. .reminder-row,
  244. .rank-row {
  245. display: flex;
  246. align-items: flex-start;
  247. gap: 10px;
  248. }
  249. .task-list b,
  250. .reminder-row b,
  251. .rank-row b {
  252. flex: 0 0 auto;
  253. min-width: 46px;
  254. padding: 5px 8px;
  255. border-radius: 10px;
  256. background: var(--soft);
  257. color: var(--primary-dark);
  258. text-align: center;
  259. font-size: 12px;
  260. }
  261. .task-list strong,
  262. .feed-item strong,
  263. .reminder-row strong,
  264. .timeline strong {
  265. display: block;
  266. margin-bottom: 3px;
  267. font-size: 14px;
  268. }
  269. .feed-item + .feed-item,
  270. .rank-row + .rank-row {
  271. margin-top: 12px;
  272. }
  273. .avatar {
  274. flex: 0 0 auto;
  275. width: 34px;
  276. height: 34px;
  277. display: grid;
  278. place-items: center;
  279. border-radius: 50%;
  280. background: #e9f0ff;
  281. color: #31579f;
  282. font-weight: 800;
  283. }
  284. .avatar.green {
  285. background: var(--soft);
  286. color: var(--primary-dark);
  287. }
  288. .avatar.large {
  289. width: 52px;
  290. height: 52px;
  291. font-size: 20px;
  292. }
  293. .page-heading {
  294. padding: 4px 4px 14px;
  295. }
  296. .form-card,
  297. .customer-card {
  298. padding: 16px;
  299. }
  300. .form-card {
  301. display: grid;
  302. gap: 13px;
  303. }
  304. label {
  305. display: grid;
  306. gap: 7px;
  307. }
  308. label span {
  309. color: #4a5568;
  310. font-size: 13px;
  311. font-weight: 700;
  312. }
  313. input,
  314. select,
  315. textarea {
  316. width: 100%;
  317. border: 1px solid var(--line);
  318. border-radius: 12px;
  319. background: #fbfcfe;
  320. color: var(--text);
  321. padding: 11px 12px;
  322. outline: none;
  323. }
  324. textarea {
  325. resize: vertical;
  326. }
  327. input:focus,
  328. select:focus,
  329. textarea:focus {
  330. border-color: var(--primary);
  331. box-shadow: 0 0 0 3px rgba(11, 143, 113, 0.12);
  332. }
  333. .primary-btn {
  334. min-height: 46px;
  335. border: 0;
  336. border-radius: 14px;
  337. background: var(--primary);
  338. color: #fff;
  339. font-weight: 800;
  340. }
  341. .customer-main {
  342. display: flex;
  343. align-items: center;
  344. gap: 12px;
  345. }
  346. .customer-main > div {
  347. flex: 1;
  348. min-width: 0;
  349. }
  350. .customer-main em {
  351. padding: 5px 9px;
  352. border-radius: 999px;
  353. background: #fff4d8;
  354. color: #94620c;
  355. font-size: 12px;
  356. font-style: normal;
  357. font-weight: 800;
  358. }
  359. .tag-row {
  360. display: flex;
  361. flex-wrap: wrap;
  362. gap: 8px;
  363. margin-top: 14px;
  364. }
  365. .tag-row span {
  366. padding: 6px 10px;
  367. border-radius: 999px;
  368. background: #f1f4f8;
  369. color: #526071;
  370. font-size: 12px;
  371. }
  372. .info-list {
  373. display: grid;
  374. gap: 10px;
  375. margin: 0;
  376. }
  377. .info-list div {
  378. display: flex;
  379. justify-content: space-between;
  380. gap: 12px;
  381. }
  382. .info-list dt {
  383. color: var(--muted);
  384. font-size: 13px;
  385. }
  386. .info-list dd {
  387. margin: 0;
  388. font-size: 13px;
  389. font-weight: 700;
  390. }
  391. .timeline {
  392. position: relative;
  393. display: grid;
  394. gap: 14px;
  395. margin: 0;
  396. padding-left: 20px;
  397. }
  398. .timeline li::marker {
  399. color: var(--primary);
  400. }
  401. .timeline span {
  402. display: block;
  403. margin-top: 4px;
  404. color: var(--muted);
  405. font-size: 12px;
  406. }
  407. .segmented {
  408. display: grid;
  409. grid-template-columns: repeat(3, 1fr);
  410. gap: 8px;
  411. }
  412. .segmented button.selected {
  413. border-color: var(--primary);
  414. background: var(--soft);
  415. color: var(--primary-dark);
  416. font-weight: 800;
  417. }
  418. .toast {
  419. position: absolute;
  420. left: 18px;
  421. right: 18px;
  422. bottom: 84px;
  423. z-index: 10;
  424. min-height: 18px;
  425. padding: 10px 12px;
  426. border-radius: 12px;
  427. background: rgba(17, 24, 39, 0.9);
  428. color: #fff;
  429. text-align: center;
  430. opacity: 0;
  431. transform: translateY(8px);
  432. pointer-events: none;
  433. transition: 0.18s ease;
  434. }
  435. .toast.show {
  436. opacity: 1;
  437. transform: translateY(0);
  438. color: #fff;
  439. font-weight: 700;
  440. }
  441. .board-summary {
  442. display: grid;
  443. grid-template-columns: 1fr 1fr;
  444. gap: 12px;
  445. margin-bottom: 12px;
  446. }
  447. .board-summary article {
  448. padding: 14px;
  449. }
  450. .board-summary span {
  451. color: var(--muted);
  452. font-size: 12px;
  453. }
  454. .board-summary strong {
  455. display: block;
  456. margin: 6px 0 2px;
  457. font-size: 20px;
  458. }
  459. .pipeline {
  460. display: grid;
  461. gap: 10px;
  462. }
  463. .pipeline article {
  464. padding: 14px;
  465. }
  466. .stage-head {
  467. margin-bottom: 9px;
  468. }
  469. .bar {
  470. height: 8px;
  471. overflow: hidden;
  472. border-radius: 999px;
  473. background: #edf1f5;
  474. }
  475. .bar i {
  476. display: block;
  477. height: 100%;
  478. border-radius: inherit;
  479. background: linear-gradient(90deg, var(--primary), var(--accent));
  480. }
  481. .pipeline p {
  482. margin-top: 8px;
  483. }
  484. .rank-row {
  485. align-items: center;
  486. }
  487. .rank-row span {
  488. flex: 1;
  489. font-size: 14px;
  490. }
  491. .rank-row strong {
  492. color: var(--primary-dark);
  493. font-size: 14px;
  494. }
  495. .tabbar {
  496. height: 76px;
  497. display: grid;
  498. grid-template-columns: repeat(5, 1fr);
  499. gap: 2px;
  500. padding: 8px 8px 10px;
  501. border-top: 1px solid var(--line);
  502. background: rgba(255, 255, 255, 0.96);
  503. }
  504. .tabbar button {
  505. display: grid;
  506. place-items: center;
  507. gap: 2px;
  508. border: 0;
  509. border-radius: 12px;
  510. background: transparent;
  511. color: #7b8797;
  512. font-size: 11px;
  513. }
  514. .tabbar span {
  515. font-size: 19px;
  516. line-height: 1;
  517. }
  518. .tabbar button.active {
  519. background: var(--soft);
  520. color: var(--primary-dark);
  521. font-weight: 800;
  522. }
  523. @media (max-width: 430px) {
  524. .preview-shell {
  525. padding: 0;
  526. }
  527. .phone {
  528. width: 100vw;
  529. height: 100svh;
  530. min-height: 0;
  531. border: 0;
  532. border-radius: 0;
  533. }
  534. .status-bar {
  535. height: 28px;
  536. padding: 0 16px;
  537. }
  538. .miniapp-top {
  539. height: 44px;
  540. }
  541. .page {
  542. padding: 12px 12px 86px;
  543. }
  544. .hero-panel {
  545. padding: 16px;
  546. border-radius: 16px;
  547. }
  548. .hero-panel h1,
  549. .page-heading h1,
  550. .customer-main h1 {
  551. font-size: 22px;
  552. }
  553. .metric-row {
  554. gap: 8px;
  555. margin-top: 14px;
  556. }
  557. .metric-row article {
  558. padding: 10px 6px;
  559. border-radius: 12px;
  560. }
  561. .metric-row strong {
  562. font-size: 20px;
  563. }
  564. .quick-actions {
  565. gap: 8px;
  566. margin: 12px 0;
  567. }
  568. .quick-actions button,
  569. .block-title button,
  570. .segmented button {
  571. min-height: 42px;
  572. }
  573. .content-block,
  574. .form-card,
  575. .customer-card {
  576. border-radius: 14px;
  577. }
  578. .content-block {
  579. padding: 12px;
  580. }
  581. .form-card,
  582. .customer-card {
  583. padding: 14px;
  584. }
  585. .task-list {
  586. gap: 10px;
  587. }
  588. .task-list b,
  589. .reminder-row b,
  590. .rank-row b {
  591. min-width: 42px;
  592. }
  593. .customer-main {
  594. align-items: flex-start;
  595. }
  596. .board-summary {
  597. gap: 8px;
  598. }
  599. .pipeline {
  600. gap: 8px;
  601. }
  602. .tabbar {
  603. height: 68px;
  604. padding: 6px 6px 8px;
  605. }
  606. .tabbar button {
  607. border-radius: 10px;
  608. }
  609. .toast {
  610. bottom: 76px;
  611. }
  612. }