bx-theme.scss 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755
  1. /* BX Fresh Mint — 备用金 list/apply/detail 所需样式(对齐 bx-mobile)
  2. * 在页面根节点加 class="bx-page",避免污染全局 .btn / .status-tag
  3. */
  4. .bx-page {
  5. --primary: #00c98d;
  6. --primary-dark: #00a874;
  7. --primary-darker: #008f62;
  8. --primary-bg: #eafff6;
  9. --primary-light: #f0fdf9;
  10. --success: #10b981;
  11. --success-bg: #ecfdf5;
  12. --success-border: #a7f3d0;
  13. --warning: #f59e0b;
  14. --warning-bg: #fffbeb;
  15. --warning-border: #fcd34d;
  16. --danger: #ef4444;
  17. --danger-bg: #fef2f2;
  18. --danger-border: #fecaca;
  19. --info: #3b82f6;
  20. --info-bg: #eff6ff;
  21. --info-border: #93c5fd;
  22. --processing: #6366f1;
  23. --processing-bg: #eef2ff;
  24. --processing-border: #a5b4fc;
  25. --text: #1a1a2e;
  26. --text-sec: #64748b;
  27. --text-muted: #94a3b8;
  28. --bg: #f8fafc;
  29. --surface: #fff;
  30. --border: #e2e8f0;
  31. --shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
  32. --r: 12px;
  33. --rs: 8px;
  34. --rl: 16px;
  35. --font: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif;
  36. --empty-fill-chrome: 230px;
  37. min-height: 100vh;
  38. padding-bottom: 80px;
  39. box-sizing: border-box;
  40. font-family: var(--font);
  41. font-size: 14px;
  42. color: var(--text);
  43. background: var(--bg);
  44. line-height: 1.5;
  45. }
  46. .bx-page.bx-page--form {
  47. padding-bottom: calc(80px + env(safe-area-inset-bottom, 0px));
  48. }
  49. .bx-page .page-padded {
  50. padding: 0 16px;
  51. }
  52. .bx-page > .topbar + .page-padded {
  53. padding-top: 5px;
  54. }
  55. .bx-page .search-wrap + .page-padded {
  56. padding-top: 5px;
  57. }
  58. /* Topbar — 对齐仪表盘白底顶栏 */
  59. .bx-page .topbar {
  60. position: sticky;
  61. top: 0;
  62. z-index: 50;
  63. display: grid;
  64. grid-template-columns: minmax(0, 1fr) var(--sq-capsule-right-safe, 96px);
  65. align-items: center;
  66. height: var(--sq-header-height, calc(44px + 44px));
  67. padding: var(--sq-safe-top, 44px) 12px 0 8px;
  68. box-sizing: border-box;
  69. background: #fff;
  70. border-bottom: 1px solid #eee;
  71. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
  72. }
  73. .bx-page .topbar-left {
  74. display: flex;
  75. align-items: center;
  76. justify-content: flex-start;
  77. gap: 8px;
  78. min-width: 0;
  79. }
  80. .bx-page .topbar-back {
  81. font-size: 20px;
  82. color: #333;
  83. padding: 4px 8px;
  84. flex-shrink: 0;
  85. line-height: 1;
  86. }
  87. .bx-page .topbar-back:active {
  88. opacity: 0.75;
  89. }
  90. .bx-page .topbar-title {
  91. text-align: left;
  92. font-size: 17px;
  93. font-weight: 700;
  94. color: #111827;
  95. max-width: 100%;
  96. overflow: hidden;
  97. text-overflow: ellipsis;
  98. white-space: nowrap;
  99. }
  100. .bx-page .topbar-right {
  101. min-width: 0;
  102. min-height: 1px;
  103. }
  104. /* Search */
  105. .bx-page .search-wrap {
  106. padding: 12px 16px;
  107. background: var(--surface);
  108. }
  109. .bx-page .search-box {
  110. display: flex;
  111. align-items: center;
  112. gap: 8px;
  113. background: var(--bg);
  114. border: 1.5px solid var(--border);
  115. border-radius: 20px;
  116. padding: 0 14px;
  117. height: 40px;
  118. }
  119. .bx-page .search-box input,
  120. .bx-page .search-box .search-input {
  121. flex: 1;
  122. border: none;
  123. outline: none;
  124. background: transparent;
  125. font-size: 14px;
  126. color: var(--text);
  127. height: 38px;
  128. }
  129. .bx-page .search-box__clear {
  130. flex-shrink: 0;
  131. width: 28px;
  132. height: 28px;
  133. display: flex;
  134. align-items: center;
  135. justify-content: center;
  136. color: var(--text-muted);
  137. font-size: 16px;
  138. }
  139. /* 横向筛选 tag:flex 写在内层 view 上(scroll-view 自身不支持可靠 flex/gap,对齐地磅 db-filter-bar) */
  140. .bx-page .search-filter-scroll {
  141. width: 100%;
  142. white-space: nowrap;
  143. }
  144. .bx-page .search-filter {
  145. display: inline-flex;
  146. flex-direction: row;
  147. align-items: center;
  148. flex-wrap: nowrap;
  149. padding: 8px 0 4px;
  150. }
  151. .bx-page .filter-tag {
  152. display: inline-flex;
  153. align-items: center;
  154. justify-content: center;
  155. box-sizing: border-box;
  156. padding: 4px 12px;
  157. margin-right: 8px;
  158. border-radius: 14px;
  159. font-size: 12px;
  160. font-weight: 500;
  161. border: 1px solid var(--border);
  162. color: var(--text-sec);
  163. background: var(--surface);
  164. white-space: nowrap;
  165. flex-shrink: 0;
  166. }
  167. .bx-page .search-filter .filter-tag:last-child {
  168. margin-right: 0;
  169. }
  170. .bx-page .filter-tag.active {
  171. background: var(--primary-bg);
  172. border-color: var(--primary);
  173. color: var(--primary-dark);
  174. }
  175. /* Expense card */
  176. .bx-page .expense-card {
  177. background: var(--surface);
  178. border-radius: var(--r);
  179. padding: 16px;
  180. margin-bottom: 10px;
  181. border: 1px solid var(--border);
  182. box-shadow: var(--shadow);
  183. }
  184. .bx-page .expense-card:active {
  185. opacity: 0.96;
  186. }
  187. .bx-page .ec-top {
  188. display: flex;
  189. justify-content: space-between;
  190. align-items: center;
  191. gap: 10px;
  192. margin-bottom: 8px;
  193. }
  194. .bx-page .ec-type {
  195. flex: 1;
  196. min-width: 0;
  197. font-size: 15px;
  198. font-weight: 600;
  199. line-height: 1.3;
  200. }
  201. .bx-page .advance-list-card__title,
  202. .bx-page .reimburse-list-card__title {
  203. display: block;
  204. overflow: hidden;
  205. text-overflow: ellipsis;
  206. white-space: nowrap;
  207. }
  208. .bx-page .status-tag {
  209. display: inline-flex;
  210. align-items: center;
  211. justify-content: center;
  212. padding: 2px 10px;
  213. border-radius: 10px;
  214. font-size: 11px;
  215. font-weight: 600;
  216. border: 1px solid var(--border);
  217. white-space: nowrap;
  218. line-height: 1.25;
  219. background: var(--bg);
  220. color: var(--text-sec);
  221. flex-shrink: 0;
  222. }
  223. .bx-page .status-tag.s-draft {
  224. background: #f1f5f9;
  225. color: #64748b;
  226. border-color: rgba(100, 116, 139, 0.15);
  227. }
  228. .bx-page .status-tag.s-pending {
  229. background: var(--warning-bg);
  230. color: var(--warning);
  231. border-color: var(--warning-border);
  232. }
  233. .bx-page .status-tag.s-approved {
  234. background: var(--primary-bg);
  235. color: var(--primary-dark);
  236. border-color: rgba(0, 201, 141, 0.2);
  237. }
  238. .bx-page .status-tag.s-rejected {
  239. background: #fef2f2;
  240. color: #ef4444;
  241. border-color: rgba(239, 68, 68, 0.2);
  242. }
  243. .bx-page .status-tag.s-withdrawn {
  244. background: #fffbeb;
  245. color: #d97706;
  246. border-color: rgba(245, 158, 11, 0.25);
  247. }
  248. .bx-page .status-tag.s-issued {
  249. background: #eef2ff;
  250. color: #6366f1;
  251. border-color: rgba(99, 102, 241, 0.25);
  252. }
  253. .bx-page .status-tag.s-paid,
  254. .bx-page .status-tag.s-processed {
  255. background: var(--primary-bg);
  256. color: var(--primary-dark);
  257. border-color: rgba(0, 201, 141, 0.2);
  258. }
  259. .bx-page .status-tag.s-offset {
  260. background: #fffbeb;
  261. color: #d97706;
  262. border-color: rgba(245, 158, 11, 0.25);
  263. }
  264. .bx-page .ec-amount-label {
  265. font-size: 11px;
  266. color: var(--text-muted);
  267. margin-bottom: 2px;
  268. }
  269. .bx-page .ec-amount {
  270. font-size: 24px;
  271. font-weight: 800;
  272. color: var(--primary-dark) !important;
  273. margin-bottom: 6px;
  274. font-variant-numeric: tabular-nums;
  275. }
  276. .bx-page .ec-amount::before {
  277. content: '¥';
  278. font-size: 14px;
  279. margin-right: 2px;
  280. }
  281. .bx-page .advance-card-subs,
  282. .bx-page .reimburse-card-subs {
  283. display: flex;
  284. flex-direction: column;
  285. gap: 6px;
  286. margin-bottom: 8px;
  287. padding: 8px 0 2px;
  288. border-top: 1px solid var(--border);
  289. }
  290. .bx-page .advance-card-sub-row,
  291. .bx-page .reimburse-card-sub-row {
  292. display: flex;
  293. justify-content: space-between;
  294. align-items: center;
  295. font-size: 13px;
  296. line-height: 1.35;
  297. }
  298. .bx-page .advance-card-sub-row .k,
  299. .bx-page .reimburse-card-sub-row .k {
  300. color: var(--text-sec);
  301. flex-shrink: 0;
  302. margin-right: 8px;
  303. }
  304. .bx-page .advance-card-sub-row .v,
  305. .bx-page .reimburse-card-sub-row .v {
  306. font-weight: 600;
  307. color: var(--text);
  308. font-variant-numeric: tabular-nums;
  309. text-align: right;
  310. }
  311. .bx-page .list-card-kv {
  312. margin-top: 10px;
  313. padding: 10px 12px;
  314. border-radius: var(--rs);
  315. background: var(--bg);
  316. border: 1px solid var(--border);
  317. display: flex;
  318. flex-direction: column;
  319. gap: 6px;
  320. font-size: 12px;
  321. }
  322. .bx-page .list-card-kv__row {
  323. display: flex;
  324. justify-content: space-between;
  325. align-items: flex-start;
  326. gap: 10px;
  327. line-height: 1.45;
  328. }
  329. .bx-page .list-card-kv__k {
  330. flex-shrink: 0;
  331. color: var(--text-muted);
  332. font-size: 11px;
  333. max-width: 42%;
  334. }
  335. .bx-page .list-card-kv__v {
  336. flex: 1;
  337. min-width: 0;
  338. text-align: right;
  339. color: var(--text);
  340. font-weight: 500;
  341. word-break: break-word;
  342. }
  343. .bx-page .ec-meta {
  344. display: flex;
  345. gap: 12px;
  346. font-size: 12px;
  347. color: var(--text-muted);
  348. margin-top: 8px;
  349. }
  350. .bx-page .ec-bottom {
  351. display: flex;
  352. justify-content: flex-end;
  353. align-items: center;
  354. gap: 10px;
  355. margin-top: 10px;
  356. padding-top: 10px;
  357. border-top: 1px dashed var(--border);
  358. }
  359. .bx-page .op-actions {
  360. display: flex;
  361. gap: 8px;
  362. flex-wrap: wrap;
  363. justify-content: flex-end;
  364. }
  365. /* Buttons(覆盖全局 .btn) */
  366. .bx-page .btn {
  367. display: inline-flex;
  368. align-items: center;
  369. justify-content: center;
  370. gap: 6px;
  371. height: 40px;
  372. padding: 0 20px;
  373. border-radius: var(--rs);
  374. font-size: 14px;
  375. font-weight: 600;
  376. font-family: var(--font);
  377. border: 1px solid transparent;
  378. line-height: 1;
  379. box-sizing: border-box;
  380. }
  381. .bx-page .btn::after {
  382. border: none;
  383. }
  384. .bx-page .btn-primary {
  385. background: var(--primary) !important;
  386. color: #fff !important;
  387. border-color: var(--primary);
  388. }
  389. .bx-page .btn-danger {
  390. background: var(--danger) !important;
  391. color: #fff !important;
  392. border-color: var(--danger);
  393. }
  394. .bx-page .btn-secondary {
  395. background: var(--text-sec) !important;
  396. color: #fff !important;
  397. border-color: var(--text-sec);
  398. }
  399. .bx-page .btn-block {
  400. width: 100%;
  401. }
  402. .bx-page .btn-sm,
  403. .bx-page .op-actions .btn {
  404. height: 32px;
  405. padding: 0 12px;
  406. font-size: 12px;
  407. border-radius: 8px;
  408. }
  409. .bx-page .btn[disabled],
  410. .bx-page .btn-loading {
  411. opacity: 0.65;
  412. }
  413. /* Form */
  414. .bx-page .form-card {
  415. background: var(--surface);
  416. border-radius: var(--r);
  417. padding: 16px;
  418. border: 1px solid var(--border);
  419. }
  420. .bx-page .form-card + .form-card {
  421. margin-top: 12px;
  422. }
  423. .bx-page .form-header {
  424. display: flex;
  425. align-items: center;
  426. gap: 8px;
  427. margin-bottom: 16px;
  428. }
  429. .bx-page .form-header h3,
  430. .bx-page .form-header .form-header-title {
  431. font-size: 16px;
  432. font-weight: 700;
  433. margin: 0;
  434. }
  435. .bx-page .form-badge {
  436. font-size: 11px;
  437. font-weight: 600;
  438. padding: 2px 8px;
  439. border-radius: 4px;
  440. background: var(--primary-bg);
  441. color: var(--primary-dark);
  442. }
  443. .bx-page .field {
  444. margin-bottom: 14px;
  445. }
  446. .bx-page .field-label {
  447. display: block;
  448. font-size: 13px;
  449. font-weight: 600;
  450. color: var(--text);
  451. margin-bottom: 6px;
  452. }
  453. .bx-page .field-label .req {
  454. color: var(--danger);
  455. margin-left: 2px;
  456. }
  457. .bx-page .form-input,
  458. .bx-page .form-textarea {
  459. width: 100%;
  460. padding: 0 12px;
  461. border: 1.5px solid var(--border);
  462. border-radius: var(--rs);
  463. font-size: 14px;
  464. font-family: var(--font);
  465. color: var(--text);
  466. background: var(--surface);
  467. box-sizing: border-box;
  468. }
  469. .bx-page .form-input {
  470. height: 42px;
  471. }
  472. .bx-page .form-textarea {
  473. min-height: 80px;
  474. padding: 10px 12px;
  475. }
  476. .bx-page .form-input.error,
  477. .bx-page .form-textarea.error {
  478. border-color: var(--danger);
  479. }
  480. .bx-page .form-input-prefix {
  481. position: relative;
  482. }
  483. .bx-page .form-input-prefix .form-input {
  484. padding-left: 28px;
  485. }
  486. .bx-page .form-input-prefix::before {
  487. content: '¥';
  488. position: absolute;
  489. left: 12px;
  490. top: 50%;
  491. transform: translateY(-50%);
  492. color: var(--text-sec);
  493. font-weight: 600;
  494. z-index: 1;
  495. }
  496. /* Attachments grid (images) */
  497. .bx-page .att-grid {
  498. display: flex;
  499. flex-wrap: wrap;
  500. gap: 8px;
  501. margin-top: 8px;
  502. }
  503. .bx-page .att-img {
  504. position: relative;
  505. width: 72px;
  506. height: 72px;
  507. border-radius: 8px;
  508. overflow: hidden;
  509. background: var(--bg);
  510. border: 1px solid var(--border);
  511. }
  512. .bx-page .att-img image {
  513. width: 100%;
  514. height: 100%;
  515. }
  516. .bx-page .att-img .del {
  517. position: absolute;
  518. top: 2px;
  519. right: 2px;
  520. width: 20px;
  521. height: 20px;
  522. border-radius: 50%;
  523. background: rgba(0, 0, 0, 0.55);
  524. color: #fff;
  525. font-size: 14px;
  526. line-height: 20px;
  527. text-align: center;
  528. }
  529. /* Empty / loading */
  530. .bx-page .empty-state {
  531. text-align: center;
  532. padding: 40px 20px;
  533. color: var(--text-muted);
  534. font-size: 15px;
  535. }
  536. .bx-page .empty-state--fill {
  537. min-height: 40vh;
  538. display: flex;
  539. align-items: center;
  540. justify-content: center;
  541. }
  542. .bx-page .page-body-loading {
  543. display: flex;
  544. align-items: center;
  545. justify-content: center;
  546. min-height: 40vh;
  547. color: var(--text-muted);
  548. font-size: 14px;
  549. }
  550. .bx-page .list-footer-tip {
  551. text-align: center;
  552. padding: 12px 0 24px;
  553. font-size: 12px;
  554. color: var(--text-muted);
  555. }
  556. /* FAB:用真实子节点画加号(微信端 view 伪元素不可靠) */
  557. .bx-page .fab-add {
  558. position: fixed;
  559. right: 16px;
  560. bottom: calc(20px + env(safe-area-inset-bottom, 0px));
  561. z-index: 120;
  562. width: 48px;
  563. height: 48px;
  564. padding: 0;
  565. border: none;
  566. border-radius: 50%;
  567. background: var(--primary) !important;
  568. box-shadow: 0 3px 12px rgba(0, 201, 141, 0.38);
  569. }
  570. .bx-page .fab-add__bar {
  571. position: absolute;
  572. background: #fff;
  573. border-radius: 1px;
  574. }
  575. .bx-page .fab-add__bar--h {
  576. width: 18px;
  577. height: 2px;
  578. left: 15px;
  579. top: 23px;
  580. }
  581. .bx-page .fab-add__bar--v {
  582. width: 2px;
  583. height: 18px;
  584. left: 23px;
  585. top: 15px;
  586. }
  587. /* Bottom bar */
  588. .bx-page .bottom-action-bar {
  589. position: fixed;
  590. bottom: 0;
  591. left: 0;
  592. right: 0;
  593. padding: 12px 16px;
  594. padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
  595. background: var(--surface);
  596. box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.06);
  597. z-index: 100;
  598. display: flex;
  599. gap: 10px;
  600. }
  601. /* Ticket header */
  602. .bx-page .advance-ticket-shell {
  603. --ticket-bg: var(--primary);
  604. --ticket-skin: var(--primary-light);
  605. --ticket-dash: rgba(0, 201, 141, 0.45);
  606. width: 100%;
  607. box-sizing: border-box;
  608. padding: 10px 16px 14px;
  609. background: var(--ticket-bg);
  610. }
  611. .bx-page .advance-ticket-stack {
  612. width: 100%;
  613. filter: drop-shadow(0 10px 24px rgba(0, 168, 116, 0.3));
  614. }
  615. .bx-page .advance-ticket-top {
  616. display: flex;
  617. align-items: center;
  618. justify-content: space-between;
  619. gap: 10px;
  620. min-height: 48px;
  621. padding: 14px 16px 12px;
  622. background: var(--ticket-skin);
  623. border-radius: 14px 14px 0 0;
  624. }
  625. .bx-page .advance-ticket-code {
  626. flex: 1;
  627. min-width: 0;
  628. font-size: 13px;
  629. font-weight: 600;
  630. color: #475569;
  631. overflow: hidden;
  632. text-overflow: ellipsis;
  633. white-space: nowrap;
  634. }
  635. .bx-page .advance-ticket-status {
  636. flex-shrink: 0;
  637. padding: 4px 11px;
  638. border-radius: 8px;
  639. font-size: 12px;
  640. font-weight: 700;
  641. line-height: 1.25;
  642. white-space: nowrap;
  643. color: #fff;
  644. }
  645. .bx-page .advance-ticket-status--warn {
  646. background: #ea580c;
  647. }
  648. .bx-page .advance-ticket-status--done {
  649. background: #059669;
  650. }
  651. .bx-page .advance-ticket-status--err {
  652. background: #dc2626;
  653. }
  654. .bx-page .advance-ticket-status--info {
  655. background: #64748b;
  656. }
  657. .bx-page .advance-ticket-status--processing {
  658. background: #6366f1;
  659. }
  660. .bx-page .advance-ticket-tear {
  661. position: relative;
  662. height: 14px;
  663. background: var(--ticket-skin);
  664. }
  665. .bx-page .advance-ticket-tear::before,
  666. .bx-page .advance-ticket-tear::after {
  667. content: '';
  668. position: absolute;
  669. top: 50%;
  670. width: 14px;
  671. height: 14px;
  672. margin-top: -7px;
  673. border-radius: 50%;
  674. background: var(--ticket-bg);
  675. z-index: 1;
  676. }
  677. .bx-page .advance-ticket-tear::before {
  678. left: -7px;
  679. }
  680. .bx-page .advance-ticket-tear::after {
  681. right: -7px;
  682. }
  683. .bx-page .advance-ticket-tear__line {
  684. position: absolute;
  685. left: 14px;
  686. right: 14px;
  687. top: 50%;
  688. margin-top: -0.5px;
  689. border-top: 1px dashed var(--ticket-dash);
  690. }
  691. .bx-page .advance-ticket-bottom {
  692. padding: 10px 16px 20px;
  693. background: var(--ticket-skin);
  694. border-radius: 0 0 14px 14px;
  695. }
  696. .bx-page .advance-ticket-reason {
  697. margin: 0 0 10px;
  698. font-size: 13px;
  699. font-weight: 500;
  700. line-height: 1.45;
  701. color: #64748b;
  702. display: -webkit-box;
  703. -webkit-line-clamp: 2;
  704. -webkit-box-orient: vertical;
  705. overflow: hidden;
  706. word-break: break-word;
  707. }
  708. .bx-page .advance-ticket-amount {
  709. font-size: 36px;
  710. font-weight: 800;
  711. line-height: 1.05;
  712. color: #0f172a !important;
  713. font-variant-numeric: tabular-nums;
  714. }
  715. /* Detail cards / tabs */
  716. .bx-page .detail-tabs {
  717. display: flex;
  718. background: var(--surface);
  719. border-bottom: 1px solid var(--border);
  720. }
  721. .bx-page .detail-tab {
  722. flex: 1;
  723. text-align: center;
  724. padding: 12px 8px;
  725. font-size: 14px;
  726. font-weight: 600;
  727. color: var(--text-sec);
  728. position: relative;
  729. }
  730. .bx-page .detail-tab.active {
  731. color: var(--primary-dark);
  732. }
  733. .bx-page .detail-tab.active::after {
  734. content: '';
  735. position: absolute;
  736. left: 20%;
  737. right: 20%;
  738. bottom: 0;
  739. height: 2px;
  740. background: var(--primary);
  741. border-radius: 2px;
  742. }
  743. .bx-page .advance-detail-stack {
  744. display: flex;
  745. flex-direction: column;
  746. gap: 12px;
  747. padding-top: 12px;
  748. padding-bottom: 16px;
  749. }
  750. .bx-page .detail-info-card {
  751. background: var(--surface);
  752. border-radius: var(--r);
  753. border: 1px solid var(--border);
  754. box-shadow: var(--shadow);
  755. padding: 6px 16px 10px;
  756. }
  757. .bx-page .detail-info-card__title {
  758. margin: 6px 0 14px;
  759. padding-bottom: 12px;
  760. border-bottom: 1px solid var(--border);
  761. font-size: 13px;
  762. font-weight: 600;
  763. color: var(--text);
  764. }
  765. .bx-page .adv-field {
  766. display: flex;
  767. flex-direction: column;
  768. gap: 6px;
  769. padding: 12px 0;
  770. }
  771. .bx-page .adv-field + .adv-field {
  772. border-top: 1px solid var(--border);
  773. }
  774. .bx-page .adv-field__label {
  775. font-size: 12px;
  776. font-weight: 500;
  777. color: var(--text-muted);
  778. }
  779. .bx-page .adv-field__value {
  780. font-size: 15px;
  781. font-weight: 500;
  782. color: var(--text);
  783. word-break: break-word;
  784. }
  785. .bx-page .adv-field__value--multiline {
  786. font-size: 14px;
  787. font-weight: 400;
  788. white-space: pre-wrap;
  789. color: var(--text-sec);
  790. }
  791. .bx-page .adv-field__value--accent {
  792. color: var(--primary-dark) !important;
  793. font-weight: 700;
  794. font-size: 16px;
  795. }
  796. .bx-page .detail-section-empty {
  797. margin: 0;
  798. padding: 12px;
  799. font-size: 13px;
  800. color: var(--text-muted);
  801. text-align: center;
  802. background: var(--bg);
  803. border-radius: var(--rs);
  804. border: 1px dashed var(--border);
  805. }
  806. /* Approval flow */
  807. .bx-page .flow-step {
  808. display: flex;
  809. align-items: flex-start;
  810. gap: 12px;
  811. padding-bottom: 16px;
  812. position: relative;
  813. }
  814. .bx-page .flow-step:last-child {
  815. padding-bottom: 0;
  816. }
  817. .bx-page .flow-step:not(:last-child)::after {
  818. content: '';
  819. position: absolute;
  820. left: 15px;
  821. top: 32px;
  822. bottom: 0;
  823. width: 2px;
  824. background: var(--border);
  825. }
  826. .bx-page .flow-avatar {
  827. width: 32px;
  828. height: 32px;
  829. border-radius: 50%;
  830. display: flex;
  831. align-items: center;
  832. justify-content: center;
  833. font-size: 12px;
  834. font-weight: 700;
  835. color: #fff;
  836. flex-shrink: 0;
  837. }
  838. .bx-page .flow-avatar.av-done {
  839. background: var(--primary);
  840. }
  841. .bx-page .flow-avatar.av-current {
  842. background: var(--warning);
  843. }
  844. .bx-page .flow-avatar.av-reject {
  845. background: var(--danger);
  846. }
  847. .bx-page .flow-avatar.av-pending {
  848. background: var(--border);
  849. color: var(--text-muted);
  850. }
  851. .bx-page .flow-info {
  852. flex: 1;
  853. }
  854. .bx-page .flow-name {
  855. font-size: 13px;
  856. font-weight: 600;
  857. }
  858. .bx-page .flow-role,
  859. .bx-page .flow-time {
  860. font-size: 11px;
  861. color: var(--text-muted);
  862. }
  863. .bx-page .adv-flow-opinion {
  864. font-size: 12px;
  865. color: var(--text-sec);
  866. margin-top: 6px;
  867. line-height: 1.45;
  868. word-break: break-word;
  869. }
  870. /* Reimburse apply: detail lines + pickers */
  871. .bx-page .detail-line-no {
  872. font-weight: 500;
  873. color: var(--text-muted);
  874. font-size: 12px;
  875. }
  876. .bx-page .detail-line .detail-divider {
  877. height: 1px;
  878. background: var(--border);
  879. margin: 12px 0;
  880. }
  881. .bx-page .detail-line-actions {
  882. text-align: right;
  883. margin-top: 4px;
  884. }
  885. .bx-page .detail-actions {
  886. display: flex;
  887. justify-content: space-between;
  888. align-items: center;
  889. margin-top: 12px;
  890. padding-top: 12px;
  891. border-top: 1px dashed var(--border);
  892. gap: 8px;
  893. }
  894. .bx-page .total-amount {
  895. font-size: 14px;
  896. color: var(--text-sec);
  897. flex-shrink: 0;
  898. }
  899. .bx-page .total-amount b {
  900. color: var(--primary-dark);
  901. font-size: 16px;
  902. }
  903. .bx-page .picker-trigger {
  904. display: flex;
  905. align-items: center;
  906. justify-content: space-between;
  907. min-height: 42px;
  908. padding: 8px 12px;
  909. border: 1.5px solid var(--border);
  910. border-radius: var(--rs);
  911. background: var(--surface);
  912. box-sizing: border-box;
  913. }
  914. .bx-page .picker-trigger:active {
  915. background: var(--bg);
  916. }
  917. .bx-page .picker-trigger .value {
  918. font-size: 14px;
  919. font-weight: 600;
  920. color: var(--text);
  921. overflow: hidden;
  922. text-overflow: ellipsis;
  923. white-space: nowrap;
  924. }
  925. .bx-page .picker-trigger .ph {
  926. color: var(--text-muted);
  927. font-weight: 600;
  928. }
  929. .bx-page .picker-trigger .arrow {
  930. color: var(--text-muted);
  931. flex-shrink: 0;
  932. margin-left: 8px;
  933. font-size: 16px;
  934. }
  935. .bx-page .form-tip {
  936. font-size: 12px;
  937. color: var(--text-muted);
  938. margin: 8px 0 0;
  939. line-height: 1.45;
  940. }
  941. .bx-page .invoice-balance-tip {
  942. font-size: 13px;
  943. color: var(--text-sec);
  944. margin: 0 0 10px;
  945. line-height: 1.5;
  946. }
  947. .bx-page .invoice-balance-tip--warn {
  948. color: #dc2626;
  949. margin-left: 4px;
  950. }
  951. .bx-page .invoice-picked-row {
  952. margin-top: 12px;
  953. display: flex;
  954. flex-direction: column;
  955. gap: 8px;
  956. }
  957. .bx-page .invoice-picked-item {
  958. display: flex;
  959. align-items: center;
  960. justify-content: space-between;
  961. gap: 8px;
  962. padding: 10px 12px;
  963. border: 1px solid var(--border);
  964. border-radius: var(--rs);
  965. background: var(--bg);
  966. }
  967. .bx-page .invoice-picked-item__meta {
  968. flex: 1;
  969. min-width: 0;
  970. }
  971. .bx-page .invoice-picked-item__name {
  972. display: block;
  973. font-size: 13px;
  974. font-weight: 600;
  975. overflow: hidden;
  976. text-overflow: ellipsis;
  977. white-space: nowrap;
  978. }
  979. .bx-page .invoice-picked-item__amt {
  980. font-size: 12px;
  981. color: var(--text-sec);
  982. margin-top: 2px;
  983. }
  984. .bx-page .invoice-picked-item__remove {
  985. flex-shrink: 0;
  986. width: 28px;
  987. height: 28px;
  988. line-height: 28px;
  989. text-align: center;
  990. border-radius: 50%;
  991. background: rgba(15, 23, 42, 0.45);
  992. color: #fff;
  993. font-size: 16px;
  994. }
  995. .bx-page .bx-sheet-mask {
  996. position: fixed;
  997. inset: 0;
  998. z-index: 1000;
  999. background: rgba(15, 23, 42, 0.45);
  1000. display: flex;
  1001. align-items: flex-end;
  1002. }
  1003. .bx-page .bx-sheet {
  1004. width: 100%;
  1005. max-height: 70vh;
  1006. background: var(--surface);
  1007. border-radius: 16px 16px 0 0;
  1008. display: flex;
  1009. flex-direction: column;
  1010. overflow: hidden;
  1011. }
  1012. .bx-page .bx-sheet__title {
  1013. padding: 14px 16px;
  1014. font-size: 16px;
  1015. font-weight: 700;
  1016. border-bottom: 1px solid var(--border);
  1017. text-align: center;
  1018. }
  1019. .bx-page .bx-sheet__body {
  1020. flex: 1;
  1021. overflow-y: auto;
  1022. padding: 8px 0;
  1023. max-height: 50vh;
  1024. }
  1025. .bx-page .bx-sheet__item {
  1026. padding: 12px 16px;
  1027. font-size: 14px;
  1028. border-bottom: 1px solid var(--border);
  1029. display: flex;
  1030. align-items: center;
  1031. justify-content: space-between;
  1032. gap: 8px;
  1033. }
  1034. .bx-page .bx-sheet__item.is-selected {
  1035. background: var(--primary-bg);
  1036. color: var(--primary-dark);
  1037. font-weight: 600;
  1038. }
  1039. .bx-page .bx-sheet__item-sub {
  1040. font-size: 12px;
  1041. color: var(--text-muted);
  1042. margin-top: 2px;
  1043. }
  1044. .bx-page .bx-sheet__footer {
  1045. padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
  1046. border-top: 1px solid var(--border);
  1047. }
  1048. .bx-page .bx-sheet__empty {
  1049. padding: 28px 16px;
  1050. text-align: center;
  1051. color: var(--text-muted);
  1052. font-size: 13px;
  1053. }
  1054. .bx-page .reimburse-detail-group + .reimburse-detail-group {
  1055. margin-top: 12px;
  1056. padding-top: 12px;
  1057. border-top: 1px dashed var(--border);
  1058. }
  1059. .bx-page .reimburse-detail-head {
  1060. font-size: 12px;
  1061. font-weight: 600;
  1062. color: var(--text-muted);
  1063. margin-bottom: 8px;
  1064. }
  1065. .bx-page .reimburse-detail-total-row {
  1066. margin-top: 12px;
  1067. padding-top: 12px;
  1068. border-top: 1px solid var(--border);
  1069. }
  1070. /* 我的/全部:业务类型切换卡片 */
  1071. .bx-page .mine-type-tabs.stat-scroll {
  1072. display: flex;
  1073. justify-content: center;
  1074. align-items: stretch;
  1075. gap: 12px;
  1076. padding: 10px 16px 8px;
  1077. overflow-x: visible;
  1078. }
  1079. .bx-page .mine-type-tabs .stat-card {
  1080. flex-shrink: 0;
  1081. width: auto;
  1082. min-width: 120px;
  1083. padding: 16px 22px;
  1084. border: none;
  1085. border-radius: var(--r);
  1086. background: var(--surface);
  1087. box-shadow: var(--shadow);
  1088. display: flex;
  1089. align-items: center;
  1090. justify-content: center;
  1091. }
  1092. .bx-page .mine-type-tabs--triple .stat-card {
  1093. min-width: 100px;
  1094. padding: 14px 14px;
  1095. }
  1096. .bx-page .mine-type-tabs .stat-card.active {
  1097. background: var(--primary-bg);
  1098. }
  1099. .bx-page .mine-type-tabs .stat-card .label {
  1100. font-size: 16px;
  1101. font-weight: 600;
  1102. color: var(--text);
  1103. }
  1104. .bx-page .mine-type-tabs--triple .stat-card .label {
  1105. font-size: 15px;
  1106. }
  1107. .bx-page .mine-type-tabs .stat-card.active .label {
  1108. color: var(--primary-dark);
  1109. }
  1110. .bx-page .all-list-card__bottom {
  1111. justify-content: flex-end;
  1112. }
  1113. /* —— 发票夹 wallet summary / cards —— */
  1114. .bx-page .wallet-summary.card,
  1115. .bx-page .wallet-summary {
  1116. margin: 12px 16px 8px;
  1117. padding: 14px 16px;
  1118. background: var(--surface);
  1119. border-radius: var(--r);
  1120. box-shadow: var(--shadow);
  1121. }
  1122. .bx-page .wallet-summary__row {
  1123. display: flex;
  1124. justify-content: space-between;
  1125. align-items: center;
  1126. padding: 4px 0;
  1127. font-size: 14px;
  1128. color: var(--text-sec);
  1129. }
  1130. .bx-page .wallet-summary__val {
  1131. font-weight: 700;
  1132. color: var(--text);
  1133. font-variant-numeric: tabular-nums;
  1134. }
  1135. .bx-page .wallet-summary__row--em .wallet-summary__val,
  1136. .bx-page .wallet-summary__row--em b {
  1137. color: var(--primary);
  1138. font-size: 18px;
  1139. }
  1140. .bx-page .wallet-summary__meta {
  1141. margin-top: 8px;
  1142. font-size: 12px;
  1143. color: var(--text-muted);
  1144. }
  1145. .bx-page .wallet-actions {
  1146. padding: 0 16px 8px;
  1147. }
  1148. .bx-page .wallet-list {
  1149. padding-top: 5px;
  1150. padding-bottom: 16px;
  1151. box-sizing: border-box;
  1152. }
  1153. .bx-page .invoice-wallet-card {
  1154. position: relative;
  1155. overflow: hidden;
  1156. padding-top: 20px;
  1157. }
  1158. .bx-page .invoice-wallet-card--static:active {
  1159. transform: none;
  1160. }
  1161. .bx-page .invoice-wallet-card__index {
  1162. position: absolute;
  1163. top: 0;
  1164. left: 0;
  1165. z-index: 1;
  1166. min-width: 28px;
  1167. height: 22px;
  1168. padding: 0 8px;
  1169. display: inline-flex;
  1170. align-items: center;
  1171. justify-content: center;
  1172. border-radius: 0 0 10px 0;
  1173. background: var(--primary-dark);
  1174. color: #fff;
  1175. font-size: 12px;
  1176. font-weight: 700;
  1177. line-height: 1;
  1178. font-variant-numeric: tabular-nums;
  1179. box-sizing: border-box;
  1180. }
  1181. .bx-page .invoice-wallet-card__subs {
  1182. display: flex;
  1183. flex-direction: column;
  1184. gap: 6px;
  1185. margin: 4px 0 10px;
  1186. }
  1187. .bx-page .invoice-wallet-card__sub {
  1188. display: flex;
  1189. justify-content: space-between;
  1190. gap: 12px;
  1191. font-size: 13px;
  1192. line-height: 1.4;
  1193. }
  1194. .bx-page .invoice-wallet-card__sub .k {
  1195. flex-shrink: 0;
  1196. color: var(--text-muted);
  1197. }
  1198. .bx-page .invoice-wallet-card__sub .v {
  1199. min-width: 0;
  1200. text-align: right;
  1201. color: var(--text);
  1202. word-break: break-word;
  1203. }
  1204. .bx-page .invoice-wallet-card__att-label {
  1205. margin-bottom: 6px;
  1206. font-size: 12px;
  1207. color: var(--text-muted);
  1208. }
  1209. .bx-page .invoice-wallet-card__att-empty {
  1210. margin: 0;
  1211. font-size: 12px;
  1212. color: var(--text-muted);
  1213. }
  1214. .bx-page .advance-att-grid {
  1215. margin-top: 0;
  1216. }
  1217. .bx-page .advance-att-tile:active {
  1218. opacity: 0.92;
  1219. }
  1220. .bx-page .att-preview-loading {
  1221. width: 100%;
  1222. height: 100%;
  1223. display: flex;
  1224. align-items: center;
  1225. justify-content: center;
  1226. background: var(--bg);
  1227. color: var(--text-muted);
  1228. font-size: 12px;
  1229. }
  1230. .bx-page .att-file-icon.att-doc-thumb {
  1231. width: 100%;
  1232. height: 100%;
  1233. display: flex;
  1234. flex-direction: column;
  1235. align-items: center;
  1236. justify-content: center;
  1237. gap: 4px;
  1238. padding: 6px 4px;
  1239. box-sizing: border-box;
  1240. }
  1241. .bx-page .att-doc-thumb__ext {
  1242. font-size: 11px;
  1243. font-weight: 800;
  1244. color: var(--primary-dark);
  1245. letter-spacing: 0.02em;
  1246. }
  1247. .bx-page .att-doc-thumb__name {
  1248. font-size: 10px;
  1249. color: var(--text-muted);
  1250. text-align: center;
  1251. line-height: 1.25;
  1252. overflow: hidden;
  1253. text-overflow: ellipsis;
  1254. display: -webkit-box;
  1255. -webkit-line-clamp: 2;
  1256. -webkit-box-orient: vertical;
  1257. word-break: break-word;
  1258. }
  1259. .bx-page .invoice-admin-card__bottom {
  1260. justify-content: flex-end;
  1261. margin-top: 10px;
  1262. }
  1263. .bx-page .empty-state--embed {
  1264. padding: 28px 16px;
  1265. min-height: 120px;
  1266. }
  1267. .bx-page .att-img.att-add {
  1268. display: flex;
  1269. align-items: center;
  1270. justify-content: center;
  1271. border-style: dashed;
  1272. color: var(--text-muted);
  1273. font-size: 28px;
  1274. line-height: 1;
  1275. }
  1276. .bx-page .form-hint {
  1277. display: block;
  1278. font-size: 11px;
  1279. color: var(--text-muted);
  1280. margin: 0 0 8px;
  1281. line-height: 1.4;
  1282. }
  1283. .bx-page .bx-upload-sheet .dialog-form-body {
  1284. padding: 8px 16px 4px;
  1285. }
  1286. .bx-page .bx-upload-sheet .form-item {
  1287. margin-bottom: 12px;
  1288. }
  1289. .bx-page .bx-upload-sheet .form-label {
  1290. display: block;
  1291. font-size: 13px;
  1292. color: var(--text-sec);
  1293. margin-bottom: 6px;
  1294. }
  1295. .bx-page .bx-upload-sheet .form-input {
  1296. width: 100%;
  1297. height: 40px;
  1298. padding: 0 12px;
  1299. border: 1px solid var(--border);
  1300. border-radius: var(--rs);
  1301. background: var(--bg);
  1302. box-sizing: border-box;
  1303. font-size: 14px;
  1304. }
  1305. .bx-page .bx-upload-sheet .form-input-prefix {
  1306. position: relative;
  1307. }
  1308. .bx-page .bx-upload-sheet .form-input-prefix .form-input {
  1309. padding-left: 28px;
  1310. }
  1311. /* ---- Batch6: expense tree + workflow config ---- */
  1312. .bx-page .section-title {
  1313. display: flex;
  1314. align-items: center;
  1315. gap: 8px;
  1316. margin: 14px 0 10px;
  1317. font-size: 14px;
  1318. font-weight: 800;
  1319. color: var(--text);
  1320. }
  1321. .bx-page .section-title::before {
  1322. content: '';
  1323. width: 3px;
  1324. height: 14px;
  1325. border-radius: 2px;
  1326. background: var(--primary);
  1327. flex-shrink: 0;
  1328. }
  1329. .bx-page .card-list {
  1330. display: flex;
  1331. flex-direction: column;
  1332. gap: 10px;
  1333. padding-bottom: 72px;
  1334. }
  1335. .bx-page .tree-card {
  1336. background: var(--surface);
  1337. border: 1px solid var(--border);
  1338. border-radius: var(--r);
  1339. box-shadow: var(--shadow);
  1340. overflow: hidden;
  1341. }
  1342. .bx-page .tree-head {
  1343. display: flex;
  1344. align-items: center;
  1345. justify-content: space-between;
  1346. gap: 8px;
  1347. padding: 12px 14px;
  1348. background: linear-gradient(135deg, var(--primary-bg), #fff);
  1349. }
  1350. .bx-page .tree-head__left {
  1351. display: flex;
  1352. align-items: center;
  1353. gap: 8px;
  1354. min-width: 0;
  1355. flex: 1;
  1356. }
  1357. .bx-page .tree-head__title {
  1358. font-size: 14px;
  1359. font-weight: 800;
  1360. color: var(--text);
  1361. overflow: hidden;
  1362. text-overflow: ellipsis;
  1363. white-space: nowrap;
  1364. }
  1365. .bx-page .tree-head__tags {
  1366. display: flex;
  1367. gap: 4px;
  1368. align-items: center;
  1369. flex-shrink: 0;
  1370. }
  1371. .bx-page .tree-twisty {
  1372. width: 22px;
  1373. height: 22px;
  1374. border-radius: 7px;
  1375. display: flex;
  1376. align-items: center;
  1377. justify-content: center;
  1378. background: rgba(16, 185, 129, 0.1);
  1379. color: var(--primary-dark);
  1380. font-size: 16px;
  1381. font-weight: 700;
  1382. line-height: 1;
  1383. transition: transform 0.15s;
  1384. flex-shrink: 0;
  1385. transform: rotate(0deg);
  1386. }
  1387. .bx-page .tree-twisty.expanded {
  1388. transform: rotate(90deg);
  1389. }
  1390. .bx-page .tree-body {
  1391. border-top: 1px solid var(--border);
  1392. }
  1393. .bx-page .tree-meta-grid {
  1394. display: grid;
  1395. grid-template-columns: repeat(3, 1fr);
  1396. gap: 6px;
  1397. padding: 8px 14px;
  1398. background: var(--bg);
  1399. }
  1400. .bx-page .tree-meta-cell .k {
  1401. display: block;
  1402. font-size: 11px;
  1403. color: var(--text-muted);
  1404. }
  1405. .bx-page .tree-meta-cell .v {
  1406. display: block;
  1407. font-size: 13px;
  1408. font-weight: 500;
  1409. color: var(--text);
  1410. margin-top: 2px;
  1411. word-break: break-all;
  1412. }
  1413. .bx-page .tree-child-card {
  1414. margin: 0 14px 10px;
  1415. border-left: 3px solid var(--primary);
  1416. }
  1417. .bx-page .op-card {
  1418. background: var(--surface);
  1419. border: 1px solid var(--border);
  1420. border-radius: var(--r);
  1421. box-shadow: var(--shadow);
  1422. padding: 14px;
  1423. }
  1424. .bx-page .op-card-head {
  1425. display: flex;
  1426. align-items: flex-start;
  1427. justify-content: space-between;
  1428. gap: 10px;
  1429. }
  1430. .bx-page .op-card-title {
  1431. font-size: 14px;
  1432. font-weight: 800;
  1433. line-height: 1.3;
  1434. flex: 1;
  1435. min-width: 0;
  1436. }
  1437. .bx-page .op-card-sub {
  1438. margin-top: 4px;
  1439. font-size: 12px;
  1440. color: var(--text-muted);
  1441. display: flex;
  1442. gap: 10px;
  1443. flex-wrap: wrap;
  1444. }
  1445. .bx-page .op-card-body {
  1446. padding: 10px 0 0;
  1447. }
  1448. .bx-page .tree-body > .op-card-body {
  1449. padding: 10px 14px;
  1450. }
  1451. .bx-page .tag {
  1452. display: inline-flex;
  1453. align-items: center;
  1454. padding: 2px 8px;
  1455. border-radius: 8px;
  1456. font-size: 11px;
  1457. font-weight: 600;
  1458. border: 1px solid transparent;
  1459. line-height: 1.25;
  1460. }
  1461. .bx-page .tag-neutral {
  1462. background: #f1f5f9;
  1463. color: #64748b;
  1464. border-color: rgba(100, 116, 139, 0.15);
  1465. }
  1466. .bx-page .detail-grid {
  1467. display: grid;
  1468. grid-template-columns: 1fr 1fr;
  1469. gap: 12px;
  1470. margin-bottom: 12px;
  1471. }
  1472. .bx-page .detail-item {
  1473. background: var(--surface);
  1474. border: 1px solid var(--border);
  1475. border-radius: var(--rs);
  1476. padding: 10px 12px;
  1477. }
  1478. .bx-page .detail-item .di-label {
  1479. font-size: 11px;
  1480. color: var(--text-muted);
  1481. margin-bottom: 2px;
  1482. }
  1483. .bx-page .detail-item .di-value {
  1484. font-size: 14px;
  1485. font-weight: 500;
  1486. color: var(--text);
  1487. word-break: break-all;
  1488. }
  1489. .bx-page .flow-card {
  1490. background: var(--surface);
  1491. border: 1px solid var(--border);
  1492. border-radius: var(--r);
  1493. padding: 16px;
  1494. margin-bottom: 72px;
  1495. }
  1496. .bx-page .flow-info__head {
  1497. display: flex;
  1498. align-items: center;
  1499. justify-content: space-between;
  1500. gap: 8px;
  1501. }
  1502. .bx-page .form-textarea-counter {
  1503. margin-top: 4px;
  1504. text-align: right;
  1505. font-size: 11px;
  1506. color: var(--text-muted);
  1507. }
  1508. .bx-page .switch-row {
  1509. display: flex;
  1510. align-items: center;
  1511. gap: 10px;
  1512. }
  1513. .bx-page .switch-row__label {
  1514. font-size: 13px;
  1515. color: var(--text-sec);
  1516. }
  1517. .bx-page .field-tip {
  1518. margin-top: 6px;
  1519. font-size: 11px;
  1520. color: var(--warning);
  1521. line-height: 1.4;
  1522. }
  1523. .bx-page .bx-sheet--tall {
  1524. max-height: 85vh;
  1525. }
  1526. .bx-page .bx-sheet__body--form {
  1527. padding: 8px 16px 4px;
  1528. max-height: 60vh;
  1529. }