| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602 |
- <!DOCTYPE html>
- <html lang="zh-CN" data-theme="light">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width,initial-scale=1">
- <title>消息中心 · 通知与推送</title>
- <style>
- /* ============================================================
- 共赢票据投资者 APP — 深空蓝设计系统 (Deep-Space Blue)
- 双主题:data-theme="light" | "dark",可作用于 :root 或任意容器
- ============================================================ */
- /* ---------- 浅色(默认) ---------- */
- :root,
- [data-theme="light"]{
- --canvas:#E7ECF4; /* 图纸底 */
- --canvas-2:#F4F7FB; /* 图纸卡片 */
- --canvas-line:#D3DCE8;
- --canvas-ink:#0F1B33;
- --canvas-mute:#647591;
- --app-bg:#F6F8FB; /* App 页面底 */
- --surface:#FFFFFF; /* 卡片/导航 */
- --surface-2:#F1F4F9; /* 次级面/表头 */
- --surface-3:#E8EDF5; /* 三级面 */
- --line:#E3E9F1;
- --line-2:#CFD9E7;
- --ink-1:#0F1B33;
- --ink-2:#4C5C78;
- --ink-3:#8A99B2;
- --ink-4:#AEBACD;
- --brand:#1B4FD8;
- --brand-2:#123CAE;
- --brand-weak:#E7EEFF;
- --brand-line:#B9CDFF;
- --on-brand:#FFFFFF;
- --accent:#B4700E; /* 琥珀 强调 */
- --accent-weak:#FDF2DE;
- --accent-line:#EBCD97;
- --rise:#E5484D; /* 涨 / 盈利 */
- --fall:#12A594; /* 跌 / 亏损 */
- --rise-weak:#FDECEC;
- --fall-weak:#E3F7F3;
- --warn:#C2410C;
- --warn-weak:#FEF0E6;
- --danger:#DC2626;
- --danger-weak:#FDEBEB;
- --ok:#0F7B4F;
- --ok-weak:#E4F5EC;
- --shadow-card:0 1px 2px rgba(15,27,51,.05),0 8px 24px rgba(15,27,51,.06);
- --shadow-phone:0 18px 44px rgba(15,27,51,.16),0 2px 6px rgba(15,27,51,.08);
- --shadow-pop:0 12px 40px rgba(15,27,51,.20);
- --scrim:rgba(11,18,34,.42);
- --bezel:#C7D2E2;
- --glow:none;
- }
- /* ---------- 深色 ---------- */
- [data-theme="dark"]{
- --canvas:#060A14;
- --canvas-2:#0E1526;
- --canvas-line:#1E2A44;
- --canvas-ink:#E9EFFA;
- --canvas-mute:#8797B4;
- --app-bg:#0B1020;
- --surface:#131B2E;
- --surface-2:#18223A;
- --surface-3:#1E2A45;
- --line:#232F4B;
- --line-2:#32436A;
- --ink-1:#EAF0FA;
- --ink-2:#A5B4D0;
- --ink-3:#7486A5;
- --ink-4:#54658A;
- --brand:#5B8CFF;
- --brand-2:#7FA6FF;
- --brand-weak:rgba(91,140,255,.16);
- --brand-line:rgba(91,140,255,.42);
- --on-brand:#05122E;
- --accent:#F0A93B;
- --accent-weak:rgba(240,169,59,.15);
- --accent-line:rgba(240,169,59,.42);
- --rise:#FF6B6E;
- --fall:#2FD4B9;
- --rise-weak:rgba(255,107,110,.14);
- --fall-weak:rgba(47,212,185,.14);
- --warn:#F59E42;
- --warn-weak:rgba(245,158,66,.14);
- --danger:#FF6B6E;
- --danger-weak:rgba(255,107,110,.14);
- --ok:#2FD4B9;
- --ok-weak:rgba(47,212,185,.14);
- --shadow-card:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.34);
- --shadow-phone:0 20px 50px rgba(0,0,0,.6),0 0 0 1px rgba(91,140,255,.10);
- --shadow-pop:0 14px 44px rgba(0,0,0,.62);
- --scrim:rgba(2,6,16,.62);
- --bezel:#26324C;
- --glow:0 0 0 1px rgba(91,140,255,.14);
- }
- /* ---------- 基础 ---------- */
- *{box-sizing:border-box;margin:0;padding:0}
- html{-webkit-text-size-adjust:100%}
- body{
- background:var(--canvas);color:var(--canvas-ink);
- font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,-apple-system,"Segoe UI",sans-serif;
- -webkit-font-smoothing:antialiased;
- padding:44px 46px 110px;
- transition:background .28s ease,color .28s ease;
- }
- .mono{font-family:"SF Mono",ui-monospace,"JetBrains Mono",Menlo,Consolas,monospace}
- .num{font-variant-numeric:tabular-nums;letter-spacing:.01em}
- /* ---------- 图纸头 ---------- */
- .sheet-head{
- display:flex;flex-wrap:wrap;gap:32px;align-items:flex-end;justify-content:space-between;
- padding-bottom:24px;margin-bottom:44px;border-bottom:1px solid var(--canvas-line);
- }
- .brandmark{display:flex;align-items:center;gap:14px}
- .brandmark .glyph{
- width:44px;height:44px;border-radius:12px;flex:none;position:relative;
- background:linear-gradient(145deg,var(--brand),var(--brand-2));
- box-shadow:0 6px 18px rgba(27,79,216,.28);
- }
- .brandmark .glyph::before{
- content:"";position:absolute;inset:12px 11px;border:1.6px solid rgba(255,255,255,.9);
- border-radius:2px;border-bottom-width:4px;
- }
- .brandmark .glyph::after{
- content:"";position:absolute;right:8px;top:8px;width:7px;height:7px;border-radius:50%;background:var(--accent);
- }
- .sheet-title{font-size:26px;font-weight:650;letter-spacing:.02em;line-height:1.2}
- .sheet-sub{margin-top:6px;font-size:12.5px;color:var(--canvas-mute);letter-spacing:.02em}
- .head-right{display:flex;align-items:center;gap:26px;flex-wrap:wrap}
- .meta{display:flex;gap:26px}
- .meta div{font-size:10.5px;color:var(--canvas-mute);letter-spacing:.1em;text-transform:uppercase}
- .meta b{display:block;margin-top:5px;font-size:12.5px;color:var(--canvas-ink);font-weight:550;letter-spacing:0;text-transform:none}
- /* 换肤开关 */
- .skin{
- display:flex;align-items:center;gap:0;padding:3px;border-radius:9px;
- background:var(--canvas-2);border:1px solid var(--canvas-line);
- }
- .skin button{
- border:0;background:transparent;cursor:pointer;font:inherit;
- padding:7px 13px;border-radius:6px;font-size:12px;color:var(--canvas-mute);
- display:flex;align-items:center;gap:6px;letter-spacing:.04em;transition:.2s;
- }
- .skin button.on{background:var(--brand);color:#fff;box-shadow:0 2px 8px rgba(27,79,216,.3)}
- [data-theme="dark"] .skin button.on{color:#04122F}
- .skin svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
- /* ---------- 章节 ---------- */
- .sec{margin-bottom:60px}
- .sec-head{display:flex;align-items:baseline;gap:14px;margin-bottom:24px}
- .sec-num{
- font-family:"SF Mono",ui-monospace,Menlo,monospace;font-size:11px;color:var(--brand);
- letter-spacing:.12em;padding:3px 8px;border:1px solid var(--brand-line);border-radius:5px;background:var(--brand-weak);
- }
- .sec-name{font-size:17px;font-weight:600;letter-spacing:.04em}
- .sec-rule{flex:1;height:1px;background:var(--canvas-line)}
- .sec-note{font-size:12px;color:var(--canvas-mute)}
- /* ---------- 说明卡 ---------- */
- .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
- .card-x{background:var(--canvas-2);border:1px solid var(--canvas-line);border-radius:12px;padding:18px 20px}
- .card-x h4{font-size:11px;font-weight:600;letter-spacing:.14em;color:var(--canvas-mute);margin-bottom:14px;text-transform:uppercase}
- .kv{display:flex;flex-direction:column;gap:10px}
- .kv .r{display:flex;justify-content:space-between;gap:14px;font-size:12.5px;line-height:1.5}
- .kv .r span{color:var(--canvas-mute)}
- .kv .r b{font-weight:520;text-align:right;font-variant-numeric:tabular-nums}
- .bullets{display:flex;flex-direction:column;gap:9px}
- .bullets li{list-style:none;font-size:12.5px;line-height:1.65;color:var(--canvas-mute);padding-left:14px;position:relative}
- .bullets li::before{content:"";position:absolute;left:0;top:8px;width:6px;height:1.5px;background:var(--brand);border-radius:1px}
- .bullets b{color:var(--canvas-ink);font-weight:560}
- 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}
- /* ---------- 色板 ---------- */
- .pal{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:10px}
- .sw{border:1px solid var(--canvas-line);border-radius:10px;overflow:hidden;background:var(--canvas-2)}
- .sw .chip{height:56px;display:flex;align-items:flex-end;justify-content:flex-end;padding:7px 9px}
- .sw .chip i{font-style:normal;font-size:9.5px;color:rgba(255,255,255,.85);font-family:"SF Mono",monospace}
- .sw .lb{padding:9px 11px}
- .sw .lb b{display:block;font-size:12px;font-weight:560}
- .sw .lb em{font-style:normal;display:block;font-size:10.5px;color:var(--canvas-mute);margin-top:3px;font-family:"SF Mono",monospace}
- /* ---------- 表 ---------- */
- 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}
- table.spec th{
- background:var(--surface-2);text-align:left;padding:11px 14px;font-size:10.5px;font-weight:600;
- letter-spacing:.1em;color:var(--canvas-mute);text-transform:uppercase;border-bottom:1px solid var(--canvas-line);
- }
- table.spec td{padding:11px 14px;border-bottom:1px solid var(--canvas-line);color:var(--canvas-mute);line-height:1.6;vertical-align:top}
- table.spec tr:last-child td{border-bottom:0}
- table.spec td b{color:var(--canvas-ink);font-weight:550}
- table.spec td.m{font-family:"SF Mono",ui-monospace,Menlo,monospace;color:var(--canvas-ink);font-size:11.5px}
- /* ---------- 画板 ---------- */
- .frames{display:grid;grid-template-columns:repeat(auto-fit,minmax(390px,390px));gap:52px 36px;justify-content:start}
- .frame{width:390px}
- .frame.w2{grid-column:span 2}
- .phone{
- width:390px;height:844px;border-radius:42px;overflow:hidden;position:relative;
- background:var(--app-bg);border:1px solid var(--bezel);box-shadow:var(--shadow-phone);
- font-size:15px;color:var(--ink-1);transition:background .28s ease,border-color .28s ease;
- isolation:isolate;
- }
- .cap{margin-top:18px;padding-left:13px;border-left:2px solid var(--brand)}
- .cap-num{font-family:"SF Mono",ui-monospace,Menlo,monospace;font-size:10.5px;color:var(--brand);letter-spacing:.12em}
- .cap-title{font-size:14.5px;font-weight:600;margin:5px 0 8px;letter-spacing:.02em}
- .cap ul{list-style:none;display:flex;flex-direction:column;gap:6px}
- .cap li{font-size:12px;line-height:1.62;color:var(--canvas-mute);padding-left:12px;position:relative}
- .cap li::before{content:"";position:absolute;left:0;top:8px;width:5px;height:1px;background:var(--canvas-line)}
- .cap li b{color:var(--canvas-ink);font-weight:550}
- .cap code{font-size:11px;background:var(--surface-3)}
- /* ============================================================
- App 内部组件
- ============================================================ */
- .screen{position:absolute;inset:0;display:flex;flex-direction:column;overflow:hidden;background:var(--app-bg)}
- .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)}
- .statusbar .ic{display:flex;gap:6px;align-items:center;opacity:.9}
- .statusbar svg{height:12px;fill:currentColor}
- .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}
- /* 顶栏 */
- .navbar{height:46px;flex:none;display:flex;align-items:center;padding:0 16px;position:relative;background:var(--app-bg)}
- .navbar h2{position:absolute;left:0;right:0;text-align:center;font-size:16.5px;font-weight:600;letter-spacing:.03em}
- .navbar .bk,.navbar .rt{position:relative;z-index:2;color:var(--ink-2);display:flex;align-items:center;gap:5px;font-size:13px}
- .navbar .rt{margin-left:auto;color:var(--brand)}
- .icn{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
- .icn.sm{width:14px;height:14px}
- .icn.lg{width:22px;height:22px}
- .appbar{padding:4px 20px 0;flex:none}
- .appbar h1{font-size:22px;font-weight:650;letter-spacing:.02em;display:flex;align-items:center;gap:9px}
- .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}
- /* 分段控件 */
- .seg{display:flex;padding:3px;background:var(--surface-2);border-radius:9px;gap:2px}
- .seg span{flex:1;text-align:center;padding:7px 0;font-size:13.5px;color:var(--ink-3);border-radius:7px;transition:.2s}
- .seg span.on{background:var(--surface);color:var(--ink-1);font-weight:600;box-shadow:var(--shadow-card)}
- [data-theme="dark"] .seg span.on{background:var(--surface-3);color:var(--brand)}
- /* 下划线 tab */
- .tabs{display:flex;gap:24px;padding:0 20px;border-bottom:1px solid var(--line);flex:none;background:var(--app-bg)}
- .tabs span{padding:12px 1px 11px;font-size:14.5px;color:var(--ink-3);position:relative;white-space:nowrap}
- .tabs span.on{color:var(--ink-1);font-weight:600}
- .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)}
- .tabs span .dot{position:absolute;top:9px;right:-7px;width:6px;height:6px;padding:0;font-size:0;border-radius:50%;background:var(--danger)}
- .tabs span em{font-style:normal;color:var(--danger)}
- /* 底部 tabbar */
- .tabbar{height:72px;flex:none;display:flex;background:var(--surface);border-top:1px solid var(--line);padding-bottom:10px}
- .tb{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;font-size:10.5px;color:var(--ink-3)}
- .tb.on{color:var(--brand)}
- .tb .icn{width:21px;height:21px;stroke-width:1.6}
- /* 滚动体 */
- .body{flex:1;overflow:hidden;position:relative}
- .pad{padding:0 16px}
- /* 卡片 */
- .card{background:var(--surface);border-radius:14px;box-shadow:var(--shadow-card);overflow:hidden}
- [data-theme="dark"] .card{border:1px solid var(--line)}
- .card + .card:not(.pos):not(.qc){margin-top:11px}
- .card-hd{display:flex;align-items:center;justify-content:space-between;padding:13px 15px 0}
- .card-hd h3{font-size:14.5px;font-weight:600}
- .card-hd .more{font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:2px}
- /* 资金看板 */
- .hero{
- margin:10px 16px 0;border-radius:16px;padding:18px 18px 16px;position:relative;overflow:hidden;
- background:linear-gradient(150deg,#1B4FD8 0%,#123CAE 58%,#0C2C86 100%);color:#fff;
- box-shadow:0 12px 30px rgba(18,60,174,.30);
- }
- [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)}
- .hero::after{content:"";position:absolute;right:-40px;top:-52px;width:180px;height:180px;border-radius:50%;background:rgba(255,255,255,.07)}
- [data-theme="dark"] .hero::after{background:rgba(91,140,255,.10)}
- .hero .lb{display:flex;align-items:center;gap:6px;font-size:12.5px;color:rgba(255,255,255,.76)}
- .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}
- .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}
- .hero .amt .eye{opacity:.6}
- .hero .arrow{position:absolute;right:18px;top:20px;opacity:.75}
- .hero .grid3{display:flex;margin-top:16px;padding-top:14px;border-top:1px solid rgba(255,255,255,.16)}
- .hero .grid3 div{flex:1}
- .hero .grid3 span{display:block;font-size:11px;color:rgba(255,255,255,.7)}
- .hero .grid3 b{display:block;margin-top:5px;font-size:14.5px;font-weight:600;font-variant-numeric:tabular-nums}
- /* 币种表 */
- .fxtab{width:100%;border-collapse:collapse;font-size:12.5px}
- .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)}
- .fxtab th:first-child{text-align:left}
- .fxtab td{padding:10px 15px;text-align:right;font-variant-numeric:tabular-nums;color:var(--ink-1);border-top:1px solid var(--line)}
- .fxtab td:first-child{text-align:left;font-family:"SF Mono",monospace;font-size:12px;color:var(--ink-2)}
- /* 快捷入口 */
- .quick{display:flex;gap:11px;margin:11px 16px 0}
- .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}
- [data-theme="dark"] .qk{border:1px solid var(--line)}
- .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}
- .qk b{font-size:13.5px;font-weight:550}
- .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)}
- /* 列表行 */
- .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}
- .row:last-child{border-bottom:0}
- .row .k{color:var(--ink-2);display:flex;align-items:center;gap:7px;flex:none}
- .row .k .icn{color:var(--ink-3)}
- .row .v{color:var(--ink-1);font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:6px;text-align:right}
- .row .v.ph{color:var(--ink-4)}
- .row .v.m{font-family:"SF Mono",monospace;font-size:13.5px}
- .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}
- /* 标签 / 徽标 */
- .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}
- .t-brand{background:var(--brand-weak);color:var(--brand)}
- .t-accent{background:var(--accent-weak);color:var(--accent)}
- .t-rise{background:var(--rise-weak);color:var(--rise)}
- .t-fall{background:var(--fall-weak);color:var(--fall)}
- .t-ok{background:var(--ok-weak);color:var(--ok)}
- .t-warn{background:var(--warn-weak);color:var(--warn)}
- .t-mute{background:var(--surface-3);color:var(--ink-3)}
- .t-solid{background:var(--brand);color:var(--on-brand)}
- .t-danger{background:var(--danger);color:#fff}
- .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}
- .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}
- .corner.due{background:var(--accent)}
- .corner.pend{background:var(--ink-3)}
- /* 状态点 */
- .st{display:inline-flex;align-items:center;gap:5px;font-size:12.5px}
- .st i{width:6px;height:6px;border-radius:50%;flex:none;background:currentColor}
- .st.wait{color:var(--ink-3)}
- .st.live{color:var(--accent)}
- .st.live i{background:transparent;border:1.6px solid currentColor}
- .st.done{color:var(--ok)}
- .st.rej{color:var(--danger)}
- .st.exp{color:var(--ink-4)}
- /* 按钮 */
- .btn{
- height:46px;border-radius:12px;display:flex;align-items:center;justify-content:center;gap:6px;
- background:var(--brand);color:var(--on-brand);font-size:15.5px;font-weight:600;letter-spacing:.06em;
- box-shadow:0 6px 16px rgba(27,79,216,.24);
- }
- [data-theme="dark"] .btn{box-shadow:0 6px 18px rgba(91,140,255,.20)}
- .btn.sm{height:38px;font-size:14px;border-radius:10px;box-shadow:none}
- .btn.off{background:var(--surface-3);color:var(--ink-4);box-shadow:none}
- .btn.ghost{background:transparent;border:1px solid var(--line-2);color:var(--ink-2);box-shadow:none;font-weight:500}
- .btn.danger{background:var(--danger);box-shadow:none;color:#fff}
- .btn.wide{width:100%}
- .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)}
- /* 输入 */
- .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)}
- .field.focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-weak)}
- .field.err{border-color:var(--danger);box-shadow:0 0 0 3px var(--danger-weak)}
- .field .ph{color:var(--ink-4)}
- .field .icn{color:var(--ink-3)}
- .field .unit{margin-left:auto;color:var(--ink-2);font-size:13.5px}
- .lbl{font-size:11.5px;color:var(--ink-3);letter-spacing:.06em;margin-bottom:7px;display:block}
- .errtip{font-size:11.5px;color:var(--danger);margin-top:6px;display:flex;align-items:center;gap:4px}
- /* chips */
- .chips{display:flex;gap:7px;flex-wrap:wrap}
- .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}
- .chip.on{background:var(--brand-weak);border-color:var(--brand-line);color:var(--brand);font-weight:560}
- .chip.dash{border-style:dashed}
- /* 单选 / 复选 */
- .rad{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;color:var(--ink-2)}
- .rad i{width:15px;height:15px;border-radius:50%;border:1.4px solid var(--line-2);position:relative;flex:none}
- .rad.on{color:var(--ink-1)}
- .rad.on i{border-color:var(--brand)}
- .rad.on i::after{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--brand)}
- .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}
- .cb.on{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}
- .cb .icn{width:11px;height:11px;stroke-width:2.6}
- /* 步进器 */
- .stepper{height:38px;border:1px solid var(--line-2);border-radius:10px;display:flex;align-items:center;overflow:hidden;background:var(--surface)}
- .stepper b{width:34px;text-align:center;font-weight:400;font-size:17px;color:var(--ink-3)}
- .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}
- .stepper.err{border-color:var(--danger)}
- .stepper.err i{color:var(--danger)}
- /* 搜索 */
- .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)}
- .search .icn{color:var(--ink-3)}
- .search b{color:var(--ink-1);font-weight:500}
- .sug{background:var(--surface);border-radius:12px;box-shadow:var(--shadow-pop);overflow:hidden;margin-top:6px}
- .sug div{padding:11px 13px;font-size:14px;border-bottom:1px solid var(--line);display:flex;gap:8px}
- .sug div:last-child{border-bottom:0}
- .sug em{font-style:normal;color:var(--brand)}
- .sug span{font-family:"SF Mono",monospace;font-size:12.5px;color:var(--ink-3)}
- /* 弹窗 */
- .scrim{position:absolute;inset:0;background:var(--scrim);z-index:40;display:flex;align-items:center;justify-content:center;padding:0 30px}
- .scrim.bottom{align-items:flex-end;padding:0}
- .dlg{width:100%;background:var(--surface);border-radius:16px;overflow:hidden;box-shadow:var(--shadow-pop)}
- .dlg.sheet{border-radius:18px 18px 0 0;padding-bottom:22px}
- .dlg-hd{padding:18px 18px 0;text-align:center}
- .dlg-hd h3{font-size:16.5px;font-weight:600}
- .dlg-bd{padding:14px 18px 4px;font-size:14px;color:var(--ink-2);line-height:1.65}
- .dlg-ft{display:flex;border-top:1px solid var(--line);margin-top:16px}
- .dlg-ft span{flex:1;text-align:center;padding:14px 0;font-size:15.5px;color:var(--brand);font-weight:550}
- .dlg-ft span:first-child{color:var(--ink-2);border-right:1px solid var(--line)}
- .dlg-ft.single span{color:var(--brand)}
- .dlg-btns{display:flex;gap:11px;padding:16px 18px 0}
- .dlg-btns .btn{flex:1}
- /* toast */
- .toast{
- position:absolute;left:50%;top:47%;transform:translate(-50%,-50%);z-index:50;
- 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;
- }
- [data-theme="dark"] .toast{background:rgba(230,238,250,.94);color:#0B1020}
- /* 提示条 */
- .notice{display:flex;gap:8px;padding:10px 12px;border-radius:10px;font-size:12.5px;line-height:1.6}
- .notice.warn{background:var(--warn-weak);color:var(--warn)}
- .notice.info{background:var(--brand-weak);color:var(--brand)}
- .notice.danger{background:var(--danger-weak);color:var(--danger)}
- .notice .icn{flex:none;margin-top:1px}
- /* 空态 */
- .empty{padding:44px 0;text-align:center;color:var(--ink-4);font-size:13.5px}
- .empty .icn{width:34px;height:34px;stroke-width:1.2;margin-bottom:10px;color:var(--ink-4)}
- /* 分组标题 */
- .gtitle{padding:16px 16px 8px;font-size:12px;color:var(--ink-3);letter-spacing:.06em}
- /* 骨架/遮罩说明用 */
- .dim{opacity:.45}
- /* ============================================================
- 业务组件
- ============================================================ */
- /* 筛选栏 */
- .filterbar{display:flex;gap:8px;padding:10px 16px;background:var(--app-bg);flex:none;align-items:center}
- .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}
- .fb.on{background:var(--brand-weak);color:var(--brand);font-weight:550}
- .fb .icn{width:13px;height:13px}
- .fb.flex{flex:1;min-width:0}
- /* 筛选栏 v2 —— 搜索行 + 条件行(时间在左,筛选入口在右) */
- .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}
- .fsearch .icn{width:16px;height:16px;color:var(--ink-3);flex:none}
- .fsearch b{color:var(--ink-1);font-weight:500}
- .fsearch .clr{margin-left:auto;color:var(--ink-4)}
- .fcond{display:flex;align-items:center;justify-content:space-between;padding:11px 16px;flex:none;background:var(--app-bg)}
- .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}
- .fpill .icn{width:13px;height:13px;color:var(--ink-3)}
- .fpill.on{background:var(--brand-weak);border-color:var(--brand-line);color:var(--brand);font-weight:560}
- .fpill.on .icn{color:var(--brand)}
- .fmore{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;color:var(--ink-2);position:relative;padding-right:2px}
- .fmore .icn{width:15px;height:15px;color:var(--ink-3)}
- .fmore.on{color:var(--brand);font-weight:560}
- .fmore.on .icn{color:var(--brand)}
- .fmore.on::after{content:"";position:absolute;right:-5px;top:-3px;width:6px;height:6px;border-radius:50%;background:var(--danger)}
- /* 筛选面板 —— 底部弹层 */
- .fsheet{padding-bottom:20px}
- .fsheet-hd{display:flex;align-items:center;justify-content:space-between;padding:20px 20px 2px}
- .fsheet-hd b{font-size:17px;font-weight:600;letter-spacing:.02em}
- .fsheet-hd .icn{width:19px;height:19px;color:var(--ink-3)}
- .fsec{padding:16px 20px 0}
- .fsec .lbl{margin-bottom:10px}
- .optgrid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
- .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}
- .opt.on{background:var(--brand-weak);border-color:var(--brand);color:var(--brand);font-weight:600}
- .opt.dis{background:var(--surface-2);border-color:var(--line);color:var(--ink-4)}
- .fline{height:1px;background:var(--line);margin:18px 20px 0}
- /* 自定义区间 · 日期段 + 滚轮 */
- .dtrow{display:flex;gap:11px}
- .dt{flex:1;min-width:0;background:var(--surface);border:1px solid var(--line-2);border-radius:12px;padding:8px 12px 10px}
- .dt em{display:block;font-style:normal;font-size:11px;color:var(--ink-3);letter-spacing:.04em}
- .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}
- .dt.act{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-weak)}
- .dt.act em{color:var(--brand)}
- .dt.err{border-color:var(--danger);box-shadow:0 0 0 3px var(--danger-weak)}
- .wheel{position:relative;margin:14px 20px 0;padding:4px 8px;display:grid;grid-template-columns:repeat(3,1fr);text-align:center}
- .wheel .band{position:absolute;left:6px;right:6px;top:50%;height:40px;transform:translateY(-50%);background:var(--surface-2);border-radius:10px}
- .wcol{position:relative;z-index:1;display:flex;flex-direction:column}
- .wcol span{height:40px;line-height:40px;font-size:14px;color:var(--ink-2);font-variant-numeric:tabular-nums}
- .wcol span.far{color:var(--ink-4);opacity:.5}
- .wcol span.now{color:var(--ink-1);font-size:16px;font-weight:600}
- .fsheet-ft{display:flex;gap:12px;padding:20px 20px 0}
- .fsheet-ft .btn{flex:1.18}
- .fsheet-ft .btn.ghost{flex:.82;background:var(--surface-2);border:0;color:var(--ink-2);font-weight:600}
- /* 持仓卡片 */
- .pos{position:relative;margin:0 16px 11px;padding:13px 0 0}
- .pos-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:0 14px}
- .pos-name{font-size:15.5px;font-weight:600;display:flex;align-items:center;gap:6px}
- .pos-code{font-size:11px;color:var(--ink-3);margin-top:4px;letter-spacing:.02em;font-family:"SF Mono",monospace}
- .pos-val{text-align:right;flex:none}
- .pos-val b{display:block;font-size:18px;font-weight:600;font-variant-numeric:tabular-nums}
- .pos-val span{display:block;font-size:10.5px;color:var(--ink-3);margin-top:3px}
- .pos-pl{display:flex;justify-content:flex-end;gap:9px;padding:6px 14px 0;font-size:12.5px;font-variant-numeric:tabular-nums}
- .up{color:var(--rise)} .down{color:var(--fall)} .flat{color:var(--ink-3)}
- .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)}
- .pos-grid div span{display:block;font-size:10px;color:var(--ink-3);letter-spacing:.02em}
- .pos-grid div b{display:block;margin-top:4px;font-size:12.5px;font-weight:550;font-variant-numeric:tabular-nums;white-space:nowrap}
- .pos-grid div b em{font-style:normal;color:var(--ink-3);font-weight:400;font-size:11px}
- .pos-ops{display:flex;border-top:1px solid var(--line);background:var(--surface-2)}
- .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)}
- .pos-ops span:last-child{border-right:0}
- .pos-ops span.pri{color:var(--brand);font-weight:550}
- .pos-ops span.hot{color:var(--danger);font-weight:550}
- .pos-ops span.off{color:var(--ink-4)}
- /* 冻结列表格(数据模式) */
- .gridtab{display:flex;font-size:12px;overflow:hidden}
- .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)}
- [data-theme="dark"] .gt-fix{box-shadow:4px 0 10px rgba(0,0,0,.35)}
- .gt-scroll{flex:1;overflow:hidden;background:var(--surface)}
- .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}
- .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}
- .gt-fix .gt-r{flex-direction:column;align-items:flex-start;justify-content:center;gap:3px;position:relative;padding-left:14px}
- .gt-fix .gt-h{padding-left:14px}
- /* 表格形式的「新报价」角标:斜切丝带,带 NEW 文案;冻结列左内边距统一 14px 给丝带让位,行内文字不被压 */
- .gt-new{position:absolute;left:0;top:0;width:34px;height:34px;overflow:hidden;z-index:3;pointer-events:none}
- .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}
- .gt-r i{font-style:normal;display:inline-block;text-align:right}
- .gt-h i{display:inline-block;text-align:right}
- /* 询价 / 订单卡片 */
- .qc{margin:0 16px 10px;padding:13px 14px;position:relative}
- .qc-top{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
- .qc-name{font-size:15px;font-weight:600;display:flex;align-items:center;gap:6px}
- .qc-sub{font-size:11px;color:var(--ink-3);margin-top:4px;font-family:"SF Mono",monospace}
- .qc-r{text-align:right;flex:none}
- .qc-time{font-size:10.5px;color:var(--ink-3);margin-top:5px;font-family:"SF Mono",monospace}
- .qc-meta{display:flex;gap:16px;margin-top:10px;font-size:12.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}
- .qc-meta em{font-style:normal;color:var(--ink-3);font-size:11px;margin-right:4px}
- .qc-open{margin-top:12px;border-top:1px dashed var(--line-2);padding-top:10px}
- .qt{display:grid;grid-template-columns:1.1fr .8fr .8fr .9fr;font-size:12px;font-variant-numeric:tabular-nums;align-items:center}
- .qt.h{color:var(--ink-3);font-size:10.5px;padding-bottom:7px}
- .qt.r{padding:9px 8px;margin:0 -8px;border-radius:8px}
- .qt.r:hover,.qt.r.hl{background:var(--brand-weak)}
- .qt .p{color:var(--brand);font-weight:600}
- .qt .t{color:var(--ink-3);font-size:10.5px;text-align:right}
- /* 「新」标记分工:卡片/行角标表明本单有新报价,行内红点指出具体是哪一条 */
- .qt span:first-child{position:relative;padding-left:12px}
- .qt .newdot{position:absolute;left:0;top:50%;margin:0;transform:translateY(-50%);vertical-align:0}
- .newdot{width:6px;height:6px;border-radius:50%;background:var(--danger);display:inline-block;margin-right:5px;vertical-align:1px}
- /* 时间线(流水) */
- .tl{padding:0 16px}
- .tl-i{display:flex;gap:12px;padding:14px 0;border-bottom:1px solid var(--line)}
- .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)}
- .tl-i .dot.out{background:var(--accent);box-shadow:0 0 0 3px var(--accent-weak)}
- .tl-i .c{flex:1}
- .tl-i .c b{font-size:14.5px;font-weight:550}
- .tl-i .c span{display:block;font-size:11px;color:var(--ink-3);margin-top:4px;font-family:"SF Mono",monospace}
- .tl-i .amt{font-size:15px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
- /* 设置项列表 */
- .menu{background:var(--surface);border-radius:14px;overflow:hidden;margin:0 16px 12px;box-shadow:var(--shadow-card)}
- [data-theme="dark"] .menu{border:1px solid var(--line)}
- .mi{display:flex;align-items:center;gap:12px;padding:15px 15px;border-bottom:1px solid var(--line);font-size:15px}
- .mi:last-child{border-bottom:0}
- .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}
- .mi .ib.am{background:var(--accent-weak);color:var(--accent)}
- .mi .tx{flex:1}
- .mi .tx em{font-style:normal;display:block;font-size:11.5px;color:var(--ink-3);margin-top:3px}
- .mi .rv{color:var(--ink-3);font-size:13.5px;display:flex;align-items:center;gap:4px}
- /* 开关 */
- .sw2{width:44px;height:26px;border-radius:14px;background:var(--line-2);position:relative;flex:none;transition:.2s}
- .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}
- .sw2.on{background:var(--brand)}
- .sw2.on::after{left:21px}
- /* ============================================================
- 消息中心
- ============================================================ */
- /* 未读徽标 */
- .nbadge{min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--danger);color:#fff;font-size:11px;font-weight:600;
- display:inline-flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums;flex:none;letter-spacing:0}
- .nbadge.dot{min-width:8px;width:8px;height:8px;padding:0;border-radius:50%}
- /* 分类聚合行 */
- .mcat{display:flex;align-items:center;gap:12px;padding:13px 15px;border-bottom:1px solid var(--line)}
- .mcat:last-child{border-bottom:0}
- .mcat .ic{width:42px;height:42px;border-radius:13px;display:flex;align-items:center;justify-content:center;flex:none}
- .mcat .ic .icn{width:20px;height:20px;stroke-width:1.8}
- .mcat .ic.c-brand{background:var(--brand-weak);color:var(--brand)}
- .mcat .ic.c-ok{background:var(--ok-weak);color:var(--ok)}
- .mcat .ic.c-accent{background:var(--accent-weak);color:var(--accent)}
- .mcat .ic.c-mute{background:var(--surface-3);color:var(--ink-3)}
- .mcat .ic.c-danger{background:var(--danger-weak);color:var(--danger)}
- .mcat .c{flex:1;min-width:0}
- .mcat .c b{display:block;font-size:15px;font-weight:600;letter-spacing:.02em}
- .mcat .c span{display:block;margin-top:4px;font-size:12.5px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
- .mcat .r{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;gap:8px;flex:none;align-self:stretch;padding-top:2px}
- .mcat .r em{font-style:normal;font-size:11px;color:var(--ink-4);white-space:nowrap;font-variant-numeric:tabular-nums}
- /* 分类内消息卡 */
- .msg{background:var(--surface);border-radius:12px;box-shadow:var(--shadow-card);padding:13px 15px 14px;margin:0 16px 10px}
- [data-theme="dark"] .msg{border:1px solid var(--line)}
- .msg .h{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
- .msg .h b{font-size:14.5px;font-weight:600;letter-spacing:.02em}
- .msg .h em{font-style:normal;font-size:11px;color:var(--ink-4);white-space:nowrap;flex:none;font-variant-numeric:tabular-nums}
- .msg p{margin-top:7px;font-size:13px;line-height:1.62;color:var(--ink-2);
- display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
- .msg.unread .h b{padding-left:13px;position:relative}
- .msg.unread .h b::before{content:"";position:absolute;left:0;top:6px;width:6px;height:6px;border-radius:50%;background:var(--danger)}
- .msg.read .h b,.msg.read p{color:var(--ink-3)}
- /* 消息详情 */
- .msgd{background:var(--surface);border-radius:14px;box-shadow:var(--shadow-card);margin:12px 16px 0;overflow:hidden}
- [data-theme="dark"] .msgd{border:1px solid var(--line)}
- .msgd .hd{padding:18px 18px 0}
- .msgd .hd h3{font-size:17px;font-weight:600;line-height:1.45;letter-spacing:.02em}
- .msgd .hd .t{margin-top:9px;font-size:11.5px;color:var(--ink-4);font-variant-numeric:tabular-nums;letter-spacing:.04em}
- .msgd .bd{padding:14px 18px 18px;font-size:14px;line-height:1.78;color:var(--ink-2)}
- .msgd .bd b{color:var(--ink-1);font-weight:600}
- .msgd .ft{border-top:1px solid var(--line);padding:14px 18px;display:flex;align-items:center;justify-content:space-between;font-size:14px;color:var(--brand);font-weight:600}
- /* 空态占位(与 05 / 02 同一套组件) */
- .emptyslot{flex:1;display:flex;align-items:center;justify-content:center;padding:0 0 204px}
- .emptybox{--il-a:#E7EDF6;--il-b:#D8E0EC;--il-c:#F8FAFE;
- display:flex;flex-direction:column;align-items:center;text-align:center;padding:0 32px}
- [data-theme="dark"] .emptybox{--il-a:#1F2A45;--il-b:#161F38;--il-c:#28355A}
- .emptybox .illu{width:120px;height:104px;display:block}
- .emptybox .etxt{margin-top:16px;font-size:14px;color:var(--ink-3);letter-spacing:.1em}
- .emptybox .esub{margin-top:8px;font-size:12px;line-height:1.65;color:var(--ink-4);max-width:236px}
- /* 数据表(App 内) */
- .dt{width:100%;border-collapse:collapse;font-size:12.5px}
- .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}
- .dt th:first-child{text-align:left}
- .dt td{padding:10px;text-align:right;border-top:1px solid var(--line);font-variant-numeric:tabular-nums}
- .dt td:first-child{text-align:left;color:var(--ink-2)}
- /* 键盘 */
- .kbd{background:var(--surface-2);padding:8px 6px 26px;display:grid;grid-template-columns:repeat(3,1fr);gap:7px}
- .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)}
- [data-theme="dark"] .kbd span{box-shadow:none;border:1px solid var(--line)}
- .kbd span.fn{background:transparent;box-shadow:none;font-size:15px;color:var(--ink-2)}
- .kbd span.ok{background:var(--brand);color:var(--on-brand);font-size:16px}
- /* 对照页专用 */
- .pair{display:grid;grid-template-columns:390px 390px;gap:36px;justify-content:start}
- .pair-lb{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--canvas-mute);margin-bottom:12px;letter-spacing:.08em}
- .pair-lb i{width:12px;height:12px;border-radius:3px;border:1px solid var(--canvas-line);flex:none}
- /* 角标占位:有角标的卡片顶部让出空间,避免压住标的名 */
- .pos:has(.corner) .pos-hd{padding-top:15px}
- .qc:has(.corner){padding-top:26px}
- /* 与 02 / 03 / 04 同步的页面骨架件 */
- .bellwrap{position:relative;display:inline-flex;flex:none}
- .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}
- /* 两行顶栏(标题 + 分段控件)的标题行:标题左、铃铛右 */
- .apphd{display:flex;align-items:center;justify-content:space-between}
- /* 组件规格卡 */
- .spec-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px;align-items:start}
- .specbox{background:var(--canvas-2);border:1px solid var(--canvas-line);border-radius:12px;overflow:hidden;display:flex;flex-direction:column}
- .specbox h5{font-size:11px;font-weight:600;letter-spacing:.14em;color:var(--canvas-mute);padding:16px 18px 0;text-transform:uppercase}
- .specbox .stage{margin:13px 13px 0;padding:13px 0;border-radius:12px;background:var(--app-bg);border:1px dashed var(--canvas-line)}
- .specbox .stage.tight{padding:0;overflow:hidden}
- .specbox .dims{display:flex;gap:7px;flex-wrap:wrap;padding:13px 18px 0}
- .specbox .dims span{font-size:10.5px;padding:3px 8px;border-radius:5px;background:var(--surface-3);color:var(--canvas-mute);font-family:"SF Mono",ui-monospace,Menlo,monospace}
- .specbox .note{padding:12px 18px 16px;margin-top:auto;font-size:11.5px;line-height:1.72;color:var(--canvas-mute)}
- .specbox .note b{color:var(--canvas-ink);font-weight:550}
- .stlabel{font-size:10.5px;color:var(--canvas-mute);letter-spacing:.06em;padding:0 16px 6px}
- /* ============================================================
- 本图纸新增 A · 底部 Tab 未读角标
- ============================================================ */
- .tb .tbi{position:relative;display:inline-flex;flex:none}
- .tb .tbi .nbadge{position:absolute;top:-6px;left:12px;height:16px;min-width:16px;padding:0 4.5px;border-radius:8px;font-size:10.5px;box-shadow:0 0 0 2px var(--surface)}
- .tb .tbi .nbadge.dot{min-width:8px;width:8px;height:8px;padding:0;left:14px;top:-2px}
- /* 本图纸新增 B · 消息中心一级页顶栏(Tab 根页,无返回键) */
- .mhd{display:flex;align-items:center;justify-content:space-between;padding:4px 20px 12px;flex:none}
- .mhd h1{font-size:22px;font-weight:650;letter-spacing:.02em}
- .mhd .act{font-size:13.5px;color:var(--brand);display:flex;align-items:center;gap:5px;font-weight:550}
- .mhd .act .icn{width:15px;height:15px;stroke-width:2}
- .mhd .act.off{color:var(--ink-4);font-weight:500}
- /* 本图纸新增 C · 通知权限提示条(消息中心顶部常驻) */
- .pbar{margin:0 16px 12px;border-radius:12px;padding:11px 12px;display:flex;align-items:center;gap:10px;background:var(--warn-weak)}
- .pbar .pi{width:28px;height:28px;border-radius:9px;flex:none;display:flex;align-items:center;justify-content:center;background:var(--warn);color:#fff}
- [data-theme="dark"] .pbar .pi{color:#1B1206}
- .pbar .pi .icn{width:15px;height:15px;stroke-width:1.9}
- .pbar .tx{flex:1;min-width:0;font-size:11.5px;line-height:1.5;color:var(--ink-2)}
- .pbar .tx b{display:block;font-size:13px;font-weight:600;color:var(--warn);margin-bottom:2px;letter-spacing:.02em}
- .pbar .go{flex:none;height:28px;padding:0 11px;border-radius:8px;background:var(--warn);color:#fff;font-size:12.5px;font-weight:600;display:flex;align-items:center}
- [data-theme="dark"] .pbar .go{color:#1B1206}
- .pbar.info{background:var(--brand-weak)}
- .pbar.info .pi{background:var(--brand);color:var(--on-brand)}
- .pbar.info .tx b{color:var(--brand)}
- .pbar.info .go{background:var(--brand);color:var(--on-brand)}
- /* 本图纸新增 D · 推送权限前置引导弹框 */
- .perm{width:100%;background:var(--surface);border-radius:20px;box-shadow:var(--shadow-pop);padding:26px 20px 18px}
- [data-theme="dark"] .perm{border:1px solid var(--line-2)}
- .perm .cap-ic{width:58px;height:58px;border-radius:18px;margin:0 auto;display:flex;align-items:center;justify-content:center;color:#fff;position:relative;
- background:linear-gradient(150deg,var(--brand),var(--brand-2));box-shadow:0 10px 24px rgba(27,79,216,.30)}
- [data-theme="dark"] .perm .cap-ic{color:#05122E;box-shadow:0 10px 24px rgba(91,140,255,.24)}
- .perm .cap-ic .icn{width:28px;height:28px;stroke-width:1.7}
- .perm .cap-ic .nbadge{position:absolute;top:-5px;right:-5px;box-shadow:0 0 0 3px var(--surface)}
- .perm h3{margin-top:16px;text-align:center;font-size:18px;font-weight:650;letter-spacing:.02em;line-height:1.4}
- .perm .sub{margin-top:9px;text-align:center;font-size:12.5px;line-height:1.62;color:var(--ink-2)}
- .perm .pts{margin-top:18px;display:flex;flex-direction:column;gap:13px}
- .perm .pt{display:flex;gap:10px;align-items:flex-start}
- .perm .pt .pi{width:28px;height:28px;border-radius:9px;flex:none;display:flex;align-items:center;justify-content:center;background:var(--brand-weak);color:var(--brand)}
- .perm .pt .pi.am{background:var(--accent-weak);color:var(--accent)}
- .perm .pt .pi.dg{background:var(--danger-weak);color:var(--danger)}
- .perm .pt .pi .icn{width:15px;height:15px;stroke-width:1.9}
- .perm .pt b{display:block;font-size:13.5px;font-weight:600;letter-spacing:.01em}
- .perm .pt span{display:block;margin-top:3px;font-size:11.5px;line-height:1.55;color:var(--ink-3)}
- .perm .acts{margin-top:22px;display:flex;flex-direction:column;gap:9px}
- .perm .foot{margin-top:14px;text-align:center;font-size:11px;color:var(--ink-4);line-height:1.62}
- /* 去设置弹框里的路径示意 */
- .path{margin-top:14px;background:var(--surface-2);border-radius:12px;padding:12px 13px;display:flex;flex-direction:column;gap:9px}
- .path .st2{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ink-1)}
- .path .st2 i{width:20px;height:20px;border-radius:6px;flex:none;background:var(--surface-3);color:var(--ink-3);font-style:normal;font-size:10.5px;display:flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums}
- .path .st2 b{font-weight:600}
- .path .st2 .icn{width:13px;height:13px;color:var(--ink-4);margin-left:auto}
- /* 本图纸新增 E · iOS 系统权限弹框(系统绘制,不随 App 主题,只随系统外观) */
- .iosalert{width:270px;border-radius:14px;overflow:hidden;text-align:center;color:#000;
- background:rgba(248,248,248,.94);box-shadow:0 24px 64px rgba(0,0,0,.34)}
- [data-theme="dark"] .iosalert{background:rgba(44,44,46,.94);color:#fff}
- .iosalert .ab{padding:19px 16px 16px}
- .iosalert .ab h4{font-size:16px;font-weight:600;line-height:1.34;letter-spacing:.01em}
- .iosalert .ab p{margin-top:5px;font-size:12.5px;line-height:1.42;opacity:.92}
- .iosalert .arow{display:flex;border-top:1px solid rgba(60,60,67,.24)}
- [data-theme="dark"] .iosalert .arow{border-top-color:rgba(200,200,210,.22)}
- .iosalert .arow span{flex:1;padding:11px 0;font-size:16.5px;color:#007AFF;letter-spacing:.01em}
- [data-theme="dark"] .iosalert .arow span{color:#0A84FF}
- .iosalert .arow span+span{border-left:1px solid rgba(60,60,67,.24);font-weight:600}
- [data-theme="dark"] .iosalert .arow span+span{border-left-color:rgba(200,200,210,.22)}
- .sysnote{position:absolute;left:0;right:0;bottom:26px;text-align:center;z-index:41}
- .sysnote span{display:inline-block;padding:5px 12px;border-radius:9px;background:rgba(8,14,28,.62);color:rgba(255,255,255,.86);font-size:10.5px;letter-spacing:.06em}
- /* 本图纸新增 F · 锁屏与推送横幅 */
- .lockscr{position:absolute;inset:0;display:flex;flex-direction:column;overflow:hidden;
- background:linear-gradient(168deg,#22314F 0%,#101a30 46%,#1A2440 100%)}
- .lockscr::after{content:"";position:absolute;right:-80px;top:-90px;width:320px;height:320px;border-radius:50%;background:radial-gradient(circle,rgba(91,140,255,.26) 0%,rgba(91,140,255,.06) 55%,rgba(91,140,255,0) 72%)}
- .lockscr .lt{padding-top:56px;text-align:center;color:#fff;position:relative;z-index:2}
- .lockscr .lt .d{font-size:14px;opacity:.85;letter-spacing:.04em}
- .lockscr .lt .h{margin-top:2px;font-size:76px;font-weight:250;line-height:1.06;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
- .lockscr .lk{margin:14px auto 0;width:20px;height:20px;opacity:.8;color:#fff}
- .pushwrap{margin-top:auto;padding-bottom:30px;position:relative;z-index:2}
- .push{margin:0 11px 9px;border-radius:17px;padding:10px 13px 12px;color:#fff;position:relative;
- background:rgba(255,255,255,.17);border:1px solid rgba(255,255,255,.15)}
- .push .ph{display:flex;align-items:center;gap:7px;font-size:11.5px;color:rgba(255,255,255,.76)}
- .push .ph .ai{width:19px;height:19px;border-radius:5px;flex:none;position:relative;background:linear-gradient(145deg,#2A62F0,#123CAE)}
- .push .ph .ai::before{content:"";position:absolute;inset:5px 4.5px;border:1px solid rgba(255,255,255,.94);border-radius:1px;border-bottom-width:2px}
- .push .ph em{font-style:normal;margin-left:auto;font-variant-numeric:tabular-nums}
- .push b{display:block;margin-top:6px;font-size:14px;font-weight:600;letter-spacing:.01em}
- .push p{margin-top:3px;font-size:12.5px;line-height:1.45;color:rgba(255,255,255,.92);
- display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
- .push .cut{color:rgba(255,255,255,.55)}
- .push.stack::before{content:"";position:absolute;left:8px;right:8px;top:100%;margin-top:-3px;height:9px;border-radius:0 0 14px 14px;background:rgba(255,255,255,.13)}
- .push.stack::after{content:"";position:absolute;left:17px;right:17px;top:100%;margin-top:4px;height:9px;border-radius:0 0 12px 12px;background:rgba(255,255,255,.085)}
- .pushtag{margin:0 11px 8px;font-size:10.5px;color:rgba(255,255,255,.58);letter-spacing:.08em}
- /* 场景映射表:分类色点 */
- .cdot{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
- .cdot i{width:7px;height:7px;border-radius:2px;flex:none}
- /* ==== v1.3 · 09 专用 BEGIN ==== */
- /* 消息中心一级页(代码 MessageCenterScreen):appbar 右侧「全部已读」文字动作 */
- .mhd{display:flex;align-items:center;justify-content:space-between}
- .mhd .ma{display:flex;align-items:center;gap:4px;font-size:13.5px;color:var(--brand);font-weight:500}
- .mhd .ma .icn{width:15px;height:15px}
- .mhd .ma.off{color:var(--ink-4)}
- /* 分类行(代码 CategoryRow):42 图标底 r13 · 名称 15/600 · 摘要 12.5 单行 · 时间 11 · 红点 */
- .mcats{margin:12px 16px 0;background:var(--surface);border-radius:14px;box-shadow:var(--shadow-card);overflow:hidden}
- [data-theme="dark"] .mcats{border:1px solid var(--line)}
- .mcat{display:flex;align-items:center;gap:12px;padding:13px 15px;border-bottom:1px solid var(--line)}
- .mcat:last-child{border-bottom:0}
- .mcat .ic{width:42px;height:42px;border-radius:13px;display:flex;align-items:center;justify-content:center;flex:none}
- .mcat .ic .icn{width:20px;height:20px}
- .mcat .ic.b{background:var(--brand-weak);color:var(--brand)} .mcat .ic.o{background:var(--ok-weak);color:var(--ok)}
- .mcat .ic.d{background:var(--danger-weak);color:var(--danger)} .mcat .ic.a{background:var(--accent-weak);color:var(--accent)}
- .mcat .ic.m{background:var(--surface-3);color:var(--ink-3)}
- .mcat .tx{flex:1;min-width:0}
- .mcat .tx b{display:block;font-size:15px;font-weight:600;letter-spacing:.02em}
- .mcat .tx span{display:block;margin-top:4px;font-size:12.5px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
- .mcat .rt{display:flex;flex-direction:column;align-items:flex-end;gap:8px;flex:none;align-self:stretch;justify-content:flex-start;padding-top:2px}
- .mcat .rt em{font-style:normal;font-size:11px;color:var(--ink-4);font-family:var(--font-num)}
- .mcat .rt i{width:8px;height:8px;border-radius:50%;background:var(--danger)}
- /* 消息卡片(代码 MessageCard) */
- .msg .h b{display:flex;align-items:center;gap:6px}
- .msg .h b .tag{font-size:10.5px}
- .msg .h em{font-family:var(--font-num)}
- .msg p{-webkit-line-clamp:2;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}
- /* 详情(代码 MessageDetailScreen) */
- .msgd .hd .t{font-family:var(--font-mono);color:var(--ink-3)}
- .msgd .ft .icn{width:16px;height:16px}
- /* 未授权提示条(代码 PermissionBanner) */
- .pbanner{margin:12px 16px 0;border-radius:12px;padding:11px 12px;display:flex;align-items:center;gap:10px;background:var(--warn-weak)}
- .pbanner .pi{width:28px;height:28px;border-radius:9px;background:var(--warn);color:#fff;display:flex;align-items:center;justify-content:center;flex:none}
- .pbanner .pi .icn{width:15px;height:15px;stroke-width:1.9}
- .pbanner .tx{flex:1}
- .pbanner .tx b{display:block;font-size:13px;font-weight:600;color:var(--warn);margin-bottom:2px}
- .pbanner .tx span{display:block;font-size:11.5px;line-height:17px;color:var(--ink-2)}
- .pbanner .go{height:28px;padding:0 11px;border-radius:8px;background:var(--warn);color:#fff;font-size:12.5px;font-weight:600;display:flex;align-items:center;flex:none}
- [data-theme="dark"] .pbanner .pi,[data-theme="dark"] .pbanner .go{color:#05122E}
- /* 推送引导(代码 PushPromptDialog):58 渐变图标 + 红点、标题 18、一条价值点、两枚竖排按钮 */
- .perm .cap-ic.brand{background:linear-gradient(150deg,var(--brand),var(--brand-2))}
- .perm .cap-ic .rdot2{position:absolute;top:-4px;right:-4px;width:14px;height:14px;border-radius:7px;background:var(--surface);display:flex;align-items:center;justify-content:center}
- .perm .cap-ic .rdot2 i{width:8px;height:8px;border-radius:4px;background:var(--danger)}
- .perm .pt1{margin-top:18px;display:flex;gap:10px;align-items:center}
- .perm .pt1 .pi{width:28px;height:28px;border-radius:9px;background:var(--brand-weak);color:var(--brand);display:flex;align-items:center;justify-content:center;flex:none}
- .perm .pt1 .pi .icn{width:15px;height:15px;stroke-width:1.9}
- .perm .pt1 b{font-size:13.5px;font-weight:600}
- .perm .path{margin-top:14px;background:var(--surface-2);border-radius:12px;padding:12px 13px;display:flex;flex-direction:column;gap:9px}
- .perm .path .s{display:flex;align-items:center;gap:9px;font-size:13px}
- .perm .path .s i{width:20px;height:20px;border-radius:6px;background:var(--surface-3);display:flex;align-items:center;justify-content:center;font-style:normal;font-size:10.5px;color:var(--ink-3);font-family:var(--font-num);flex:none}
- .perm .path .s b{font-weight:600}
- .perm .path .s .icn{margin-left:auto;width:14px;height:14px;color:var(--ink-4)}
- .perm .path .s .icn.ok{color:var(--ok)}
- .push .ph .ai2{width:19px;height:19px;border-radius:5px;flex:none}
- /* ==== v1.3 · 09 专用 END ==== */
- /* ==== v1.3 公共覆盖 BEGIN · 2026-10-14 按代码现状对齐(同一段注入全部图纸,改动从清单目录的 common-v13.css 同步) ==== */
- /* 字体:数值走 Inter(代码 NumText),代码 / 编号走 iOS 的 Menlo(代码 MonoText),正文仍是系统字 */
- @font-face{font-family:"Inter";src:url("assets/fonts/Inter-Regular.subset.otf") format("opentype");font-weight:400}
- @font-face{font-family:"Inter";src:url("assets/fonts/Inter-Medium.subset.otf") format("opentype");font-weight:500}
- @font-face{font-family:"Inter";src:url("assets/fonts/Inter-SemiBold.subset.otf") format("opentype");font-weight:600}
- @font-face{font-family:"Inter";src:url("assets/fonts/Inter-Bold.subset.otf") format("opentype");font-weight:700}
- :root{--font-num:"Inter","PingFang SC","Hiragino Sans GB",system-ui,sans-serif;--font-mono:Menlo,"SF Mono",ui-monospace,monospace}
- .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)}
- .statusbar .num{font-family:inherit}
- .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)}
- /* 底栏:四个 Tab(票据 / 账户 / 消息 / 我的);消息 Tab 只有红点,后端不给条数 */
- .tb .tbi{position:relative;display:inline-flex;flex:none}
- .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)}
- /* 二级页导航栏:iOS 系统导航栏,表面色底、居中 17 / 600 标题、品牌色返回箭头、无分隔线(H5 标题靠左,见 00 规范) */
- .navbar{height:44px;background:var(--surface)}
- .statusbar:has(+ .navbar){background:var(--surface)}
- .navbar h2{font-size:17px;font-weight:600;letter-spacing:0}
- .navbar .bk{color:var(--brand)}
- .navbar .bk .icn{width:22px;height:22px;stroke-width:2.1}
- /* 图注里的身份标记:本期未上线 / v1.3 新增 / 平台限定 */
- .cap-flags{display:inline-flex;gap:6px;margin-left:8px;vertical-align:1px}
- .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)}
- .cap-flag.off{color:var(--accent);border-color:var(--accent-line);background:var(--accent-weak)}
- .cap-flag.new{color:var(--brand);border-color:var(--brand-line);background:var(--brand-weak)}
- .cap-flag.plat{color:var(--ok);border-color:rgba(15,123,79,.35);background:var(--ok-weak)}
- /* 实心底上的文字(角标 / 实心标签 / 危险按钮):浅色白字,深色下底色被提亮、改配近黑字(代码 $onFill / $onDanger) */
- [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}
- /* 表格首列的迷你角标(代码 CornerBadge variant="mini"):9 / 600、左右 4 */
- .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}
- .mb.d{background:var(--danger)} .mb.a{background:var(--accent)} .mb.m{background:var(--ink-3)} .mb.b{background:var(--brand)}
- /* Toast:按内容定宽、最宽 290(代码 maxW 290),单行放得下就不折行;位置 top 76% */
- .toast{width:max-content;max-width:290px}
- /* ---- 通用组件(代码 components/ 的对应件) ---- */
- /* 资金看板右上「>」用 lg 档 */
- .hero .arrow{width:22px;height:22px}
- /* 只读行:InfoRow(无分隔线)/ FieldRow(带分隔线,.frow),左 ink2 右 Inter */
- .irow{display:flex;justify-content:space-between;align-items:center;padding:14px 15px;font-size:14.5px}
- .irow span{color:var(--ink-2)}
- .irow b{font-weight:400;font-family:var(--font-num);font-variant-numeric:tabular-nums}
- .irow b.dg{color:var(--danger)}
- .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}
- .frow>span{color:var(--ink-2);display:flex;align-items:center;gap:6px}
- .frow>b{font-weight:400;font-family:var(--font-num);font-variant-numeric:tabular-nums;text-align:right}
- .frow.hl{background:var(--brand-weak)}
- .frow.hl>span,.frow.hl>b{color:var(--brand)}
- .frow.hl>b{font-weight:600}
- .frow.last,.frow:last-child{border-bottom:0}
- /* 字段说明 ⓘ(代码 IconButton name="info",ink4 14) */
- .xi{width:14px;height:14px;color:var(--ink-4);flex:none}
- /* 弹窗里的证券行(代码在前)与行情行 */
- .secl{display:flex;align-items:center;gap:7px}
- .secl .mono{font-size:12px;color:var(--ink-3)}
- .secl b{font-size:14.5px;font-weight:600}
- .phint{display:flex;gap:14px;margin-top:9px;font-size:12px;color:var(--ink-3)}
- .phint b{font-weight:400;font-family:var(--font-num);font-variant-numeric:tabular-nums}
- .field .num{font-family:var(--font-num)}
- .errtip .icn{width:13px;height:13px}
- .errtip.r{justify-content:flex-end}
- /* 时间片块(代码 TradingWindowDialog) */
- .twin{border-radius:10px;background:var(--surface-2);padding:13px 0;display:flex;flex-direction:column;align-items:center;gap:5px}
- .twin span{font-size:13px;color:var(--ink-3)}
- .twin b{font-size:17px;font-weight:600;font-family:var(--font-num)}
- /* 弹窗标题区(代码 DialogHeading):图标圆 44 + 标题 16.5 / 600 + 说明 14 / ink2 / 行高 23 */
- .dicon{width:44px;height:44px;border-radius:22px;display:flex;align-items:center;justify-content:center;margin:0 auto 6px}
- .dicon.warn{background:var(--warn-weak);color:var(--warn)}
- .dicon.danger{background:var(--danger-weak);color:var(--danger)}
- .dicon.ok{background:var(--ok-weak);color:var(--ok)}
- .dicon.brand{background:var(--brand-weak);color:var(--brand)}
- .dlg-hd .dsc{margin-top:6px;font-size:14px;color:var(--ink-2);line-height:23px}
- .dlg-ft span{font-weight:500}
- .dlg-ft span.off{color:var(--brand);opacity:.4}
- .dlg-ft span.dg{color:var(--danger)}
- /* 底部面板标题行(代码 SheetFrame 的四套头):select 左标题 + 右 × / centered 居中无关闭 / centered-close 居中 + 右 × / filter 左大标题 + 右 × */
- .shd{display:flex;align-items:center;justify-content:space-between;padding:16px 18px 6px}
- .shd b{font-size:15.5px;font-weight:600}
- .shd .icn{color:var(--ink-3)}
- .shd-c{padding:16px 18px 4px;text-align:center;position:relative}
- .shd-c b{font-size:16.5px;font-weight:600}
- .shd-c .icn{position:absolute;right:18px;top:17px;color:var(--ink-3)}
- /* 单选面板的选项行(代码 SelectSheet) */
- .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)}
- .opt-row .icn{width:14px;height:14px;color:var(--brand)}
- .opt-row b{font-weight:400;color:var(--ink-1)}
- .opt-row.sel b{font-weight:600}
- .opt-row:last-child{border-bottom:0}
- /* 叠在另一层弹窗之上的第二层遮罩 */
- .scrim.top2{z-index:45}
- /* 列表尾的文字入口(历史票据 > 等) */
- .listfoot{display:flex;justify-content:center;align-items:center;gap:3px;padding:12px 0;font-size:13px;color:var(--brand)}
- .listfoot .icn{width:13px;height:13px}
- /* 分组标题(代码 Section 的标题:12 / ink3,上 16 下 8) */
- .gtitle{padding:16px 16px 8px}
- /* 转圈(代码 ProgressRing,下拉刷新 / 上拉加载 / 检索在搜共用) */
- @keyframes hh-spin{from{transform:rotate(-90deg)}to{transform:rotate(270deg)}}
- .ring{width:16px;height:16px;position:relative;flex:none;display:inline-block}
- .ring>svg{width:100%;height:100%;transform:rotate(-90deg);display:block}
- .ring .trk{fill:none;stroke:var(--line-2);stroke-width:2.8}
- .ring .bar{fill:none;stroke:var(--brand);stroke-width:2.8;stroke-linecap:round}
- .spin{animation:hh-spin .9s linear infinite}
- .ring.lg{width:24px;height:24px}
- .ring.lg .trk,.ring.lg .bar{stroke-width:2.2}
- /* 空态(代码 EmptyState):整页 120×104 / sm 72×62 / row 30×26 三档,插画取色走 --il-* */
- .emptyslot{flex:1;display:flex;align-items:center;justify-content:center;padding:0 0 204px}
- .emptybox{--il-a:#E7EDF6;--il-b:#D8E0EC;--il-c:#F8FAFE;display:flex;flex-direction:column;align-items:center;text-align:center;padding:0 32px}
- [data-theme="dark"] .emptybox{--il-a:#1F2A45;--il-b:#161F38;--il-c:#28355A}
- .emptybox .illu{width:120px;height:104px;display:block}
- .emptybox .etxt{margin-top:16px;font-size:14px;color:var(--ink-3);letter-spacing:.1em}
- .emptybox .esub{margin-top:8px;font-size:12px;line-height:1.65;color:var(--ink-4);max-width:236px}
- .emptybox .eact{margin-top:20px}
- .emptybox.sm{padding:26px 20px}
- .emptybox.sm .illu{width:72px;height:62px}
- .emptybox.sm .etxt{margin-top:11px;font-size:12.5px;letter-spacing:.08em}
- .emptybox.row{flex-direction:row;align-items:center;justify-content:center;gap:10px;padding:9px 0}
- .emptybox.row .illu{width:30px;height:26px}
- .emptybox.row .etxt{margin-top:0;font-size:12.5px;letter-spacing:.06em}
- /* 状态点「已提交」档(代码 StatusSemantic submitted:未报 / 待报 / 待审批):品牌色空心 */
- .st.sub{color:var(--brand)}
- .st.sub i{background:transparent;border:1.6px solid currentColor}
- /* ---- 持仓卡片(代码 PositionCard)与通用表格(代码 DataTable) ---- */
- /* 持仓卡片:多枚角标并排;有角标时顶部只让到 15;估值后的币种小一号 */
- .pos .corners{position:absolute;left:0;top:0;display:flex;z-index:3}
- .pos .corners .corner{position:static}
- .pos:has(.corners) .pos-hd{padding-top:2px}
- .pos-val b small{font-size:13.5px;font-weight:400;color:var(--ink-2)}
- .pos-code b{font-weight:400;color:var(--accent)}
- /* 信息格五项一行:整行按宽度降档 12.5 / 11.5 / 10.5,最小档仍放不下时成对的值拆成两行(i) */
- .pos-grid.f5{display:flex;flex-wrap:wrap;column-gap:6px;row-gap:10px}
- .pos-grid.f5>div{flex:1 0 auto}
- .pos-grid.f5 div span{font-size:10px;letter-spacing:.02em}
- .pos-grid.f5 div b{font-size:12.5px;font-weight:500}
- .pos-grid.f5 div b em{font-size:11px;font-weight:400}
- .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}
- .pos-grid.f5.s115 div b{font-size:11.5px}.pos-grid.f5.s115 div b em{font-size:10px}
- .pos-grid.f5.s105 div b{font-size:10.5px}.pos-grid.f5.s105 div b em{font-size:9px}
- .pos-ops span.pri,.pos-ops span.hot{font-weight:500}
- /* 表格模式(DataTable):表头 36 / 行 52、单元格 12、列距 14,前两列冻结带右投影 */
- .ptab{background:var(--surface);overflow:hidden}
- .ptab .r{display:flex;align-items:stretch;height:52px;border-bottom:1px solid var(--line);font-size:12px;white-space:nowrap}
- .ptab .r.h{height:36px;background:var(--surface-2);font-size:10.5px;letter-spacing:.02em;color:var(--ink-3)}
- .ptab .fz,.ptab .sc{display:flex;align-items:center;gap:14px;flex:none}
- .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)}
- [data-theme="dark"] .ptab .fz{box-shadow:4px 0 10px rgba(0,0,0,.35)}
- .ptab .r.h .fz{background:var(--surface-2)}
- .ptab .c{flex:none}
- .ptab .c.n{text-align:right;font-family:var(--font-num);font-variant-numeric:tabular-nums}
- .ptab .r.h .c.n{font-family:inherit}
- .ptab .c.n .sub{display:block;font-size:11px;color:var(--ink-3);margin-top:2px}
- .ptab .cat b{display:block;font-size:12px;font-weight:600}
- .ptab .cat b.db{color:var(--accent)}
- .ptab .cat .mbs{display:flex;gap:3px;margin-top:3px}
- .ptab .scd b{display:block;font-size:12px;font-weight:400}
- .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}
- .ptab .scd .cmark{width:13px;height:13px;font-size:8.5px}
- .ptab .opsrow{border-bottom:1px solid var(--line)}
- .ptab .opsrow .pos-ops{border-top:0}
- .ptab .r.sel,.ptab .r.sel .fz{background:var(--brand-weak)}
- .ptab .xrow{background:var(--surface-2);border-bottom:1px solid var(--line)}
- /* ---- 卡片 / 表格切换(代码 ViewModeToggle) ---- */
- .viewtog{display:inline-flex;padding:2px;background:var(--surface-2);border-radius:8px;gap:2px;flex:none;position:relative}
- .viewtog.sep{margin-left:4px}
- .viewtog.sep::before{content:"";position:absolute;left:-7px;top:2px;bottom:2px;width:1px;background:var(--line-2)}
- .viewtog span{width:28px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:6px;color:var(--ink-3)}
- .viewtog span.on{background:var(--surface);color:var(--brand);box-shadow:var(--shadow-card)}
- [data-theme="dark"] .viewtog span.on{background:var(--surface-3)}
- .viewtog .icn{width:15px;height:15px;stroke-width:1.8}
- /* ==== v1.3 公共覆盖 END ==== */
- </style>
- </head>
- <body>
- <svg width="0" height="0" style="position:absolute" aria-hidden="true"><defs>
- <g id="i-back"><polyline points="15 4 7 12 15 20"/></g>
- <g id="i-right"><polyline points="9 4 17 12 9 20"/></g>
- <g id="i-down"><polyline points="5 9 12 16 19 9"/></g>
- <g id="i-up"><polyline points="5 15 12 8 19 15"/></g>
- <g id="i-search"><circle cx="11" cy="11" r="6.5"/><line x1="16" y1="16" x2="21" y2="21"/></g>
- <g id="i-x"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></g>
- <g id="i-check"><polyline points="4 12.5 9.5 18 20 6"/></g>
- <g id="i-plus"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></g>
- <g id="i-minus"><line x1="5" y1="12" x2="19" y2="12"/></g>
- <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>
- <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>
- <g id="i-clock"><circle cx="12" cy="12" r="8.5"/><polyline points="12 7 12 12 15.5 14"/></g>
- <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>
- <g id="i-filter"><path d="M4 6h16l-6.2 7.4V19l-3.6-2v-3.6z"/></g>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <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>
- <g id="i-fee"><circle cx="12" cy="12" r="8.5"/><path d="M9.5 9h5M9.5 12h5M12 9v8"/></g>
- <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>
- <g id="i-lang"><path d="M2.8 6.1h8.4"/><path d="M7 4.2v1.9"/><path d="M9.4 6.1c-.4 4.1-2.6 6.9-6.2 8.4"/><path d="M5.4 9.4c1 2.2 2.7 3.8 5.1 4.7"/><path d="M12.4 20.2 16.4 9.6l4 10.6"/><line x1="13.7" y1="16.9" x2="19.1" y2="16.9"/></g>
- <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>
- <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>
- <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>
- <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>
- <g id="i-sort"><polyline points="7 9 10 6 13 9"/><polyline points="7 15 10 18 13 15"/></g>
- <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>
- <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>
- <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>
- <g id="i-megaphone"><path d="M4 10.2v3.6a1.8 1.8 0 0 0 1.8 1.8H8l6.6 3.9a1 1 0 0 0 1.5-.86V5.36a1 1 0 0 0-1.5-.86L8 8.4H5.8A1.8 1.8 0 0 0 4 10.2Z"/><path d="M19 9.6a3.6 3.6 0 0 1 0 4.8"/><path d="M8 15.6v2.6a2 2 0 0 0 2 2h.4"/></g>
- <g id="i-faceid"><path d="M4 9.2V6.6A2.6 2.6 0 0 1 6.6 4H9.2"/><path d="M14.8 4h2.6A2.6 2.6 0 0 1 20 6.6v2.6"/><path d="M20 14.8v2.6a2.6 2.6 0 0 1-2.6 2.6h-2.6"/><path d="M9.2 20H6.6A2.6 2.6 0 0 1 4 17.4v-2.6"/><line x1="9.1" y1="9.6" x2="9.1" y2="11.2"/><line x1="14.9" y1="9.6" x2="14.9" y2="11.2"/><path d="M12 9.4v3.9a.9.9 0 0 1-.9.9h-.5"/><path d="M9.3 15.9c1.7 1.4 3.7 1.4 5.4 0"/></g>
- <g id="i-touchid"><path d="M2.9 9.9A9.7 9.7 0 0 1 12 3.2a9.7 9.7 0 0 1 9.1 6.7"/><path d="M5.9 13.1a6.1 6.1 0 0 1 12.2 0v1.3"/><path d="M9 13.1a3 3 0 0 1 6 0v2.6a7.4 7.4 0 0 1-.5 2.7"/><path d="M12 13v3.9a10 10 0 0 1-.9 4.1"/><path d="M6 17.9A9.6 9.6 0 0 1 5.9 16.4"/><path d="M18 16.5a11.6 11.6 0 0 1-.6 3.2"/></g>
- <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>
- <g id="i-cardview"><rect x="3.5" y="4" width="17" height="7" rx="2"/><rect x="3.5" y="13" width="17" height="7" rx="2"/></g>
- <g id="i-tableview"><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"/></g>
- <g id="i-megaphone"><path d="M4 10.2v3.6a1.8 1.8 0 0 0 1.8 1.8H8l6.6 3.9a1 1 0 0 0 1.5-.86V5.36a1 1 0 0 0-1.5-.86L8 8.4H5.8A1.8 1.8 0 0 0 4 10.2Z"/><path d="M19 9.6a3.6 3.6 0 0 1 0 4.8"/><path d="M8 15.6v2.6a2 2 0 0 0 2 2h.4"/></g>
- <g id="i-belloff"><path d="M18 16V11a6 6 0 0 0-7.7-5.75"/><path d="M6.25 8.5A6 6 0 0 0 6 11v5l-1.6 2.5h13.1"/><path d="M9.8 21a2.4 2.4 0 0 0 4.4 0"/><line x1="3.6" y1="3.2" x2="20.4" y2="20.8"/></g>
- <g id="i-check2"><polyline points="2.5 12.6 6.8 17 14.4 7.2"/><polyline points="10.6 15.6 12.4 17.4 21.2 6.4"/></g>
- <g id="i-settings"><circle cx="12" cy="12" r="3.1"/><path d="M12 2.6h0a1.9 1.9 0 0 1 1.9 1.9v.42a1.6 1.6 0 0 0 .97 1.46 1.6 1.6 0 0 0 1.76-.32l.3-.3a1.9 1.9 0 1 1 2.68 2.68l-.3.3a1.6 1.6 0 0 0-.32 1.76 1.6 1.6 0 0 0 1.46.97h.42a1.9 1.9 0 1 1 0 3.8h-.42a1.6 1.6 0 0 0-1.46.97 1.6 1.6 0 0 0 .32 1.76l.3.3a1.9 1.9 0 1 1-2.68 2.68l-.3-.3a1.6 1.6 0 0 0-1.76-.32 1.6 1.6 0 0 0-.97 1.46v.42a1.9 1.9 0 1 1-3.8 0v-.42a1.6 1.6 0 0 0-.97-1.46 1.6 1.6 0 0 0-1.76.32l-.3.3a1.9 1.9 0 1 1-2.68-2.68l.3-.3a1.6 1.6 0 0 0 .32-1.76 1.6 1.6 0 0 0-1.46-.97H4.5a1.9 1.9 0 1 1 0-3.8h.42a1.6 1.6 0 0 0 1.46-.97 1.6 1.6 0 0 0-.32-1.76l-.3-.3a1.9 1.9 0 1 1 2.68-2.68l.3.3a1.6 1.6 0 0 0 1.76.32h.05a1.6 1.6 0 0 0 .97-1.46V4.5A1.9 1.9 0 0 1 12 2.6Z"/></g>
- <g id="i-inbox"><path d="M3.5 13.5h4l1.4 2.4h6.2l1.4-2.4h4"/><path d="M6 4.5h12l3 9v4.5a2.5 2.5 0 0 1-2.5 2.5h-13A2.5 2.5 0 0 1 3 18V13.5z"/></g>
- <g id="i-lockfill"><rect x="5.5" y="10.5" width="13" height="9.5" rx="2.6" fill="currentColor" stroke="none"/><path d="M8.4 10.5V8.2a3.6 3.6 0 0 1 7.2 0v2.3"/></g>
- </defs></svg>
- <div class="sheet-head">
- <div class="brandmark">
- <div class="glyph"></div>
- <div>
- <div class="sheet-title">消息中心 · 通知与推送</div>
- <div class="sheet-sub">票据投资者 APP / 底部 Tab 入口 · 分类聚合 → 分类列表 → 消息详情 · iOS 推送权限引导 · 14 个推送场景落点</div>
- </div>
- </div>
- <div class="head-right">
- <div class="meta">
- <div>模块<b>消息 MESSAGES</b></div>
- <div>规格<b>iOS 390 × 844 @3x</b></div>
- <div>覆盖<b>13 帧 · 7 个分类</b></div>
- <div>版本<b>v1.3 · 2026-10-14</b></div>
- </div>
- <div class="skin" role="group" aria-label="主题切换">
- <button data-set="light" class="on"><svg viewBox="0 0 24 24"><use href="#i-sun"/></svg>浅色</button>
- <button data-set="dark"><svg viewBox="0 0 24 24"><use href="#i-moon"/></svg>深色</button>
- </div>
- </div>
- </div>
- <div class="sec">
- <div class="sec-head"><span class="sec-num">01</span><span class="sec-name">范围与现状</span><span class="sec-rule"></span><span class="sec-note">v1.3 按代码现状重画;取代 06 的 N1–N5</span></div>
- <div class="cards">
- <div class="card-x">
- <h4>入口 ENTRY</h4>
- <div class="bullets">
- <li>底部第三个 Tab「消息」,三端一致(H5 也是四 Tab 自绘底栏)</li>
- <li>票据 / 资金账户顶栏铃铛、「我的」里的消息中心菜单都已撤</li>
- <li>未读只有红点:后端只给有没有未读、不给条数</li>
- </div>
- </div>
- <div class="card-x">
- <h4>三级结构 STRUCTURE</h4>
- <div class="bullets">
- <li>一级:七个分类(询价提醒 · 订单变动 · 风险提醒 · 展期通知 · 资金变动 · 系统公告 · 安全提醒),名称取后端</li>
- <li>二级:分类内消息卡片,进入即确认已读边界</li>
- <li>三级:消息详情 + 业务出口(与推送落点同一张表)</li>
- </div>
- </div>
- <div class="card-x">
- <h4>推送 PUSH</h4>
- <div class="bullets">
- <li>友盟 U-Push;登录后且系统授权「已允许」才初始化</li>
- <li>前置引导 P1 整个安装周期自动弹一次;之后靠提示条 P3 → P4</li>
- <li>H5 没有推送</li>
- </div>
- </div>
- </div>
- </div>
- <div class="sec">
- <div class="sec-head"><span class="sec-num">02</span><span class="sec-name">入口 · 底部 Tab 与未读红点</span><span class="sec-rule"></span><span class="sec-note">2 帧</span></div>
- <div class="frames">
- <!-- ===== T1 票据首页 · 四 Tab ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="appbar"><h1>共赢票据</h1></div>
- <div class="tabs" style="margin-top:12px"><span class="on">询价</span><span>订单</span></div>
- <div class="body">
- <div style="padding:13px 16px 14px;background:var(--surface);border-bottom:1px solid var(--line)">
- <div class="search"><svg class="icn" viewBox="0 0 24 24"><use href="#i-search"/></svg><span class="ph">股票代码/拼音/名称</span></div>
- <div style="display:flex;gap:10px;margin-top:12px">
- <div style="flex:1"><span class="lbl">方向</span><div class="field" style="height:38px;background:var(--surface-2);border-color:transparent;font-size:13.5px"><b style="font-family:var(--font-mono)">CALL</b><span style="margin-left:auto;font-size:10.5px;color:var(--ink-4)">只读</span></div></div>
- <div style="flex:1"><span class="lbl">周期</span><div class="field" style="height:38px;background:var(--surface-2);border-color:transparent;font-size:13.5px"><b style="font-family:var(--font-mono)">1M</b><svg class="icn" style="margin-left:auto;width:14px;height:14px" viewBox="0 0 24 24"><use href="#i-down"/></svg></div></div>
- </div>
- <span class="lbl" style="margin-top:13px">名义本金</span>
- <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>
- <div style="display:flex;gap:10px;margin-top:14px"><div class="btn off" style="flex:1">询价</div><div class="iconbtn"><svg class="icn" viewBox="0 0 24 24"><use href="#i-history"/></svg></div></div>
- </div>
- <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"><use href="#i-cardview"/></svg></span><span><svg class="icn" viewBox="0 0 24 24"><use href="#i-tableview"/></svg></span></span></div>
- <div class="card qc"><span class="corner">NEW</span><div class="qc-top"><div><div class="qc-name">贵州茅台 <i class="cmark">C</i></div><div class="qc-sub">600519.SH · CALL · 1M</div></div><div class="qc-r"><span class="st done"><i></i>已完成</span><div class="qc-time">11:15:15</div></div></div><div class="qc-meta"><span><em>名义本金</em>200万</span><span><em>报价</em>3 条</span></div></div>
- </div>
- <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>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">T1</div>
- <div class="cap-title">票据首页 · 四 Tab</div>
- <ul>
- <li>底部四个 Tab:票据 / 账户 / 消息 / 我的;票据与资金账户顶栏不再有铃铛</li>
- <li>「消息」Tab 有未读时只挂 <b>8×8 红点</b>(后端只给有没有未读、不给条数),读屏名「消息,有未读」</li>
- <li>iOS 26+ 用系统液态玻璃底栏,Android 与 iOS 26 以下按设计系统画(表面色 + 顶部分隔线);H5 是同样的四 Tab 自绘底栏</li>
- </ul>
- </div>
- </div>
- <!-- ===== T2 资金账户 · 四 Tab ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="appbar"><h1>资金账户</h1></div>
- <div class="body">
- <div class="hero">
- <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>
- <div class="amt num">18,268,671.64 <svg class="icn sm eye" viewBox="0 0 24 24"><use href="#i-eye"/></svg></div>
- <svg class="icn lg arrow" viewBox="0 0 24 24"><use href="#i-right"/></svg>
- <div class="grid3"><div><span>票据估值</span><b class="num">368,000.00</b></div><div><span>冻结金额</span><b class="num">0.00</b></div><div><span>现金可用</span><b class="num">123,456.00</b></div></div>
- </div>
- <div class="quick"><div class="qk"><span class="ib"><svg class="icn sm" viewBox="0 0 24 24"><use href="#i-swap"/></svg></span><b>资金划转</b></div><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></div>
- </div>
- <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>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">T2</div>
- <div class="cap-title">资金账户 · 四 Tab</div>
- <ul>
- <li>顶栏只有「资金账户」大标题;红点在四个 Tab 页之间一致</li>
- <li>分类与未读接口挂在 Tab 容器层轮询:四个根页任一在顶上就轮询,进入二级页即停</li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- <div class="sec">
- <div class="sec-head"><span class="sec-num">03</span><span class="sec-name">消息中心 · 三级结构</span><span class="sec-rule"></span><span class="sec-note">6 帧</span></div>
- <div class="frames">
- <!-- ===== M1 一级 · 分类聚合(Tab 根页) ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="appbar mhd"><h1>消息中心</h1><span class="ma"><svg class="icn" viewBox="0 0 24 24"><use href="#i-check2"/></svg>全部已读</span></div>
- <div class="body">
-
- <div class="mcats"><div class="mcat"><span class="ic b"><svg class="icn" viewBox="0 0 24 24"><use href="#i-search"/></svg></span><span class="tx"><b>询价提醒</b><span>贵州茅台(600519.SH)的询价已收到发行方报价,报价在有效期内可直接下单</span></span><span class="rt"><em>刚刚</em><i></i></span></div><div class="mcat"><span class="ic o"><svg class="icn" viewBox="0 0 24 24"><use href="#i-note"/></svg></span><span class="tx"><b>订单变动</b><span>您的买入订单(贵州燃气 600903.SH)已全部成交,成交均价 9.88</span></span><span class="rt"><em>08:30</em><i></i></span></div><div class="mcat"><span class="ic d"><svg class="icn" viewBox="0 0 24 24"><use href="#i-alert"/></svg></span><span class="tx"><b>风险提醒</b><span>您持有的股权挂钩A类票据(挂钩标的: 贵州茅台,票据编号: XS2456789012)</span></span><span class="rt"><em>08:14</em><i></i></span></div><div class="mcat"><span class="ic a"><svg class="icn" viewBox="0 0 24 24"><use href="#i-history"/></svg></span><span class="tx"><b>展期通知</b><span>贵州茅台(600519.SH)票据的展期申请已通过审批</span></span><span class="rt"><em>07:50</em></span></div><div class="mcat"><span class="ic b"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span><span class="tx"><b>资金变动</b><span> </span></span></div><div class="mcat"><span class="ic m"><svg class="icn" viewBox="0 0 24 24"><use href="#i-megaphone"/></svg></span><span class="tx"><b>系统公告</b><span> </span></span></div><div class="mcat"><span class="ic d"><svg class="icn" viewBox="0 0 24 24"><use href="#i-shield"/></svg></span><span class="tx"><b>安全提醒</b><span> </span></span></div></div>
- </div>
- <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"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span>账户</div><div class="tb on"><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>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">M1</div>
- <div class="cap-title">一级 · 分类聚合(Tab 根页)</div>
- <ul>
- <li>七个分类一张卡:分类名原样显示后端下发的名称;每行最新一条正文(单行省略)+ 时间 + <b>红点</b>(没有未读条数)</li>
- <li>没有消息的分类只显示名称,不出时间、不留红点空位;<b>不出「消息仅保留 90 天」提示</b></li>
- <li>图标底色:蓝 = 常规业务(询价 / 资金)· 绿 = 成交 · 红 = 要警觉(风险 / 安全)· 琥珀 = 有时限 · 灰 = 平台</li>
- <li>顶栏右侧「全部已读」(双勾 + 文字),没有未读时置灰</li>
- </ul>
- </div>
- </div>
- <!-- ===== M2 二级 · 分类内消息列表 ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="navbar"><span class="bk"><svg class="icn" viewBox="0 0 24 24"><use href="#i-back"/></svg></span><h2>询价提醒</h2></div>
- <div class="body" style="padding-top:12px">
- <div class="msg unread"><div class="h"><b>贵州茅台 询价单有新报价</b><em>刚刚</em></div><p>贵州茅台(600519.SH)的询价已收到发行方报价,报价在有效期内可直接下单,逾期自动失效。</p></div>
- <div class="msg read"><div class="h"><b>京东方A 询价已被拒绝</b><em>08:00</em></div><p>您发起的股权挂钩A类票据的询价(挂钩京东方A、名义本金 100万 CNY),已被发行方拒绝。</p></div>
- <div class="msg read"><div class="h"><b>上海凯宝 询价已失效</b><em>昨天 10:15</em></div><p>上海凯宝(300039.SZ)的报价已超过有效期自动失效,如仍有交易意向请重新发起询价。</p></div>
- <div class="msg read"><div class="h"><b>贵州三力 询价单有新报价</b><em>3 天前 11:36</em></div><p>贵州三力(603439.SH)的询价已收到发行方报价,报价在有效期内可直接下单,逾期自动失效。</p></div>
- <div class="msg read"><div class="h"><b>五粮液 询价已失效</b><em>11.22 13:26</em></div><p>五粮液(000858.SZ)的报价已超过有效期自动失效,如仍有交易意向请重新发起询价。</p></div>
- </div>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">M2</div>
- <div class="cap-title">二级 · 分类内消息列表</div>
- <ul>
- <li>标题是分类名;一条一卡:标题 14.5、正文 13 截两行;未读标题前 6px 红点,已读标题与正文转 ink-3</li>
- <li>进入即确认该分类的已读边界;下拉刷新 + 上拉加载与其他列表相同</li>
- <li>行尾时间六档:刚刚 · 今天 hh:mm · 昨天 hh:mm · N 天前 hh:mm · MM.DD hh:mm · 跨年 YYYY.MM.DD</li>
- </ul>
- </div>
- </div>
- <!-- ===== M3 三级 · 消息详情(带业务出口) ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="navbar"><span class="bk"><svg class="icn" viewBox="0 0 24 24"><use href="#i-back"/></svg></span><h2>消息详情</h2></div>
- <div class="body">
- <div class="msgd">
- <div class="hd"><h3>贵州茅台 询价单有新报价</h3><div class="t">询价提醒 · 2025-12-12 10:29:30</div></div>
- <div class="bd">贵州茅台(600519.SH)的询价已收到发行方报价,报价在有效期内可直接下单,逾期自动失效。</div>
- <div class="ft"><span>查看询价单</span><svg class="icn" viewBox="0 0 24 24"><use href="#i-right"/></svg></div>
- </div>
- <div style="padding:12px 16px 0"><div class="notice info"><svg class="icn sm" viewBox="0 0 24 24"><use href="#i-info"/></svg><span>本条为<b>通知副本</b>,以询价单实时状态为准。</span></div></div>
- </div>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">M3</div>
- <div class="cap-title">三级 · 消息详情(带业务出口)</div>
- <ul>
- <li>标题 17 + 「分类 · 绝对时间到秒」;正文全文</li>
- <li>底部业务出口与推送点击落点一致(§05):「查看询价单 / 订单 / 票据 / 展期任务 / 持仓」;没有落点的消息(公告、安全、资金)不渲染出口</li>
- <li>信息条「本条为通知副本,以 X 实时状态为准。」</li>
- </ul>
- </div>
- </div>
- <!-- ===== M4 二级 · 风险提醒(事件标签) ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="navbar"><span class="bk"><svg class="icn" viewBox="0 0 24 24"><use href="#i-back"/></svg></span><h2>风险提醒</h2></div>
- <div class="body" style="padding-top:12px">
- <div class="msg unread"><div class="h"><b><span class="tag t-danger">强平</span>贵州茅台 强平提醒</b><em>08:14</em></div><p>您持有的股权挂钩A类票据(挂钩标的: 贵州茅台,票据编号: XS2456789012,存续名义本金: 2,000,000.00 CNY)已触发强平事件,请确认票据状态。</p></div>
- <div class="msg unread"><div class="h"><b><span class="tag t-warn">增额</span>贵州燃气 增额提醒</b><em>08:02</em></div><p>您持有的股权挂钩A类票据(挂钩标的: 贵州燃气,票据编号: XS2456789034,存续名义本金: 1,000,000.00 CNY)已触及预警线,请及时增额。</p></div>
- <div class="msg read"><div class="h"><b><span class="tag t-mute">到期</span>上海凯宝 到期提醒</b><em>07:58</em></div><p>上海凯宝(300039.SZ)将于 2026-09-09 到期,到期前可申请展期,逾期按到期结算。</p></div>
- <div class="msg read"><div class="h"><b><span class="tag t-mute">增额</span>上海凯宝 增额提醒</b><em>昨天 13:05</em></div><p>您持有的股权挂钩A类票据(挂钩标的: 上海凯宝,票据编号: XS2456789056,存续名义本金: 500,000.00 CNY)已触及预警线。</p></div>
- <div class="msg read"><div class="h"><b><span class="tag t-mute">强平</span>五粮液 强平提醒</b><em>12.03 14:36</em></div><p>您持有的股权挂钩A类票据(挂钩标的: 五粮液,票据编号: XS2456789090,存续名义本金: 3,000,000.00 CNY)已触发强平事件。</p></div>
- </div>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">M4</div>
- <div class="cap-title">二级 · 风险提醒(事件标签)</div>
- <ul>
- <li>标题前事件标签:强平(危险实心)、增额(warn)、到期(琥珀,到期提醒并进风险类后补);已读后统一灰标签</li>
- <li>出口:强平落票据详情;增额 / 到期落持仓列表并定位到那张票据</li>
- </ul>
- </div>
- </div>
- <!-- ===== M5 全部已读 · 二次确认 ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="appbar mhd"><h1>消息中心</h1><span class="ma"><svg class="icn" viewBox="0 0 24 24"><use href="#i-check2"/></svg>全部已读</span></div>
- <div class="body">
-
- <div class="mcats"><div class="mcat"><span class="ic b"><svg class="icn" viewBox="0 0 24 24"><use href="#i-search"/></svg></span><span class="tx"><b>询价提醒</b><span>贵州茅台(600519.SH)的询价已收到发行方报价,报价在有效期内可直接下单</span></span><span class="rt"><em>刚刚</em><i></i></span></div><div class="mcat"><span class="ic o"><svg class="icn" viewBox="0 0 24 24"><use href="#i-note"/></svg></span><span class="tx"><b>订单变动</b><span>您的买入订单(贵州燃气 600903.SH)已全部成交,成交均价 9.88</span></span><span class="rt"><em>08:30</em><i></i></span></div><div class="mcat"><span class="ic d"><svg class="icn" viewBox="0 0 24 24"><use href="#i-alert"/></svg></span><span class="tx"><b>风险提醒</b><span>您持有的股权挂钩A类票据(挂钩标的: 贵州茅台,票据编号: XS2456789012)</span></span><span class="rt"><em>08:14</em><i></i></span></div><div class="mcat"><span class="ic a"><svg class="icn" viewBox="0 0 24 24"><use href="#i-history"/></svg></span><span class="tx"><b>展期通知</b><span>贵州茅台(600519.SH)票据的展期申请已通过审批</span></span><span class="rt"><em>07:50</em></span></div><div class="mcat"><span class="ic b"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span><span class="tx"><b>资金变动</b><span> </span></span></div><div class="mcat"><span class="ic m"><svg class="icn" viewBox="0 0 24 24"><use href="#i-megaphone"/></svg></span><span class="tx"><b>系统公告</b><span> </span></span></div><div class="mcat"><span class="ic d"><svg class="icn" viewBox="0 0 24 24"><use href="#i-shield"/></svg></span><span class="tx"><b>安全提醒</b><span> </span></span></div></div>
- </div>
- <div class="scrim">
- <div class="dlg">
- <div style="padding:26px 22px 8px;text-align:center"><div style="font-size:14.5px;line-height:25px;color:var(--ink-1)">将全部未读消息标记为已读?</div><div style="margin-top:8px;font-size:12.5px;line-height:20px;color:var(--ink-3)">消息本身不会被删除,仍可在各分类中查看</div></div>
- <div class="dlg-ft"><span>取消</span><span>确认</span></div>
- </div>
- </div>
- <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"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span>账户</div><div class="tb on"><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>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">M5</div>
- <div class="cap-title">全部已读 · 二次确认</div>
- <ul>
- <li>正文「将全部未读消息标记为已读?」+ 灰字「消息本身不会被删除,仍可在各分类中查看」;<b>不写条数</b>(后端不给)</li>
- <li>确认后各分类红点与 Tab 红点一起消失</li>
- </ul>
- </div>
- </div>
- <!-- ===== M6 一级 · 空态 ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="appbar mhd"><h1>消息中心</h1><span class="ma off"><svg class="icn" viewBox="0 0 24 24"><use href="#i-check2"/></svg>全部已读</span></div>
- <div class="body" style="display:flex;flex-direction:column">
- <div class="emptyslot" style="padding-bottom:260px"><div class="emptybox"><svg class="illu" viewBox="0 0 120 104" fill="none" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="il1b" x1="10" y1="14" x2="104" y2="90" gradientUnits="userSpaceOnUse"><stop stop-color="var(--il-a)"/><stop offset="1" stop-color="var(--il-b)"/></linearGradient><linearGradient id="il1f" x1="18" y1="42" x2="98" y2="94" gradientUnits="userSpaceOnUse"><stop stop-color="var(--il-c)"/><stop offset="1" stop-color="var(--il-a)"/></linearGradient></defs><path d="M12 86V22q0-8 8-8h24q4.2 0 6.8 3.3L56 23.4q2.4 3 6.2 3H100q8 0 8 8V86q0 8-8 8H20q-8 0-8-8Z" fill="url(#il1b)"/><path d="M8.6 42h102.8q4.8 0 3.9 4.7l-7.6 41q-.9 5-6 5H18.3q-5.1 0-6-5l-7.6-41Q3.8 42 8.6 42Z" fill="url(#il1f)"/></svg><div class="etxt">暂无数据</div><div class="esub">近 90 天内没有收到消息</div></div></div>
- </div>
- <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"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span>账户</div><div class="tb on"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-bell"/></svg></span>消息</div><div class="tb"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-user"/></svg></span>我的</div></div>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">M6</div>
- <div class="cap-title">一级 · 空态</div>
- <ul>
- <li>整页通用空态:「暂无数据」+「近 90 天内没有收到消息」;分类行整块不渲染,「全部已读」置灰,Tab 不挂红点</li>
- <li>分类内为空:副文案换成「近 90 天内没有收到<分类名>」</li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- <div class="sec">
- <div class="sec-head"><span class="sec-num">04</span><span class="sec-name">推送权限 · 引导</span><span class="sec-rule"></span><span class="sec-note">5 帧 · 仅原生</span></div>
- <div class="frames">
- <!-- ===== P1 前置引导弹框 ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="appbar"><h1>共赢票据</h1></div>
- <div class="tabs" style="margin-top:12px"><span class="on">询价</span><span>订单</span></div>
- <div class="body">
- <div style="padding:13px 16px 14px;background:var(--surface);border-bottom:1px solid var(--line)">
- <div class="search"><svg class="icn" viewBox="0 0 24 24"><use href="#i-search"/></svg><span class="ph">股票代码/拼音/名称</span></div>
- <div style="display:flex;gap:10px;margin-top:12px">
- <div style="flex:1"><span class="lbl">方向</span><div class="field" style="height:38px;background:var(--surface-2);border-color:transparent;font-size:13.5px"><b style="font-family:var(--font-mono)">CALL</b><span style="margin-left:auto;font-size:10.5px;color:var(--ink-4)">只读</span></div></div>
- <div style="flex:1"><span class="lbl">周期</span><div class="field" style="height:38px;background:var(--surface-2);border-color:transparent;font-size:13.5px"><b style="font-family:var(--font-mono)">1M</b><svg class="icn" style="margin-left:auto;width:14px;height:14px" viewBox="0 0 24 24"><use href="#i-down"/></svg></div></div>
- </div>
- <span class="lbl" style="margin-top:13px">名义本金</span>
- <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>
- <div style="display:flex;gap:10px;margin-top:14px"><div class="btn off" style="flex:1">询价</div><div class="iconbtn"><svg class="icn" viewBox="0 0 24 24"><use href="#i-history"/></svg></div></div>
- </div>
- <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"><use href="#i-cardview"/></svg></span><span><svg class="icn" viewBox="0 0 24 24"><use href="#i-tableview"/></svg></span></span></div>
- <div class="card qc"><span class="corner">NEW</span><div class="qc-top"><div><div class="qc-name">贵州茅台 <i class="cmark">C</i></div><div class="qc-sub">600519.SH · CALL · 1M</div></div><div class="qc-r"><span class="st done"><i></i>已完成</span><div class="qc-time">11:15:15</div></div></div><div class="qc-meta"><span><em>名义本金</em>200万</span><span><em>报价</em>3 条</span></div></div>
- </div>
- <div class="scrim">
- <div class="perm">
- <div class="cap-ic brand"><svg class="icn" viewBox="0 0 24 24"><use href="#i-bell"/></svg><span class="rdot2"><i></i></span></div>
- <h3>开启通知,报价到了第一时间知道</h3>
- <div class="pt1"><span class="pi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-bell"/></svg></span><b>新报价、订单结果与风控提醒</b></div>
- <div class="acts"><div class="btn wide">开启通知</div><div class="btn ghost wide">暂不开启</div></div>
- </div>
- </div>
- <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>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">P1</div>
- <div class="cap-title">前置引导弹框<span class="cap-flags"><span class="cap-flag plat">仅 APP</span></span></div>
- <ul>
- <li><b>时机</b>:登录后首页落定、启动升级检查落定、且没有待处理的通知点击时;系统授权状态为「未询问」才弹,<b>整个安装周期只自动弹一次</b>(不随登出清除)</li>
- <li>较 v1.2 精简:标题「开启通知,报价到了第一时间知道」+ 一条价值点「新报价、订单结果与风控提醒」,去掉副标题、三条说明与底部脚注</li>
- <li>「开启通知」才拉系统框;「暂不开启」不碰系统 API,之后由消息中心提示条(P3)引导</li>
- </ul>
- </div>
- </div>
- <!-- ===== P2 iOS 系统权限弹框 ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="appbar"><h1>共赢票据</h1></div>
- <div class="tabs" style="margin-top:12px"><span class="on">询价</span><span>订单</span></div>
- <div class="body">
- <div style="padding:13px 16px 14px;background:var(--surface);border-bottom:1px solid var(--line)">
- <div class="search"><svg class="icn" viewBox="0 0 24 24"><use href="#i-search"/></svg><span class="ph">股票代码/拼音/名称</span></div>
- <div style="display:flex;gap:10px;margin-top:12px">
- <div style="flex:1"><span class="lbl">方向</span><div class="field" style="height:38px;background:var(--surface-2);border-color:transparent;font-size:13.5px"><b style="font-family:var(--font-mono)">CALL</b><span style="margin-left:auto;font-size:10.5px;color:var(--ink-4)">只读</span></div></div>
- <div style="flex:1"><span class="lbl">周期</span><div class="field" style="height:38px;background:var(--surface-2);border-color:transparent;font-size:13.5px"><b style="font-family:var(--font-mono)">1M</b><svg class="icn" style="margin-left:auto;width:14px;height:14px" viewBox="0 0 24 24"><use href="#i-down"/></svg></div></div>
- </div>
- <span class="lbl" style="margin-top:13px">名义本金</span>
- <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>
- <div style="display:flex;gap:10px;margin-top:14px"><div class="btn off" style="flex:1">询价</div><div class="iconbtn"><svg class="icn" viewBox="0 0 24 24"><use href="#i-history"/></svg></div></div>
- </div>
- <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"><use href="#i-cardview"/></svg></span><span><svg class="icn" viewBox="0 0 24 24"><use href="#i-tableview"/></svg></span></span></div>
- <div class="card qc"><span class="corner">NEW</span><div class="qc-top"><div><div class="qc-name">贵州茅台 <i class="cmark">C</i></div><div class="qc-sub">600519.SH · CALL · 1M</div></div><div class="qc-r"><span class="st done"><i></i>已完成</span><div class="qc-time">11:15:15</div></div></div><div class="qc-meta"><span><em>名义本金</em>200万</span><span><em>报价</em>3 条</span></div></div>
- </div>
- <div class="scrim" style="padding:0">
- <div class="iosalert">
- <div class="ab"><h4>“泓衍票据”想给你发送通知</h4><p>通知可能包括提醒、声音和图标标记。这些可在“设置”中配置。</p></div>
- <div class="arow"><span>不允许</span><span>允许</span></div>
- </div>
- </div>
- <div class="sysnote"><span>系统绘制 · 文案与按钮不可改</span></div>
- <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>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">P2</div>
- <div class="cap-title">iOS 系统权限弹框<span class="cap-flags"><span class="cap-flag plat">仅 iOS</span></span></div>
- <ul>
- <li>仅在 P1 点「开启通知」后拉起;系统绘制,标题里的 App 名随打包身份</li>
- <li>友盟推送只在已登录(视为同意隐私政策)且系统授权为「已允许」时才初始化</li>
- </ul>
- </div>
- </div>
- <!-- ===== P3 未授权态 · 消息中心提示条 ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="appbar mhd"><h1>消息中心</h1><span class="ma"><svg class="icn" viewBox="0 0 24 24"><use href="#i-check2"/></svg>全部已读</span></div>
- <div class="body">
- <div class="pbanner"><span class="pi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-belloff"/></svg></span><span class="tx"><b>通知未开启</b><span>报价到达、到期与强平提醒目前只能进APP查看</span></span><span class="go">去开启</span></div>
- <div class="mcats"><div class="mcat"><span class="ic b"><svg class="icn" viewBox="0 0 24 24"><use href="#i-search"/></svg></span><span class="tx"><b>询价提醒</b><span>贵州茅台(600519.SH)的询价已收到发行方报价,报价在有效期内可直接下单</span></span><span class="rt"><em>刚刚</em><i></i></span></div><div class="mcat"><span class="ic o"><svg class="icn" viewBox="0 0 24 24"><use href="#i-note"/></svg></span><span class="tx"><b>订单变动</b><span>您的买入订单(贵州燃气 600903.SH)已全部成交,成交均价 9.88</span></span><span class="rt"><em>08:30</em><i></i></span></div><div class="mcat"><span class="ic d"><svg class="icn" viewBox="0 0 24 24"><use href="#i-alert"/></svg></span><span class="tx"><b>风险提醒</b><span>您持有的股权挂钩A类票据(挂钩标的: 贵州茅台,票据编号: XS2456789012)</span></span><span class="rt"><em>08:14</em><i></i></span></div><div class="mcat"><span class="ic a"><svg class="icn" viewBox="0 0 24 24"><use href="#i-history"/></svg></span><span class="tx"><b>展期通知</b><span>贵州茅台(600519.SH)票据的展期申请已通过审批</span></span><span class="rt"><em>07:50</em></span></div><div class="mcat"><span class="ic b"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span><span class="tx"><b>资金变动</b><span> </span></span></div><div class="mcat"><span class="ic m"><svg class="icn" viewBox="0 0 24 24"><use href="#i-megaphone"/></svg></span><span class="tx"><b>系统公告</b><span> </span></span></div><div class="mcat"><span class="ic d"><svg class="icn" viewBox="0 0 24 24"><use href="#i-shield"/></svg></span><span class="tx"><b>安全提醒</b><span> </span></span></div></div>
- </div>
- <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"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span>账户</div><div class="tb on"><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>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">P3</div>
- <div class="cap-title">未授权态 · 消息中心提示条<span class="cap-flags"><span class="cap-flag plat">仅 APP</span></span></div>
- <ul>
- <li>系统授权不是「已允许」时,消息中心顶部常驻琥珀提示条「通知未开启」+ 说明 + 「去开启」,不可关闭</li>
- <li>「去开启」:未询问过 → 重新打开 P1;已拒绝 → 打开 P4;回前台重新读权限,授权后提示条消失</li>
- <li>H5 没有推送,不出提示条</li>
- </ul>
- </div>
- </div>
- <!-- ===== P4 二次引导 · 去系统设置 ===== -->
- <div class="frame">
- <div class="phone">
- <div class="screen">
- <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>
- <div class="appbar mhd"><h1>消息中心</h1><span class="ma"><svg class="icn" viewBox="0 0 24 24"><use href="#i-check2"/></svg>全部已读</span></div>
- <div class="body">
- <div class="pbanner"><span class="pi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-belloff"/></svg></span><span class="tx"><b>通知未开启</b><span>报价到达、到期与强平提醒目前只能进APP查看</span></span><span class="go">去开启</span></div>
- <div class="mcats"><div class="mcat"><span class="ic b"><svg class="icn" viewBox="0 0 24 24"><use href="#i-search"/></svg></span><span class="tx"><b>询价提醒</b><span>贵州茅台(600519.SH)的询价已收到发行方报价,报价在有效期内可直接下单</span></span><span class="rt"><em>刚刚</em><i></i></span></div><div class="mcat"><span class="ic o"><svg class="icn" viewBox="0 0 24 24"><use href="#i-note"/></svg></span><span class="tx"><b>订单变动</b><span>您的买入订单(贵州燃气 600903.SH)已全部成交,成交均价 9.88</span></span><span class="rt"><em>08:30</em><i></i></span></div><div class="mcat"><span class="ic d"><svg class="icn" viewBox="0 0 24 24"><use href="#i-alert"/></svg></span><span class="tx"><b>风险提醒</b><span>您持有的股权挂钩A类票据(挂钩标的: 贵州茅台,票据编号: XS2456789012)</span></span><span class="rt"><em>08:14</em><i></i></span></div><div class="mcat"><span class="ic a"><svg class="icn" viewBox="0 0 24 24"><use href="#i-history"/></svg></span><span class="tx"><b>展期通知</b><span>贵州茅台(600519.SH)票据的展期申请已通过审批</span></span><span class="rt"><em>07:50</em></span></div><div class="mcat"><span class="ic b"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span><span class="tx"><b>资金变动</b><span> </span></span></div><div class="mcat"><span class="ic m"><svg class="icn" viewBox="0 0 24 24"><use href="#i-megaphone"/></svg></span><span class="tx"><b>系统公告</b><span> </span></span></div><div class="mcat"><span class="ic d"><svg class="icn" viewBox="0 0 24 24"><use href="#i-shield"/></svg></span><span class="tx"><b>安全提醒</b><span> </span></span></div></div>
- </div>
- <div class="scrim">
- <div class="perm">
- <div class="cap-ic" style="background:var(--warn)"><svg class="icn" viewBox="0 0 24 24"><use href="#i-belloff"/></svg></div>
- <h3>通知权限已关闭</h3>
- <div class="sub">系统的授权弹框<b style="color:var(--ink-1)">只会出现一次</b>,现在需要到系统设置里手动打开:</div>
- <div class="path">
- <div class="s"><i>1</i><span>打开 <b>设置</b></span><svg class="icn" viewBox="0 0 24 24"><use href="#i-right"/></svg></div>
- <div class="s"><i>2</i><span>找到 <b>泓衍票据</b></span><svg class="icn" viewBox="0 0 24 24"><use href="#i-right"/></svg></div>
- <div class="s"><i>3</i><span>进入 <b>通知</b></span><svg class="icn" viewBox="0 0 24 24"><use href="#i-right"/></svg></div>
- <div class="s"><i>4</i><span>打开 <b>允许通知</b></span><svg class="icn ok" viewBox="0 0 24 24"><use href="#i-check"/></svg></div>
- </div>
- <div class="acts" style="margin-top:20px"><div class="btn wide">去设置</div><div class="btn ghost wide">以后再说</div></div>
- <div class="foot">「去设置」会直接跳到本APP的通知设置页</div>
- </div>
- </div>
- <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"><span class="tbi"><svg class="icn" viewBox="0 0 24 24"><use href="#i-wallet"/></svg></span>账户</div><div class="tb on"><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>
- <div class="homebar"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">P4</div>
- <div class="cap-title">二次引导 · 去系统设置<span class="cap-flags"><span class="cap-flag plat">仅 APP</span></span></div>
- <ul>
- <li>只在用户点提示条「去开启」且已拒绝时出现,不主动弹;四步路径,第二步是 App 名</li>
- <li>「去设置」<b>直达本 App 的通知设置页</b>(iOS 16+ / Android 8+),打不开再退回系统设置页</li>
- </ul>
- </div>
- </div>
- <!-- ===== P5 推送样式 · 锁屏 ===== -->
- <div class="frame">
- <div class="phone">
- <div class="lockscr">
- <div class="statusbar" style="color:#fff"><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>
- <div class="lt">
- <svg class="lk icn" viewBox="0 0 24 24" style="width:21px;height:21px;margin:0 auto 8px;display:block;stroke-width:1.8"><use href="#i-lockfill"/></svg>
- <div class="d">12月12日 星期五</div>
- <div class="h num">9:41</div>
- </div>
- <div class="pushwrap">
- <div class="pushtag">通知</div>
- <div class="push"><div class="ph"><img class="ai2" src="assets/brand/honmatrix-icon.png" alt="">泓衍票据<em>刚刚</em></div><b>收到一条票据报价</b><p>您发起的股权挂钩A类票据的询价(挂钩贵州茅台、名义本金 200万 CNY),收到一份新报价。</p></div>
- <div class="push"><div class="ph"><img class="ai2" src="assets/brand/honmatrix-icon.png" alt="">泓衍票据<em>09:42</em></div><b>A类票据强平提醒</b><p>您持有的股权挂钩A类票据(挂钩标的: 贵州茅台,票据编号: XS2456789012,存续名义本金: 2,000,000.00 CNY)<span class="cut">已触发强平事件,请确认票据状态。</span></p></div>
- <div class="push stack"><div class="ph"><img class="ai2" src="assets/brand/honmatrix-icon.png" alt="">泓衍票据<em>09:26</em></div><b>A类票据到期提醒</b><p>您持有的股权挂钩A类票据(挂钩标的: 上海凯宝,票据编号: XS2456789056,存续名义本金: 500,000.00 CNY)将于今日到期…</p></div>
- </div>
- <div class="homebar" style="background:#fff;opacity:.5"></div>
- </div>
- </div>
- <div class="cap">
- <div class="cap-num">P5</div>
- <div class="cap-title">推送样式 · 锁屏<span class="cap-flags"><span class="cap-flag plat">系统渲染</span></span></div>
- <ul>
- <li>系统渲染示意:App 名与图标随打包身份;标题与正文由后端按《票据消息通知》下发(目前只有简体)</li>
- <li>点击按 <code>extra.type + id</code> 直达落点(§05);正在同一张详情页上时原地刷新</li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- <div class="sec">
- <div class="sec-head"><span class="sec-num">05</span><span class="sec-name">推送与站内消息 → 落点</span><span class="sec-rule"></span><span class="sec-note">推送点击与消息详情出口共用一张表(代码 notification-route)</span></div>
- <table class="spec">
- <tr><th style="width:140px">type</th><th style="width:220px">场景</th><th style="width:260px">落点</th><th>说明</th></tr>
- <tr><td class="m">inquiry</td><td>收到报价 / 询价被拒</td><td>票据 → 询价,展开那条询价的报价</td><td>按 <code>inquiry + seq</code> 定位</td></tr>
- <tr><td class="m">order</td><td>A 类买入 / 卖出已撤 / 已完成 / 被拒</td><td>订单详情</td><td>B 类场景本期不做</td></tr>
- <tr><td class="m">note</td><td>A 类强平提醒</td><td>票据详情</td><td>后端改版前落库的旧增额 / 到期消息也落这里</td></tr>
- <tr><td class="m">positions</td><td>A 类增额 / 到期提醒</td><td>账户 → 持仓,滚到那张票据(表格形态展开操作条)</td><td>按 <code>note + seq</code> 定位</td></tr>
- <tr><td class="m">rollover</td><td>展期通过 / 驳回 / 到期日变更</td><td>展期详情</td><td>—</td></tr>
- <tr><td class="m">message</td><td>资金 / 公告 / 安全等站内消息</td><td>消息详情(无业务出口)</td><td>没有 id 时落消息中心</td></tr>
- <tr><td class="m">其他</td><td>认不出的 type 或非法编号</td><td>不跳转</td><td>编号只允许字母数字与 <code>-_.:</code></td></tr>
- </table>
- </div>
- <div class="sec" style="margin-bottom:20px">
- <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>
- <table class="spec">
- <tr><th style="width:140px">权限状态</th><th style="width:240px">消息中心</th><th style="width:240px">「去开启」</th><th>其他</th></tr>
- <tr><td class="m">notDetermined</td><td>常驻提示条</td><td>打开 P1</td><td>满足时机时自动弹一次 P1</td></tr>
- <tr><td class="m">granted</td><td>不出提示条</td><td>—</td><td>初始化推送、登记设备</td></tr>
- <tr><td class="m">denied</td><td>常驻提示条</td><td>打开 P4</td><td>不再调系统授权 API</td></tr>
- </table>
- <table class="spec" style="margin-top:16px">
- <tr><th style="width:140px">项目</th><th style="width:160px">iOS</th><th style="width:160px">Android</th><th style="width:120px">H5</th><th>说明</th></tr>
- <tr><td><b>消息中心入口</b></td><td>✓ 底部 Tab(26+ 液态玻璃)</td><td>✓ 底部 Tab</td><td>✓ 底部 Tab</td><td>三端同一套三级结构</td></tr>
- <tr><td><b>前置引导 P1</b></td><td>✓</td><td>✓ 未询问时</td><td>—</td><td>同一套 UI</td></tr>
- <tr><td><b>去设置 P4</b></td><td>✓ 直达通知设置</td><td>✓ 直达通知设置(8+)</td><td>—</td><td>打不开退回系统设置</td></tr>
- <tr><td><b>未读红点</b></td><td>✓ 原生徽标</td><td>✓ 原生小圆点</td><td>✓ 自绘</td><td>只有红点、不显示条数</td></tr>
- </table>
- </div>
- <script>
- (function(){
- var root=document.documentElement,btns=document.querySelectorAll('.skin button');
- document.querySelectorAll('[data-clone]').forEach(function(el){
- var src=document.querySelector(el.getAttribute('data-clone'));
- if(src) el.innerHTML=src.innerHTML;
- });
- function set(t){
- root.setAttribute('data-theme',t);
- btns.forEach(function(b){b.classList.toggle('on',b.dataset.set===t)});
- document.querySelectorAll('.phone:not([data-lock])').forEach(function(p){p.setAttribute('data-theme',t)});
- try{localStorage.setItem('hh-skin',t)}catch(e){}
- }
- btns.forEach(function(b){b.addEventListener('click',function(){set(b.dataset.set)})});
- document.body.setAttribute('data-h',String(document.body.scrollHeight));
- var hash=(location.hash||'').replace('#','');
- var saved=null;try{saved=localStorage.getItem('hh-skin')}catch(e){}
- set(hash==='dark'||hash==='light'?hash:(saved||'light'));
- })();
- </script>
- </body>
- </html>
|