00_深浅主题_设计规范与对照.html 103 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423
  1. <!DOCTYPE html>
  2. <html lang="zh-CN" data-theme="light">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>深空蓝 · 深浅主题规范</title>
  7. <style>
  8. /* ============================================================
  9. 共赢票据投资者 APP — 深空蓝设计系统 (Deep-Space Blue)
  10. 双主题:data-theme="light" | "dark",可作用于 :root 或任意容器
  11. ============================================================ */
  12. /* ---------- 浅色(默认) ---------- */
  13. :root,
  14. [data-theme="light"]{
  15. --canvas:#E7ECF4; /* 图纸底 */
  16. --canvas-2:#F4F7FB; /* 图纸卡片 */
  17. --canvas-line:#D3DCE8;
  18. --canvas-ink:#0F1B33;
  19. --canvas-mute:#647591;
  20. --app-bg:#F6F8FB; /* App 页面底 */
  21. --surface:#FFFFFF; /* 卡片/导航 */
  22. --surface-2:#F1F4F9; /* 次级面/表头 */
  23. --surface-3:#E8EDF5; /* 三级面 */
  24. --line:#E3E9F1;
  25. --line-2:#CFD9E7;
  26. --ink-1:#0F1B33;
  27. --ink-2:#4C5C78;
  28. --ink-3:#8A99B2;
  29. --ink-4:#AEBACD;
  30. --brand:#1B4FD8;
  31. --brand-2:#123CAE;
  32. --brand-weak:#E7EEFF;
  33. --brand-line:#B9CDFF;
  34. --on-brand:#FFFFFF;
  35. --accent:#B4700E; /* 琥珀 强调 */
  36. --accent-weak:#FDF2DE;
  37. --accent-line:#EBCD97;
  38. --rise:#E5484D; /* 涨 / 盈利 */
  39. --fall:#12A594; /* 跌 / 亏损 */
  40. --rise-weak:#FDECEC;
  41. --fall-weak:#E3F7F3;
  42. --warn:#C2410C;
  43. --warn-weak:#FEF0E6;
  44. --danger:#DC2626;
  45. --danger-weak:#FDEBEB;
  46. --ok:#0F7B4F;
  47. --ok-weak:#E4F5EC;
  48. --shadow-card:0 1px 2px rgba(15,27,51,.05),0 8px 24px rgba(15,27,51,.06);
  49. --shadow-phone:0 18px 44px rgba(15,27,51,.16),0 2px 6px rgba(15,27,51,.08);
  50. --shadow-pop:0 12px 40px rgba(15,27,51,.20);
  51. --scrim:rgba(11,18,34,.42);
  52. --bezel:#C7D2E2;
  53. --glow:none;
  54. }
  55. /* ---------- 深色 ---------- */
  56. [data-theme="dark"]{
  57. --canvas:#060A14;
  58. --canvas-2:#0E1526;
  59. --canvas-line:#1E2A44;
  60. --canvas-ink:#E9EFFA;
  61. --canvas-mute:#8797B4;
  62. --app-bg:#0B1020;
  63. --surface:#131B2E;
  64. --surface-2:#18223A;
  65. --surface-3:#1E2A45;
  66. --line:#232F4B;
  67. --line-2:#32436A;
  68. --ink-1:#EAF0FA;
  69. --ink-2:#A5B4D0;
  70. --ink-3:#7486A5;
  71. --ink-4:#54658A;
  72. --brand:#5B8CFF;
  73. --brand-2:#7FA6FF;
  74. --brand-weak:rgba(91,140,255,.16);
  75. --brand-line:rgba(91,140,255,.42);
  76. --on-brand:#05122E;
  77. --accent:#F0A93B;
  78. --accent-weak:rgba(240,169,59,.15);
  79. --accent-line:rgba(240,169,59,.42);
  80. --rise:#FF6B6E;
  81. --fall:#2FD4B9;
  82. --rise-weak:rgba(255,107,110,.14);
  83. --fall-weak:rgba(47,212,185,.14);
  84. --warn:#F59E42;
  85. --warn-weak:rgba(245,158,66,.14);
  86. --danger:#FF6B6E;
  87. --danger-weak:rgba(255,107,110,.14);
  88. --ok:#2FD4B9;
  89. --ok-weak:rgba(47,212,185,.14);
  90. --shadow-card:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.34);
  91. --shadow-phone:0 20px 50px rgba(0,0,0,.6),0 0 0 1px rgba(91,140,255,.10);
  92. --shadow-pop:0 14px 44px rgba(0,0,0,.62);
  93. --scrim:rgba(2,6,16,.62);
  94. --bezel:#26324C;
  95. --glow:0 0 0 1px rgba(91,140,255,.14);
  96. }
  97. /* ---------- 基础 ---------- */
  98. *{box-sizing:border-box;margin:0;padding:0}
  99. html{-webkit-text-size-adjust:100%}
  100. body{
  101. background:var(--canvas);color:var(--canvas-ink);
  102. font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,-apple-system,"Segoe UI",sans-serif;
  103. -webkit-font-smoothing:antialiased;
  104. padding:44px 46px 110px;
  105. transition:background .28s ease,color .28s ease;
  106. }
  107. .mono{font-family:"SF Mono",ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace}
  108. .num{font-variant-numeric:tabular-nums;letter-spacing:.01em}
  109. /* ---------- 图纸头 ---------- */
  110. .sheet-head{
  111. display:flex;flex-wrap:wrap;gap:32px;align-items:flex-end;justify-content:space-between;
  112. padding-bottom:24px;margin-bottom:44px;border-bottom:1px solid var(--canvas-line);
  113. }
  114. .brandmark{display:flex;align-items:center;gap:14px}
  115. .brandmark .glyph{
  116. width:44px;height:44px;border-radius:12px;flex:none;position:relative;
  117. background:linear-gradient(145deg,var(--brand),var(--brand-2));
  118. box-shadow:0 6px 18px rgba(27,79,216,.28);
  119. }
  120. .brandmark .glyph::before{
  121. content:"";position:absolute;inset:12px 11px;border:1.6px solid rgba(255,255,255,.9);
  122. border-radius:2px;border-bottom-width:4px;
  123. }
  124. .brandmark .glyph::after{
  125. content:"";position:absolute;right:8px;top:8px;width:7px;height:7px;border-radius:50%;background:var(--accent);
  126. }
  127. .sheet-title{font-size:26px;font-weight:650;letter-spacing:.02em;line-height:1.2}
  128. .sheet-sub{margin-top:6px;font-size:12.5px;color:var(--canvas-mute);letter-spacing:.02em}
  129. .head-right{display:flex;align-items:center;gap:26px;flex-wrap:wrap}
  130. .meta{display:flex;gap:26px}
  131. .meta div{font-size:10.5px;color:var(--canvas-mute);letter-spacing:.1em;text-transform:uppercase}
  132. .meta b{display:block;margin-top:5px;font-size:12.5px;color:var(--canvas-ink);font-weight:550;letter-spacing:0;text-transform:none}
  133. /* 换肤开关 */
  134. .skin{
  135. display:flex;align-items:center;gap:0;padding:3px;border-radius:9px;
  136. background:var(--canvas-2);border:1px solid var(--canvas-line);
  137. }
  138. .skin button{
  139. border:0;background:transparent;cursor:pointer;font:inherit;
  140. padding:7px 13px;border-radius:6px;font-size:12px;color:var(--canvas-mute);
  141. display:flex;align-items:center;gap:6px;letter-spacing:.04em;transition:.2s;
  142. }
  143. .skin button.on{background:var(--brand);color:#fff;box-shadow:0 2px 8px rgba(27,79,216,.3)}
  144. [data-theme="dark"] .skin button.on{color:#04122F}
  145. .skin svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
  146. /* ---------- 章节 ---------- */
  147. .sec{margin-bottom:60px}
  148. .sec-head{display:flex;align-items:baseline;gap:14px;margin-bottom:24px}
  149. .sec-num{
  150. font-family:"SF Mono",ui-monospace,Menlo,monospace;font-size:11px;color:var(--brand);
  151. letter-spacing:.12em;padding:3px 8px;border:1px solid var(--brand-line);border-radius:5px;background:var(--brand-weak);
  152. }
  153. .sec-name{font-size:17px;font-weight:600;letter-spacing:.04em}
  154. .sec-rule{flex:1;height:1px;background:var(--canvas-line)}
  155. .sec-note{font-size:12px;color:var(--canvas-mute)}
  156. /* ---------- 说明卡 ---------- */
  157. .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
  158. .card-x{background:var(--canvas-2);border:1px solid var(--canvas-line);border-radius:12px;padding:18px 20px}
  159. .card-x h4{font-size:11px;font-weight:600;letter-spacing:.14em;color:var(--canvas-mute);margin-bottom:14px;text-transform:uppercase}
  160. .kv{display:flex;flex-direction:column;gap:10px}
  161. .kv .r{display:flex;justify-content:space-between;gap:14px;font-size:12.5px;line-height:1.5}
  162. .kv .r span{color:var(--canvas-mute)}
  163. .kv .r b{font-weight:520;text-align:right;font-variant-numeric:tabular-nums}
  164. .bullets{display:flex;flex-direction:column;gap:9px}
  165. .bullets li{list-style:none;font-size:12.5px;line-height:1.65;color:var(--canvas-mute);padding-left:14px;position:relative}
  166. .bullets li::before{content:"";position:absolute;left:0;top:8px;width:6px;height:1.5px;background:var(--brand);border-radius:1px}
  167. .bullets b{color:var(--canvas-ink);font-weight:560}
  168. code{font-family:"SF Mono",ui-monospace,Menlo,monospace;font-size:11.5px;background:var(--surface-3);color:var(--canvas-ink);padding:1px 5px;border-radius:4px}
  169. /* ---------- 色板 ---------- */
  170. .pal{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:10px}
  171. .sw{border:1px solid var(--canvas-line);border-radius:10px;overflow:hidden;background:var(--canvas-2)}
  172. .sw .chip{height:56px;display:flex;align-items:flex-end;justify-content:flex-end;padding:7px 9px}
  173. .sw .chip i{font-style:normal;font-size:9.5px;color:rgba(255,255,255,.85);font-family:"SF Mono",monospace}
  174. .sw .lb{padding:9px 11px}
  175. .sw .lb b{display:block;font-size:12px;font-weight:560}
  176. .sw .lb em{font-style:normal;display:block;font-size:10.5px;color:var(--canvas-mute);margin-top:3px;font-family:"SF Mono",monospace}
  177. /* ---------- 表 ---------- */
  178. table.spec{width:100%;border-collapse:collapse;font-size:12.5px;background:var(--canvas-2);border:1px solid var(--canvas-line);border-radius:12px;overflow:hidden}
  179. table.spec th{
  180. background:var(--surface-2);text-align:left;padding:11px 14px;font-size:10.5px;font-weight:600;
  181. letter-spacing:.1em;color:var(--canvas-mute);text-transform:uppercase;border-bottom:1px solid var(--canvas-line);
  182. }
  183. table.spec td{padding:11px 14px;border-bottom:1px solid var(--canvas-line);color:var(--canvas-mute);line-height:1.6;vertical-align:top}
  184. table.spec tr:last-child td{border-bottom:0}
  185. table.spec td b{color:var(--canvas-ink);font-weight:550}
  186. table.spec td.m{font-family:"SF Mono",ui-monospace,Menlo,monospace;color:var(--canvas-ink);font-size:11.5px}
  187. /* ---------- 画板 ---------- */
  188. .frames{display:grid;grid-template-columns:repeat(auto-fit,minmax(390px,390px));gap:52px 36px;justify-content:start}
  189. .frame{width:390px}
  190. .frame.w2{grid-column:span 2}
  191. .phone{
  192. width:390px;height:844px;border-radius:42px;overflow:hidden;position:relative;
  193. background:var(--app-bg);border:1px solid var(--bezel);box-shadow:var(--shadow-phone);
  194. font-size:15px;color:var(--ink-1);transition:background .28s ease,border-color .28s ease;
  195. isolation:isolate;
  196. }
  197. .cap{margin-top:18px;padding-left:13px;border-left:2px solid var(--brand)}
  198. .cap-num{font-family:"SF Mono",ui-monospace,Menlo,monospace;font-size:10.5px;color:var(--brand);letter-spacing:.12em}
  199. .cap-title{font-size:14.5px;font-weight:600;margin:5px 0 8px;letter-spacing:.02em}
  200. .cap ul{list-style:none;display:flex;flex-direction:column;gap:6px}
  201. .cap li{font-size:12px;line-height:1.62;color:var(--canvas-mute);padding-left:12px;position:relative}
  202. .cap li::before{content:"";position:absolute;left:0;top:8px;width:5px;height:1px;background:var(--canvas-line)}
  203. .cap li b{color:var(--canvas-ink);font-weight:550}
  204. .cap code{font-size:11px;background:var(--surface-3)}
  205. /* ============================================================
  206. App 内部组件
  207. ============================================================ */
  208. .screen{position:absolute;inset:0;display:flex;flex-direction:column;overflow:hidden;background:var(--app-bg)}
  209. .statusbar{height:52px;flex:none;display:flex;align-items:flex-end;justify-content:space-between;padding:0 24px 6px;font-size:14.5px;font-weight:600;color:var(--ink-1)}
  210. .statusbar .ic{display:flex;gap:6px;align-items:center;opacity:.9}
  211. .statusbar svg{height:12px;fill:currentColor}
  212. .homebar{position:absolute;left:50%;bottom:8px;transform:translateX(-50%);width:132px;height:5px;border-radius:3px;background:var(--ink-1);opacity:.26;z-index:60}
  213. /* 顶栏 */
  214. .navbar{height:46px;flex:none;display:flex;align-items:center;padding:0 16px;position:relative;background:var(--app-bg)}
  215. .navbar h2{position:absolute;left:0;right:0;text-align:center;font-size:16.5px;font-weight:600;letter-spacing:.03em}
  216. .navbar .bk,.navbar .rt{position:relative;z-index:2;color:var(--ink-2);display:flex;align-items:center;gap:5px;font-size:13px}
  217. .navbar .rt{margin-left:auto;color:var(--brand)}
  218. .icn{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
  219. .icn.sm{width:14px;height:14px}
  220. .icn.lg{width:22px;height:22px}
  221. .appbar{padding:4px 20px 0;flex:none}
  222. .appbar h1{font-size:22px;font-weight:650;letter-spacing:.02em;display:flex;align-items:center;gap:9px}
  223. .appbar h1 .tiny{font-size:11px;font-weight:500;color:var(--ink-3);letter-spacing:.1em;padding:3px 7px;border:1px solid var(--line-2);border-radius:5px}
  224. /* 顶栏铃铛 · 未读红点 */
  225. .bellwrap{position:relative;display:inline-flex;flex:none}
  226. .bellwrap .rd{position:absolute;top:-1px;right:0;width:8px;height:8px;border-radius:50%;background:var(--danger);box-shadow:0 0 0 2px var(--app-bg);font-style:normal}
  227. /* 两行顶栏(标题 + 分段控件)的标题行:标题左、铃铛右 */
  228. .apphd{display:flex;align-items:center;justify-content:space-between}
  229. /* 分段控件 */
  230. .seg{display:flex;padding:3px;background:var(--surface-2);border-radius:9px;gap:2px}
  231. .seg span{flex:1;text-align:center;padding:7px 0;font-size:13.5px;color:var(--ink-3);border-radius:7px;transition:.2s}
  232. .seg span.on{background:var(--surface);color:var(--ink-1);font-weight:600;box-shadow:var(--shadow-card)}
  233. [data-theme="dark"] .seg span.on{background:var(--surface-3);color:var(--brand)}
  234. /* 下划线 tab */
  235. .tabs{display:flex;gap:24px;padding:0 20px;border-bottom:1px solid var(--line);flex:none;background:var(--app-bg)}
  236. .tabs span{padding:12px 1px 11px;font-size:14.5px;color:var(--ink-3);position:relative;white-space:nowrap}
  237. .tabs span.on{color:var(--ink-1);font-weight:600}
  238. .tabs span.on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:-1px;width:22px;height:2.5px;border-radius:2px;background:var(--brand)}
  239. .tabs span .dot{position:absolute;top:9px;right:-7px;width:6px;height:6px;padding:0;font-size:0;border-radius:50%;background:var(--danger)}
  240. .tabs span em{font-style:normal;color:var(--danger)}
  241. /* 底部 tabbar */
  242. .tabbar{height:72px;flex:none;display:flex;background:var(--surface);border-top:1px solid var(--line);padding-bottom:10px}
  243. .tb{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;font-size:10.5px;color:var(--ink-3)}
  244. .tb.on{color:var(--brand)}
  245. .tb .icn{width:21px;height:21px;stroke-width:1.6}
  246. /* 滚动体 */
  247. .body{flex:1;overflow:hidden;position:relative}
  248. .pad{padding:0 16px}
  249. /* 卡片 */
  250. .card{background:var(--surface);border-radius:14px;box-shadow:var(--shadow-card);overflow:hidden}
  251. [data-theme="dark"] .card{border:1px solid var(--line)}
  252. .card + .card:not(.pos):not(.qc){margin-top:11px}
  253. .card-hd{display:flex;align-items:center;justify-content:space-between;padding:13px 15px 0}
  254. .card-hd h3{font-size:14.5px;font-weight:600}
  255. .card-hd .more{font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:2px}
  256. /* 资金看板 */
  257. .hero{
  258. margin:10px 16px 0;border-radius:16px;padding:18px 18px 16px;position:relative;overflow:hidden;
  259. background:linear-gradient(150deg,#1B4FD8 0%,#123CAE 58%,#0C2C86 100%);color:#fff;
  260. box-shadow:0 12px 30px rgba(18,60,174,.30);
  261. }
  262. [data-theme="dark"] .hero{background:linear-gradient(150deg,#1A2C5C 0%,#132347 55%,#101B39 100%);box-shadow:0 12px 30px rgba(0,0,0,.5);border:1px solid rgba(91,140,255,.24)}
  263. .hero::after{content:"";position:absolute;right:-40px;top:-52px;width:180px;height:180px;border-radius:50%;background:rgba(255,255,255,.07)}
  264. [data-theme="dark"] .hero::after{background:rgba(91,140,255,.10)}
  265. .hero .lb{display:flex;align-items:center;gap:6px;font-size:12.5px;color:rgba(255,255,255,.76)}
  266. .hero .lb .cur{display:flex;align-items:center;gap:3px;padding:2px 6px;border-radius:5px;background:rgba(255,255,255,.14);font-size:11.5px}
  267. .hero .amt{margin-top:7px;font-size:33px;font-weight:600;letter-spacing:.01em;font-variant-numeric:tabular-nums;display:flex;align-items:baseline;gap:8px}
  268. .hero .amt .eye{opacity:.6}
  269. .hero .arrow{position:absolute;right:18px;top:20px;opacity:.75}
  270. .hero .grid3{display:flex;margin-top:16px;padding-top:14px;border-top:1px solid rgba(255,255,255,.16)}
  271. .hero .grid3 div{flex:1}
  272. .hero .grid3 span{display:block;font-size:11px;color:rgba(255,255,255,.7)}
  273. .hero .grid3 b{display:block;margin-top:5px;font-size:14.5px;font-weight:600;font-variant-numeric:tabular-nums}
  274. /* 币种表 */
  275. .fxtab{width:100%;border-collapse:collapse;font-size:12.5px}
  276. .fxtab th{padding:9px 15px;font-size:10.5px;font-weight:500;color:var(--ink-3);letter-spacing:.06em;text-align:right;background:var(--surface-2)}
  277. .fxtab th:first-child{text-align:left}
  278. .fxtab td{padding:10px 15px;text-align:right;font-variant-numeric:tabular-nums;color:var(--ink-1);border-top:1px solid var(--line)}
  279. .fxtab td:first-child{text-align:left;font-family:"SF Mono",monospace;font-size:12px;color:var(--ink-2)}
  280. /* 快捷入口 */
  281. .quick{display:flex;gap:11px;margin:11px 16px 0}
  282. .qk{flex:1;background:var(--surface);border-radius:13px;padding:13px 12px;display:flex;align-items:center;gap:10px;box-shadow:var(--shadow-card);position:relative}
  283. [data-theme="dark"] .qk{border:1px solid var(--line)}
  284. .qk .ib{width:32px;height:32px;border-radius:9px;background:var(--brand-weak);color:var(--brand);display:flex;align-items:center;justify-content:center;flex:none}
  285. .qk b{font-size:13.5px;font-weight:550}
  286. .qk .rd{position:absolute;top:9px;right:9px;width:7px;height:7px;border-radius:50%;background:var(--danger);box-shadow:0 0 0 2px var(--surface)}
  287. /* 列表行 */
  288. .row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 15px;border-bottom:1px solid var(--line);font-size:14.5px}
  289. .row:last-child{border-bottom:0}
  290. .row .k{color:var(--ink-2);display:flex;align-items:center;gap:7px;flex:none}
  291. .row .k .icn{color:var(--ink-3)}
  292. .row .v{color:var(--ink-1);font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:6px;text-align:right}
  293. .row .v.ph{color:var(--ink-4)}
  294. .row .v.m{font-family:"SF Mono",monospace;font-size:13.5px}
  295. .hint{width:13px;height:13px;border-radius:50%;border:1px solid var(--ink-4);color:var(--ink-3);font-size:8.5px;display:inline-flex;align-items:center;justify-content:center;font-style:normal;flex:none}
  296. /* 标签 / 徽标 */
  297. .tag{font-size:10.5px;padding:2px 6px;border-radius:4px;letter-spacing:.02em;font-weight:520;display:inline-flex;align-items:center;gap:3px;flex:none}
  298. .t-brand{background:var(--brand-weak);color:var(--brand)}
  299. .t-accent{background:var(--accent-weak);color:var(--accent)}
  300. .t-rise{background:var(--rise-weak);color:var(--rise)}
  301. .t-fall{background:var(--fall-weak);color:var(--fall)}
  302. .t-ok{background:var(--ok-weak);color:var(--ok)}
  303. .t-warn{background:var(--warn-weak);color:var(--warn)}
  304. .t-mute{background:var(--surface-3);color:var(--ink-3)}
  305. .t-solid{background:var(--brand);color:var(--on-brand)}
  306. .t-danger{background:var(--danger);color:#fff}
  307. .cmark{width:14px;height:14px;border-radius:50%;background:var(--brand);color:var(--on-brand);font-size:9px;display:inline-flex;align-items:center;justify-content:center;font-weight:600;flex:none;font-style:normal}
  308. .corner{position:absolute;left:0;top:0;padding:2px 9px 2px 7px;font-size:9.5px;color:#fff;background:var(--danger);border-radius:12px 0 12px 0;letter-spacing:.04em;z-index:3}
  309. .corner.due{background:var(--accent)}
  310. .corner.pend{background:var(--ink-3)}
  311. /* 状态点 */
  312. .st{display:inline-flex;align-items:center;gap:5px;font-size:12.5px}
  313. .st i{width:6px;height:6px;border-radius:50%;flex:none;background:currentColor}
  314. .st.wait{color:var(--ink-3)}
  315. .st.live{color:var(--accent)}
  316. .st.live i{background:transparent;border:1.6px solid currentColor}
  317. .st.done{color:var(--ok)}
  318. .st.rej{color:var(--danger)}
  319. .st.exp{color:var(--ink-4)}
  320. /* 按钮 */
  321. .btn{
  322. height:46px;border-radius:12px;display:flex;align-items:center;justify-content:center;gap:6px;
  323. background:var(--brand);color:var(--on-brand);font-size:15.5px;font-weight:600;letter-spacing:.06em;
  324. box-shadow:0 6px 16px rgba(27,79,216,.24);
  325. }
  326. [data-theme="dark"] .btn{box-shadow:0 6px 18px rgba(91,140,255,.20)}
  327. .btn.sm{height:38px;font-size:14px;border-radius:10px;box-shadow:none}
  328. .btn.off{background:var(--surface-3);color:var(--ink-4);box-shadow:none}
  329. .btn.ghost{background:transparent;border:1px solid var(--line-2);color:var(--ink-2);box-shadow:none;font-weight:500}
  330. .btn.danger{background:var(--danger);box-shadow:none;color:#fff}
  331. .btn.wide{width:100%}
  332. .iconbtn{width:46px;height:46px;border-radius:12px;border:1px solid var(--line-2);display:flex;align-items:center;justify-content:center;color:var(--ink-2);flex:none;background:var(--surface)}
  333. /* 输入 */
  334. .field{background:var(--surface);border:1px solid var(--line-2);border-radius:11px;height:44px;display:flex;align-items:center;gap:9px;padding:0 13px;font-size:14.5px;color:var(--ink-1)}
  335. .field.focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-weak)}
  336. .field.err{border-color:var(--danger);box-shadow:0 0 0 3px var(--danger-weak)}
  337. .field .ph{color:var(--ink-4)}
  338. .field .icn{color:var(--ink-3)}
  339. .field .unit{margin-left:auto;color:var(--ink-2);font-size:13.5px}
  340. .lbl{font-size:11.5px;color:var(--ink-3);letter-spacing:.06em;margin-bottom:7px;display:block}
  341. .errtip{font-size:11.5px;color:var(--danger);margin-top:6px;display:flex;align-items:center;gap:4px}
  342. /* chips */
  343. .chips{display:flex;gap:7px;flex-wrap:wrap}
  344. .chip{height:32px;padding:0 12px;border-radius:9px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink-2);font-size:13px;display:flex;align-items:center;font-variant-numeric:tabular-nums}
  345. .chip.on{background:var(--brand-weak);border-color:var(--brand-line);color:var(--brand);font-weight:560}
  346. .chip.dash{border-style:dashed}
  347. /* 单选 / 复选 */
  348. .rad{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;color:var(--ink-2)}
  349. .rad i{width:15px;height:15px;border-radius:50%;border:1.4px solid var(--line-2);position:relative;flex:none}
  350. .rad.on{color:var(--ink-1)}
  351. .rad.on i{border-color:var(--brand)}
  352. .rad.on i::after{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--brand)}
  353. .cb{width:16px;height:16px;border-radius:4.5px;border:1.4px solid var(--line-2);flex:none;display:flex;align-items:center;justify-content:center;color:transparent}
  354. .cb.on{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}
  355. .cb .icn{width:11px;height:11px;stroke-width:2.6}
  356. /* 步进器 */
  357. .stepper{height:38px;border:1px solid var(--line-2);border-radius:10px;display:flex;align-items:center;overflow:hidden;background:var(--surface)}
  358. .stepper b{width:34px;text-align:center;font-weight:400;font-size:17px;color:var(--ink-3)}
  359. .stepper i{flex:1;text-align:center;font-style:normal;font-variant-numeric:tabular-nums;font-size:15px;border-left:1px solid var(--line);border-right:1px solid var(--line);line-height:36px}
  360. .stepper.err{border-color:var(--danger)}
  361. .stepper.err i{color:var(--danger)}
  362. /* 搜索 */
  363. .search{height:38px;border-radius:10px;background:var(--surface-2);display:flex;align-items:center;gap:8px;padding:0 12px;font-size:14px;color:var(--ink-4)}
  364. .search .icn{color:var(--ink-3)}
  365. .search b{color:var(--ink-1);font-weight:500}
  366. .sug{background:var(--surface);border-radius:12px;box-shadow:var(--shadow-pop);overflow:hidden;margin-top:6px}
  367. .sug div{padding:11px 13px;font-size:14px;border-bottom:1px solid var(--line);display:flex;gap:8px}
  368. .sug div:last-child{border-bottom:0}
  369. .sug em{font-style:normal;color:var(--brand)}
  370. .sug span{font-family:"SF Mono",monospace;font-size:12.5px;color:var(--ink-3)}
  371. /* 弹窗 */
  372. .scrim{position:absolute;inset:0;background:var(--scrim);z-index:40;display:flex;align-items:center;justify-content:center;padding:0 30px}
  373. .scrim.bottom{align-items:flex-end;padding:0}
  374. .dlg{width:100%;background:var(--surface);border-radius:16px;overflow:hidden;box-shadow:var(--shadow-pop)}
  375. .dlg.sheet{border-radius:18px 18px 0 0;padding-bottom:22px}
  376. .dlg-hd{padding:18px 18px 0;text-align:center}
  377. .dlg-hd h3{font-size:16.5px;font-weight:600}
  378. .dlg-bd{padding:14px 18px 4px;font-size:14px;color:var(--ink-2);line-height:1.65}
  379. .dlg-ft{display:flex;border-top:1px solid var(--line);margin-top:16px}
  380. .dlg-ft span{flex:1;text-align:center;padding:14px 0;font-size:15.5px;color:var(--brand);font-weight:550}
  381. .dlg-ft span:first-child{color:var(--ink-2);border-right:1px solid var(--line)}
  382. .dlg-ft.single span{color:var(--brand)}
  383. .dlg-btns{display:flex;gap:11px;padding:16px 18px 0}
  384. .dlg-btns .btn{flex:1}
  385. /* toast */
  386. .toast{
  387. position:absolute;left:50%;top:47%;transform:translate(-50%,-50%);z-index:50;
  388. background:rgba(15,25,45,.90);color:#fff;padding:12px 20px;border-radius:11px;font-size:14px;max-width:290px;text-align:center;line-height:1.55;
  389. }
  390. [data-theme="dark"] .toast{background:rgba(230,238,250,.94);color:#0B1020}
  391. /* 提示条 */
  392. .notice{display:flex;gap:8px;padding:10px 12px;border-radius:10px;font-size:12.5px;line-height:1.6}
  393. .notice.warn{background:var(--warn-weak);color:var(--warn)}
  394. .notice.info{background:var(--brand-weak);color:var(--brand)}
  395. .notice.danger{background:var(--danger-weak);color:var(--danger)}
  396. .notice .icn{flex:none;margin-top:1px}
  397. /* 空态 */
  398. .empty{padding:44px 0;text-align:center;color:var(--ink-4);font-size:13.5px}
  399. .empty .icn{width:34px;height:34px;stroke-width:1.2;margin-bottom:10px;color:var(--ink-4)}
  400. /* 分组标题 */
  401. .gtitle{padding:16px 16px 8px;font-size:12px;color:var(--ink-3);letter-spacing:.06em}
  402. /* 骨架/遮罩说明用 */
  403. .dim{opacity:.45}
  404. /* ============================================================
  405. 业务组件
  406. ============================================================ */
  407. /* 筛选栏 */
  408. .filterbar{display:flex;gap:8px;padding:10px 16px;background:var(--app-bg);flex:none;align-items:center}
  409. .fb{height:34px;padding:0 11px;border-radius:9px;background:var(--surface-2);color:var(--ink-2);font-size:13px;display:flex;align-items:center;gap:5px;white-space:nowrap}
  410. .fb.on{background:var(--brand-weak);color:var(--brand);font-weight:550}
  411. .fb .icn{width:13px;height:13px}
  412. .fb.flex{flex:1;min-width:0}
  413. /* 筛选栏 v2 —— 搜索行 + 条件行(时间在左,筛选入口在右) */
  414. .fsearch{margin:10px 16px 0;height:40px;border-radius:12px;background:var(--surface-2);display:flex;align-items:center;gap:9px;padding:0 13px;font-size:14px;color:var(--ink-4);flex:none}
  415. .fsearch .icn{width:16px;height:16px;color:var(--ink-3);flex:none}
  416. .fsearch b{color:var(--ink-1);font-weight:500}
  417. .fsearch .clr{margin-left:auto;color:var(--ink-4)}
  418. .fcond{display:flex;align-items:center;justify-content:space-between;padding:11px 16px;flex:none;background:var(--app-bg)}
  419. .fpill{height:34px;padding:0 14px;border-radius:17px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink-2);font-size:13.5px;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
  420. .fpill .icn{width:13px;height:13px;color:var(--ink-3)}
  421. .fpill.on{background:var(--brand-weak);border-color:var(--brand-line);color:var(--brand);font-weight:560}
  422. .fpill.on .icn{color:var(--brand)}
  423. .fmore{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;color:var(--ink-2);position:relative;padding-right:2px}
  424. .fmore .icn{width:15px;height:15px;color:var(--ink-3)}
  425. .fmore.on{color:var(--brand);font-weight:560}
  426. .fmore.on .icn{color:var(--brand)}
  427. .fmore.on::after{content:"";position:absolute;right:-5px;top:-3px;width:6px;height:6px;border-radius:50%;background:var(--danger)}
  428. /* 筛选面板 —— 底部弹层 */
  429. .fsheet{padding-bottom:20px}
  430. .fsheet-hd{display:flex;align-items:center;justify-content:space-between;padding:20px 20px 2px}
  431. .fsheet-hd b{font-size:17px;font-weight:600;letter-spacing:.02em}
  432. .fsheet-hd .icn{width:19px;height:19px;color:var(--ink-3)}
  433. .fsec{padding:16px 20px 0}
  434. .fsec .lbl{margin-bottom:10px}
  435. .optgrid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
  436. .opt{height:42px;border-radius:21px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink-2);font-size:14px;display:flex;align-items:center;justify-content:center;white-space:nowrap;padding:0 10px}
  437. .opt.on{background:var(--brand-weak);border-color:var(--brand);color:var(--brand);font-weight:600}
  438. .opt.dis{background:var(--surface-2);border-color:var(--line);color:var(--ink-4)}
  439. .fline{height:1px;background:var(--line);margin:18px 20px 0}
  440. /* 自定义区间 · 日期段 + 滚轮 */
  441. .dtrow{display:flex;gap:11px}
  442. .dt{flex:1;min-width:0;background:var(--surface);border:1px solid var(--line-2);border-radius:12px;padding:8px 12px 10px}
  443. .dt em{display:block;font-style:normal;font-size:11px;color:var(--ink-3);letter-spacing:.04em}
  444. .dt b{display:block;margin-top:3px;font-size:16px;font-weight:600;color:var(--ink-1);font-variant-numeric:tabular-nums;font-family:"SF Mono",ui-monospace,Menlo,monospace}
  445. .dt.act{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-weak)}
  446. .dt.act em{color:var(--brand)}
  447. .dt.err{border-color:var(--danger);box-shadow:0 0 0 3px var(--danger-weak)}
  448. .wheel{position:relative;margin:14px 20px 0;padding:4px 8px;display:grid;grid-template-columns:repeat(3,1fr);text-align:center}
  449. .wheel .band{position:absolute;left:6px;right:6px;top:50%;height:40px;transform:translateY(-50%);background:var(--surface-2);border-radius:10px}
  450. .wcol{position:relative;z-index:1;display:flex;flex-direction:column}
  451. .wcol span{height:40px;line-height:40px;font-size:14px;color:var(--ink-2);font-variant-numeric:tabular-nums}
  452. .wcol span.far{color:var(--ink-4);opacity:.5}
  453. .wcol span.now{color:var(--ink-1);font-size:16px;font-weight:600}
  454. .fsheet-ft{display:flex;gap:12px;padding:20px 20px 0}
  455. .fsheet-ft .btn{flex:1.18}
  456. .fsheet-ft .btn.ghost{flex:.82;background:var(--surface-2);border:0;color:var(--ink-2);font-weight:600}
  457. /* 持仓卡片 */
  458. .pos{position:relative;margin:0 16px 11px;padding:13px 0 0}
  459. .pos-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:0 14px}
  460. .pos-name{font-size:15.5px;font-weight:600;display:flex;align-items:center;gap:6px}
  461. .pos-code{font-size:11px;color:var(--ink-3);margin-top:4px;letter-spacing:.02em;font-family:"SF Mono",monospace}
  462. .pos-val{text-align:right;flex:none}
  463. .pos-val b{display:block;font-size:18px;font-weight:600;font-variant-numeric:tabular-nums}
  464. .pos-val span{display:block;font-size:10.5px;color:var(--ink-3);margin-top:3px}
  465. .pos-pl{display:flex;justify-content:flex-end;gap:9px;padding:6px 14px 0;font-size:12.5px;font-variant-numeric:tabular-nums}
  466. .up{color:var(--rise)} .down{color:var(--fall)} .flat{color:var(--ink-3)}
  467. .pos-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px 6px;padding:12px 14px 13px;margin-top:10px;border-top:1px solid var(--line)}
  468. .pos-grid div span{display:block;font-size:10px;color:var(--ink-3);letter-spacing:.02em}
  469. .pos-grid div b{display:block;margin-top:4px;font-size:12.5px;font-weight:550;font-variant-numeric:tabular-nums;white-space:nowrap}
  470. .pos-grid div b em{font-style:normal;color:var(--ink-3);font-weight:400;font-size:11px}
  471. .pos-ops{display:flex;border-top:1px solid var(--line);background:var(--surface-2)}
  472. .pos-ops span{flex:1;text-align:center;padding:11px 0;font-size:13.5px;color:var(--ink-2);border-right:1px solid var(--line)}
  473. .pos-ops span:last-child{border-right:0}
  474. .pos-ops span.pri{color:var(--brand);font-weight:550}
  475. .pos-ops span.hot{color:var(--danger);font-weight:550}
  476. .pos-ops span.off{color:var(--ink-4)}
  477. /* 冻结列表格(数据模式) */
  478. .gridtab{display:flex;font-size:12px;overflow:hidden}
  479. .gt-fix{flex:none;width:118px;border-right:1px solid var(--line-2);background:var(--surface);position:relative;z-index:2;box-shadow:4px 0 10px rgba(15,27,51,.06)}
  480. [data-theme="dark"] .gt-fix{box-shadow:4px 0 10px rgba(0,0,0,.35)}
  481. .gt-scroll{flex:1;overflow:hidden;background:var(--surface)}
  482. .gt-h{height:36px;display:flex;align-items:center;background:var(--surface-2);color:var(--ink-3);font-size:10.5px;letter-spacing:.02em;padding:0 10px;border-bottom:1px solid var(--line);white-space:nowrap;gap:14px}
  483. .gt-r{height:52px;display:flex;align-items:center;padding:0 10px;border-bottom:1px solid var(--line);white-space:nowrap;gap:14px;font-variant-numeric:tabular-nums}
  484. .gt-fix .gt-r{flex-direction:column;align-items:flex-start;justify-content:center;gap:3px;position:relative;padding-left:14px}
  485. .gt-fix .gt-h{padding-left:14px}
  486. /* 表格形式的「新报价」角标:斜切丝带,带 NEW 文案;冻结列左内边距统一 14px 给丝带让位,行内文字不被压 */
  487. .gt-new{position:absolute;left:0;top:0;width:34px;height:34px;overflow:hidden;z-index:3;pointer-events:none}
  488. .gt-new::before{content:"NEW";position:absolute;left:-17px;top:1px;width:48px;padding:1px 0;transform:rotate(-45deg);background:var(--danger);color:#fff;font-size:7.5px;font-weight:600;font-style:normal;letter-spacing:.04em;text-align:center;line-height:1.35}
  489. .gt-r i{font-style:normal;display:inline-block;text-align:right}
  490. .gt-h i{display:inline-block;text-align:right}
  491. /* 询价 / 订单卡片 */
  492. .qc{margin:0 16px 10px;padding:13px 14px;position:relative}
  493. .qc-top{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
  494. .qc-name{font-size:15px;font-weight:600;display:flex;align-items:center;gap:6px}
  495. .qc-sub{font-size:11px;color:var(--ink-3);margin-top:4px;font-family:"SF Mono",monospace}
  496. .qc-r{text-align:right;flex:none}
  497. .qc-time{font-size:10.5px;color:var(--ink-3);margin-top:5px;font-family:"SF Mono",monospace}
  498. .qc-meta{display:flex;gap:16px;margin-top:10px;font-size:12.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}
  499. .qc-meta em{font-style:normal;color:var(--ink-3);font-size:11px;margin-right:4px}
  500. .qc-open{margin-top:12px;border-top:1px dashed var(--line-2);padding-top:10px}
  501. .qt{display:grid;grid-template-columns:1.1fr .8fr .8fr .9fr;font-size:12px;font-variant-numeric:tabular-nums;align-items:center}
  502. .qt.h{color:var(--ink-3);font-size:10.5px;padding-bottom:7px}
  503. .qt.r{padding:9px 8px;margin:0 -8px;border-radius:8px}
  504. .qt.r:hover,.qt.r.hl{background:var(--brand-weak)}
  505. .qt .p{color:var(--brand);font-weight:600}
  506. .qt .t{color:var(--ink-3);font-size:10.5px;text-align:right}
  507. /* 「新」标记分工:卡片角标(丝带)表明本单有新报价,行内红点指出具体是哪一条 */
  508. .qt span:first-child{position:relative;padding-left:12px}
  509. .qt .newdot{position:absolute;left:0;top:50%;margin:0;transform:translateY(-50%);vertical-align:0}
  510. .newdot{width:6px;height:6px;border-radius:50%;background:var(--danger);display:inline-block;margin-right:5px;vertical-align:1px}
  511. /* 时间线(流水) */
  512. .tl{padding:0 16px}
  513. .tl-i{display:flex;gap:12px;padding:14px 0;border-bottom:1px solid var(--line)}
  514. .tl-i .dot{width:9px;height:9px;border-radius:50%;background:var(--brand);flex:none;margin-top:5px;box-shadow:0 0 0 3px var(--brand-weak)}
  515. .tl-i .dot.out{background:var(--accent);box-shadow:0 0 0 3px var(--accent-weak)}
  516. .tl-i .c{flex:1}
  517. .tl-i .c b{font-size:14.5px;font-weight:550}
  518. .tl-i .c span{display:block;font-size:11px;color:var(--ink-3);margin-top:4px;font-family:"SF Mono",monospace}
  519. .tl-i .amt{font-size:15px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
  520. /* 设置项列表 */
  521. .menu{background:var(--surface);border-radius:14px;overflow:hidden;margin:0 16px 12px;box-shadow:var(--shadow-card)}
  522. [data-theme="dark"] .menu{border:1px solid var(--line)}
  523. .mi{display:flex;align-items:center;gap:12px;padding:15px 15px;border-bottom:1px solid var(--line);font-size:15px}
  524. .mi:last-child{border-bottom:0}
  525. .mi .ib{width:30px;height:30px;border-radius:9px;background:var(--brand-weak);color:var(--brand);display:flex;align-items:center;justify-content:center;flex:none}
  526. .mi .ib.am{background:var(--accent-weak);color:var(--accent)}
  527. .mi .tx{flex:1}
  528. .mi .tx em{font-style:normal;display:block;font-size:11.5px;color:var(--ink-3);margin-top:3px}
  529. .mi .rv{color:var(--ink-3);font-size:13.5px;display:flex;align-items:center;gap:4px}
  530. /* 开关 */
  531. .sw2{width:44px;height:26px;border-radius:14px;background:var(--line-2);position:relative;flex:none;transition:.2s}
  532. .sw2::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:.2s}
  533. .sw2.on{background:var(--brand)}
  534. .sw2.on::after{left:21px}
  535. /* 数据表(App 内) */
  536. .dt{width:100%;border-collapse:collapse;font-size:12.5px}
  537. .dt th{background:var(--surface-2);color:var(--ink-3);font-size:10.5px;font-weight:500;padding:9px 10px;text-align:right;letter-spacing:.02em}
  538. .dt th:first-child{text-align:left}
  539. .dt td{padding:10px;text-align:right;border-top:1px solid var(--line);font-variant-numeric:tabular-nums}
  540. .dt td:first-child{text-align:left;color:var(--ink-2)}
  541. /* 键盘 */
  542. .kbd{background:var(--surface-2);padding:8px 6px 26px;display:grid;grid-template-columns:repeat(3,1fr);gap:7px}
  543. .kbd span{height:44px;border-radius:8px;background:var(--surface);display:flex;align-items:center;justify-content:center;font-size:21px;font-weight:500;box-shadow:0 1px 2px rgba(15,27,51,.10)}
  544. [data-theme="dark"] .kbd span{box-shadow:none;border:1px solid var(--line)}
  545. .kbd span.fn{background:transparent;box-shadow:none;font-size:15px;color:var(--ink-2)}
  546. .kbd span.ok{background:var(--brand);color:var(--on-brand);font-size:16px}
  547. /* 对照页专用 */
  548. .pair{display:grid;grid-template-columns:390px 390px;gap:36px;justify-content:start}
  549. .pair-lb{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--canvas-mute);margin-bottom:12px;letter-spacing:.08em}
  550. .pair-lb i{width:12px;height:12px;border-radius:3px;border:1px solid var(--canvas-line);flex:none}
  551. /* 角标占位:有角标的卡片顶部让出空间,避免压住标的名 */
  552. .pos:has(.corner) .pos-hd{padding-top:15px}
  553. .qc:has(.corner){padding-top:26px}
  554. /* ==== v1.3 · 00 专用 BEGIN ==== */
  555. /* 整页对照引用 04 / 02 的专用样式(P1 / P2 与 04-A1、02-Q1 同一份 DOM) */
  556. /* 钱包表:DataTable 小表版式(表头 36 / 行 38、单元格 12、列距 14、左右 10,币种列冻结按内容宽) */
  557. .wtab .wr{display:flex;align-items:center;gap:14px;padding:0 10px;height:38px;border-bottom:1px solid var(--line);font-size:12px;white-space:nowrap}
  558. .wtab .wr.h{height:36px;background:var(--surface-2);font-size:10.5px;letter-spacing:.02em;color:var(--ink-3)}
  559. .wtab .wr>*{flex:1;text-align:right;font-family:var(--font-num);font-variant-numeric:tabular-nums}
  560. .wtab .wr.h>*{font-family:inherit}
  561. .wtab .wr>*:first-child{flex:none;width:22px;text-align:left;font-family:var(--font-mono);color:var(--ink-2)}
  562. .wtab .wr.h>*:first-child{font-family:inherit;color:var(--ink-3)}
  563. .wtab .wr:last-child{border-bottom:0}
  564. .wfoot{display:flex;justify-content:flex-end;padding:9px 15px;border-top:1px solid var(--line)}
  565. .wfoot span{font-size:12.5px;color:var(--brand);display:flex;align-items:center;gap:3px}
  566. .warnbar{margin:11px 16px 0}
  567. /* 持仓区标题行 */
  568. .card-hd h3 .cnt{color:var(--ink-3);font-weight:400;font-size:12.5px;margin-left:6px}
  569. .card-hd .more .icn{width:13px;height:13px}
  570. /* 增额试算表 */
  571. .simt{font-size:12px;color:var(--ink-3);margin-bottom:9px}
  572. .simtab{border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--surface)}
  573. .simtab div{display:flex;align-items:center;padding:10px}
  574. .simtab div+div{border-top:1px solid var(--line)}
  575. .simtab div span{flex:1;text-align:right;font-size:12.5px;font-family:var(--font-num);font-variant-numeric:tabular-nums}
  576. .simtab div span:first-child{text-align:left;color:var(--ink-2);font-family:inherit}
  577. .simtab .h{background:var(--surface-2);padding:8px 10px}
  578. .simtab .h span{font-size:10.5px;font-weight:500;color:var(--ink-3);font-family:inherit}
  579. .simtab .good{color:var(--ok);font-weight:600}
  580. .simtab .na{color:var(--ink-4)}
  581. /* 询价表单面板(代码 InquiryFormPanel):面色块、底线分隔;检索下拉绝对定位盖在下方表单上 */
  582. .ipanel{padding:13px 16px 14px;background:var(--surface);border-bottom:1px solid var(--line);position:relative;z-index:5}
  583. .ipanel .search{height:38px}
  584. .ipanel .search.focus{background:var(--surface);box-shadow:0 0 0 1px var(--brand),0 0 0 4px var(--brand-weak)}
  585. .ipanel .search b{font-weight:500;color:var(--ink-1)}
  586. .ipanel .search .clr{margin-left:auto;color:var(--ink-3);width:14px;height:14px}
  587. .frm2{display:flex;gap:10px;margin-top:12px}
  588. .frm2>div{flex:1}
  589. .rofield{height:38px;border-radius:11px;background:var(--surface-2);display:flex;align-items:center;padding:0 13px;font-size:13.5px}
  590. .rofield b{font-family:var(--font-mono);font-weight:600;color:var(--ink-1)}
  591. .rofield span{margin-left:auto;font-size:10.5px;color:var(--ink-4)}
  592. .rofield .icn{margin-left:auto;width:14px;height:14px;color:var(--ink-3)}
  593. .frm-btns{display:flex;gap:10px;margin-top:14px}
  594. .frm-btns .btn{flex:1}
  595. .iconbtn .icn{color:var(--ink-2)}
  596. /* 检索下拉(代码 SearchField):在搜 = 转圈 +「加载中…」;续查 = 旧行 30% + 转圈浮层;无结果 = 一行提示;失败静默不出 */
  597. .ipanel .sug{position:absolute;left:16px;right:16px;top:51px;margin-top:6px;z-index:10;border-radius:11px}
  598. .ipanel .sug .r{display:flex;align-items:center;gap:8px;padding:11px 13px;border-bottom:1px solid var(--line);font-size:14px}
  599. .ipanel .sug .r:last-child{border-bottom:0}
  600. .ipanel .sug .r .cd{flex:1;font-family:var(--font-mono);font-size:12.5px;color:var(--ink-3)}
  601. .ipanel .sug .r em{font-style:normal;color:var(--brand)}
  602. .ipanel .sug .ld,.ipanel .sug .em{display:flex;align-items:center;justify-content:center;gap:8px;padding:16px 0;font-size:12.5px;letter-spacing:.04em;color:var(--ink-3)}
  603. .ipanel .sug .em{font-size:13px;letter-spacing:0}
  604. .ipanel .sug div.rows{display:block;padding:0;border:0}
  605. .ipanel .sug div.ov{padding:0;border:0}
  606. .ipanel .sug .r span:last-child{font-family:inherit;font-size:14px;color:var(--ink-1)}
  607. .ipanel .sug .ov span{font-family:inherit}
  608. .ipanel .sug .rows.fade{opacity:.3}
  609. .ipanel .sug .ov{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
  610. .ipanel .sug .ov span{display:flex;align-items:center;gap:8px;background:var(--surface);padding:6px 12px;border-radius:11px;font-size:12.5px;letter-spacing:.04em;color:var(--ink-3)}
  611. /* 询价卡片:展开时品牌描边;报价子表(DataTable:表头 36、行 36、列距 8,下单键 46×26) */
  612. .qc.open{box-shadow:var(--shadow-card),0 0 0 1px var(--brand-line)}
  613. .qc-meta em{margin-right:4px}
  614. .qc-open{border-top-style:dashed}
  615. .qtab{margin:0 -14px -13px}
  616. .qtab>div{display:flex;align-items:center;gap:8px;padding:0 10px 0 14px;border-top:1px solid var(--line)}
  617. .qtab>div:first-child{border-top:0}
  618. .qtab .qh{height:36px;font-size:10.5px;letter-spacing:.02em;color:var(--ink-3)}
  619. .qtab .qr{height:40px;font-size:12px;position:relative}
  620. .qtab>div>span{flex:1;text-align:right;font-family:var(--font-num);font-variant-numeric:tabular-nums;white-space:nowrap}
  621. .qtab>div>span:first-child{text-align:left;font-family:var(--font-mono)}
  622. .qtab .qh>span{font-family:inherit}
  623. .qtab>div>span:last-child{flex:none;width:46px}
  624. .qtab .p{color:var(--brand);font-weight:600}
  625. .qtab .t{color:var(--ink-3);font-size:10.5px}
  626. .qtab .nd{position:absolute;left:4px;top:50%;margin-top:-3px;width:6px;height:6px;border-radius:50%;background:var(--danger)}
  627. .mbtn{display:flex;align-items:center;justify-content:center;width:46px;height:26px;border-radius:8px;background:var(--brand);color:var(--on-brand);font-size:12.5px;font-weight:600;font-family:"PingFang SC",system-ui,sans-serif}
  628. .mbtn.dis{opacity:.45}
  629. .qc .notice{margin-top:2px}
  630. /* 自定义名义本金小键盘:退格键用图标 */
  631. .kbd span.fn .icn{width:22px;height:22px;color:var(--ink-2)}
  632. .kbd span{font-family:var(--font-num)}
  633. .kbd span.ok,.kbd span.fn{font-family:"PingFang SC",system-ui,sans-serif}
  634. /* 下单页:分组 Section、总金额行、购买力回显、协议勾选、底栏 */
  635. .ocard{margin:0 16px}
  636. .frow .rads{display:flex;gap:12px}
  637. .frow b em{font-style:normal;color:var(--ink-2);margin-left:6px;font-family:"PingFang SC",system-ui,sans-serif}
  638. .frow b .icn{width:14px;height:14px;color:var(--ink-3);vertical-align:-2px;margin-left:5px}
  639. .frow.tot{background:var(--surface-2);padding:13px 15px}
  640. .frow.tot>span{color:var(--ink-1);font-weight:600}
  641. .frow.tot>b{display:flex;flex-direction:column;align-items:flex-end;font-size:17px;font-weight:600}
  642. .frow.tot>b small{font-size:10.5px;font-weight:400;color:var(--ink-3);margin-top:4px}
  643. .ocard.over{box-shadow:none;border:1px solid var(--danger)}
  644. .frow.tot.over{background:var(--danger-weak)}
  645. .frow.tot.over>span,.frow.tot.over>b,.frow.tot.over>b small{color:var(--danger)}
  646. .lp{padding:0 15px 12px;display:flex;flex-direction:column;align-items:flex-end;gap:6px;border-bottom:1px solid var(--line)}
  647. .lp .stepper{width:160px}
  648. .lp .lim{display:flex;gap:14px;font-size:10.5px;color:var(--ink-3)}
  649. .lp .lim b{font-weight:400;font-family:var(--font-num)}
  650. .lp .errtip{margin-top:0}
  651. .agree{padding:14px 16px 0;display:flex;flex-direction:column;gap:11px}
  652. .agree label{display:flex;gap:9px;font-size:12.5px;color:var(--ink-2);line-height:1.5;align-items:flex-start}
  653. .agree label b{color:var(--brand);font-weight:600}
  654. .agree .cb{margin-top:2px}
  655. .bbar{padding:12px 16px 30px;display:flex;gap:11px;border-top:1px solid var(--line);background:var(--surface)}
  656. /* 合适性评估弹窗:四列表 + 结论条 + 申报理由单选 */
  657. .stab{margin:0 0 0;border-top:1px solid var(--line)}
  658. .stab>div{display:grid;grid-template-columns:1.2fr 1.15fr 1fr 52px;gap:6px;padding:9px 10px;border-bottom:1px solid var(--line);font-size:11px;line-height:1.45;color:var(--ink-1);align-items:start}
  659. .stab>div span{text-align:right}
  660. .stab>div span:first-child{text-align:left;color:var(--ink-2)}
  661. .stab .sh{background:var(--surface-2);font-size:10.5px;color:var(--ink-3);padding:8px 10px;white-space:nowrap}
  662. .stab .sh span:first-child{color:var(--ink-3)}
  663. .stab .y{color:var(--ok)} .stab .n{color:var(--danger)}
  664. .reasons{padding:10px 16px 0;display:flex;flex-direction:column;gap:9px}
  665. .reasons .rad{font-size:12.5px;align-items:flex-start;line-height:1.5}
  666. .reasons .rad i{margin-top:2px}
  667. .reasons .oth{display:flex;align-items:center;gap:10px}
  668. .reasons .oth .field{flex:1;height:36px;font-size:12.5px}
  669. /* 协议文档页 */
  670. .doc{padding:16px 20px 0}
  671. .doc h4{font-size:17px;font-weight:600}
  672. .doc .no{font-family:var(--font-mono);font-size:11.5px;color:var(--ink-3);margin-top:6px}
  673. .doc .sect{margin-top:18px;font-size:13.5px;line-height:1.9;color:var(--ink-2)}
  674. .doc .sect b{display:block;color:var(--ink-1);margin:14px 0 4px}
  675. .doc .sect b:first-child{margin-top:0}
  676. .fright{display:flex;align-items:center;gap:12px}
  677. /* 00 自身 */
  678. .tokrow .nm small{display:block;font-size:10px;color:var(--canvas-mute);margin-top:2px;letter-spacing:.02em}
  679. .btn.tonal{background:var(--surface-2);color:var(--ink-1);box-shadow:none;border:0}
  680. .btn.dgtext{background:transparent;border:1px solid var(--line-2);color:var(--danger);box-shadow:none}
  681. .cmp-col{display:flex;flex-direction:column;gap:10px}
  682. .cmp-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
  683. .cmp-pl{display:flex;flex-direction:column;gap:8px;font-family:var(--font-num);font-size:14px;font-weight:600}
  684. .cmp-pl span small{font-size:12px;margin-left:10px;font-weight:500}
  685. .cmp-field .field{background:var(--surface)}
  686. .cmp-field .field .u{margin-left:auto;color:var(--ink-3);font-size:14px}
  687. .cmp-field .field b{font-family:var(--font-num);font-weight:500}
  688. .cmp-cornerrow{display:flex;gap:8px;align-items:flex-start}
  689. .cmp-cornerrow .corner{position:static;display:inline-flex;border-radius:12px 0 12px 0}
  690. .cmp-panel{background:var(--surface);border-radius:14px;padding:12px 0 6px;box-shadow:var(--shadow-card)}
  691. [data-theme="dark"] .cmp-panel{border:1px solid var(--line)}
  692. .cmp-panel .filterbar{padding:10px 12px 4px}
  693. /* ==== v1.3 · 00 专用 END ==== */
  694. /* ==== v1.3 公共覆盖 BEGIN · 2026-10-14 按代码现状对齐(同一段注入全部图纸,改动从清单目录的 common-v13.css 同步) ==== */
  695. /* 字体:数值走 Inter(代码 NumText),代码 / 编号走 iOS 的 Menlo(代码 MonoText),正文仍是系统字 */
  696. @font-face{font-family:"Inter";src:url("assets/fonts/Inter-Regular.subset.otf") format("opentype");font-weight:400}
  697. @font-face{font-family:"Inter";src:url("assets/fonts/Inter-Medium.subset.otf") format("opentype");font-weight:500}
  698. @font-face{font-family:"Inter";src:url("assets/fonts/Inter-SemiBold.subset.otf") format("opentype");font-weight:600}
  699. @font-face{font-family:"Inter";src:url("assets/fonts/Inter-Bold.subset.otf") format("opentype");font-weight:700}
  700. :root{--font-num:"Inter","PingFang SC","Hiragino Sans GB",system-ui,sans-serif;--font-mono:Menlo,"SF Mono",ui-monospace,monospace}
  701. .phone .num,.hero .amt,.hero .grid3 b,.fxtab td,.pos-val b,.pos-pl,.pos-grid div b,.qt,.gt-r,.stepper i,.kbd span,.tl-i .amt{font-family:var(--font-num)}
  702. .statusbar .num{font-family:inherit}
  703. .phone .mono,.pos-code,.qc-sub,.qc-time,.fxtab td:first-child,.sug span,.tl-i .c span,.row .v.m{font-family:var(--font-mono)}
  704. /* 底栏:四个 Tab(票据 / 账户 / 消息 / 我的);消息 Tab 只有红点,后端不给条数 */
  705. .tb .tbi{position:relative;display:inline-flex;flex:none}
  706. .tb .tbi .rdot{position:absolute;top:-2px;left:14px;width:8px;height:8px;border-radius:50%;background:var(--danger);box-shadow:0 0 0 2px var(--surface)}
  707. /* 二级页导航栏:iOS 系统导航栏,表面色底、居中 17 / 600 标题、品牌色返回箭头、无分隔线(H5 标题靠左,见 00 规范) */
  708. .navbar{height:44px;background:var(--surface)}
  709. .statusbar:has(+ .navbar){background:var(--surface)}
  710. .navbar h2{font-size:17px;font-weight:600;letter-spacing:0}
  711. .navbar .bk{color:var(--brand)}
  712. .navbar .bk .icn{width:22px;height:22px;stroke-width:2.1}
  713. /* 图注里的身份标记:本期未上线 / v1.3 新增 / 平台限定 */
  714. .cap-flags{display:inline-flex;gap:6px;margin-left:8px;vertical-align:1px}
  715. .cap-flag{font-family:"PingFang SC",system-ui,sans-serif;font-size:10px;letter-spacing:.04em;padding:1px 6px;border-radius:4px;border:1px solid var(--canvas-line);color:var(--canvas-mute);background:var(--canvas-2)}
  716. .cap-flag.off{color:var(--accent);border-color:var(--accent-line);background:var(--accent-weak)}
  717. .cap-flag.new{color:var(--brand);border-color:var(--brand-line);background:var(--brand-weak)}
  718. .cap-flag.plat{color:var(--ok);border-color:rgba(15,123,79,.35);background:var(--ok-weak)}
  719. /* 实心底上的文字(角标 / 实心标签 / 危险按钮):浅色白字,深色下底色被提亮、改配近黑字(代码 $onFill / $onDanger) */
  720. [data-theme="dark"] .corner,[data-theme="dark"] .t-danger,[data-theme="dark"] .btn.danger,[data-theme="dark"] .mb,[data-theme="dark"] .gt-new::before{color:#05122E}
  721. /* 表格首列的迷你角标(代码 CornerBadge variant="mini"):9 / 600、左右 4 */
  722. .mb{display:inline-flex;align-items:center;font-size:9px;font-weight:600;line-height:12px;padding:1px 4px;border-radius:4px;color:#fff;background:var(--ink-3);white-space:nowrap}
  723. .mb.d{background:var(--danger)} .mb.a{background:var(--accent)} .mb.m{background:var(--ink-3)} .mb.b{background:var(--brand)}
  724. /* Toast:按内容定宽、最宽 290(代码 maxW 290),单行放得下就不折行;位置 top 76% */
  725. .toast{width:max-content;max-width:290px}
  726. /* ---- 通用组件(代码 components/ 的对应件) ---- */
  727. /* 资金看板右上「>」用 lg 档 */
  728. .hero .arrow{width:22px;height:22px}
  729. /* 只读行:InfoRow(无分隔线)/ FieldRow(带分隔线,.frow),左 ink2 右 Inter */
  730. .irow{display:flex;justify-content:space-between;align-items:center;padding:14px 15px;font-size:14.5px}
  731. .irow span{color:var(--ink-2)}
  732. .irow b{font-weight:400;font-family:var(--font-num);font-variant-numeric:tabular-nums}
  733. .irow b.dg{color:var(--danger)}
  734. .frow{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 15px;border-bottom:1px solid var(--line);font-size:14.5px}
  735. .frow>span{color:var(--ink-2);display:flex;align-items:center;gap:6px}
  736. .frow>b{font-weight:400;font-family:var(--font-num);font-variant-numeric:tabular-nums;text-align:right}
  737. .frow.hl{background:var(--brand-weak)}
  738. .frow.hl>span,.frow.hl>b{color:var(--brand)}
  739. .frow.hl>b{font-weight:600}
  740. .frow.last,.frow:last-child{border-bottom:0}
  741. /* 字段说明 ⓘ(代码 IconButton name="info",ink4 14) */
  742. .xi{width:14px;height:14px;color:var(--ink-4);flex:none}
  743. /* 弹窗里的证券行(代码在前)与行情行 */
  744. .secl{display:flex;align-items:center;gap:7px}
  745. .secl .mono{font-size:12px;color:var(--ink-3)}
  746. .secl b{font-size:14.5px;font-weight:600}
  747. .phint{display:flex;gap:14px;margin-top:9px;font-size:12px;color:var(--ink-3)}
  748. .phint b{font-weight:400;font-family:var(--font-num);font-variant-numeric:tabular-nums}
  749. .field .num{font-family:var(--font-num)}
  750. .errtip .icn{width:13px;height:13px}
  751. .errtip.r{justify-content:flex-end}
  752. /* 时间片块(代码 TradingWindowDialog) */
  753. .twin{border-radius:10px;background:var(--surface-2);padding:13px 0;display:flex;flex-direction:column;align-items:center;gap:5px}
  754. .twin span{font-size:13px;color:var(--ink-3)}
  755. .twin b{font-size:17px;font-weight:600;font-family:var(--font-num)}
  756. /* 弹窗标题区(代码 DialogHeading):图标圆 44 + 标题 16.5 / 600 + 说明 14 / ink2 / 行高 23 */
  757. .dicon{width:44px;height:44px;border-radius:22px;display:flex;align-items:center;justify-content:center;margin:0 auto 6px}
  758. .dicon.warn{background:var(--warn-weak);color:var(--warn)}
  759. .dicon.danger{background:var(--danger-weak);color:var(--danger)}
  760. .dicon.ok{background:var(--ok-weak);color:var(--ok)}
  761. .dicon.brand{background:var(--brand-weak);color:var(--brand)}
  762. .dlg-hd .dsc{margin-top:6px;font-size:14px;color:var(--ink-2);line-height:23px}
  763. .dlg-ft span{font-weight:500}
  764. .dlg-ft span.off{color:var(--brand);opacity:.4}
  765. .dlg-ft span.dg{color:var(--danger)}
  766. /* 底部面板标题行(代码 SheetFrame 的四套头):select 左标题 + 右 × / centered 居中无关闭 / centered-close 居中 + 右 × / filter 左大标题 + 右 × */
  767. .shd{display:flex;align-items:center;justify-content:space-between;padding:16px 18px 6px}
  768. .shd b{font-size:15.5px;font-weight:600}
  769. .shd .icn{color:var(--ink-3)}
  770. .shd-c{padding:16px 18px 4px;text-align:center;position:relative}
  771. .shd-c b{font-size:16.5px;font-weight:600}
  772. .shd-c .icn{position:absolute;right:18px;top:17px;color:var(--ink-3)}
  773. /* 单选面板的选项行(代码 SelectSheet) */
  774. .opt-row{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line);font-size:14.5px;color:var(--ink-2)}
  775. .opt-row .icn{width:14px;height:14px;color:var(--brand)}
  776. .opt-row b{font-weight:400;color:var(--ink-1)}
  777. .opt-row.sel b{font-weight:600}
  778. .opt-row:last-child{border-bottom:0}
  779. /* 叠在另一层弹窗之上的第二层遮罩 */
  780. .scrim.top2{z-index:45}
  781. /* 列表尾的文字入口(历史票据 > 等) */
  782. .listfoot{display:flex;justify-content:center;align-items:center;gap:3px;padding:12px 0;font-size:13px;color:var(--brand)}
  783. .listfoot .icn{width:13px;height:13px}
  784. /* 分组标题(代码 Section 的标题:12 / ink3,上 16 下 8) */
  785. .gtitle{padding:16px 16px 8px}
  786. /* 转圈(代码 ProgressRing,下拉刷新 / 上拉加载 / 检索在搜共用) */
  787. @keyframes hh-spin{from{transform:rotate(-90deg)}to{transform:rotate(270deg)}}
  788. .ring{width:16px;height:16px;position:relative;flex:none;display:inline-block}
  789. .ring>svg{width:100%;height:100%;transform:rotate(-90deg);display:block}
  790. .ring .trk{fill:none;stroke:var(--line-2);stroke-width:2.8}
  791. .ring .bar{fill:none;stroke:var(--brand);stroke-width:2.8;stroke-linecap:round}
  792. .spin{animation:hh-spin .9s linear infinite}
  793. .ring.lg{width:24px;height:24px}
  794. .ring.lg .trk,.ring.lg .bar{stroke-width:2.2}
  795. /* 空态(代码 EmptyState):整页 120×104 / sm 72×62 / row 30×26 三档,插画取色走 --il-* */
  796. .emptyslot{flex:1;display:flex;align-items:center;justify-content:center;padding:0 0 204px}
  797. .emptybox{--il-a:#E7EDF6;--il-b:#D8E0EC;--il-c:#F8FAFE;display:flex;flex-direction:column;align-items:center;text-align:center;padding:0 32px}
  798. [data-theme="dark"] .emptybox{--il-a:#1F2A45;--il-b:#161F38;--il-c:#28355A}
  799. .emptybox .illu{width:120px;height:104px;display:block}
  800. .emptybox .etxt{margin-top:16px;font-size:14px;color:var(--ink-3);letter-spacing:.1em}
  801. .emptybox .esub{margin-top:8px;font-size:12px;line-height:1.65;color:var(--ink-4);max-width:236px}
  802. .emptybox .eact{margin-top:20px}
  803. .emptybox.sm{padding:26px 20px}
  804. .emptybox.sm .illu{width:72px;height:62px}
  805. .emptybox.sm .etxt{margin-top:11px;font-size:12.5px;letter-spacing:.08em}
  806. .emptybox.row{flex-direction:row;align-items:center;justify-content:center;gap:10px;padding:9px 0}
  807. .emptybox.row .illu{width:30px;height:26px}
  808. .emptybox.row .etxt{margin-top:0;font-size:12.5px;letter-spacing:.06em}
  809. /* 状态点「已提交」档(代码 StatusSemantic submitted:未报 / 待报 / 待审批):品牌色空心 */
  810. .st.sub{color:var(--brand)}
  811. .st.sub i{background:transparent;border:1.6px solid currentColor}
  812. /* ---- 持仓卡片(代码 PositionCard)与通用表格(代码 DataTable) ---- */
  813. /* 持仓卡片:多枚角标并排;有角标时顶部只让到 15;估值后的币种小一号 */
  814. .pos .corners{position:absolute;left:0;top:0;display:flex;z-index:3}
  815. .pos .corners .corner{position:static}
  816. .pos:has(.corners) .pos-hd{padding-top:2px}
  817. .pos-val b small{font-size:13.5px;font-weight:400;color:var(--ink-2)}
  818. .pos-code b{font-weight:400;color:var(--accent)}
  819. /* 信息格五项一行:整行按宽度降档 12.5 / 11.5 / 10.5,最小档仍放不下时成对的值拆成两行(i) */
  820. .pos-grid.f5{display:flex;flex-wrap:wrap;column-gap:6px;row-gap:10px}
  821. .pos-grid.f5>div{flex:1 0 auto}
  822. .pos-grid.f5 div span{font-size:10px;letter-spacing:.02em}
  823. .pos-grid.f5 div b{font-size:12.5px;font-weight:500}
  824. .pos-grid.f5 div b em{font-size:11px;font-weight:400}
  825. .pos-grid.f5 div i{display:block;font-style:normal;font-size:11px;color:var(--ink-3);font-family:var(--font-num);font-variant-numeric:tabular-nums;white-space:nowrap}
  826. .pos-grid.f5.s115 div b{font-size:11.5px}.pos-grid.f5.s115 div b em{font-size:10px}
  827. .pos-grid.f5.s105 div b{font-size:10.5px}.pos-grid.f5.s105 div b em{font-size:9px}
  828. .pos-ops span.pri,.pos-ops span.hot{font-weight:500}
  829. /* 表格模式(DataTable):表头 36 / 行 52、单元格 12、列距 14,前两列冻结带右投影 */
  830. .ptab{background:var(--surface);overflow:hidden}
  831. .ptab .r{display:flex;align-items:stretch;height:52px;border-bottom:1px solid var(--line);font-size:12px;white-space:nowrap}
  832. .ptab .r.h{height:36px;background:var(--surface-2);font-size:10.5px;letter-spacing:.02em;color:var(--ink-3)}
  833. .ptab .fz,.ptab .sc{display:flex;align-items:center;gap:14px;flex:none}
  834. .ptab .fz{padding:0 14px 0 10px;background:var(--surface);position:relative;z-index:2;box-shadow:4px 0 10px rgba(15,27,51,.06)}
  835. [data-theme="dark"] .ptab .fz{box-shadow:4px 0 10px rgba(0,0,0,.35)}
  836. .ptab .r.h .fz{background:var(--surface-2)}
  837. .ptab .c{flex:none}
  838. .ptab .c.n{text-align:right;font-family:var(--font-num);font-variant-numeric:tabular-nums}
  839. .ptab .r.h .c.n{font-family:inherit}
  840. .ptab .c.n .sub{display:block;font-size:11px;color:var(--ink-3);margin-top:2px}
  841. .ptab .cat b{display:block;font-size:12px;font-weight:600}
  842. .ptab .cat b.db{color:var(--accent)}
  843. .ptab .cat .mbs{display:flex;gap:3px;margin-top:3px}
  844. .ptab .scd b{display:block;font-size:12px;font-weight:400}
  845. .ptab .scd span{display:flex;align-items:center;gap:4px;font-family:var(--font-mono);font-size:11px;color:var(--ink-3);margin-top:3px}
  846. .ptab .scd .cmark{width:13px;height:13px;font-size:8.5px}
  847. .ptab .opsrow{border-bottom:1px solid var(--line)}
  848. .ptab .opsrow .pos-ops{border-top:0}
  849. .ptab .r.sel,.ptab .r.sel .fz{background:var(--brand-weak)}
  850. .ptab .xrow{background:var(--surface-2);border-bottom:1px solid var(--line)}
  851. /* ---- 卡片 / 表格切换(代码 ViewModeToggle) ---- */
  852. .viewtog{display:inline-flex;padding:2px;background:var(--surface-2);border-radius:8px;gap:2px;flex:none;position:relative}
  853. .viewtog.sep{margin-left:4px}
  854. .viewtog.sep::before{content:"";position:absolute;left:-7px;top:2px;bottom:2px;width:1px;background:var(--line-2)}
  855. .viewtog span{width:28px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:var(--ink-3)}
  856. .viewtog span.on{background:var(--surface);color:var(--brand);box-shadow:var(--shadow-card)}
  857. [data-theme="dark"] .viewtog span.on{background:var(--surface-3)}
  858. .viewtog .icn{width:15px;height:15px;stroke-width:1.8}
  859. /* ==== v1.3 公共覆盖 END ==== */
  860. </style>
  861. </head>
  862. <body>
  863. <svg width="0" height="0" style="position:absolute" aria-hidden="true"><defs>
  864. <g id="i-back"><polyline points="15 4 7 12 15 20"/></g>
  865. <g id="i-right"><polyline points="9 4 17 12 9 20"/></g>
  866. <g id="i-down"><polyline points="5 9 12 16 19 9"/></g>
  867. <g id="i-up"><polyline points="5 15 12 8 19 15"/></g>
  868. <g id="i-search"><circle cx="11" cy="11" r="6.5"/><line x1="16" y1="16" x2="21" y2="21"/></g>
  869. <g id="i-x"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></g>
  870. <g id="i-check"><polyline points="4 12.5 9.5 18 20 6"/></g>
  871. <g id="i-plus"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></g>
  872. <g id="i-minus"><line x1="5" y1="12" x2="19" y2="12"/></g>
  873. <g id="i-eye"><path d="M2 12s3.6-6.5 10-6.5S22 12 22 12s-3.6 6.5-10 6.5S2 12 2 12z"/><circle cx="12" cy="12" r="2.6"/></g>
  874. <g id="i-eyeoff"><path d="M4 5l16 14"/><path d="M9.5 6.2A9.7 9.7 0 0 1 12 5.5c6.4 0 10 6.5 10 6.5a17 17 0 0 1-3.3 4"/><path d="M6.2 8.3A16.6 16.6 0 0 0 2 12s3.6 6.5 10 6.5a10 10 0 0 0 3.3-.55"/></g>
  875. <g id="i-clock"><circle cx="12" cy="12" r="8.5"/><polyline points="12 7 12 12 15.5 14"/></g>
  876. <g id="i-history"><path d="M3.5 12a8.5 8.5 0 1 0 2.6-6.1"/><polyline points="3 4 3 9 8 9"/><polyline points="12 7.5 12 12 15.5 14"/></g>
  877. <g id="i-filter"><path d="M4 6h16l-6.2 7.4V19l-3.6-2v-3.6z"/></g>
  878. <g id="i-calendar"><rect x="3.5" y="5" width="17" height="15.5" rx="2.5"/><line x1="3.5" y1="9.5" x2="20.5" y2="9.5"/><line x1="8" y1="3" x2="8" y2="6.5"/><line x1="16" y1="3" x2="16" y2="6.5"/></g>
  879. <g id="i-note"><path d="M6 3h8l4.5 4.5V21H6z"/><polyline points="14 3 14 8 18.5 8"/><line x1="9" y1="13" x2="15" y2="13"/><line x1="9" y1="17" x2="13" y2="17"/></g>
  880. <g id="i-wallet"><rect x="3" y="6" width="18" height="14" rx="3"/><path d="M3 10h18"/><circle cx="16.5" cy="15" r="1.3" fill="currentColor" stroke="none"/></g>
  881. <g id="i-user"><circle cx="12" cy="8.5" r="3.8"/><path d="M4.5 20.5a7.5 7.5 0 0 1 15 0"/></g>
  882. <g id="i-transfer"><polyline points="7 7 4 10 7 13"/><path d="M4 10h12a4 4 0 0 1 0 8h-3"/><polyline points="17 17 20 14 17 11" opacity="0"/></g>
  883. <g id="i-swap"><polyline points="8 5 4.5 8.5 8 12"/><line x1="4.5" y1="8.5" x2="19" y2="8.5"/><polyline points="16 19 19.5 15.5 16 12"/><line x1="19.5" y1="15.5" x2="5" y2="15.5"/></g>
  884. <g id="i-refresh"><path d="M20 12a8 8 0 1 1-2.4-5.7"/><polyline points="20 4 20 9 15 9"/></g>
  885. <g id="i-help"><circle cx="12" cy="12" r="8.6"/><path d="M9.6 9.6a2.5 2.5 0 1 1 3.2 2.4c-.6.2-.9.7-.9 1.4v.5"/><circle cx="11.9" cy="16.6" r=".9" fill="currentColor" stroke="none"/></g>
  886. <g id="i-info"><circle cx="12" cy="12" r="8.6"/><line x1="12" y1="11" x2="12" y2="16.5"/><circle cx="12" cy="7.8" r=".9" fill="currentColor" stroke="none"/></g>
  887. <g id="i-alert"><path d="M12 4.5 21 19.5H3z"/><line x1="12" y1="10" x2="12" y2="14.5"/><circle cx="12" cy="17" r=".9" fill="currentColor" stroke="none"/></g>
  888. <g id="i-lock"><rect x="5" y="10.5" width="14" height="10" rx="2.5"/><path d="M8.2 10.5V8a3.8 3.8 0 0 1 7.6 0v2.5"/></g>
  889. <g id="i-key"><circle cx="8" cy="14" r="4"/><path d="M11 11.5 20 3"/><line x1="17" y1="6" x2="19" y2="8"/></g>
  890. <g id="i-shield"><path d="M12 3.5 19 6v6c0 4.2-2.9 7.2-7 8.5-4.1-1.3-7-4.3-7-8.5V6z"/><polyline points="9 12 11.3 14.3 15.3 10.3"/></g>
  891. <g id="i-font"><path d="M4 19 10 5l6 14"/><line x1="6.2" y1="14.5" x2="13.8" y2="14.5"/><path d="M17 19l3-8 3 8" transform="scale(.72) translate(6.5 5)"/></g>
  892. <g id="i-doc"><rect x="4.5" y="3.5" width="15" height="17" rx="2.5"/><line x1="8" y1="9" x2="16" y2="9"/><line x1="8" y1="13" x2="16" y2="13"/><line x1="8" y1="17" x2="12.5" y2="17"/></g>
  893. <g id="i-logout"><path d="M14 5H6.5A2.5 2.5 0 0 0 4 7.5v9A2.5 2.5 0 0 0 6.5 19H14"/><polyline points="16.5 8 20.5 12 16.5 16"/><line x1="20.5" y1="12" x2="10" y2="12"/></g>
  894. <g id="i-fee"><circle cx="12" cy="12" r="8.5"/><path d="M9.5 9h5M9.5 12h5M12 9v8"/></g>
  895. <g id="i-theme"><circle cx="12" cy="12" r="7.5"/><path d="M12 4.5v15a7.5 7.5 0 0 0 0-15z" fill="currentColor" stroke="none"/></g>
  896. <g id="i-sun"><circle cx="12" cy="12" r="4.2"/><line x1="12" y1="2.5" x2="12" y2="5"/><line x1="12" y1="19" x2="12" y2="21.5"/><line x1="2.5" y1="12" x2="5" y2="12"/><line x1="19" y1="12" x2="21.5" y2="12"/><line x1="5.4" y1="5.4" x2="7.1" y2="7.1"/><line x1="16.9" y1="16.9" x2="18.6" y2="18.6"/><line x1="5.4" y1="18.6" x2="7.1" y2="16.9"/><line x1="16.9" y1="7.1" x2="18.6" y2="5.4"/></g>
  897. <g id="i-moon"><path d="M20 14.2A8.4 8.4 0 0 1 9.8 4 8.6 8.6 0 1 0 20 14.2z"/></g>
  898. <g id="i-bell"><path d="M18 16V11a6 6 0 1 0-12 0v5l-1.6 2.5h15.2z"/><path d="M9.8 21a2.4 2.4 0 0 0 4.4 0"/></g>
  899. <g id="i-list"><line x1="4" y1="7" x2="20" y2="7"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="17" x2="20" y2="17"/></g>
  900. <g id="i-sort"><polyline points="7 9 10 6 13 9"/><polyline points="7 15 10 18 13 15"/></g>
  901. <g id="i-trend"><polyline points="3 16 9 10 13 14 21 6"/><polyline points="15.5 6 21 6 21 11.5"/></g>
  902. <g id="i-img"><rect x="3.5" y="5" width="17" height="14" rx="2.5"/><circle cx="9" cy="10" r="1.6"/><polyline points="5 17 10 12 13.5 15.5 16.5 13 19.5 16"/></g>
  903. <g id="i-upload"><path d="M12 16V5"/><polyline points="7.5 9.5 12 5 16.5 9.5"/><path d="M4 15v3.5A2.5 2.5 0 0 0 6.5 21h11a2.5 2.5 0 0 0 2.5-2.5V15"/></g>
  904. <g id="i-face"><rect x="4" y="4" width="16" height="16" rx="4"/><circle cx="9.3" cy="10.5" r=".9" fill="currentColor" stroke="none"/><circle cx="14.7" cy="10.5" r=".9" fill="currentColor" stroke="none"/><path d="M9 15c1.8 1.5 4.2 1.5 6 0"/></g>
  905. </defs></svg>
  906. <div class="sheet-head">
  907. <div class="brandmark">
  908. <div class="glyph"></div>
  909. <div>
  910. <div class="sheet-title">深空蓝 · 深浅主题规范</div>
  911. <div class="sheet-sub">票据投资者 APP / 设计基调 · 语义 Token · 双主题对照 · 换肤机制与落地</div>
  912. </div>
  913. </div>
  914. <div class="head-right">
  915. <div class="meta">
  916. <div>模块<b>设计规范 FOUNDATION</b></div>
  917. <div>规格<b>iOS 390 &times; 844 @3x</b></div>
  918. <div>主题<b>深空蓝 Light / Dark</b></div>
  919. <div>版本<b>v1.3 · 2026-10-14</b></div>
  920. </div>
  921. <div class="skin" role="group" aria-label="主题切换">
  922. <button data-set="light" class="on"><svg viewBox="0 0 24 24"><use href="#i-sun"/></svg>浅色</button>
  923. <button data-set="dark"><svg viewBox="0 0 24 24"><use href="#i-moon"/></svg>深色</button>
  924. </div>
  925. </div>
  926. </div>
  927. <style>
  928. .dual{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--canvas-line);border:1px solid var(--canvas-line);border-radius:12px;overflow:hidden}
  929. .dual > div{padding:20px 22px}
  930. .dual .lt{background:#F6F8FB;color:#0F1B33}
  931. .dual .dk{background:#0B1020;color:#EAF0FA}
  932. .dualbar{display:flex;align-items:center;gap:8px;font-size:10.5px;letter-spacing:.14em;margin-bottom:16px;opacity:.6}
  933. .tokrow{display:grid;grid-template-columns:150px 1fr 1fr 1fr;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid var(--canvas-line);font-size:12px}
  934. .tokrow:last-child{border-bottom:0}
  935. .tokrow .nm{font-family:"SF Mono",monospace;font-size:11.5px;color:var(--canvas-ink)}
  936. .tokrow .cell{display:flex;align-items:center;gap:8px;font-family:"SF Mono",monospace;font-size:11px;color:var(--canvas-mute)}
  937. .tokrow .cell i{width:20px;height:20px;border-radius:5px;flex:none;border:1px solid rgba(128,140,160,.35)}
  938. .tokrow .use{font-size:11.5px;color:var(--canvas-mute)}
  939. .tokhd{display:grid;grid-template-columns:150px 1fr 1fr 1fr;gap:12px;padding:0 0 10px;font-size:10px;letter-spacing:.12em;color:var(--canvas-mute);border-bottom:1px solid var(--canvas-line);margin-bottom:4px}
  940. .scale{display:flex;align-items:flex-end;gap:22px;flex-wrap:wrap}
  941. .scale div{text-align:left}
  942. .scale div em{font-style:normal;display:block;font-size:10.5px;color:var(--canvas-mute);margin-top:8px;font-family:"SF Mono",monospace}
  943. .radbox{display:flex;gap:14px;flex-wrap:wrap}
  944. .radbox div{text-align:center}
  945. .radbox i{display:block;width:64px;height:44px;background:var(--brand-weak);border:1.5px solid var(--brand-line);margin-bottom:8px}
  946. .radbox span{font-size:11px;color:var(--canvas-mute);font-family:"SF Mono",monospace}
  947. .compo{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1px;background:var(--canvas-line);border:1px solid var(--canvas-line);border-radius:12px;overflow:hidden}
  948. .compo > div{padding:18px 18px 20px}
  949. .compo h5{font-size:10.5px;letter-spacing:.12em;opacity:.55;margin-bottom:14px;font-weight:500}
  950. .compo .lt{background:#F6F8FB;color:#0F1B33}
  951. .compo .dk{background:#0B1020;color:#EAF0FA}
  952. </style>
  953. <div class="sec">
  954. <div class="sec-head"><span class="sec-num">01</span><span class="sec-name">设计基调</span><span class="sec-rule"></span><span class="sec-note">深空蓝 Deep-Space Blue · v1.3 按代码现状改写(色值唯一来源 theme/colors.ts 即抄自本页)</span></div>
  955. <div class="cards">
  956. <div class="card-x">
  957. <h4>气质 TONE</h4>
  958. <div class="bullets">
  959. <li><b>克制的蓝</b>:品牌色只出现在可点击与关键结论上,不做装饰</li>
  960. <li><b>琥珀作第二强调</b>:进行中 / 费用 / 到期这类要注意但不危险的信息</li>
  961. <li><b>数字优先</b>:金额与数字用 <b>Inter</b>(等宽数字,纵向对齐便于比价);账号、代码、BCP 47 标签用 <b>Menlo</b> 等宽</li>
  962. <li><b>线性图标</b>;全站唯一的插画是空态文件夹,三色随主题</li>
  963. <li><b>机构档案</b>:应用名、Logo、持牌信息取 <code>brands/&lt;id&gt;/brand.json</code>;品牌配色可按机构覆盖,泓衍票据用本页基线</li>
  964. </div>
  965. </div>
  966. <div class="card-x">
  967. <h4>换肤机制 SKIN</h4>
  968. <div class="bullets">
  969. <li>三态:<b>跟随系统</b>(缺省)/ 浅色 / 深色,入口「我的 → 外观」,存本机</li>
  970. <li>同一套语义键两套取值,组件零改动;<b>只换颜色</b>,布局、字号、间距、圆角、图标不变</li>
  971. <li>涨跌色两套:<b>红涨绿跌</b>(缺省)/ 绿涨红跌,全站盈亏色一起对调</li>
  972. <li>外观偏好同步给原生层:液态玻璃底栏、键盘、系统选择器跟着变</li>
  973. <li>启动页固定品牌蓝,不跟主题</li>
  974. </div>
  975. </div>
  976. <div class="card-x">
  977. <h4>无障碍 A11Y</h4>
  978. <div class="kv">
  979. <div class="r"><span>正文对比度</span><b>≥ 7:1(AAA)</b></div>
  980. <div class="r"><span>次要文字</span><b>≥ 4.5:1(AA)</b></div>
  981. <div class="r"><span>最小触控热区</span><b>44 × 44 pt(不足的补热区)</b></div>
  982. <div class="r"><span>最小字号</span><b>正文 12;表头与标签 10.5</b></div>
  983. <div class="r"><span>字号档位</span><b>标准 / 中等 / 大字(1 / 1.12 / 1.24,仅原生)</b></div>
  984. <div class="r"><span>状态传达</span><b>颜色 + 文字双通道</b></div>
  985. <div class="r"><span>深色纯黑</span><b>禁用(用 #0B1020)</b></div>
  986. </div>
  987. </div>
  988. </div>
  989. </div>
  990. <div class="sec">
  991. <div class="sec-head"><span class="sec-num">02</span><span class="sec-name">语义 Token 对照</span><span class="sec-rule"></span><span class="sec-note">组件只引用语义名;第二行小字是代码里的键(theme/colors.ts)</span></div>
  992. <div class="card-x" style="padding:22px 24px">
  993. <div class="tokhd"><span>TOKEN</span><span>LIGHT</span><span>DARK</span><span>用途</span></div>
  994. <div class="tokrow"><span class="nm">--app-bg<small>appBg</small></span><span class="cell"><i style="background:#F6F8FB"></i>#F6F8FB</span><span class="cell"><i style="background:#0B1020"></i>#0B1020</span><span class="use">页面底色</span></div>
  995. <div class="tokrow"><span class="nm">--surface<small>surface</small></span><span class="cell"><i style="background:#FFFFFF"></i>#FFFFFF</span><span class="cell"><i style="background:#131B2E"></i>#131B2E</span><span class="use">卡片 / 导航 / 弹窗</span></div>
  996. <div class="tokrow"><span class="nm">--surface-2<small>surface2</small></span><span class="cell"><i style="background:#F1F4F9"></i>#F1F4F9</span><span class="cell"><i style="background:#18223A"></i>#18223A</span><span class="use">表头 / 次级面 / 输入底</span></div>
  997. <div class="tokrow"><span class="nm">--surface-3<small>surface3</small></span><span class="cell"><i style="background:#E8EDF5"></i>#E8EDF5</span><span class="cell"><i style="background:#1E2A45"></i>#1E2A45</span><span class="use">置灰主按钮底 / 灰标签底 / 深色分段选中</span></div>
  998. <div class="tokrow"><span class="nm">--line<small>line</small></span><span class="cell"><i style="background:#E3E9F1"></i>#E3E9F1</span><span class="cell"><i style="background:#232F4B"></i>#232F4B</span><span class="use">分割线;深色下卡片描边</span></div>
  999. <div class="tokrow"><span class="nm">--line-2<small>line2</small></span><span class="cell"><i style="background:#CFD9E7"></i>#CFD9E7</span><span class="cell"><i style="background:#32436A"></i>#32436A</span><span class="use">描边按钮 / 输入框 / 复选框</span></div>
  1000. <div class="tokrow"><span class="nm">--ink-1<small>ink1</small></span><span class="cell"><i style="background:#0F1B33"></i>#0F1B33</span><span class="cell"><i style="background:#EAF0FA"></i>#EAF0FA</span><span class="use">主文字 / 金额</span></div>
  1001. <div class="tokrow"><span class="nm">--ink-2<small>ink2</small></span><span class="cell"><i style="background:#4C5C78"></i>#4C5C78</span><span class="cell"><i style="background:#A5B4D0"></i>#A5B4D0</span><span class="use">字段名 / 正文</span></div>
  1002. <div class="tokrow"><span class="nm">--ink-3<small>ink3</small></span><span class="cell"><i style="background:#8A99B2"></i>#8A99B2</span><span class="cell"><i style="background:#7486A5"></i>#7486A5</span><span class="use">辅助说明 / 时间戳</span></div>
  1003. <div class="tokrow"><span class="nm">--ink-4<small>ink4</small></span><span class="cell"><i style="background:#AEBACD"></i>#AEBACD</span><span class="cell"><i style="background:#54658A"></i>#54658A</span><span class="use">占位 / 置灰文字 / 已失效</span></div>
  1004. <div class="tokrow"><span class="nm">--brand<small>brand</small></span><span class="cell"><i style="background:#1B4FD8"></i>#1B4FD8</span><span class="cell"><i style="background:#5B8CFF"></i>#5B8CFF</span><span class="use">主按钮 / 选中 / 链接</span></div>
  1005. <div class="tokrow"><span class="nm">--brand-2<small>brand2</small></span><span class="cell"><i style="background:#123CAE"></i>#123CAE</span><span class="cell"><i style="background:#7FA6FF"></i>#7FA6FF</span><span class="use">品牌渐变第二色</span></div>
  1006. <div class="tokrow"><span class="nm">--brand-weak<small>brandWeak</small></span><span class="cell"><i style="background:#E7EEFF"></i>#E7EEFF</span><span class="cell"><i style="background:#1B2748"></i>rgba(91,140,255,.16)</span><span class="use">选中弱底 / 高亮行 / 信息条</span></div>
  1007. <div class="tokrow"><span class="nm">--on-brand<small>onBrand</small></span><span class="cell"><i style="background:#FFFFFF"></i>#FFFFFF</span><span class="cell"><i style="background:#05122E"></i>#05122E</span><span class="use">品牌实心底上的文字(深色下转近黑)</span></div>
  1008. <div class="tokrow"><span class="nm">--accent<small>amber</small></span><span class="cell"><i style="background:#B4700E"></i>#B4700E</span><span class="cell"><i style="background:#F0A93B"></i>#F0A93B</span><span class="use">进行中 / 费用 / 到期角标</span></div>
  1009. <div class="tokrow"><span class="nm">--rise<small>rise</small></span><span class="cell"><i style="background:#E5484D"></i>#E5484D</span><span class="cell"><i style="background:#FF6B6E"></i>#FF6B6E</span><span class="use">涨 / 盈利(可切方案)</span></div>
  1010. <div class="tokrow"><span class="nm">--fall<small>fall</small></span><span class="cell"><i style="background:#12A594"></i>#12A594</span><span class="cell"><i style="background:#2FD4B9"></i>#2FD4B9</span><span class="use">跌 / 亏损(可切方案)</span></div>
  1011. <div class="tokrow"><span class="nm">--danger<small>danger</small></span><span class="cell"><i style="background:#DC2626"></i>#DC2626</span><span class="cell"><i style="background:#FF6B6E"></i>#FF6B6E</span><span class="use">校验失败 / 强平 / 撤单</span></div>
  1012. <div class="tokrow"><span class="nm">--warn<small>warn</small></span><span class="cell"><i style="background:#C2410C"></i>#C2410C</span><span class="cell"><i style="background:#F59E42"></i>#F59E42</span><span class="use">风险提示条 / 通知未开启</span></div>
  1013. <div class="tokrow"><span class="nm">--ok<small>ok</small></span><span class="cell"><i style="background:#0F7B4F"></i>#0F7B4F</span><span class="cell"><i style="background:#2FD4B9"></i>#2FD4B9</span><span class="use">通过 / 成功 / 已完成</span></div>
  1014. <div class="tokrow"><span class="nm">--scrim<small>scrim</small></span><span class="cell"><i style="background:#6B7280"></i>rgba(11,18,34,.42)</span><span class="cell"><i style="background:#020610"></i>rgba(2,6,16,.62)</span><span class="use">弹窗遮罩</span></div>
  1015. <div class="tokrow"><span class="nm">Toast<small>toastBg</small></span><span class="cell"><i style="background:#101A2E"></i>rgba(15,25,45,.90)</span><span class="cell"><i style="background:#E3EAF5"></i>rgba(230,238,250,.94)</span><span class="use">Toast 胶囊(深色下反白,字 #0B1020)</span></div>
  1016. </div>
  1017. </div>
  1018. <div class="sec">
  1019. <div class="sec-head"><span class="sec-num">03</span><span class="sec-name">字号 · 圆角 · 间距 · 控件</span><span class="sec-rule"></span><span class="sec-note">两套主题共用,切换时全部不变(代码 theme/tokens.ts)</span></div>
  1020. <div class="cards">
  1021. <div class="card-x">
  1022. <h4>字号 TYPE SCALE</h4>
  1023. <div class="scale">
  1024. <div><span style="font-size:33px;font-weight:600;font-family:var(--font-num)">18,268,671</span><em>33 / 600 资产主数值(Inter)</em></div>
  1025. </div>
  1026. <div class="scale" style="margin-top:18px">
  1027. <div><span style="font-size:22px;font-weight:600">共赢票据</span><em>22 / 600 大标题</em></div>
  1028. <div><span style="font-size:17px;font-weight:600">费用信息</span><em>17 / 600 导航栏标题</em></div>
  1029. <div><span style="font-size:15px">贵州茅台</span><em>15 / 400 列表主文</em></div>
  1030. <div><span style="font-size:12.5px;color:var(--canvas-mute)">2026-08-15 14:25</span><em>12.5 辅助说明</em></div>
  1031. <div><span style="font-size:10.5px;color:var(--canvas-mute)">名义本金</span><em>10.5 表头 / Tab 文字</em></div>
  1032. </div>
  1033. <div class="kv" style="margin-top:16px">
  1034. <div class="r"><span>中文 / 英文</span><b>系统字体(PingFang SC · TC / SF Pro)</b></div>
  1035. <div class="r"><span>数字</span><b>Inter(随包内置)</b></div>
  1036. <div class="r"><span>等宽</span><b>Menlo</b></div>
  1037. </div>
  1038. </div>
  1039. <div class="card-x">
  1040. <h4>圆角 RADIUS</h4>
  1041. <div class="radbox">
  1042. <div><i style="border-radius:4px;height:36px"></i><span>4 · 标签</span></div>
  1043. <div><i style="border-radius:9px;height:36px"></i><span>9 · Chip / 筛选</span></div>
  1044. <div><i style="border-radius:10px;height:36px"></i><span>10 · 小按钮 / 搜索</span></div>
  1045. <div><i style="border-radius:11px;height:36px"></i><span>11 · 输入框</span></div>
  1046. <div><i style="border-radius:12px;height:36px"></i><span>12 · 主按钮</span></div>
  1047. <div><i style="border-radius:14px;height:36px"></i><span>14 · 卡片</span></div>
  1048. <div><i style="border-radius:16px;height:36px"></i><span>16 · 弹窗 / Hero</span></div>
  1049. </div>
  1050. <div class="kv" style="margin-top:18px">
  1051. <div class="r"><span>底部面板</span><b>18 18 0 0</b></div>
  1052. <div class="r"><span>手机外框</span><b>42(仅图纸)</b></div>
  1053. </div>
  1054. </div>
  1055. <div class="card-x">
  1056. <h4>间距 SPACING</h4>
  1057. <div class="kv">
  1058. <div class="r"><span>页面左右边距</span><b>16</b></div>
  1059. <div class="r"><span>卡片内边距</span><b>15(询价 / 订单卡 13)</b></div>
  1060. <div class="r"><span>卡片间距</span><b>11</b></div>
  1061. <div class="r"><span>分组标题上 / 下</span><b>16 / 8</b></div>
  1062. <div class="r"><span>列表行上下内边距</span><b>14</b></div>
  1063. <div class="r"><span>Hero 内边距</span><b>18</b></div>
  1064. <div class="r"><span>居中弹窗 / 筛选面板左右</span><b>18 / 20</b></div>
  1065. <div class="r"><span>大标题栏左右</span><b>20</b></div>
  1066. </div>
  1067. </div>
  1068. <div class="card-x">
  1069. <h4>控件 CONTROLS</h4>
  1070. <div class="kv">
  1071. <div class="r"><span>主按钮 / 导航栏</span><b>46</b></div>
  1072. <div class="r"><span>输入框(也是最小热区)</span><b>44</b></div>
  1073. <div class="r"><span>小按钮 / 搜索框 / 步进器</span><b>38</b></div>
  1074. <div class="r"><span>筛选按钮</span><b>34</b></div>
  1075. <div class="r"><span>Chip</span><b>32</b></div>
  1076. <div class="r"><span>复选框 / 批量复选框 / 单选</span><b>16 / 20 / 15</b></div>
  1077. <div class="r"><span>底部 Tab</span><b>H5 自绘 72 + 安全区;原生用系统底栏</b></div>
  1078. </div>
  1079. </div>
  1080. </div>
  1081. </div>
  1082. <div class="sec">
  1083. <div class="sec-head"><span class="sec-num">04</span><span class="sec-name">整页对照</span><span class="sec-rule"></span><span class="sec-note">左浅右深 · 同一份 DOM 只换 data-theme · 取自 04-A1 / 02-Q1</span></div>
  1084. <div class="pair-lb"><i style="background:#F6F8FB"></i>LIGHT  <i style="background:#0B1020"></i>DARK</div>
  1085. <div class="pair" style="margin-bottom:44px">
  1086. <div class="frame">
  1087. <div class="phone" id="p-account" data-lock data-theme="light">
  1088. <div class="screen">
  1089. <div class="statusbar"><span class="num">9:41</span><span class="ic"><svg class="icn sm" viewBox="0 0 24 24" style="fill:currentColor;stroke:none"><rect x="1" y="14" width="3.4" height="6" rx="1"/><rect x="6.4" y="10" width="3.4" height="10" rx="1"/><rect x="11.8" y="6" width="3.4" height="14" rx="1"/><rect x="17.2" y="3" width="3.4" height="17" rx="1" opacity=".35"/></svg><svg class="icn sm" viewBox="0 0 24 24" style="fill:currentColor;stroke:none"><path d="M12 19.5 2 9a14 14 0 0 1 20 0z" opacity=".95"/></svg><svg class="icn" viewBox="0 0 30 24" style="fill:none;stroke:currentColor;stroke-width:1.5;width:24px"><rect x="1.5" y="7" width="21" height="11" rx="3"/><rect x="3.6" y="9.1" width="14" height="6.8" rx="1.6" fill="currentColor" stroke="none"/><path d="M24.5 11v6a3.2 3.2 0 0 0 0-6z" fill="currentColor" stroke="none"/></svg></span></div>
  1090. <div class="appbar"><h1>资金账户</h1></div>
  1091. <div class="body">
  1092. <div class="hero">
  1093. <div class="lb">合计资产净值 <span class="cur">HKD <svg class="icn" style="width:11px;height:11px" viewBox="0 0 24 24"><use href="#i-down"/></svg></span></div>
  1094. <div class="amt num">18,268,671.64 <svg class="icn sm eye" viewBox="0 0 24 24"><use href="#i-eye"/></svg></div>
  1095. <svg class="icn lg arrow" viewBox="0 0 24 24"><use href="#i-right"/></svg>
  1096. <div class="grid3">
  1097. <div><span>票据估值</span><b class="num">368,000.00</b></div>
  1098. <div><span>冻结金额</span><b class="num">0.00</b></div>
  1099. <div><span>现金可用</span><b class="num">123,456.00</b></div>
  1100. </div>
  1101. </div>
  1102. <div class="card wtab" style="margin:11px 16px 0">
  1103. <div class="wr h"><span>币种</span><span>现金余额</span><span>可取金额</span><span>购买力</span></div>
  1104. <div class="wr"><span>HKD</span><span>3,456.00</span><span>3,456.00</span><span>3,456.00</span></div>
  1105. <div class="wr"><span>USD</span><span>23,456.00</span><span>23,456.00</span><span>23,456.00</span></div>
  1106. <div class="wr"><span>CNY</span><span>123,456.00</span><span>123,456.00</span><span>123,456.00</span></div>
  1107. <div class="wfoot"><span>资金流水 <svg class="icn sm" viewBox="0 0 24 24"><use href="#i-right"/></svg></span></div>
  1108. </div>
  1109. <div class="quick">
  1110. <div class="qk"><span class="ib"><svg class="icn sm" viewBox="0 0 24 24"><use href="#i-swap"/></svg></span><b>资金划转</b></div>
  1111. <div class="qk"><span class="ib"><svg class="icn sm" viewBox="0 0 24 24"><use href="#i-calendar"/></svg></span><b>展期记录</b><span class="rd"></span></div>
  1112. </div>
  1113. <div class="card-hd" style="padding:16px 16px 9px">
  1114. <h3>持仓票据<span class="cnt">8</span></h3>
  1115. <div class="fright">
  1116. <span class="more">默认排序(创建时间倒序)<svg class="icn" viewBox="0 0 24 24"><use href="#i-down"/></svg></span>
  1117. <span class="viewtog sep"><span class="on"><svg class="icn" viewBox="0 0 24 24"><rect x="3.5" y="4" width="17" height="7" rx="2"/><rect x="3.5" y="13" width="17" height="7" rx="2"/></svg></span><span><svg class="icn" viewBox="0 0 24 24"><rect x="3.5" y="4.5" width="17" height="15" rx="2"/><line x1="3.5" y1="9.5" x2="20.5" y2="9.5"/><line x1="3.5" y1="14.5" x2="20.5" y2="14.5"/><line x1="9.6" y1="4.5" x2="9.6" y2="19.5"/></svg></span></span>
  1118. </div>
  1119. </div>
  1120. <div class="card pos">
  1121. <div class="corners"><span class="corner">增额</span><span class="corner due">到期</span></div>
  1122. <div class="pos-hd">
  1123. <div><div class="pos-name">贵州茅台 <i class="cmark">C</i></div><div class="pos-code">600519.SH · Delta A</div></div>
  1124. <div class="pos-val"><b class="num">221,234.00<small> HKD</small></b><span>票据估值</span></div>
  1125. </div>
  1126. <div class="pos-pl"><span class="down">-178,766.00 HKD</span><span class="down">-89.38%</span></div>
  1127. <div class="pos-grid f5"><div><span>名义/冻结名义</span><b>200万 CNY</b><i>20万 CNY</i></div><div><span>票据面值</span><b>20万 HKD</b></div><div><span>现价/期初价</span><b>1,234.56</b><i>1,204.56</i></div><div><span>强平价</span><b style="color:var(--danger)">1,000.00</b></div><div><span>到期日</span><b>12/16</b></div></div>
  1128. <div class="pos-ops"><span class="pri">详情</span><span>卖出</span><span>增额</span><span class="hot">展期</span></div>
  1129. </div>
  1130. <div class="card pos">
  1131. <div class="corners"><span class="corner due">到期</span></div>
  1132. <div class="pos-hd">
  1133. <div><div class="pos-name">贵州茅台 <i class="cmark">C</i></div><div class="pos-code">600519.SH · Delta A</div></div>
  1134. <div class="pos-val"><b class="num">161,234.00<small> HKD</small></b><span>票据估值</span></div>
  1135. </div>
  1136. <div class="pos-pl"><span class="down">-38,766.00 HKD</span><span class="down">-19.38%</span></div>
  1137. <div class="pos-grid f5 s105"><div><span>名义/冻结名义</span><b>200万<em> / 0 CNY</em></b></div><div><span>票据面值</span><b>20万 HKD</b></div><div><span>现价/期初价</span><b>1,234.56<em> / 1,204.56</em></b></div><div><span>强平价</span><b style="color:var(--danger)">1,000.00</b></div><div><span>到期日</span><b>12/16</b></div></div>
  1138. <div class="pos-ops"><span class="pri">详情</span><span>卖出</span><span>增额</span><span class="hot">展期</span></div>
  1139. </div>
  1140. </div>
  1141. <div class="tabbar"><div class="tb"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-note"/></svg></span>票据</div><div class="tb on"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span>账户</div><div class="tb"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-bell"/></svg><i class="rdot"></i></span>消息</div><div class="tb"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-user"/></svg></span>我的</div></div>
  1142. <div class="homebar"></div>
  1143. </div>
  1144. </div>
  1145. <div class="cap"><div class="cap-num">P1 · LIGHT</div><div class="cap-title">资金账户 · 浅色</div>
  1146. <ul><li>白卡浮在 <code>#F6F8FB</code> 页面底上,靠<b>投影</b>分层</li><li>Hero 是全页唯一大面积彩色(品牌蓝渐变)</li></ul>
  1147. </div>
  1148. </div>
  1149. <div class="frame">
  1150. <div class="phone" data-lock data-theme="dark" data-clone="#p-account"></div>
  1151. <div class="cap"><div class="cap-num">P1 · DARK</div><div class="cap-title">资金账户 · 深色</div>
  1152. <ul><li>卡片改用 <code>--line</code> <b>描边</b>分层(深色下投影不可见)</li><li>Hero 渐变压暗并加品牌色描边;角标等实心底上的文字转近黑</li></ul>
  1153. </div>
  1154. </div>
  1155. </div>
  1156. <div class="pair">
  1157. <div class="frame">
  1158. <div class="phone" id="p-inq" data-lock data-theme="light">
  1159. <div class="screen">
  1160. <div class="statusbar"><span class="num">9:41</span><span class="ic"><svg class="icn sm" viewBox="0 0 24 24" style="fill:currentColor;stroke:none"><rect x="1" y="14" width="3.4" height="6" rx="1"/><rect x="6.4" y="10" width="3.4" height="10" rx="1"/><rect x="11.8" y="6" width="3.4" height="14" rx="1"/><rect x="17.2" y="3" width="3.4" height="17" rx="1" opacity=".35"/></svg><svg class="icn sm" viewBox="0 0 24 24" style="fill:currentColor;stroke:none"><path d="M12 19.5 2 9a14 14 0 0 1 20 0z" opacity=".95"/></svg><svg class="icn" viewBox="0 0 30 24" style="fill:none;stroke:currentColor;stroke-width:1.5;width:24px"><rect x="1.5" y="7" width="21" height="11" rx="3"/><rect x="3.6" y="9.1" width="14" height="6.8" rx="1.6" fill="currentColor" stroke="none"/><path d="M24.5 11v6a3.2 3.2 0 0 0 0-6z" fill="currentColor" stroke="none"/></svg></span></div>
  1161. <div class="appbar"><h1>共赢票据</h1></div>
  1162. <div class="tabs" style="margin-top:12px"><span class="on">询价</span><span>订单</span></div>
  1163. <div class="body">
  1164. <div class="ipanel">
  1165. <div class="search"><svg class="icn" viewBox="0 0 24 24"><use href="#i-search"/></svg><span class="ph">股票代码/拼音/名称</span></div>
  1166. <div class="frm2">
  1167. <div><span class="lbl">方向</span><div class="rofield"><b>CALL</b><span>只读</span></div></div>
  1168. <div><span class="lbl">周期</span><div class="rofield"><b>1M</b><svg class="icn" viewBox="0 0 24 24"><use href="#i-down"/></svg></div></div>
  1169. </div>
  1170. <span class="lbl" style="margin-top:13px">名义本金</span>
  1171. <div class="chips"><span class="chip on">100万</span><span class="chip">200万</span><span class="chip">300万</span><span class="chip">500万</span><span class="chip">1000万</span><span class="chip dash">自定义</span></div>
  1172. <div class="frm-btns"><div class="btn off">询价</div><div class="iconbtn"><svg class="icn" viewBox="0 0 24 24"><use href="#i-history"/></svg></div></div>
  1173. </div>
  1174. <div class="card-hd" style="padding:13px 16px 9px"><h3 style="font-size:13px;color:var(--ink-3);font-weight:500">今日询价 · 倒序</h3><span class="viewtog"><span class="on"><svg class="icn" viewBox="0 0 24 24"><rect x="3.5" y="4" width="17" height="7" rx="2"/><rect x="3.5" y="13" width="17" height="7" rx="2"/></svg></span><span><svg class="icn" viewBox="0 0 24 24"><rect x="3.5" y="4.5" width="17" height="15" rx="2"/><line x1="3.5" y1="9.5" x2="20.5" y2="9.5"/><line x1="3.5" y1="14.5" x2="20.5" y2="14.5"/><line x1="9.6" y1="4.5" x2="9.6" y2="19.5"/></svg></span></span></div>
  1175. <div class="card qc">
  1176. <span class="corner">NEW</span>
  1177. <div class="qc-top">
  1178. <div><div class="qc-name">贵州茅台 <i class="cmark">C</i></div><div class="qc-sub">600519.SH · CALL · 1M</div></div>
  1179. <div class="qc-r"><span class="st done"><i></i>已完成</span><div class="qc-time">11:15:15</div></div>
  1180. </div>
  1181. <div class="qc-meta"><span><em>名义本金</em>200万</span><span><em>报价</em>3 条</span></div>
  1182. </div>
  1183. <div class="card qc">
  1184. <div class="qc-top">
  1185. <div><div class="qc-name">贵州燃气 <i class="cmark">C</i></div><div class="qc-sub">600903.SH · CALL · 1M</div></div>
  1186. <div class="qc-r"><span class="st live"><i></i>询价中</span><div class="qc-time">11:42:40</div></div>
  1187. </div>
  1188. <div class="qc-meta"><span><em>名义本金</em>100万</span><span><em>报价</em>--</span></div>
  1189. </div>
  1190. <div class="card qc">
  1191. <div class="qc-top">
  1192. <div><div class="qc-name">贵州三力 <i class="cmark">C</i></div><div class="qc-sub">603439.SH · CALL · 1M</div></div>
  1193. <div class="qc-r"><span class="st live"><i></i>待处理</span><div class="qc-time">10:49:41</div></div>
  1194. </div>
  1195. <div class="qc-meta"><span><em>名义本金</em>500万</span><span><em>报价</em>--</span></div>
  1196. </div>
  1197. <div class="card qc">
  1198. <div class="qc-top">
  1199. <div><div class="qc-name">平安银行 <i class="cmark">C</i></div><div class="qc-sub">000001.SZ · CALL · 1M</div></div>
  1200. <div class="qc-r"><span class="st rej"><i></i>已拒绝</span><div class="qc-time">09:40:12</div></div>
  1201. </div>
  1202. <div class="qc-meta"><span><em>名义本金</em>100万</span><span><em>报价</em>--</span></div>
  1203. </div>
  1204. </div>
  1205. <div class="tabbar"><div class="tb on"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-note"/></svg></span>票据</div><div class="tb"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span>账户</div><div class="tb"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-bell"/></svg><i class="rdot"></i></span>消息</div><div class="tb"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-user"/></svg></span>我的</div></div>
  1206. <div class="homebar"></div>
  1207. </div>
  1208. </div>
  1209. <div class="cap"><div class="cap-num">P2 · LIGHT</div><div class="cap-title">询价主页 · 浅色</div>
  1210. <ul><li>筛选区是白色面板,列表卡片在灰底上</li><li>只读字段用次级面底 + 「只读」字样,不靠置灰</li></ul>
  1211. </div>
  1212. </div>
  1213. <div class="frame">
  1214. <div class="phone" data-lock data-theme="dark" data-clone="#p-inq"></div>
  1215. <div class="cap"><div class="cap-num">P2 · DARK</div><div class="cap-title">询价主页 · 深色</div>
  1216. <ul><li>品牌色提亮为 <code>#5B8CFF</code>,主按钮文字转 <code>#05122E</code></li><li>置灰按钮用 <code>--surface-3</code> 底 + <code>--ink-4</code> 字,辉光消失</li></ul>
  1217. </div>
  1218. </div>
  1219. </div>
  1220. </div>
  1221. <div class="sec">
  1222. <div class="sec-head"><span class="sec-num">05</span><span class="sec-name">组件级对照</span><span class="sec-rule"></span><span class="sec-note">同一组件在两套主题下的取值差异 · 变体以代码为准(AppButton / StatusDot / Tag / CornerBadge)</span></div>
  1223. <div class="compo">
  1224. <div class="lt">
  1225. <h5>按钮 BUTTON · LIGHT</h5>
  1226. <div data-theme="light"><div class="cmp-col"><div class="btn">主按钮</div><div class="btn ghost">次按钮(描边)</div><div class="btn tonal">次级面按钮(重置)</div><div class="btn off">禁用</div><div class="btn dgtext">登出(危险文字)</div></div></div>
  1227. </div>
  1228. <div class="dk">
  1229. <h5>按钮 BUTTON · DARK</h5>
  1230. <div data-theme="dark"><div class="cmp-col"><div class="btn">主按钮</div><div class="btn ghost">次按钮(描边)</div><div class="btn tonal">次级面按钮(重置)</div><div class="btn off">禁用</div><div class="btn dgtext">登出(危险文字)</div></div></div>
  1231. </div>
  1232. <div class="lt">
  1233. <h5>状态 STATUS · LIGHT</h5>
  1234. <div data-theme="light"><div class="cmp-col" style="gap:11px;font-size:13px"><span class="st wait"><i></i>待报</span><span class="st live"><i></i>询价中</span><span class="st sub"><i></i>待审批</span><span class="st done"><i></i>已完成</span><span class="st rej"><i></i>已拒绝</span><span class="st exp"><i></i>已失效</span></div></div>
  1235. </div>
  1236. <div class="dk">
  1237. <h5>状态 STATUS · DARK</h5>
  1238. <div data-theme="dark"><div class="cmp-col" style="gap:11px;font-size:13px"><span class="st wait"><i></i>待报</span><span class="st live"><i></i>询价中</span><span class="st sub"><i></i>待审批</span><span class="st done"><i></i>已完成</span><span class="st rej"><i></i>已拒绝</span><span class="st exp"><i></i>已失效</span></div></div>
  1239. </div>
  1240. </div>
  1241. <div class="compo" style="margin-top:14px">
  1242. <div class="lt">
  1243. <h5>输入与提示 · LIGHT</h5>
  1244. <div data-theme="light"><div class="cmp-col cmp-field">
  1245. <span class="lbl" style="margin:0">增额金额</span>
  1246. <div class="field"><span class="ph">最低增额10万</span><span class="u">万</span></div>
  1247. <div class="field focus"><b>50</b><span class="u">万</span></div>
  1248. <div class="field err"><b>5</b><span class="u">万</span></div>
  1249. <div class="errtip" style="margin-top:-4px"><svg class="icn sm" viewBox="0 0 24 24"><use href="#i-alert"/></svg>最低增额10万</div>
  1250. <div class="notice info"><svg class="icn sm" viewBox="0 0 24 24"><use href="#i-info"/></svg><span>本条为通知副本,以询价单实时状态为准。</span></div>
  1251. <div class="notice warn"><svg class="icn sm" viewBox="0 0 24 24"><use href="#i-alert"/></svg><span>本次为强制更新,请升级后继续使用。</span></div>
  1252. </div></div>
  1253. </div>
  1254. <div class="dk">
  1255. <h5>输入与提示 · DARK</h5>
  1256. <div data-theme="dark"><div class="cmp-col cmp-field">
  1257. <span class="lbl" style="margin:0">增额金额</span>
  1258. <div class="field"><span class="ph">最低增额10万</span><span class="u">万</span></div>
  1259. <div class="field focus"><b>50</b><span class="u">万</span></div>
  1260. <div class="field err"><b>5</b><span class="u">万</span></div>
  1261. <div class="errtip" style="margin-top:-4px"><svg class="icn sm" viewBox="0 0 24 24"><use href="#i-alert"/></svg>最低增额10万</div>
  1262. <div class="notice info"><svg class="icn sm" viewBox="0 0 24 24"><use href="#i-info"/></svg><span>本条为通知副本,以询价单实时状态为准。</span></div>
  1263. <div class="notice warn"><svg class="icn sm" viewBox="0 0 24 24"><use href="#i-alert"/></svg><span>本次为强制更新,请升级后继续使用。</span></div>
  1264. </div></div>
  1265. </div>
  1266. <div class="lt">
  1267. <h5>标签 · 角标 · 涨跌 · LIGHT</h5>
  1268. <div data-theme="light"><div class="cmp-col">
  1269. <div class="cmp-row"><span class="tag t-brand">买入</span><span class="tag t-danger">卖出</span><span class="tag t-ok">已开通</span><span class="tag t-warn">增额</span><span class="tag t-accent">到期</span><span class="tag t-mute">已撤</span></div>
  1270. <div class="cmp-cornerrow"><span class="corner">增额</span><span class="corner due">到期</span><span class="corner pend">待生效</span><span class="corner">NEW</span></div>
  1271. <div class="cmp-pl" style="margin-top:6px"><span class="up">+221,234.00 HKD<small>+10.62%</small></span><span class="down">-178,766.00 HKD<small>-89.38%</small></span><span class="flat">0.00 HKD<small>0.00%</small></span></div>
  1272. </div></div>
  1273. </div>
  1274. <div class="dk">
  1275. <h5>标签 · 角标 · 涨跌 · DARK</h5>
  1276. <div data-theme="dark"><div class="cmp-col">
  1277. <div class="cmp-row"><span class="tag t-brand">买入</span><span class="tag t-danger">卖出</span><span class="tag t-ok">已开通</span><span class="tag t-warn">增额</span><span class="tag t-accent">到期</span><span class="tag t-mute">已撤</span></div>
  1278. <div class="cmp-cornerrow"><span class="corner">增额</span><span class="corner due">到期</span><span class="corner pend">待生效</span><span class="corner">NEW</span></div>
  1279. <div class="cmp-pl" style="margin-top:6px"><span class="up">+221,234.00 HKD<small>+10.62%</small></span><span class="down">-178,766.00 HKD<small>-89.38%</small></span><span class="flat">0.00 HKD<small>0.00%</small></span></div>
  1280. </div></div>
  1281. </div>
  1282. </div>
  1283. <div class="compo" style="margin-top:14px">
  1284. <div class="lt">
  1285. <h5>筛选组件 · LIGHT</h5>
  1286. <div data-theme="light"><div class="cmp-panel">
  1287. <div class="fsearch" style="margin:0 12px"><svg class="icn" viewBox="0 0 24 24"><use href="#i-search"/></svg>股票代码/拼音/名称</div>
  1288. <div class="fcond" style="padding:10px 12px 0"><span class="fpill on">近三月 <svg class="icn" viewBox="0 0 24 24"><use href="#i-down"/></svg></span><span class="fright"><span class="fmore">筛选 <svg class="icn" viewBox="0 0 24 24"><use href="#i-filter"/></svg></span><span class="viewtog sep"><span class="on"><svg class="icn" viewBox="0 0 24 24"><rect x="3.5" y="4" width="17" height="7" rx="2"/><rect x="3.5" y="13" width="17" height="7" rx="2"/></svg></span><span><svg class="icn" viewBox="0 0 24 24"><rect x="3.5" y="4.5" width="17" height="15" rx="2"/><line x1="3.5" y1="9.5" x2="20.5" y2="9.5"/><line x1="3.5" y1="14.5" x2="20.5" y2="14.5"/><line x1="9.6" y1="4.5" x2="9.6" y2="19.5"/></svg></span></span></span></div>
  1289. <div class="filterbar"><span class="fb on">全部</span><span class="fb">待审批</span><span class="fb">已驳回</span><span class="fb">已通过</span></div>
  1290. </div></div>
  1291. </div>
  1292. <div class="dk">
  1293. <h5>筛选组件 · DARK</h5>
  1294. <div data-theme="dark"><div class="cmp-panel">
  1295. <div class="fsearch" style="margin:0 12px"><svg class="icn" viewBox="0 0 24 24"><use href="#i-search"/></svg>股票代码/拼音/名称</div>
  1296. <div class="fcond" style="padding:10px 12px 0"><span class="fpill on">近三月 <svg class="icn" viewBox="0 0 24 24"><use href="#i-down"/></svg></span><span class="fright"><span class="fmore">筛选 <svg class="icn" viewBox="0 0 24 24"><use href="#i-filter"/></svg></span><span class="viewtog sep"><span class="on"><svg class="icn" viewBox="0 0 24 24"><rect x="3.5" y="4" width="17" height="7" rx="2"/><rect x="3.5" y="13" width="17" height="7" rx="2"/></svg></span><span><svg class="icn" viewBox="0 0 24 24"><rect x="3.5" y="4.5" width="17" height="15" rx="2"/><line x1="3.5" y1="9.5" x2="20.5" y2="9.5"/><line x1="3.5" y1="14.5" x2="20.5" y2="14.5"/><line x1="9.6" y1="4.5" x2="9.6" y2="19.5"/></svg></span></span></span></div>
  1297. <div class="filterbar"><span class="fb on">全部</span><span class="fb">待审批</span><span class="fb">已驳回</span><span class="fb">已通过</span></div>
  1298. </div></div>
  1299. </div>
  1300. </div>
  1301. <div class="bullets" style="margin-top:14px;color:var(--canvas-mute)">
  1302. <li>按钮三种变体:主按钮(实心)· 次按钮(描边)· 次级面(筛选面板「重置」、弹层「取消」);<b>没有实心危险按钮</b>,危险动作用次按钮 + 危险色字或确认框里的危险色文字</li>
  1303. <li>主按钮置灰是三件套:<code>--surface-3</code> 底 + <code>--ink-4</code> 字 + 去辉光;次按钮置灰用透明度</li>
  1304. <li>状态点:进行中两档画<b>空心圈</b>(询价中 = 琥珀、待审批 = 品牌),已终结的画实心点;认不出的状态只写文字、不画点</li>
  1305. <li>标签九种色调:brand · amber · rise · fall · ok · warn · mute(弱底)+ solid · danger(实心)</li>
  1306. </div>
  1307. </div>
  1308. <div class="sec" style="margin-bottom:20px">
  1309. <div class="sec-head"><span class="sec-num">06</span><span class="sec-name">换肤落地</span><span class="sec-rule"></span><span class="sec-note">三端同一份主题代码,只有跟随系统的信号来源不同</span></div>
  1310. <table class="spec">
  1311. <tr><th style="width:110px">端</th><th style="width:250px">主题载体</th><th style="width:200px">跟随系统</th><th>切换与注意</th></tr>
  1312. <tr><td><b>iOS</b></td><td class="m">Tamagui 主题 light / dark(色值来自 theme/colors.ts)</td><td class="m">系统外观(traitCollection)</td><td>强制模式把偏好下发 <code>overrideUserInterfaceStyle</code>:液态玻璃底栏、键盘、系统选择器跟着变;状态栏随主题;不重启</td></tr>
  1313. <tr><td><b>Android</b></td><td class="m">同上</td><td class="m">系统外观(uiMode)</td><td>下发 <code>AppCompatDelegate</code> 夜间模式;根窗口底色同步刷,返回手势时屏幕边缘不闪浅色</td></tr>
  1314. <tr><td><b>H5</b></td><td class="m">同上(react-native-web)</td><td class="m">prefers-color-scheme</td><td>静态渲染的首屏固定浅色,水合后切到偏好(与语言同一做法)</td></tr>
  1315. <tr><td colspan="4" style="background:var(--surface-2)">
  1316. <b style="color:var(--canvas-ink)">硬规则</b> ① 十六进制色值<b>只允许出现在 theme/colors.ts</b>,组件一律引用语义键;② 切主题<b>不得改变任何尺寸</b>(布局、字号、间距、圆角、图标);③ 状态传达必须<b>颜色 + 文字</b>双通道;④ 机构换品牌色只改 <code>BRAND_PALETTES</code> 的深浅两套覆盖,不改组件。
  1317. </td></tr>
  1318. </table>
  1319. </div>
  1320. <script>
  1321. (function(){
  1322. var root=document.documentElement,btns=document.querySelectorAll('.skin button');
  1323. document.querySelectorAll('[data-clone]').forEach(function(el){
  1324. var src=document.querySelector(el.getAttribute('data-clone'));
  1325. if(src) el.innerHTML=src.innerHTML;
  1326. });
  1327. function set(t){
  1328. root.setAttribute('data-theme',t);
  1329. btns.forEach(function(b){b.classList.toggle('on',b.dataset.set===t)});
  1330. document.querySelectorAll('.phone:not([data-lock])').forEach(function(p){p.setAttribute('data-theme',t)});
  1331. try{localStorage.setItem('hh-skin',t)}catch(e){}
  1332. }
  1333. btns.forEach(function(b){b.addEventListener('click',function(){set(b.dataset.set)})});
  1334. document.body.setAttribute('data-h',String(document.body.scrollHeight));
  1335. var hash=(location.hash||'').replace('#','');
  1336. var saved=null;try{saved=localStorage.getItem('hh-skin')}catch(e){}
  1337. set(hash==='dark'||hash==='light'?hash:(saved||'light'));
  1338. })();
  1339. </script>
  1340. </body>
  1341. </html>