:root{--bg:#0e1117;--card:#171b24;--line:#262c38;--fg:#e6e8ee;--muted:#8a93a6;--up:#f2495c;--down:#1fbf75;--acc:#4f8cff;--warn:#f5a524;
--tab:58px;--safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px)}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.45 -apple-system,BlinkMacSystemFont,"PingFang SC","Helvetica Neue","Noto Sans CJK SC",sans-serif;overscroll-behavior-y:contain;height:auto;min-height:100%;overflow-y:auto;-webkit-text-size-adjust:100%}
#topbar{position:sticky;top:0;z-index:5;display:flex;justify-content:space-between;align-items:center;padding:calc(10px + var(--safe-t)) 14px 10px;background:rgba(14,17,23,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
#title{font-size:18px;font-weight:700}#topright{font-size:12px;color:var(--muted)}
main{padding:10px 10px calc(var(--tab) + var(--safe-b) + 14px)}
#tabbar{position:fixed;bottom:0;left:0;right:0;height:calc(var(--tab) + var(--safe-b));padding-bottom:var(--safe-b);display:flex;background:#12161f;border-top:1px solid var(--line);z-index:9}
#tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--muted);font-size:11px;text-decoration:none}
#tabbar a i{font-style:normal;font-size:20px;line-height:22px}#tabbar a.on{color:var(--acc)}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px;margin-bottom:10px}
.muted{color:var(--muted);font-size:12px}.up{color:var(--up)}.down{color:var(--down)}.flat{color:var(--muted)}
.disc{font-size:11px;color:#c9a227;background:#2a2415;border:1px solid #4a3d16;border-radius:10px;padding:8px 10px;margin:4px 0 10px}
.row{position:relative;overflow:hidden;border-bottom:1px solid var(--line)}
.row .inner{display:flex;align-items:center;padding:12px 6px;background:var(--bg);transition:transform .2s;position:relative;z-index:2}
.row .del{position:absolute;right:0;top:0;bottom:0;width:80px;background:var(--up);color:#fff;display:flex;align-items:center;justify-content:center;z-index:1;font-weight:600}
.nm{flex:1;min-width:0}.nm b{display:block;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nm small{color:var(--muted);font-size:12px}
.px{width:90px;text-align:right;font-size:17px;font-weight:600;font-variant-numeric:tabular-nums}
.pct{width:82px;margin-left:8px;text-align:center;border-radius:8px;padding:6px 0;font-weight:700;color:#fff;font-variant-numeric:tabular-nums}
.bgup{background:var(--up)}.bgdown{background:var(--down)}.bgflat{background:#3a4152}
.btn{background:var(--acc);color:#fff;border:0;border-radius:10px;padding:10px 14px;font-size:15px;font-weight:600}
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--fg)}.btn.sm{padding:6px 10px;font-size:13px}
input,select,textarea{width:100%;background:#0b0e14;border:1px solid var(--line);color:var(--fg);border-radius:10px;padding:10px;font-size:16px}
.flex{display:flex;gap:8px;align-items:center}.grow{flex:1}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.kpi{background:#0b0e14;border-radius:10px;padding:8px;text-align:center}.kpi b{display:block;font-size:18px}.kpi span{font-size:11px;color:var(--muted)}
.chips{display:flex;gap:6px;flex-wrap:wrap}.chip{background:#222838;border-radius:99px;padding:5px 10px;font-size:12px;color:#c9d1e3}
.seg{display:flex;background:#0b0e14;border-radius:10px;padding:3px;margin-bottom:8px}.seg a{flex:1;text-align:center;padding:7px 0;border-radius:8px;color:var(--muted);font-size:14px}.seg a.on{background:#2a3142;color:var(--fg)}
#detail{position:fixed;inset:0;background:var(--bg);z-index:20;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;touch-action:pan-y;padding-bottom:calc(20px + var(--safe-b))}
#detail .dh{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:10px;padding:calc(10px + var(--safe-t)) 12px 10px;background:rgba(14,17,23,.95);border-bottom:1px solid var(--line)}
.back{font-size:24px;width:32px}.hidden{display:none!important}
.chart{width:100%;border-radius:10px;overflow:hidden}
.score{font-size:40px;font-weight:800;line-height:1}.hint{font-size:20px;font-weight:800;padding:4px 12px;border-radius:10px}
.hint.买入, .hint.pos{background:var(--up)}.hint.卖出, .hint.neg{background:var(--down)}.hint.持有, .hint.mid{background:#3a4152}
.bar{height:6px;background:#0b0e14;border-radius:3px;overflow:hidden}.bar i{display:block;height:100%;background:var(--acc)}
table{width:100%;border-collapse:collapse;font-size:13px}td,th{padding:7px 4px;border-bottom:1px solid var(--line);text-align:right}td:first-child,th:first-child{text-align:left}th{color:var(--muted);font-weight:500}
.heat{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.heat div{border-radius:10px;padding:10px 6px;text-align:center;font-size:13px;color:#fff}.heat b{display:block;font-size:15px}
.ptr{text-align:center;color:var(--muted);font-size:12px;height:0;overflow:hidden;transition:height .2s}
#toast{position:fixed;left:50%;bottom:90px;transform:translateX(-50%);background:#2a3142;color:#fff;padding:9px 16px;border-radius:99px;font-size:14px;opacity:0;transition:opacity .25s;z-index:50;pointer-events:none;max-width:86%}
#toast.show{opacity:1}
#pinmask{position:fixed;inset:0;background:rgba(0,0,0,.8);z-index:60;display:flex;align-items:center;justify-content:center}.pinbox{width:80%;max-width:320px;display:flex;flex-direction:column;gap:10px}
.ladder .lv{display:flex;gap:8px;padding:8px 0;border-bottom:1px solid var(--line)}.ladder .lv b{min-width:46px;color:var(--up)}
.reason{padding:4px 0;font-size:14px}.reason:before{content:"• ";color:var(--acc)}
.alert-red{background:#3a1820;border:1px solid #6b2433;color:#ffb3bf;border-radius:10px;padding:8px;font-size:13px}
h3{margin:4px 0 10px;font-size:16px}
.sk{color:var(--muted);text-align:center;padding:30px 0}
.muted, .card > div { overflow-wrap: anywhere; } html, body { overflow-x: clip; } main{touch-action:pan-y}

.focus-card{border-left:3px solid #f5a524}
.hint{white-space:nowrap}

/* 弹层打开时锁住底层滚动；#detail 自身仍可纵向滑动 */
html.noscroll, body.noscroll { overflow: hidden !important; height: 100%; touch-action: none; }
#detail:not(.hidden) { overflow-y: auto; touch-action: pan-y; -webkit-overflow-scrolling: touch; }
html, body { touch-action: pan-y; }
/* v5.4：底部标签栏始终位于弹层之上，弹层打开时也能直接切换标签；弹层底部让出标签栏高度 */
#tabbar{z-index:30}
#detail{bottom:0;padding-bottom:calc(var(--tab) + 20px + var(--safe-b))}
/* v5.4 滚动修复：只让视口（文档本身）滚动。此前 html/body 都设了 overflow-y:auto + overscroll-behavior:contain，
   body 变成了一个“不能滚的滚动容器”，手指落在 body 区域时手势被它截住又不能向视口传递，表现为页面滑不动。 */
html,body{overflow-y:visible;overscroll-behavior-y:auto}
html{overflow-x:clip}body{overflow-x:clip}

.today{border:2px solid var(--acc);padding:14px}.ttitle{font-size:19px}
.tmsg{font-size:20px;font-weight:700;margin:8px 0;color:var(--fg)}.tmsg.tno{color:var(--muted)}
.tsec{border-radius:12px;padding:8px 10px;margin:8px 0}.tsech{font-weight:800;font-size:17px;margin-bottom:4px}
.tgreen{background:#12301f;border:1px solid #1fbf75}.tgreen .tsech{color:#1fbf75}
.tred{background:#341419;border:1px solid #f2495c}.tred .tsech{color:#f2495c}
.tgrey{background:#1e222c;border:1px solid #3a4152}.tgrey .tsech{color:var(--muted)}
.trow{padding:8px 0;border-top:1px solid #ffffff14}.trow:first-of-type{border-top:0}
.tname{font-size:17px;font-weight:700}.tname small{color:var(--muted);font-weight:400;font-size:12px}
.tbig{font-size:18px;font-weight:700;margin-top:2px}.tstop{color:#ffb4bd;font-weight:700;margin-top:2px}.treason{font-size:14px;margin-top:2px}
.tbtn{width:100%;margin-top:8px;padding:12px;font-size:16px}.tbuy{background:#1fbf75}.tsell{background:#f2495c}
.tdisc{font-size:11px;color:#c9a227;margin:8px 0 0}.trowc{padding:6px 0;border-bottom:1px solid var(--line)}
