feat: 初始提交(仅核心代码,已排除大文件)

This commit is contained in:
yangxiangyuan
2026-07-08 10:29:50 +08:00
commit be7c5842f1
623 changed files with 332897 additions and 0 deletions
+201
View File
@@ -0,0 +1,201 @@
:root {
--bg: #060b18;
--surface: #0d1526;
--surface-2: #121e36;
--surface-3: #192845;
--gold: #c9a84c;
--gold-lt: #e8c96a;
--gold-dk: #7a6330;
--text: #ddd8cc;
--muted: #6b7a99;
--dim: #3a4560;
--green: #22c55e;
--red: #ef4444;
--amber: #f59e0b;
--blue: #3b82f6;
--border: rgba(201,168,76,.14);
--border-md: rgba(201,168,76,.32);
--r: 12px;
--r-sm: 6px;
}
*{margin:0;padding:0;box-sizing:border-box;}
body{background:var(--bg);color:var(--text);font-family:'Noto Sans SC',sans-serif;min-height:100vh;overflow-x:hidden;}
.hd{display:flex;align-items:center;justify-content:space-between;padding:14px 28px;border-bottom:1px solid var(--border);background:var(--surface);position:sticky;top:0;z-index:200;}
.hd-brand{display:flex;align-items:center;gap:11px;}
.hd-emblem{width:40px;height:40px;border-radius:10px;background:linear-gradient(135deg,var(--gold),var(--gold-dk));display:flex;align-items:center;justify-content:center;font-family:'Noto Serif SC',serif;font-size:20px;font-weight:700;color:#060b18;letter-spacing:-.5px;}
.hd-title{font-family:'Noto Serif SC',serif;font-size:24px;font-weight:700;color:var(--gold-lt);letter-spacing:.08em;}
.hd-sub{font-size:13px;color:var(--muted);letter-spacing:.06em;margin-top:1px;}
.hd-search{display:flex;align-items:center;gap:8px;}
.hd-search-input{background:var(--surface-2);border:1px solid var(--border-md);border-radius:20px;padding:8px 18px;font-size:15px;color:var(--text);font-family:'JetBrains Mono',monospace;width:220px;outline:none;transition:border-color .2s;}
.hd-search-input:focus{border-color:var(--gold);}
.hd-version{background:var(--surface-2);border:1px solid var(--border-md);border-radius:20px;padding:7px 14px;font-size:13px;color:var(--gold);font-family:'Noto Sans SC',sans-serif;outline:none;cursor:pointer;transition:border-color .2s;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='%23c9a84c'%3E%3Cpath d='M0 0l5 6 5-6z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px;}
.hd-version:hover{border-color:var(--gold);}
.hd-version:focus{border-color:var(--gold-lt);}
.hd-search-btn{background:rgba(201,168,76,.1);border:1px solid var(--border-md);border-radius:20px;padding:8px 18px;color:var(--gold);font-size:14px;cursor:pointer;font-weight:600;transition:all .15s;white-space:nowrap;}
.hd-search-btn:hover{background:rgba(201,168,76,.2);}
.hd-search-btn:disabled{opacity:.5;cursor:default;}
.hd-ticker{display:flex;flex-direction:column;align-items:center;}
.hd-code{font-family:'JetBrains Mono',monospace;font-size:16px;color:var(--gold);font-weight:500;}
.hd-fname{font-size:13px;color:var(--muted);}
.hd-price-block{text-align:right;}
.hd-price{font-family:'JetBrains Mono',monospace;font-size:30px;font-weight:400;color:var(--text);}
.hd-chg{font-family:'JetBrains Mono',monospace;font-size:14px;}
.hd-chg.up{color:var(--green);}
.hd-chg.dn{color:var(--red);}
.hd-right{display:flex;flex-direction:column;align-items:flex-end;gap:5px;}
.live-badge{background:rgba(201,168,76,.1);border:1px solid var(--border-md);border-radius:20px;padding:4px 14px;font-size:13px;color:var(--gold);letter-spacing:.04em;display:flex;align-items:center;gap:6px;}
.live-dot{width:6px;height:6px;border-radius:50%;background:var(--gold);animation:blink 1.4s infinite;}
@keyframes blink{0%,100%{opacity:1;}50%{opacity:.25;}}
.hd-date{font-family:'JetBrains Mono',monospace;font-size:13px;color:var(--muted);}
.layout{display:grid;grid-template-columns:236px 560px 1fr;min-height:calc(100vh - 67px);padding-bottom:56px;}
.sb{padding:20px 14px;border-right:1px solid var(--border);overflow-y:auto;}
.card{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r);padding:15px;margin-bottom:14px;}
.co-name{font-family:'Noto Serif SC',serif;font-size:20px;font-weight:600;color:var(--text);}
.co-sector{font-size:13px;color:var(--muted);margin-bottom:11px;}
.s-row{display:flex;justify-content:space-between;align-items:center;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.03);}
.s-row:last-child{border-bottom:none;}
.s-lbl{font-size:13px;color:var(--muted);}
.s-val{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--text);font-weight:500;}
.s-val.gn{color:var(--green);}
.s-val.gd{color:var(--gold);}
.sb-h{font-size:12px;color:var(--dim);text-transform:uppercase;letter-spacing:.1em;margin:14px 0 7px;padding-left:2px;}
.con-bar{display:flex;gap:3px;border-radius:3px;overflow:hidden;margin-bottom:7px;}
.con-seg{height:7px;border-radius:1px;}
.con-seg.b{background:var(--green);}
.con-seg.h{background:var(--amber);}
.con-seg.s{background:var(--red);}
.con-lbls{display:flex;justify-content:space-between;}
.c-lbl{display:flex;align-items:center;gap:3px;font-size:12px;color:var(--muted);}
.c-dot{width:5px;height:5px;border-radius:50%;}
.c-dot.b{background:var(--green);}
.c-dot.h{background:var(--amber);}
.c-dot.s{background:var(--red);}
.tp-row{display:flex;justify-content:space-between;align-items:center;padding:4px 0;}
.prog-item{display:flex;align-items:center;gap:7px;padding:4px 0;cursor:pointer;transition:opacity .2s;}
.prog-item:hover{opacity:1!important;}
.prog-av{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0;}
.prog-name{font-size:13px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.prog-area{font-size:12px;color:var(--dim);}
.prog-vrd{font-size:12px;font-weight:600;white-space:nowrap;}
.ta{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:24px 16px 16px;}
.ta-hint{font-family:'Noto Serif SC',serif;font-size:15px;color:var(--muted);letter-spacing:.1em;margin-bottom:18px;}
.tc-wrap{position:relative;width:516px;height:516px;flex-shrink:0;}
.ring-outer{position:absolute;inset:0;border-radius:50%;border:1px dashed rgba(201,168,76,.08);}
.ring-mid{position:absolute;inset:80px;border-radius:50%;border:1px dashed rgba(201,168,76,.06);}
.ts{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:232px;height:232px;border-radius:50%;background:radial-gradient(circle at 38% 35%,#192845,#090f1e);border:1.5px solid var(--border-md);display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:2;box-shadow:0 0 80px rgba(201,168,76,.04),inset 0 0 60px rgba(0,0,0,.6);}
@keyframes ts-pulse{0%{box-shadow:0 0 0 0 rgba(201,168,76,.12),inset 0 0 60px rgba(0,0,0,.6);}70%{box-shadow:0 0 0 14px rgba(201,168,76,0),inset 0 0 60px rgba(0,0,0,.6);}100%{box-shadow:0 0 0 0 rgba(201,168,76,0),inset 0 0 60px rgba(0,0,0,.6);}}
.ts{animation:ts-pulse 3.2s ease-out infinite;}
.ts-code{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--gold);letter-spacing:.1em;}
.ts-name{font-family:'Noto Serif SC',serif;font-size:19px;font-weight:600;color:var(--text);margin:2px 0 6px;}
.ts-price{font-family:'JetBrains Mono',monospace;font-size:31px;font-weight:300;color:var(--gold-lt);}
.ts-chg{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--green);margin-top:2px;}
.seat{position:absolute;display:flex;flex-direction:column;align-items:center;gap:5px;cursor:pointer;z-index:10;transition:transform .18s ease;}
.seat:hover{transform:scale(1.1)!important;}
.seat:hover .seat-av{border-color:var(--gold);box-shadow:0 0 18px rgba(201,168,76,.45);}
.seat.active .seat-av{border-color:var(--gold-lt);box-shadow:0 0 22px rgba(201,168,76,.6);}
.seat-av{width:50px;height:50px;border-radius:50%;border:2px solid var(--border-md);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;font-family:'Noto Sans SC',sans-serif;transition:all .18s;position:relative;}
.seat-loading{position:absolute;inset:-3px;border-radius:50%;border:2px solid transparent;border-top-color:var(--gold);animation:spin .8s linear infinite;display:none;}
.seat.loading .seat-loading{display:block;}
.seat.loading .seat-badge{display:none;}
@keyframes spin{to{transform:rotate(360deg);}}
.seat-badge{position:absolute;bottom:-3px;right:-3px;width:16px;height:16px;border-radius:50%;font-size:10px;display:flex;align-items:center;justify-content:center;border:1.5px solid var(--bg);}
.sb-buy{background:var(--green);color:#fff;}
.sb-hold{background:var(--amber);color:#fff;}
.sb-sell{background:var(--red);color:#fff;}
.seat-nm{font-size:13px;font-weight:600;color:var(--text);white-space:nowrap;}
.seat-rl{font-size:12px;color:var(--muted);white-space:nowrap;max-width:80px;overflow:hidden;text-overflow:ellipsis;text-align:center;}
@keyframes seat-in{from{opacity:0;transform:scale(.4);}to{opacity:1;transform:scale(1);}}
.ceo-bar{display:flex;flex-direction:column;align-items:center;gap:5px;margin-top:14px;}
.ceo-av{width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg,var(--gold),var(--gold-dk));display:flex;align-items:center;justify-content:center;font-weight:700;font-size:17px;color:#060b18;border:2px solid var(--gold);box-shadow:0 0 28px rgba(201,168,76,.3);font-family:'Noto Serif SC',serif;}
.ceo-lbl{font-size:14px;font-weight:600;color:var(--gold);letter-spacing:.04em;}
.ceo-sub{font-size:12px;color:var(--muted);}
.ceo-arr{font-size:18px;color:var(--border-md);margin-bottom:6px;line-height:1;}
.rp{border-left:1px solid var(--border);overflow-y:auto;background:var(--surface);}
::-webkit-scrollbar{width:3px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--border-md);border-radius:3px;}
.rp-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:10px;padding:48px 32px;text-align:center;}
.rp-empty-glyph{font-size:56px;opacity:.12;font-family:'Noto Serif SC',serif;}
.rp-empty-h{font-family:'Noto Serif SC',serif;font-size:19px;color:var(--text);font-weight:600;line-height:1.5;}
.rp-empty-p{font-size:15px;color:var(--muted);line-height:1.7;margin-top:6px;}
.rp-content{padding:22px;display:none;}
.rp-content.show{display:block;}
.rp-hd{margin-bottom:18px;padding-bottom:15px;border-bottom:1px solid var(--border);}
.rp-analyst-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;}
.rp-av{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:15px;border:2px solid var(--border-md);}
.rp-nm{font-weight:600;font-size:17px;color:var(--text);}
.rp-tl{font-size:13px;color:var(--muted);}
.rp-title{font-family:'Noto Serif SC',serif;font-size:21px;font-weight:600;color:var(--text);line-height:1.45;margin-bottom:8px;}
.rp-badges{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.vb{padding:4px 14px;border-radius:20px;font-size:13px;font-weight:700;letter-spacing:.04em;}
.vb.buy{background:rgba(34,197,94,.12);color:var(--green);border:1px solid rgba(34,197,94,.28);}
.vb.hold{background:rgba(245,158,11,.12);color:var(--amber);border:1px solid rgba(245,158,11,.28);}
.vb.sell{background:rgba(239,68,68,.12);color:var(--red);border:1px solid rgba(239,68,68,.28);}
.sb2{font-family:'JetBrains Mono',monospace;font-size:13px;color:var(--gold);background:rgba(201,168,76,.09);padding:4px 10px;border-radius:20px;border:1px solid var(--border-md);}
.exec-sum{background:var(--surface-2);border-radius:8px;padding:14px 16px;margin-bottom:16px;border-left:3px solid;}
.sec-h{font-size:13px;text-transform:uppercase;letter-spacing:.1em;color:var(--gold);font-weight:600;margin-bottom:7px;}
.sec-body{font-size:15px;line-height:1.85;color:var(--text);}
.sec-body pre{white-space:pre-wrap;font-family:inherit;margin:0;}
.sec{margin-bottom:18px;}
.rp-loading{display:flex;align-items:center;justify-content:center;gap:8px;padding:24px;color:var(--muted);font-size:15px;}
.rp-error{color:var(--red);font-size:14px;padding:14px;background:rgba(239,68,68,.08);border-radius:8px;margin-bottom:12px;}
.bot{position:fixed;bottom:0;left:0;right:0;background:var(--surface);border-top:1px solid var(--border);padding:9px 24px;display:flex;align-items:center;gap:20px;z-index:200;}
.bot-lbl{font-size:13px;color:var(--muted);white-space:nowrap;}
.bot-chips{display:flex;gap:5px;overflow-x:auto;flex:1;scrollbar-width:none;}
.bot-chips::-webkit-scrollbar{display:none;}
.chip{display:flex;align-items:center;gap:4px;padding:4px 12px;border-radius:20px;border:1px solid var(--border);font-size:13px;background:var(--surface-2);cursor:pointer;white-space:nowrap;transition:all .14s;color:var(--text);}
.chip:hover{border-color:var(--border-md);}
.chip.active{border-color:var(--gold);background:rgba(201,168,76,.08);color:var(--gold);}
.chip-d{width:5px;height:5px;border-radius:50%;}
.chip.loading{opacity:.5;pointer-events:none;}
.qwen-status{display:flex;align-items:center;gap:5px;white-space:nowrap;font-size:13px;color:var(--gold);}
.modal{position:fixed;inset:0;background:rgba(0,0,0,.65);display:none;align-items:center;justify-content:center;z-index:999;}
.modal.show{display:flex;}
.modal-body{background:var(--surface);border:1px solid var(--border-md);border-radius:var(--r);width:min(700px,94vw);max-height:80vh;overflow-y:auto;}
.ydp-dialog-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border);}
.ydp-dialog-head h3{font-family:'Noto Serif SC',serif;font-size:18px;color:var(--gold-lt);}
.ydp-dialog-close{background:none;border:none;color:var(--muted);font-size:20px;cursor:pointer;padding:2px 6px;}
.ydp-dialog-close:hover{color:var(--text);}
.ydp-dialog-body{padding:16px 18px;max-height:60vh;overflow-y:auto;}
.ydp-dialog-body .log-line{font-family:'JetBrains Mono',monospace;font-size:13px;padding:3px 0;color:var(--muted);border-bottom:1px solid rgba(255,255,255,.02);}
.ydp-dialog-body .log-line.ok{color:var(--green);}
.ydp-dialog-body .log-line.err{color:var(--red);}
.ydp-dialog-body .log-line.info{color:var(--gold);}
.ydp-dialog-footer{padding:12px 18px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end;}
.ydp-dialog-footer button{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);padding:8px 18px;color:var(--text);font-size:13px;cursor:pointer;}
.ydp-dialog-footer button:hover{background:var(--surface-3);}
.ydp-dialog-footer button.primary{background:rgba(201,168,76,.1);border-color:var(--border-md);color:var(--gold);}
.stock-empty{text-align:center;padding:48px;color:var(--muted);}
.stock-empty-h{font-family:'Noto Serif SC',serif;font-size:21px;color:var(--text);margin-bottom:8px;}
.stock-empty-p{font-size:15px;}
.image-bar{padding:8px 28px;background:var(--surface);border-bottom:1px solid var(--border);}
.image-bar-inner{display:flex;align-items:center;gap:24px;}
.image-upload-area{display:flex;align-items:center;gap:10px;}
.image-upload-btn{background:var(--surface-2);border:1px solid var(--border-md);border-radius:20px;padding:6px 16px;font-size:13px;color:var(--gold);cursor:pointer;transition:all .15s;}
.image-upload-btn:hover{background:rgba(201,168,76,.15);}
.image-preview-wrap{position:relative;display:inline-flex;}
.image-preview-wrap img{width:40px;height:40px;border-radius:6px;border:1px solid var(--border-md);object-fit:cover;}
.image-remove-btn{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;background:var(--red);color:#fff;border:none;font-size:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1;}
.profile-edit-area{display:flex;align-items:center;gap:10px;}
.profile-edit-btn{background:var(--surface-2);border:1px solid var(--border-md);border-radius:20px;padding:6px 16px;font-size:13px;color:var(--gold);cursor:pointer;transition:all .15s;}
.profile-edit-btn:hover{background:rgba(201,168,76,.15);}
.profile-summary{font-size:12px;color:var(--muted);}
.pf-row{padding:4px 18px;display:flex;align-items:center;gap:10px;}
.pf-row label{width:140px;font-size:13px;color:var(--muted);flex-shrink:0;}
.pf-row input{flex:1;background:var(--surface-2);border:1px solid var(--border);border-radius:6px;padding:6px 10px;font-size:13px;color:var(--text);outline:none;}
.pf-row input:focus{border-color:var(--gold);}
.pf-row2{display:flex;gap:12px;padding:4px 18px;}
.pf-row2 .pf-row{padding:4px 0;}
.pf-row2 .pf-row label{width:auto;min-width:60px;}
.pf-row2 .pf-row input{width:120px;flex:none;}