*{margin:0;padding:0;box-sizing:border-box}
:root{
--bg0:#0a0a0a;--bg1:#111;--bg2:#1a1a1a;--bg3:#252525;
--text0:#e0e0e0;--text1:#888;--text2:#555;
--bd:#2a2a2a;
--green:#00d87a;--red:#ff4757;--yellow:#ffa502;--blue:#3498db;--purple:#9b59b6;
}
body.light-theme{
--bg0:#f5f5f5;--bg1:#fff;--bg2:#fafafa;--bg3:#eee;
--text0:#1a1a1a;--text1:#555;--text2:#999;
--bd:#ddd;
--green:#16a34a;--red:#dc2626;--yellow:#d97706;--blue:#2563eb;
}
html{overflow-x:hidden}
body{background:var(--bg0);color:var(--text0);font-family:'Microsoft YaHei','微软雅黑',sans-serif;font-size:12px;line-height:1.4;overflow-x:hidden}
.mono{font-family:'JetBrains Mono',monospace}

/* HEADER */
.header{background:var(--bg1);padding:12px 20px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--bd);position:sticky;top:0;z-index:100}
.header-l{display:flex;align-items:center;gap:16px}
.logo{display:flex;align-items:center;gap:10px}
.logo-i{width:36px;height:36px;background:linear-gradient(135deg,var(--blue),var(--purple));border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:18px}
.logo-t{font-family:'JetBrains Mono',monospace;font-size:15px;font-weight:600;color:var(--blue);letter-spacing:1px}

.sym-group{display:flex;align-items:center;gap:8px}
.sym-group>label{font-size:11px;color:var(--text2);font-weight:500}
.sym-wrap{position:relative}
.sym-wrap select{padding:8px 32px 8px 12px;background:var(--bg2);border:1px solid var(--bd);border-radius:6px;color:var(--text0);font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:600;cursor:pointer;min-width:150px;appearance:none}
.sym-wrap select:hover{border-color:var(--blue)}
.sym-wrap .arr{position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none;color:var(--text2);font-size:9px}
.sym-price{font-family:'JetBrains Mono',monospace;font-size:17px;font-weight:700;padding:6px 14px;background:var(--bg2);border-radius:6px;border:1px solid var(--bd)}
.sym-price.up{color:var(--green)}
.sym-price.down{color:var(--red)}
.mgr-btn{padding:7px 12px;background:var(--blue);color:#fff;border:none;border-radius:5px;font-size:11px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:5px}
.mgr-btn:hover{background:#2980b9}

.header-r{display:flex;align-items:center;gap:18px}
.hstat{display:flex;flex-direction:column;align-items:flex-end;gap:2px}
.hstat-l{font-size:9px;color:var(--text2)}
.hstat-v{font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:600}
.hstat-v.gr{color:var(--green)}
.clock{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--text1);padding:7px 14px;background:var(--bg2);border:1px solid var(--bd);border-radius:5px}

/* LAYOUT */
.flex{display:grid;grid-template-columns:190px 1fr;height:calc(100vh - 72px)}

/* SIDEBAR */
.side{background:var(--bg1);border-right:1px solid var(--bd);overflow-y:auto}
.menu{padding:8px 6px 14px}
.mt{font-size:10px;color:rgba(255,255,255,0.35);text-transform:uppercase;letter-spacing:1px;padding:10px 16px 4px;font-weight:600}
.mt:first-child{padding-top:6px}
.mi{display:flex;align-items:center;gap:7px;padding:8px 10px;margin:1px 4px;border-radius:7px;cursor:pointer;font-size:12px;color:rgba(255,255,255,0.65);transition:all .15s}
.mi:hover{background:rgba(255,255,255,0.05);color:#e0e0e0}
.mi.on{background:rgba(59,130,246,0.15);color:#60a5fa}

/* PAGE SECTIONS */
.page{display:none}
.page.on{display:block}
.page-h{font-size:24px;font-weight:700;margin-bottom:20px;color:var(--text0)}
.page-sub{font-size:13px;color:var(--text1);margin-bottom:30px}
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;margin-bottom:24px}
.card{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:20px}
.card-t{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}
.card-v{font-size:20px;font-weight:700;margin-bottom:4px}
.card-d{font-size:11px;color:var(--text1)}
.placeholder-tx{text-align:center;padding:80px 20px;color:var(--text1)}
.placeholder-tx h3{font-size:18px;margin-bottom:12px;color:var(--text0)}
.placeholder-tx p{font-size:13px;line-height:1.8;max-width:600px;margin:0 auto}
.set-group{margin-bottom:24px}
.set-h{font-size:13px;font-weight:600;margin-bottom:12px;color:var(--text0);padding-bottom:8px;border-bottom:1px solid var(--bd)}
.set-row{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid var(--bd)}
.set-l{font-size:12px}
.set-r{display:flex;align-items:center;gap:12px}
.set-r select,.set-r input{padding:6px 10px;background:var(--bg2);border:1px solid var(--bd);border-radius:5px;color:var(--text0);font-size:11px}
.toggle{width:40px;height:20px;background:var(--bg3);border-radius:10px;position:relative;cursor:pointer;transition:.2s}
.toggle.on{background:var(--blue)}
.toggle::after{content:'';position:absolute;width:16px;height:16px;background:#fff;border-radius:50%;top:2px;left:2px;transition:.2s}
.toggle.on::after{left:22px}
.btn-sm{padding:5px 12px;border-radius:4px;border:none;font-size:11px;cursor:pointer;background:var(--blue);color:#fff}
.btn-sm:hover{background:#2980b9}
.mi-i{width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:14px;border-radius:4px;flex-shrink:0}
.mi.on .mi-i{opacity:1}
.mi-t{font-size:12px;font-weight:500;color:inherit}
.mi.on .mi-t{color:#60a5fa}
.mi-b{margin-left:auto;font-size:10px;padding:2px 7px;border-radius:8px;font-weight:600}
.mi-b.gr{background:var(--green);color:#000}
.mi-b.yl{background:var(--yellow)}
.mi-b.bl{background:var(--blue);color:#fff}
.mdiv{height:1px;background:var(--bd);margin:6px 14px}

/* MAIN */
.main{overflow:auto;background:var(--bg0)}

/* SECTION */
.sec{background:var(--bg1);border-bottom:1px solid var(--bd);padding:16px 20px}
.sh{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.st{font-size:11px;font-weight:600;color:var(--text1);text-transform:uppercase;letter-spacing:1px;display:flex;align-items:center;gap:8px}
.sti{width:22px;height:22px;background:var(--bg2);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:11px}
.lb{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--green);padding:3px 10px;background:rgba(0,216,122,.1);border:1px solid rgba(0,216,122,.3);border-radius:10px}
.lb-d{width:5px;height:5px;background:var(--green);border-radius:50%;animation:pulse 2s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}

/* GEX CARDS */
.gc{display:grid;grid-template-columns:repeat(9,1fr);gap:10px}
.gcard{background:var(--bg2);border-radius:5px;padding:12px;border:1px solid var(--bd)}
.gcard:hover{border-color:var(--blue);transform:translateY(-1px)}
.gl{font-size:9px;color:var(--text2);text-transform:uppercase;margin-bottom:5px}
.gv{font-family:'JetBrains Mono',monospace;font-size:14px;font-weight:600}
.gv.gr{color:var(--green)}
.gv.rd{color:var(--red)}
.gv.pu{color:var(--purple)}
.gs{font-size:9px;color:var(--text2);margin-top:3px}

.gs{font-size:9px;color:var(--text2);margin-top:3px}

/* Z-SCORE */
.zsc{background:var(--bg2);border-radius:5px;padding:12px;border:1px solid var(--bd)}
.zsc:hover{border-color:var(--blue);transform:translateY(-1px)}
.zsc.z-buy{border-color:var(--green);background:rgba(0,216,122,.08)}
.zsc.z-sell{border-color:var(--red);background:rgba(255,71,87,.08)}
.zsc.z-hold{border-color:var(--text2);background:var(--bg2)}
.zscl{font-size:9px;color:var(--text2);text-transform:uppercase;margin-bottom:5px}
.zscv{font-family:'JetBrains Mono',monospace;font-size:14px;font-weight:600}
.zscv.zg{color:var(--green)}
.zscv.zr{color:var(--red)}
.zscv.zy{color:var(--yellow)}
.zscs{height:4px;border-radius:2px;background:var(--bg1);overflow:hidden;margin-top:6px}
.zscs-f{height:100%;border-radius:2px}

/* Z-SCORE gcard styles */
.gcard.z-buy{border-color:var(--green);background:rgba(0,216,122,.08)}
.gcard.z-sell{border-color:var(--red);background:rgba(255,71,87,.08)}
.gcard.z-hold{border-color:var(--text2)}
.wws{padding:16px 20px;background:var(--bg1);border-bottom:1px solid var(--bd)}
.wwc{position:relative;height:200px;background:var(--bg2);border-radius:8px;border:1px solid var(--bd);overflow:hidden;margin-top:12px}
.ww-water{position:absolute;bottom:0;left:0;right:0;height:100px;background:linear-gradient(180deg,rgba(52,152,219,.08),rgba(52,152,219,.15),rgba(52,152,219,.25))}
.ww-waves{position:absolute;width:200%;height:100%;animation:wave 6s linear infinite}
@keyframes wave{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}
.ww-waves svg{width:100%;height:100%}
.ww-waves path{fill:rgba(52,152,219,.25)}
.ww-walls{position:absolute;top:0;left:0;right:0;bottom:0}
.ww-wall{position:absolute;bottom:0;display:flex;flex-direction:column;align-items:center;cursor:pointer;transform:translateX(-50%);transition:transform .2s}
.ww-wall:hover{transform:translateX(-50%) scale(1.06)}
.ww-block{position:relative;border-radius:6px 6px 0 0;border:2px solid var(--red);border-bottom:none;min-width:72px;background:linear-gradient(180deg,rgba(255,71,87,.5),rgba(255,71,87,.3),rgba(255,71,87,.15))}
.ww-block.call{border-color:var(--green);background:linear-gradient(180deg,rgba(0,216,122,.5),rgba(0,216,122,.3),rgba(0,216,122,.15))}
.ww-block.big{min-width:90px}
.ww-val{position:absolute;top:-22px;left:50%;transform:translateX(-50%);font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:600;white-space:nowrap;background:var(--bg2);padding:3px 8px;border-radius:3px;border:1px solid var(--bd)}
.ww-val small{display:block;font-size:8px;color:var(--text2)}
.ww-strike{font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;margin-top:6px}
.ww-type{font-size:8px;color:var(--text2);margin-top:1px}

/* PRICE MARKER */
.pm{position:absolute;top:8px;bottom:8px;width:6px;background:linear-gradient(180deg,var(--yellow),rgba(255,165,2,.4));border-radius:3px;box-shadow:0 0 16px rgba(255,165,2,.5);z-index:10;transform:translateX(-50%)}
.pm-mg{position:absolute;top:8px;bottom:28px;border-left:2px dashed var(--purple);z-index:9;pointer-events:none}
.pm-mg-dot{position:absolute;top:-4px;left:-5px;width:8px;height:8px;border-radius:50%;background:var(--purple);border:2px solid var(--bg2)}
.pm-mg-label{position:absolute;bottom:-18px;left:-14px;font-size:9px;color:var(--purple);white-space:nowrap;font-family:'JetBrains Mono',monospace}
.pm-pw{position:absolute;top:8px;bottom:28px;border-left:2px dashed var(--red);z-index:9;pointer-events:none}
.pm-pw-label{position:absolute;bottom:-18px;left:-20px;font-size:9px;color:var(--red);white-space:nowrap;font-family:'JetBrains Mono',monospace}
.pm-cw{position:absolute;top:8px;bottom:28px;border-left:2px dashed var(--green);z-index:9;pointer-events:none}
.pm-cw-label{position:absolute;bottom:-18px;left:-22px;font-size:9px;color:var(--green);white-space:nowrap;font-family:'JetBrains Mono',monospace}
.pm-labels{position:absolute;bottom:-28px;left:0;right:0;display:flex;justify-content:space-between;padding:0 3%;font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--text2)}
.legend{display:flex;justify-content:center;gap:36px;margin-top:40px}
.leg{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text1)}
.leg-b{width:20px;height:28px;border-radius:3px 3px 0 0;border:2px solid;border-bottom:none}
.leg-b.put{background:rgba(255,71,87,.35);border-color:var(--red)}
.leg-b.call{background:rgba(0,216,122,.35);border-color:var(--green)}
.leg-b.mg{width:20px;height:0;border-top:2px dashed var(--purple);margin:auto 0}
.x1x2-row{display:flex;align-items:center;gap:8px}
.x1x2-lbl{font-size:10px;color:var(--text2);min-width:100px}
.x1x2-val{font-size:11px;color:var(--text0);font-family:'JetBrains Mono',monospace}
.leg-d{width:12px;height:12px;background:var(--yellow);border-radius:50%}

/* DETAIL */
.dsec{padding:16px 20px;background:var(--bg1);border-bottom:1px solid var(--bd)}
.dg{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.dc{background:var(--bg2);border-radius:6px;padding:14px;border:1px solid var(--bd)}
.dch{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.dct{font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:600}
.dctp{font-size:9px;padding:2px 7px;border-radius:3px;font-weight:600}
.dctp.put{background:rgba(255,71,87,.2);color:var(--red)}
.dctp.call{background:rgba(0,216,122,.2);color:var(--green)}
.dcd{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.dci{padding:7px;background:var(--bg1);border-radius:3px}
.dcl{font-size:8px;color:var(--text2);margin-bottom:3px}
.dcv{font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:600}

/* FOOTER */
.ft{background:var(--bg1);border-top:1px solid var(--bd);padding:10px 20px;display:flex;justify-content:space-between;font-size:10px;color:var(--text2)}
.ft a{color:var(--text1);text-decoration:none;margin-right:16px}
.ft a:hover{color:var(--text0)}

/* MODAL */
.mo{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.8);z-index:1000;justify-content:center;align-items:center}
.mo.on{display:flex}
.md{background:var(--bg1);border-radius:10px;border:1px solid var(--bd);width:520px;max-height:80vh;overflow:hidden;animation:mfade .25s}
@keyframes mfade{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
.mh{padding:14px 18px;border-bottom:1px solid var(--bd);display:flex;justify-content:space-between;align-items:center}
.mht{font-size:13px;font-weight:600}
.mx{width:26px;height:26px;border-radius:5px;background:var(--bg2);border:none;color:var(--text1);font-size:13px;cursor:pointer}
.mx:hover{background:var(--bg3);color:var(--text0)}
.mb{padding:18px;overflow-y:auto;max-height:60vh}
.mbt{width:100%;border-collapse:collapse;margin-bottom:14px}
.mbt th,.mbt td{padding:10px;text-align:left;border-bottom:1px solid var(--bd);font-size:11px}
.mbt th{font-weight:600;color:var(--text2);text-transform:uppercase;letter-spacing:.5px}
.mbt tr:hover td{background:var(--bg2)}
.mbt td.c{font-family:'JetBrains Mono',monospace;font-weight:600}
.ac{padding:4px 8px;border-radius:3px;border:none;font-size:10px;font-weight:600;cursor:pointer}
.ac.ae{background:var(--blue);color:#fff}
.ac.ad{background:var(--red);color:#fff}

/* FORM */
.si{width:100%;padding:8px 12px;background:var(--bg2);border:1px solid var(--bd);border-radius:5px;color:var(--text0);font-size:11px}
.si:focus{outline:none;border-color:var(--blue)}
.sr{position:relative;margin-bottom:14px}
.sr input{width:100%;padding:8px 34px 8px 12px;background:var(--bg2);border:1px solid var(--bd);border-radius:5px;color:var(--text0);font-size:11px}
.sr input:focus{outline:none;border-color:var(--blue)}
.sr i{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--text2);font-size:11px}
.as{padding-top:14px;border-top:1px solid var(--bd);margin-top:14px}
.as-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.as-t{font-size:11px;font-weight:600;color:var(--text1)}
.as-tg{font-size:10px;color:var(--blue);cursor:pointer;text-decoration:underline}
.af{display:none}
.af.on{display:block}
.fg{margin-bottom:12px}
.fl{display:block;font-size:10px;color:var(--text1);margin-bottom:4px}
.fr{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.ff{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}
.btn{padding:8px 18px;border-radius:5px;border:none;font-size:11px;font-weight:600;cursor:pointer}
.btn-p{background:var(--blue);color:#fff}
.btn-s{background:var(--bg2);color:var(--text1)}
.btn-g{background:var(--green);color:#000}

/* EXPOSURE SECTION */
.exs{padding:16px 20px;background:var(--bg1);border-bottom:1px solid var(--bd)}
.exg{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.exc{background:var(--bg2);border-radius:6px;padding:16px;border:1px solid var(--bd)}
.exh{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.ext{font-size:11px;font-weight:600;color:var(--text1)}
.exb{font-size:9px;padding:3px 8px;border-radius:8px;color:var(--text2);background:var(--bg1)}
.exv{font-family:'JetBrains Mono',monospace;font-size:22px;font-weight:700;margin-bottom:10px}
.exd{display:flex;height:10px;border-radius:5px;overflow:hidden;background:var(--bg1);margin-bottom:8px}
.exdb{height:100%}
.exdb.c{background:linear-gradient(90deg,var(--green),var(--blue))}
.exdb.p{background:linear-gradient(90deg,var(--blue),var(--red))}
.exl{display:flex;justify-content:space-between;font-size:10px;color:var(--text1)}
.exl span{font-family:'JetBrains Mono',monospace;font-weight:600}
.exl .c{color:var(--green)}
.exl .p{color:var(--red)}
.exw{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.exw-i{background:var(--bg1);padding:12px;border-radius:5px;border:1px solid var(--bd)}
.exwl{font-size:9px;color:var(--text2);text-transform:uppercase;margin-bottom:5px}
.exwv{font-family:'JetBrains Mono',monospace;font-size:14px;font-weight:600}
.exwv.r{color:var(--red)}
.exwv.g{color:var(--green)}
.exws{font-size:9px;color:var(--text2);margin-top:3px}
.peak{display:flex;justify-content:space-between;align-items:center;margin-top:12px;padding:10px;background:linear-gradient(135deg,rgba(155,89,182,.1),rgba(155,89,182,.05));border-radius:5px;border:1px solid rgba(155,89,182,.3)}
.peak-l{font-size:9px;color:var(--text2)}
.peak-v{font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;color:var(--purple)}
.peak-r{font-size:10px;color:var(--text1)}
.peak-r strong{color:var(--purple);font-size:12px}

/* PROFILE */
.prs{padding:16px 20px;background:var(--bg1);border-bottom:1px solid var(--bd)}
.prg{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:10px}
.prc{background:var(--bg2);border-radius:5px;padding:12px;border:1px solid var(--bd);text-align:center}
.prv{font-family:'JetBrains Mono',monospace;font-size:18px;font-weight:700;margin-bottom:4px}
.prv.gr{color:var(--green)}
.prv.rd{color:var(--red)}
.prv.pu{color:var(--purple)}
.prl{font-size:9px;color:var(--text2)}
.prs{font-size:9px;color:var(--text2);margin-top:4px}

::-webkit-scrollbar{width:6px}
::-webkit-scrollbar-track{background:var(--bg1)}
::-webkit-scrollbar-thumb{background:var(--bg3);border-radius:3px}
#page-cockpit .cp2-card .cb{scrollbar-width:thin}
#page-cockpit .cp2-card .cb::-webkit-scrollbar{width:5px;height:5px}
#page-cockpit .cp2-card .cb::-webkit-scrollbar-thumb{border-radius:3px}

/* ADDITIONAL PAGE STYLES */
.sent-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:20px}
.sent-card{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:16px}
.sent-h{font-size:11px;color:var(--text2);margin-bottom:8px}
.sent-v{font-size:24px;font-weight:700;margin-bottom:4px}
.sent-bar{height:8px;border-radius:4px;background:var(--bg1);overflow:hidden;margin-top:8px}
.sent-bar-f{height:100%;border-radius:4px}
.sent-list{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:16px}
.sent-list h4{font-size:12px;margin-bottom:12px;color:var(--text0)}
.sent-item{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--bd)}
.sent-item:last-child{border-bottom:none}
.sent-icon{width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:14px;background:var(--bg1)}
.sent-tx{flex:1}
.sent-tx-t{font-size:12px;color:var(--text0);margin-bottom:2px}
.sent-tx-d{font-size:10px;color:var(--text1)}
.sent-tag{font-size:10px;padding:3px 8px;border-radius:4px;font-weight:600}
.sent-tag.up{background:rgba(0,216,122,.15);color:var(--green)}
.sent-tag.dn{background:rgba(255,71,87,.15);color:var(--red)}

.mk-grid{display:block;margin-bottom:20px}
.mk-chart{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:16px;position:relative}
.mk-dept{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:16px}
.mk-trades{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:16px}
.mk-trades h4{font-size:12px;margin-bottom:12px;color:var(--text0)}
.mk-trade-row{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--bd);font-size:11px}
.mk-trade-row:last-child{border-bottom:none}
.mk-trade-t{color:var(--text1)}
.mk-trade-p{font-family:'JetBrains Mono',monospace;font-weight:600}
.mk-trade-p.up{color:var(--green)}
.mk-trade-p.dn{color:var(--red)}

.vol-surf{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:16px;margin-bottom:16px;height:260px;position:relative;overflow:hidden}
.vol-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.vol-card{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:14px}
.vol-ch{font-size:11px;color:var(--text2);margin-bottom:6px}
.vol-cv{font-family:'JetBrains Mono',monospace;font-size:18px;font-weight:700}

.sig-table{width:100%;border-collapse:collapse}
.sig-table th,.sig-table td{padding:10px;text-align:left;border-bottom:1px solid var(--bd);font-size:11px}
.sig-table th{font-weight:600;color:var(--text2);text-transform:uppercase}
.sig-table tr:hover td{background:var(--bg2)}
.sig-tag{font-size:9px;padding:2px 8px;border-radius:4px;font-weight:600}
.sig-tag.buy{background:rgba(0,216,122,.15);color:var(--green)}
.sig-tag.sell{background:rgba(255,71,87,.15);color:var(--red)}
.sig-tag.hold{background:rgba(52,152,219,.15);color:var(--blue)}

.anl-filters{display:flex;gap:12px;margin-bottom:16px}
.anl-filters select,.anl-filters input{padding:6px 12px;background:var(--bg2);border:1px solid var(--bd);border-radius:5px;color:var(--text0);font-size:11px}
.anl-table{width:100%;border-collapse:collapse}
.anl-table th,.anl-table td{padding:10px;text-align:left;border-bottom:1px solid var(--bd);font-size:11px}
.anl-table th{font-weight:600;color:var(--text2);text-transform:uppercase}
.anl-table tr:hover td{background:var(--bg2)}
.anl-chart{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:16px;margin-bottom:16px;height:220px;position:relative}

.export-log{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:16px;margin-top:20px}
.export-log h4{font-size:12px;margin-bottom:12px;color:var(--text0)}
.export-row{display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--bd);font-size:11px}
.export-row:last-child{border-bottom:none}
.export-s{font-family:'JetBrains Mono',monospace;font-weight:600}
.export-d{color:var(--text1)}
.export-st{color:var(--green)}

/* DATA SOURCE BTNS */
.ds-bar{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap;align-items:center}
.ds-btn{padding:6px 16px;background:var(--bg2);border:1px solid var(--bd);border-radius:5px;color:var(--text1);font-size:11px;cursor:pointer;font-family:inherit;transition:all .2s}
.ds-btn:hover{border-color:var(--blue);color:var(--text0)}
.ds-btn.on{background:rgba(52,152,219,.2);border-color:var(--blue);color:var(--blue);font-weight:600}
.ds-btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}
.ds-btn.primary:hover{background:#2980b9}
.ds-btn:disabled{opacity:.5;cursor:not-allowed}
.sent-grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px}

/* AI BOX */
.ai-box{background:linear-gradient(135deg,rgba(52,152,219,.08),rgba(155,89,182,.08));border:1px solid rgba(52,152,219,.25);border-radius:8px;padding:16px}
.ai-h{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.ai-h-icon{width:28px;height:28px;background:linear-gradient(135deg,var(--blue),var(--purple));border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:13px;color:#fff}
.ai-h-t{font-size:13px;font-weight:600;color:var(--text0)}
.ai-h-t small{font-size:10px;font-weight:400;color:var(--text2);margin-left:8px}
.ai-body{font-size:12px;line-height:1.8;color:var(--text1);margin-bottom:12px}
.ai-footer{display:flex;justify-content:space-between;align-items:center;padding-top:12px;border-top:1px solid var(--bd)}
.ai-tag{font-size:10px;padding:3px 10px;border-radius:10px;font-weight:600}
.ai-tag.bull{background:rgba(0,216,122,.15);color:var(--green)}
.ai-tag.bear{background:rgba(255,71,87,.15);color:var(--red)}
.ai-tag.neutral{background:rgba(52,152,219,.15);color:var(--blue)}
.ai-conf{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text2)}
.ai-conf-bar{width:60px;height:4px;background:var(--bg1);border-radius:2px;overflow:hidden}
.ai-conf-bar-f{height:100%;border-radius:2px}

/* LOADING */
.loading{display:inline-block;width:14px;height:14px;border:2px solid var(--bd);border-top-color:var(--blue);border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle;margin-right:6px}
@keyframes spin{to{transform:rotate(360deg)}}
.loading-dots{display:flex;gap:4px;align-items:center;padding:8px 0}
.loading-dots span{width:6px;height:6px;background:var(--blue);border-radius:50%;animation:dot 1.4s infinite}
.loading-dots span:nth-child(2){animation-delay:.2s}
.loading-dots span:nth-child(3){animation-delay:.4s}
@keyframes dot{0%,100%{opacity:.3;transform:scale(.8)}50%{opacity:1;transform:scale(1.2)}}

/* SENTIMENT STAT */
.sent-stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.sent-stat-item{padding:10px;background:var(--bg1);border-radius:5px;display:flex;justify-content:space-between;align-items:center}
.sent-stat-l{font-size:10px;color:var(--text2)}
.sent-stat-v{font-family:'JetBrains Mono',monospace;font-size:14px;font-weight:600}

/* TREND BAR */
.trend-bar{display:flex;align-items:flex-end;gap:4px;height:100px;padding-top:10px}
.trend-bar-item{flex:1;border-radius:3px 3px 0 0;position:relative;min-height:4px;cursor:pointer;transition:opacity .2s}
.trend-bar-item:hover{opacity:.8}
.trend-bar-item .tooltip{display:none;position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:var(--bg1);border:1px solid var(--bd);border-radius:4px;padding:4px 8px;font-size:9px;white-space:nowrap;z-index:5;margin-bottom:4px}
.trend-bar-item:hover .tooltip{display:block}

/* SOURCE INDICATOR */
.src-indicator{font-size:10px;color:var(--text2);padding:4px 10px;background:var(--bg1);border-radius:4px;display:flex;align-items:center;gap:4px}
.src-indicator .dot{width:5px;height:5px;border-radius:50%;background:var(--green);animation:pulse 2s infinite}

/* PLATFORM GRID */
.plat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:16px}
.plat-card{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:12px;text-align:center;cursor:pointer;transition:all .2s}
.plat-card:hover{border-color:var(--blue);transform:translateY(-2px)}
.plat-card.on{border-color:var(--blue);background:rgba(52,152,219,.08)}
.plat-icon{font-size:20px;margin-bottom:6px}
.plat-name{font-size:10px;color:var(--text2);margin-bottom:4px}
.plat-val{font-family:'JetBrains Mono',monospace;font-size:14px;font-weight:600}
.plat-val.gr{color:var(--green)}
.plat-val.rd{color:var(--red)}

/* ===== VERTICAL TABS ===== */
.vtabs{display:flex;gap:0;margin-bottom:16px;background:var(--bg2);border-radius:6px;border:1px solid var(--bd);overflow:hidden}
.vtab{padding:10px 20px;font-size:11px;color:var(--text1);cursor:pointer;border-right:1px solid var(--bd);transition:all .2s;font-weight:500;user-select:none}
.vtab:last-child{border-right:none}
.vtab:hover{background:var(--bg3);color:var(--text0)}
.vtab.on{background:rgba(52,152,219,.15);color:var(--blue);font-weight:600}
.vpanel{display:none}
.vpanel.on{display:block}

/* ===== SIGNAL TABLE ENHANCEMENTS ===== */
.sig-table{width:100%;border-collapse:collapse}
.sig-table th,.sig-table td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--bd);font-size:10px}
.sig-table th{font-weight:600;color:var(--text2);text-transform:uppercase;letter-spacing:.5px;font-size:9px}
.sig-table tr:hover td{background:var(--bg2)}
.sig-table tr.sig-active td{background:rgba(0,216,122,.05)}
.sig-table tr.sig-pending td{background:rgba(255,165,2,.05)}
.sig-table tr.sig-closed td{background:rgba(255,71,87,.05)}
.sig-tag{font-size:9px;padding:2px 7px;border-radius:4px;font-weight:600}
.sig-tag.buy{background:rgba(0,216,122,.15);color:var(--green)}
.sig-tag.sell{background:rgba(255,71,87,.15);color:var(--red)}
.sig-tag.hold{background:rgba(52,152,219,.15);color:var(--blue)}
.sig-bar{width:60px;height:5px;background:var(--bg1);border-radius:3px;overflow:hidden;display:inline-block;vertical-align:middle}
.sig-bar-f{height:100%;border-radius:3px}

/* ===== PERFORMANCE CHARTS ===== */
.perf-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:16px}
.perf-card{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:12px;text-align:center}
.perf-card .label{font-size:9px;color:var(--text2);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
.perf-card .value{font-size:18px;font-weight:700;font-family:'JetBrains Mono',monospace}
.perf-card .sub{font-size:9px;color:var(--text1);margin-top:4px}

/* ===== RISK METRIC CARDS ===== */
.rm-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:16px}
.rm-card{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:12px;text-align:center}
.rm-card .label{font-size:9px;color:var(--text2);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
.rm-card .value{font-size:16px;font-weight:700;font-family:'JetBrains Mono',monospace}
.rm-card .sub{font-size:9px;color:var(--text1);margin-top:4px}

/* ===== GREEKS BREAKDOWN GRID ===== */
.gk-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.gk-card{background:var(--bg2);border:1px solid var(--bd);border-radius:5px;padding:10px}
.gk-card .name{font-size:9px;color:var(--text2);text-transform:uppercase;margin-bottom:4px}
.gk-card .val{font-size:14px;font-weight:700;font-family:'JetBrains Mono',monospace}
.gk-card .chg{font-size:9px;font-family:'JetBrains Mono',monospace;margin-top:2px}

/* ===== SCENARIO CARDS ===== */
.sc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.sc-card{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:14px;cursor:pointer;transition:all .2s}
.sc-card:hover{border-color:var(--blue);transform:translateY(-2px)}
.sc-card .sname{font-size:11px;font-weight:600;color:var(--text0);margin-bottom:6px}
.sc-card .simpact{font-size:10px;color:var(--text1);margin-bottom:4px;line-height:1.5}
.sc-card .sprob{font-size:9px;color:var(--text2)}
.sc-card .sprob b{color:var(--blue)}

/* ===== FACTOR EXPOSURE BARS ===== */
.fx-list{display:flex;flex-direction:column;gap:8px}
.fx-row{display:flex;align-items:center;gap:12px}
.fx-label{font-size:10px;color:var(--text1);width:140px;flex-shrink:0}
.fx-bar-wrap{flex:1;height:20px;background:var(--bg1);border-radius:4px;overflow:hidden;position:relative}
.fx-bar{height:100%;border-radius:4px;transition:width .5s}
.fx-bar.pos{background:linear-gradient(90deg,var(--green),var(--blue))}
.fx-bar.neg{background:linear-gradient(90deg,var(--blue),var(--red))}
.fx-val{font-size:10px;font-family:'JetBrains Mono',monospace;font-weight:600;width:80px;text-align:right;flex-shrink:0}
.fx-pct{font-size:9px;color:var(--text2);width:40px;text-align:right;flex-shrink:0}

/* ===== VOL CONE CHART ===== */
.vcone-wrap{position:relative;height:200px;background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:10px;overflow:hidden}
.vcone-svg{width:100%;height:100%}

/* ===== VOL TERM STRUCTURE ===== */
.vts-wrap{position:relative;height:200px;background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:10px;overflow:hidden}
.vts-svg{width:100%;height:100%}

/* ===== SKEW SURFACE ===== */
.skew-wrap{position:relative;height:200px;background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:10px;overflow:hidden}
.skew-svg{width:100%;height:100%}

/* ===== SIGNAL ALERT BOXES ===== */
.alert-box{padding:12px;border-radius:6px;margin-bottom:8px;display:flex;align-items:flex-start;gap:10px}
.alert-box.warning{background:rgba(255,165,2,.1);border-left:3px solid var(--yellow)}
.alert-box.danger{background:rgba(255,71,87,.1);border-left:3px solid var(--red)}
.alert-box.info{background:rgba(52,152,219,.1);border-left:3px solid var(--blue)}
.alert-box.success{background:rgba(0,216,122,.1);border-left:3px solid var(--green)}
.alert-icon{font-size:14px;flex-shrink:0;margin-top:1px}
.alert-body{flex:1}
.alert-title{font-size:11px;font-weight:600;color:var(--text0);margin-bottom:3px}
.alert-desc{font-size:10px;color:var(--text1);line-height:1.5}

/* ===== ANALYSIS METRIC CARDS ===== */
.am-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:16px}
.am-card{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:12px;text-align:center}
.am-card .label{font-size:9px;color:var(--text2);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
.am-card .value{font-size:16px;font-weight:700;font-family:'JetBrains Mono',monospace}
.am-card .sub{font-size:9px;color:var(--text1);margin-top:4px}

/* ===== PAGE CONTAINER ===== */
.page-content{padding:16px 20px}

/* ===== STRATEGY ALLOCATION PIE BAR ===== */
.strat-wrap{display:flex;flex-direction:column;gap:8px}
.strat-row{display:flex;align-items:center;gap:10px}
.strat-name{font-size:10px;color:var(--text1);width:100px;flex-shrink:0}
.strat-bar{flex:1;height:14px;background:var(--bg1);border-radius:7px;overflow:hidden}
.strat-bar-f{height:100%;border-radius:7px;transition:width .5s}
.strat-pct{font-size:10px;font-family:'JetBrains Mono',monospace;font-weight:600;width:40px;text-align:right;flex-shrink:0}

/* ===== DAILY PNL SPARKLINE ===== */
.pnl-spark{position:relative;height:100px;background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:10px;overflow:hidden;margin-bottom:12px}

/* ===== SIGNAL DASHBOARD ROW ===== */
.sig-dash{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:16px}
.sig-dash-card{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:12px;text-align:center}
.sig-dash-card .label{font-size:9px;color:var(--text2);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
.sig-dash-card .value{font-size:18px;font-weight:700;font-family:'JetBrains Mono',monospace}
.sig-dash-card .sub{font-size:9px;color:var(--text1);margin-top:4px}

/* ===== VOL METRIC CARDS (6 columns) ===== */
.vm-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-bottom:16px}
.vm-card{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:12px;text-align:center}
.vm-card .label{font-size:9px;color:var(--text2);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
.vm-card .value{font-size:16px;font-weight:700;font-family:'JetBrains Mono',monospace}
.vm-card .sub{font-size:9px;color:var(--text1);margin-top:4px}
.hv-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:10px}
.hv-card{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:12px;text-align:center}
.hv-card .hv-label{font-size:9px;color:var(--text2);margin-bottom:6px;letter-spacing:.3px}
.hv-card .hv-value{font-size:18px;font-weight:700;font-family:'JetBrains Mono',monospace}
.hv-card .hv-bar-wrap{width:100%;height:4px;background:var(--bg1);border-radius:2px;margin-top:8px;overflow:hidden}
.hv-card .hv-bar{height:100%;border-radius:2px;transition:width .5s ease}
.hv-range{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}
.hv-range-item{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:10px 14px;display:flex;align-items:center;justify-content:space-between}
.hv-range-item .hv-rl{font-size:10px;color:var(--text2)}
.hv-range-item .hv-rv{font-size:15px;font-weight:700;font-family:'JetBrains Mono',monospace}
.hv-status{background:linear-gradient(135deg,rgba(155,89,182,.12),rgba(52,152,219,.08));border:1px solid rgba(155,89,182,.3);border-radius:6px;padding:10px 16px;margin-bottom:16px;display:flex;align-items:center;gap:12px}
.hv-status .hs-icon{width:28px;height:28px;border-radius:50%;background:rgba(155,89,182,.2);display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}
.hv-status .hs-text{flex:1}
.hv-status .hs-title{font-size:12px;font-weight:700;color:var(--purple);margin-bottom:2px}
.hv-status .hs-desc{font-size:10px;color:var(--text1)}

/* ===== REGIME INDICATOR ===== */
.regime-badge{display:inline-block;padding:4px 12px;border-radius:12px;font-size:11px;font-weight:600}
.regime-badge.high{background:rgba(255,71,87,.15);color:var(--red)}
.regime-badge.medium{background:rgba(255,165,2,.15);color:var(--yellow)}
.regime-badge.low{background:rgba(0,216,122,.15);color:var(--green)}

/* ===== GREEKS BREAKDOWN ===== */
.gk-detail{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.gk-left{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.gk-item{background:var(--bg2);border:1px solid var(--bd);border-radius:5px;padding:10px}
.gk-item .gk-item-name{font-size:9px;color:var(--text2);text-transform:uppercase;margin-bottom:4px}
.gk-item .gk-item-val{font-size:14px;font-weight:700;font-family:'JetBrains Mono',monospace}
.gk-item .gk-item-chg{font-size:9px;font-family:'JetBrains Mono',monospace;margin-top:2px}
.gk-right{display:flex;flex-direction:column;gap:8px}
.gk-risk-item{padding:10px;background:var(--bg2);border:1px solid var(--bd);border-radius:5px}
.gk-risk-item .gk-risk-label{font-size:9px;color:var(--text2);margin-bottom:4px}
.gk-risk-item .gk-risk-val{font-size:14px;font-weight:700;font-family:'JetBrains Mono',monospace}
.gk-risk-item .gk-risk-sub{font-size:9px;color:var(--text1);margin-top:2px}

/* ===== KEY FINDINGS ===== */
.findings-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
.finding-card{padding:14px;background:var(--bg2);border:1px solid var(--bd);border-radius:6px;border-left:3px solid}
.finding-card .finding-title{font-size:11px;font-weight:600;color:var(--text0);margin-bottom:6px}
.finding-card .finding-desc{font-size:10px;color:var(--text1);line-height:1.6}

/* K-line period buttons */
.kl-period-btn.on{background:var(--blue)!important;color:#fff!important;border-color:var(--blue)!important}
.kl-period-btn:hover:not(.on){background:var(--bg3)!important}
.tr-kline-link{margin-left:6px;padding:1px 5px;border:1px solid rgba(59,130,246,.28);border-radius:4px;background:rgba(59,130,246,.08);color:var(--blue);font-size:10px;line-height:16px;cursor:pointer;white-space:nowrap;vertical-align:middle}
.tr-kline-link:hover{background:rgba(59,130,246,.16);border-color:var(--blue)}

/* ===== TRADING SYMBOL MANAGEMENT ===== */
.sym-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;background:var(--bg1);border-bottom:1px solid var(--bd)}
.sym-stat{font-size:10px;color:var(--text1);display:flex;gap:16px;align-items:center}
.sym-stat span{display:flex;align-items:center;gap:4px}
.sym-stat .num{font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:600}
.sym-stat .num.gr{color:var(--green)}
.sym-stat .num.yl{color:var(--yellow)}
.sym-actions{display:flex;gap:8px}
.sym-btn{padding:7px 14px;border:none;border-radius:5px;font-size:11px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:5px;transition:all .2s}
.sym-btn:hover{opacity:.85}
.sym-btn.primary{background:var(--blue);color:#fff}
.sym-btn.warning{background:var(--yellow);color:#000}
.sym-btn.success{background:var(--green);color:#000}
.sym-btn.danger{background:var(--red);color:#fff}

.sym-table-wrap{overflow-x:auto}
.sym-table{width:100%;border-collapse:collapse;font-size:11px}
.sym-table thead{background:var(--bg2)}
.sym-table th{padding:10px 12px;text-align:left;font-size:10px;color:var(--text2);font-weight:600;text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--bd);white-space:nowrap}
.sym-table td{padding:10px 12px;border-bottom:1px solid var(--bd);color:var(--text0);white-space:nowrap}
.sym-table tbody tr{transition:all .15s}
.sym-table tbody tr:hover{background:rgba(52,152,219,0.08)}
.sym-table tbody tr.monitored{background:rgba(0,216,122,0.05)}
.sym-code{font-family:'JetBrains Mono',monospace;color:var(--blue);font-weight:600;cursor:pointer}
.sym-code:hover{text-decoration:underline}
.sym-name{font-weight:500}
.sym-tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:3px;font-size:10px;font-weight:600}
.sym-tag.inner{background:rgba(52,152,219,0.15);color:var(--blue)}
.sym-tag.foreign{background:rgba(0,216,122,0.15);color:var(--green)}
.sym-tag.cn{background:rgba(255,165,2,0.15);color:var(--yellow)}
.sym-tag.us{background:rgba(0,216,122,0.15);color:var(--green)}
.sym-toggle{padding:4px 10px;border:none;border-radius:3px;font-size:10px;font-weight:600;cursor:pointer;transition:all .2s}
.sym-toggle.on{background:var(--green);color:#000}
.sym-toggle.off{background:var(--bg3);color:var(--text2)}
.sym-toggle.on:hover{background:#00b86a}
.sym-toggle.off:hover{background:var(--bg2);color:var(--text1)}
.sym-toggle.pos{background:var(--yellow);color:#000}
.sym-toggle.pos:hover{background:#e09400}
.sym-edit-btn{background:none;border:none;color:var(--blue);cursor:pointer;font-size:13px;padding:4px 8px;border-radius:3px;transition:all .2s}
.sym-edit-btn:hover{background:rgba(52,152,219,0.2)}

/* Symbol Dialog Modal */
.sym-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;z-index:200;padding:20px}
.sym-dialog{background:var(--bg1);border:1px solid var(--bd);border-radius:10px;width:560px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column}
.sym-dialog-h{padding:16px 20px;border-bottom:1px solid var(--bd);display:flex;justify-content:space-between;align-items:center}
.sym-dialog-h h3{font-size:13px;font-weight:600;display:flex;align-items:center;gap:8px}
.sym-dialog-close{background:none;border:none;color:var(--text2);cursor:pointer;font-size:16px;padding:4px}
.sym-dialog-close:hover{color:var(--text0)}
.sym-dialog-b{padding:20px;overflow-y:auto;flex:1}
.sym-dialog-f{padding:14px 20px;border-top:1px solid var(--bd);display:flex;justify-content:flex-end;gap:10px}
.sym-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}
.sym-form-group{display:flex;flex-direction:column;gap:4px}
.sym-form-group.full{grid-column:span 2}
.sym-form-group label{font-size:10px;color:var(--text2);font-weight:500}
.sym-form-group input,.sym-form-group select{padding:8px 10px;background:var(--bg2);border:1px solid var(--bd);border-radius:5px;color:var(--text0);font-size:11px;font-family:inherit}
.sym-form-group input:focus,.sym-form-group select:focus{border-color:var(--blue);outline:none}
.sym-form-group input[readonly]{background:var(--bg3);color:var(--text2)}
.sym-form-section{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:14px;margin-bottom:12px}
.sym-form-section h4{font-size:11px;font-weight:600;margin-bottom:10px;display:flex;align-items:center;gap:6px}
.sym-form-section.green{border-left:3px solid var(--green)}
.sym-form-section.blue{border-left:3px solid var(--blue)}
.sym-form-section.yellow{border-left:3px solid var(--yellow)}

/* Toast notification */
.toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);padding:10px 24px;border-radius:6px;font-size:12px;font-weight:500;z-index:999;animation:toastIn .3s ease}
.toast.success{background:var(--green);color:#000}
.toast.error{background:var(--red);color:#fff}
.toast.info{background:var(--blue);color:#fff}
@keyframes toastIn{from{opacity:0;transform:translateX(-50%) translateY(20px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}

/* LLM Prompt Button */
.llm-prompt-btn{padding:6px 14px;background:linear-gradient(135deg,rgba(155,89,182,0.2),rgba(52,152,219,0.2));border:1px solid var(--purple);color:var(--purple);border-radius:5px;font-size:11px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:5px;transition:all .2s}
.llm-prompt-btn:hover{background:linear-gradient(135deg,rgba(155,89,182,0.35),rgba(52,152,219,0.35));border-color:var(--blue);color:var(--blue);transform:translateY(-1px)}

/* LLM Prompt Textarea */
.llm-prompt-textarea{width:100%;height:500px;min-height:500px;padding:14px;background:var(--bg0);border:1px solid var(--bd);border-radius:6px;color:var(--text0);font-family:'JetBrains Mono',monospace;font-size:12px;line-height:1.6;resize:vertical;outline:none;overflow-y:auto;box-sizing:border-box}
.llm-prompt-textarea:focus{border-color:var(--blue)}

/* LLM Prompt Buttons */
.llm-prompt-copy-btn{padding:8px 18px;background:var(--purple);color:#fff;border:none;border-radius:5px;font-size:11px;font-weight:600;cursor:pointer;transition:all .2s}
.llm-prompt-copy-btn:hover{background:#8e44ad}
.llm-prompt-close-btn{padding:8px 18px;background:var(--bg2);border:1px solid var(--bd);color:var(--text1);border-radius:5px;font-size:11px;font-weight:600;cursor:pointer;transition:all .2s}
.llm-prompt-close-btn:hover{background:var(--bg3);color:var(--text0)}

/* IV明细表格 */
.iv-detail-table{width:100%;border-collapse:collapse;font-size:11px}
.iv-detail-table th,.iv-detail-table td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--bd)}
.iv-detail-table th{font-weight:600;color:var(--text2);font-size:10px;text-transform:uppercase;letter-spacing:.5px;background:var(--bg1)}
.iv-detail-table tr:hover td{background:var(--bg1)}
.iv-detail-table td{font-family:'JetBrains Mono',monospace}
.iv-detail-table .iv-atm{background:rgba(52,152,219,.1);color:var(--blue);font-weight:600}
.iv-detail-table .iv-high{color:var(--red)}
.iv-detail-table .iv-low{color:var(--green)}

/* ==================== 起爆监控页面 ==================== */
.mi-b.rd{background:var(--red);color:#fff}

/* 全局状态栏 */
.exp-stats-bar{display:flex;align-items:center;gap:8px;padding:10px 16px;background:var(--bg1);border-bottom:1px solid var(--bd);font-size:11px;color:var(--text1)}
.exp-stat-item{white-space:nowrap}
.exp-stat-item b{color:var(--text0)}
.exp-stat-sep{color:var(--text2);margin:0 2px}
.exp-ws-status{display:flex;align-items:center;gap:5px;margin-left:auto;font-size:10px;color:var(--text2)}
.exp-ws-dot{width:7px;height:7px;border-radius:50%;display:inline-block}
.exp-ws-dot.on{background:var(--green);box-shadow:0 0 6px var(--green)}
.exp-ws-dot.off{background:var(--red)}

/* 预警横幅 */
.exp-alert-banner{position:fixed;bottom:0;left:0;right:0;z-index:1000;margin:0;border-radius:0;overflow:hidden;transition:all .3s}
.exp-banner{display:flex;align-items:center;gap:10px;padding:10px 16px;border-radius:6px;font-size:12px;animation:expFadeIn .3s ease}
.exp-banner-icon{font-size:16px}
.exp-banner-text{color:var(--text0)}
.exp-flash{animation:expPulse .5s ease 3}
@keyframes expPulse{0%,100%{opacity:1}50%{opacity:.5}}
@keyframes expFadeIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}

/* 主内容区 */
.exp-main-content{display:flex;gap:12px;padding:12px 16px;height:calc(100vh - 72px - 42px - 24px);min-height:320px}

/* 左侧品种热力板 */
.exp-heatmap-panel{width:40%;min-width:280px;background:var(--bg2);border:1px solid var(--bd);border-radius:8px;display:flex;flex-direction:column;overflow:hidden}
.exp-panel-header{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--bd);background:var(--bg1)}
.exp-panel-title{font-size:12px;font-weight:600;color:var(--text0)}
.exp-refresh-btn{background:none;border:1px solid var(--bd);border-radius:4px;padding:2px 8px;cursor:pointer;font-size:12px;color:var(--text1);transition:all .2s}
.exp-refresh-btn:hover{background:var(--bg3);color:var(--text0)}
.exp-heatmap-list{flex:1;overflow:hidden;padding:6px;display:flex;flex-direction:column}

/* 热力板分区容器 */
.exp-heat-section{display:flex;flex-direction:column;height:50%;overflow:hidden}
/* 热力板分组标题 */
.exp-heat-section-title{padding:6px 12px;font-size:12px;color:var(--text2);border-bottom:1px solid rgba(255,255,255,0.06);display:flex;justify-content:space-between;align-items:center;flex-shrink:0}
.exp-heat-section-count{font-size:10px;color:#666}
/* 热力板分区内容体（独立滚动） */
.exp-heat-section-body{flex:1;overflow-y:auto;overflow-x:hidden}

/* 热力板行 */
.exp-heat-row{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:5px;cursor:pointer;transition:all .2s;margin-bottom:3px;border:1px solid transparent}
.exp-heat-row:hover{background:var(--bg3)}
.exp-heat-row.selected{background:rgba(52,152,219,.1);border-color:var(--blue)}
.exp-heat-info{display:flex;flex-direction:column;min-width:70px}
.exp-heat-name{font-size:11px;font-weight:600;color:var(--text0)}
.exp-heat-code{font-size:9px;color:var(--text2);font-family:'JetBrains Mono',monospace}
.exp-heat-bar-wrap{flex:1;height:6px;background:var(--bg1);border-radius:3px;overflow:hidden}
.exp-heat-bar{height:100%;border-radius:3px;transition:width .5s ease}
.exp-heat-score{font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:700;min-width:38px;text-align:right}
.exp-heat-state{font-size:9px;padding:2px 6px;border-radius:3px;font-weight:600;color:#fff;min-width:28px;text-align:center}

/* 状态闪烁动画 */
.exp-state-flash{animation:expStateFlash 1.5s ease}
@keyframes expStateFlash{0%,100%{background:transparent}25%{background:rgba(255,71,87,.15)}50%{background:rgba(255,140,0,.1)}75%{background:rgba(255,71,87,.1)}}

/* 右侧详情面板 */
.exp-detail-panel{width:60%;background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:16px;overflow:hidden;display:flex;flex-direction:column;align-items:stretch}
.exp-detail-fixed{flex-shrink:0}
.exp-tab-contents{flex:1;overflow-y:auto;min-height:0}
.exp-detail-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;opacity:.5}
.exp-detail-header{width:100%;display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.exp-detail-title{display:flex;align-items:baseline;gap:8px}
.exp-detail-name{font-size:16px;font-weight:700;color:var(--text0)}
.exp-detail-code{font-size:11px;color:var(--text2);font-family:'JetBrains Mono',monospace}
.exp-detail-badges{display:flex;gap:6px}
.exp-state-badge{font-size:10px;padding:3px 10px;border-radius:4px;font-weight:700;color:#fff}
.exp-dir-badge{font-size:10px;padding:2px 8px;border:1px solid;border-radius:4px;font-weight:600}
.exp-detail-score{font-size:36px;font-weight:800;font-family:'JetBrains Mono',monospace;margin-left:auto}

/* 雷达图 */
.exp-radar-wrap{margin:8px 0}

/* 关键指标卡片 */
.exp-indicator-cards{display:flex;gap:12px;width:100%;margin-top:8px}
.exp-ind-card{flex:1;background:var(--bg1);border:1px solid var(--bd);border-radius:6px;padding:10px 14px;text-align:center}
.exp-ind-label{font-size:9px;color:var(--text2);margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px}
.exp-ind-value{font-size:16px;font-weight:700;color:var(--text0)}

/* 底部预警历史 */
.exp-history-panel{margin:0 16px 12px;background:var(--bg2);border:1px solid var(--bd);border-radius:8px;overflow:hidden}
.exp-history-count{font-size:10px;color:var(--text2);font-family:'JetBrains Mono',monospace}
.exp-alert-history{height:200px;overflow-y:auto;padding:6px 10px}

/* 预警条目 */
.exp-alert-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border-bottom:1px solid var(--bd);font-size:11px;animation:expFadeIn .3s ease;transition:background .2s}
.exp-alert-item:hover{background:var(--bg3)}
.exp-alert-time{color:var(--text2);font-size:10px;min-width:68px}
.exp-alert-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.exp-alert-name{color:var(--text0);font-weight:600;min-width:50px}
.exp-alert-contract{color:var(--text2);font-size:10px}
.exp-alert-text{color:var(--red);font-weight:700}
.exp-alert-score{font-weight:700;min-width:38px;text-align:right}

/* 空状态 */
.exp-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--text2);font-size:11px;padding:30px 0}

/* 告警原因 */
.exp-alert-reason{font-size:12px;color:#aaa;margin-top:4px}

/* AI深度分析面板 */
.exp-ai-panel{margin-top:12px;background:var(--bg1);border-radius:8px;border:1px solid rgba(255,255,255,0.08)}
.exp-ai-header{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-bottom:1px solid rgba(255,255,255,0.06);font-size:13px}
.exp-ai-content{padding:10px 12px;font-size:11px;color:#bbb;white-space:pre-wrap;word-break:break-all;margin:0;font-family:monospace;line-height:1.6}

/* 信号计数 */
.exp-heat-signals{font-size:9px;font-weight:600;min-width:32px;text-align:center}
/* Tab页签 */
.exp-tabs{display:flex;gap:0;margin:12px 0 8px;background:var(--bg1);border-radius:6px;border:1px solid var(--bd);overflow:hidden;width:100%}
.exp-tab{flex:1;padding:8px 0;font-size:11px;color:var(--text1);cursor:pointer;border-right:1px solid var(--bd);transition:all .2s;font-weight:500;text-align:center;user-select:none}
.exp-tab:last-child{border-right:none}
.exp-tab:hover{background:var(--bg3);color:var(--text0)}
.exp-tab.active{background:rgba(52,152,219,.15);color:var(--blue);font-weight:600}
.exp-tab-content{width:100%}
/* 信号详情列表 */
.exp-signal-list{display:flex;flex-direction:column;gap:6px;width:100%;padding:4px 0}
.exp-signal-item{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;background:var(--bg1);border-radius:5px;border:1px solid var(--bd)}
.exp-signal-item.active{border-color:var(--yellow);background:rgba(255,165,2,.08)}
.exp-signal-name{width:70px;font-size:11px;font-weight:600;color:var(--text0);flex-shrink:0}
.exp-signal-bar{flex:1;height:6px;background:var(--bg2);border-radius:3px;overflow:hidden;min-width:60px}
.exp-signal-bar>div{height:100%;border-radius:3px;background:linear-gradient(90deg,var(--blue),var(--purple));transition:width .5s}
.exp-signal-item.active .exp-signal-bar>div{background:linear-gradient(90deg,var(--yellow),var(--red))}
.exp-signal-score{width:36px;font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:700;color:var(--text0);text-align:right;flex-shrink:0}
.exp-signal-context{width:100%;font-size:10px;color:var(--text2);font-family:'JetBrains Mono',monospace;margin-top:2px}
/* AI按钮 */
.exp-ai-btn{margin-top:12px;padding:8px 16px;background:linear-gradient(135deg,rgba(155,89,182,.2),rgba(52,152,219,.2));border:1px solid var(--purple);color:var(--purple);border-radius:5px;font-size:11px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;transition:all .2s;width:100%}
.exp-ai-btn:hover{background:linear-gradient(135deg,rgba(155,89,182,.35),rgba(52,152,219,.35));border-color:var(--blue);color:var(--blue);transform:translateY(-1px)}
/* 模态框 */
.exp-modal-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.7);z-index:1000;justify-content:center;align-items:center}
.exp-modal{background:var(--bg1);border-radius:10px;border:1px solid var(--bd);width:600px;max-width:90vw;max-height:80vh;overflow:hidden;display:flex;flex-direction:column}
.exp-modal-header{padding:12px 16px;border-bottom:1px solid var(--bd);display:flex;align-items:center;gap:10px;font-size:13px;font-weight:600;color:var(--text0)}
.exp-modal-header span:first-child{flex:1}
.exp-modal-header button{padding:5px 12px;background:var(--bg2);border:1px solid var(--bd);border-radius:4px;color:var(--text1);font-size:11px;cursor:pointer;transition:all .2s}
.exp-modal-header button:first-of-type{background:var(--purple);color:#fff;border-color:var(--purple)}
.exp-modal-header button:first-of-type:hover{background:#8e44ad}
.exp-modal-header button:last-of-type:hover{background:var(--bg3);color:var(--text0)}
.exp-modal-content{padding:14px 16px;font-size:12px;color:var(--text0);white-space:pre-wrap;word-break:break-all;margin:0;font-family:'JetBrains Mono',monospace;line-height:1.6;overflow-y:auto;flex:1;background:var(--bg0)}
/* 期权链占位 */
.exp-option-chain-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 0;gap:12px;width:100%}
.exp-option-known{display:flex;flex-direction:column;gap:8px;width:100%;padding:12px;background:var(--bg1);border-radius:6px;border:1px solid var(--bd)}
.exp-option-row{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text0)}
.exp-option-label{width:80px;color:var(--text2);font-size:11px;flex-shrink:0}
.exp-option-iv{color:var(--blue);font-family:'JetBrains Mono',monospace;font-size:11px;margin-left:auto}
.exp-option-note{font-size:11px;color:var(--text2);text-align:center;margin-top:8px}

/* ==================== CTP交易页面 ==================== */
/* 主布局：下单区(上) + 数据区(下) */
.ctp-main-layout{display:flex;flex-direction:column;gap:10px;padding:10px 12px;height:calc(100vh - 155px);overflow:hidden}

/* 三栏布局：下单 + 盘口 + 成交记录 */
.ctp-upper-panel{display:flex;gap:12px;padding:0 12px 12px;flex-shrink:0;min-height:0}
.ctp-col-order{flex:0 0 34%;min-width:0;display:flex;flex-direction:column;gap:10px}
.ctp-col-depth{flex:0 0 34%;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--bg2);border-radius:8px;padding:16px 20px}
.ctp-col-trades{flex:0 0 32%;min-width:0;background:var(--bg2);border-radius:8px;padding:12px;display:flex;flex-direction:column;overflow:hidden}

/* 下单行 */
.ctp-order-row{display:flex;align-items:center;gap:10px}
.ctp-order-label{font-size:12px;color:var(--text2);width:36px;flex-shrink:0;text-align:right}

/* 合约输入 */
.ctp-order-input-wrap{display:flex;align-items:center;gap:4px;flex:1}
.ctp-input-lg{background:var(--bg1);border:1px solid rgba(255,255,255,.12);border-radius:5px;padding:10px 12px;color:#fff;font-size:15px;font-family:'JetBrains Mono',monospace;flex:1;min-width:0}
.ctp-input-lg:focus{outline:none;border-color:var(--blue)}
.ctp-t-btn{width:32px;height:32px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);border-radius:5px;color:var(--text0);font-size:13px;font-weight:700;cursor:pointer;flex-shrink:0;transition:all .2s}
.ctp-t-btn:hover{background:rgba(255,255,255,.15);border-color:var(--blue)}

/* 步进器（价格/手数 +/-） */
.ctp-stepper-group{display:flex;align-items:center;gap:0;flex:1}
.ctp-stepper-btn{width:32px;height:36px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.2);color:var(--text0);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;flex-shrink:0;border-radius:0}
.ctp-stepper-btn:first-child{border-radius:5px 0 0 5px;border-right:none}
.ctp-stepper-btn:last-child{border-radius:0 5px 5px 0;border-left:none}
.ctp-stepper-btn:hover{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.4)}
.ctp-stepper-btn:active{background:rgba(255,255,255,.2)}
.ctp-stepper-input{flex:1;height:36px;background:var(--bg1);border:1px solid rgba(255,255,255,.2);color:#fff;font-size:15px;text-align:center;font-family:'JetBrains Mono',monospace;padding:0 8px;min-width:0;border-left:none;border-right:none;border-radius:0}
.ctp-stepper-input:focus{outline:none}
.ctp-stepper-input-wrap{flex:1;position:relative;height:36px;display:flex;align-items:center}
.ctp-stepper-input-wrap .ctp-stepper-input{border:1px solid rgba(255,255,255,.2);border-radius:0;width:100%}
.ctp-stepper-input-wrap .ctp-stepper-input:placeholder-shown{color:var(--text2)}
.ctp-price-hint{position:absolute;right:12px;font-size:12px;color:var(--text2);pointer-events:none;display:none}
.ctp-stepper-input:placeholder-shown ~ .ctp-price-hint{display:block}

/* 可开仓提示 */
.ctp-avail-info{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text2);margin-left:4px;white-space:nowrap}
.ctp-avail-buy{color:var(--red)}
.ctp-avail-sell{color:var(--green)}
.ctp-avail-sep{color:var(--bd)}

/* 三个大操作按钮 */
.ctp-action-bar{display:flex;gap:8px;margin-top:4px}
.ctp-action-btn{flex:1;height:44px;border:none;border-radius:6px;font-size:15px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;transition:all .2s;letter-spacing:1px}
.ctp-action-btn:hover{filter:brightness(1.15);transform:translateY(-1px)}
.ctp-action-btn:active{transform:translateY(0);filter:brightness(.9)}
.ctp-action-icon{font-size:11px}
.ctp-action-buy{background:#e74c3c;color:#fff}
.ctp-action-sell{background:#27ae60;color:#fff}
.ctp-action-close{background:#3498db;color:#fff}

/* 盘口大字 */
.ctp-depth-last-lg{font-size:32px;font-weight:900;font-family:'JetBrains Mono',monospace;color:#3498db;line-height:1.2;padding:8px 0;text-align:center;text-shadow:0 0 20px rgba(52,152,219,.4)}
.ctp-depth-last-lg.positive{color:#27ae60;text-shadow:0 0 20px rgba(39,174,96,.4)}
.ctp-depth-last-lg.negative{color:#e74c3c;text-shadow:0 0 20px rgba(231,76,60,.4)}

/* 盘口买卖条 */
.ctp-depth-bars{width:100%;display:flex;flex-direction:column;gap:8px;margin-top:12px}
.ctp-depth-bar-row{display:flex;align-items:center;gap:10px;padding:8px 14px;border-radius:6px;font-family:'JetBrains Mono',monospace}
.ctp-depth-bar-ask{background:rgba(231,76,60,.1);border:1px solid rgba(231,76,60,.2)}
.ctp-depth-bar-bid{background:rgba(39,174,96,.1);border:1px solid rgba(39,174,96,.2)}
.ctp-depth-bar-label{font-size:12px;font-weight:700;width:20px;flex-shrink:0;text-align:center}
.ctp-depth-bar-ask .ctp-depth-bar-label{color:#e74c3c}
.ctp-depth-bar-bid .ctp-depth-bar-label{color:#27ae60}
.ctp-depth-bar-price{font-size:20px;font-weight:700;flex:1;text-align:left}
.ctp-depth-bar-ask .ctp-depth-bar-price{color:#e74c3c}
.ctp-depth-bar-bid .ctp-depth-bar-price{color:#27ae60}
.ctp-depth-bar-vol{font-size:13px;color:var(--text1);font-weight:500}

/* 成交记录实时列表 */
#ctp-realtime-trades{flex:1;overflow-y:auto;font-size:11px}
#ctp-realtime-trades .ctp-rt-row{display:flex;align-items:center;gap:6px;padding:3px 6px;border-bottom:1px solid rgba(255,255,255,.04);font-family:'JetBrains Mono',monospace;font-size:11px}
#ctp-realtime-trades .ctp-rt-row:hover{background:rgba(255,255,255,.03)}
#ctp-realtime-trades .ctp-rt-time{color:var(--text2);width:50px;flex-shrink:0;font-size:10px}
#ctp-realtime-trades .ctp-rt-dir{width:18px;flex-shrink:0;font-weight:700;text-align:center}
#ctp-realtime-trades .ctp-rt-dir.buy{color:#e74c3c}
#ctp-realtime-trades .ctp-rt-dir.sell{color:#27ae60}
#ctp-realtime-trades .ctp-rt-offset{width:18px;flex-shrink:0;color:var(--text2);font-size:10px;text-align:center}
#ctp-realtime-trades .ctp-rt-price{flex:1;text-align:right;font-weight:600}
#ctp-realtime-trades .ctp-rt-vol{width:36px;flex-shrink:0;text-align:right;color:var(--text1)}

/* 旧盘口样式保留兼容（其他页面可能引用） */
.ctp-depth-panel{display:none}

/* 折叠面板 */
.ctp-collapse-panel{margin-top:0}
.ctp-collapse-header{cursor:pointer;user-select:none}
.ctp-collapse-body{overflow:hidden;transition:max-height .3s ease}
.ctp-collapse-body.collapsed{max-height:0 !important}

/* 面板 */
.ctp-panel{background:var(--bg2);border-radius:8px;padding:12px}
.ctp-panel-header{font-size:12px;font-weight:600;color:var(--text0);margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--bd);display:flex;align-items:center;gap:6px}

/* 状态栏 */
.ctp-topbar{display:flex;align-items:center;gap:12px;padding:8px 16px;background:var(--bg2);border-radius:8px;margin:10px 12px 0;flex-wrap:wrap}
.ctp-status-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text1)}
.ctp-status-dot{width:10px;height:10px;border-radius:50%;display:inline-block}
.ctp-status-dot.connected{background:var(--green);box-shadow:0 0 6px var(--green)}
.ctp-status-dot.disconnected{background:var(--red)}
.ctp-status-label{font-size:10px;color:var(--text2)}
.ctp-status-value{font-size:13px;font-weight:600}

/* 报撤单badge */
.ctp-stats-badge{display:flex;align-items:center;gap:8px;padding:4px 10px;background:rgba(255,255,255,.05);border-radius:4px;font-size:11px;color:var(--text2)}

/* 数据面板 */
.ctp-data-panel{flex:1;display:flex;flex-direction:row;gap:10px;min-height:0;overflow:hidden}

/* 数据区左栏：Tab区域 */
.ctp-data-left{flex:0 0 68%;display:flex;flex-direction:column;min-width:0;background:var(--bg2);border-radius:8px;overflow:hidden}

/* 数据区右栏：日志面板 */
.ctp-data-right{flex:1 1 auto;display:flex;flex-direction:column;min-width:0;background:var(--bg2);border-radius:8px;overflow:hidden}
.ctp-log-panel-header{flex-shrink:0;padding:10px 12px;font-size:13px;font-weight:600;color:var(--text1);border-bottom:1px solid var(--bd);background:var(--bg1)}
.ctp-data-right .ctp-log-area{flex:1;min-height:0;border-radius:0 0 8px 8px}

/* Tab栏 */
.ctp-tab-bar{display:flex;align-items:center;gap:0;padding:0 12px;border-bottom:1px solid var(--bd);background:var(--bg1);flex-shrink:0}
.ctp-tab{background:none;border:none;color:var(--text2);font-size:13px;padding:10px 18px;cursor:pointer;position:relative;transition:all .2s;font-weight:500}
.ctp-tab:hover{color:var(--text0)}
.ctp-tab.active{color:var(--text0);font-weight:600}
.ctp-tab.active::after{content:'';position:absolute;bottom:-1px;left:8px;right:8px;height:2px;background:var(--blue);border-radius:1px 1px 0 0}
.ctp-tab-query{display:flex;align-items:center;gap:6px;padding:0 4px;margin-left:auto}

/* Tab内容 */
.ctp-tab-content{flex:1;overflow-y:auto;display:none;padding:8px 12px}
.ctp-tab-content.active{display:block}

/* 持仓行浮盈颜色 */
.ctp-pnl-positive{color:var(--green);font-weight:700}
/* 成交买卖方向颜色 */
.ctp-dir-buy{color:var(--red);font-weight:600}
.ctp-dir-sell{color:var(--green);font-weight:600}
.ctp-pnl-negative{color:var(--red);font-weight:700}

/* 基础组件 */
.ctp-log-area{height:100%;overflow-y:auto;font-family:'JetBrains Mono',monospace;font-size:12px;padding:8px;background:#1a1a2e;border-radius:6px}
.ctp-log-item{padding:2px 0;border-bottom:1px solid rgba(255,255,255,.05)}
.ctp-log-time{color:#888}
.ctp-log-info{color:#4ecdc4}
.ctp-log-warn{color:#f39c12}
.ctp-log-error{color:#e74c3c}
.ctp-btn{padding:6px 16px;border:none;border-radius:4px;cursor:pointer;font-size:13px;font-weight:600;transition:all .2s}
.ctp-btn:hover{opacity:.85}
.ctp-btn-primary{background:var(--blue);color:#fff}
.ctp-btn-danger{background:var(--red);color:#fff}
.ctp-btn-success{background:var(--green);color:#000}
.ctp-btn-warning{background:var(--yellow);color:#000}
.ctp-btn-disabled{background:var(--bg3);color:var(--text2);cursor:not-allowed}
.ctp-table{width:100%;border-collapse:collapse;font-size:11px}
.ctp-table th{background:rgba(255,255,255,.05);padding:6px 8px;text-align:left;font-size:10px;color:var(--text2);font-weight:600;text-transform:uppercase;letter-spacing:.5px;position:sticky;top:0;z-index:1}
.ctp-table td{padding:5px 8px;border-bottom:1px solid rgba(255,255,255,.05)}
.ctp-table tr:hover td{background:var(--bg1)}

/* 可点击价格单元格（合约列表+持仓列表） */
.clickable-price{cursor:pointer;transition:color .15s}
.clickable-price:hover{color:#60a5fa !important;text-decoration:underline}

/* 持仓列表行双击提示 */
#ctp-position-list tr{cursor:pointer}
#ctp-position-list tr:hover{background:rgba(255,255,255,0.05)}
/* 持仓列表操作列最小化+右对齐 */
#ctp-position-list td:last-child{width:1%;white-space:nowrap;text-align:right}
#ctp-order-list td:last-child{width:1%;white-space:nowrap;text-align:right}
.ctp-input{background:var(--bg1);border:1px solid rgba(255,255,255,.1);border-radius:4px;padding:6px 10px;color:#fff;font-size:13px;font-family:'JetBrains Mono',monospace}
.ctp-input:focus{outline:none;border-color:var(--blue)}
.ctp-select{background:var(--bg1);border:1px solid rgba(255,255,255,.1);border-radius:4px;padding:6px 10px;color:#fff;font-size:13px}
.ctp-select:focus{outline:none;border-color:var(--blue)}
.ctp-empty{padding:20px;text-align:center;color:var(--text2);font-size:11px}
@keyframes ctpPulse{0%,100%{opacity:1}50%{opacity:.7}}

/* CTP响应式 */
@media(max-width:1200px){.ctp-col-order{flex:0 0 37%}.ctp-col-depth{flex:0 0 31%}.ctp-col-trades{flex:0 0 32%}.ctp-depth-last-lg{font-size:26px}}
@media(max-width:768px){.ctp-main-layout{height:auto;overflow-y:auto}.ctp-upper-panel{flex-direction:column}.ctp-col-order,.ctp-col-depth,.ctp-col-trades{flex:1 1 auto}.ctp-data-panel{flex-direction:column}.ctp-data-left{flex:1 1 auto}.ctp-data-right{flex:0 0 220px}.ctp-depth-last-lg{font-size:24px}}

/* ==================== AI分析结果样式 ==================== */
.ai-empty{text-align:center;padding:30px;color:#888}
.ai-result{padding:10px}
.ai-result-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;font-size:14px;font-weight:bold;color:#ffa500}
.ai-result-body{}
.ai-field{display:flex;padding:8px 0;border-bottom:1px solid rgba(255,255,255,0.05)}
.ai-field label{width:80px;color:#888;font-size:12px;flex-shrink:0}
.ai-field span{color:#eee;font-size:13px}
.ai-field .ai-code{color:#4fc3f7;font-family:'JetBrains Mono',monospace}
.ai-result-footer{margin-top:12px;padding-top:8px;border-top:1px solid rgba(255,255,255,0.1);display:flex;justify-content:space-between;font-size:11px;color:#666}

/* 设置页面输入框 */
.setting-input{background:#2a2a2a;border:1px solid #444;color:#eee;padding:6px 10px;border-radius:4px;width:250px;font-size:11px;font-family:inherit}
.setting-input:focus{border-color:#ffa500;outline:none}
.btn-xs{font-size:11px;padding:2px 8px;background:#444;color:#eee;border:none;border-radius:3px;cursor:pointer}
.btn-xs:hover{background:#555}

/* AI分析增强样式 */
.ai-section{margin-bottom:14px}
.ai-section-title{font-size:13px;font-weight:bold;color:#ffa500;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid rgba(255,165,0,0.2)}
.ai-data-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.ai-data-item{display:flex;justify-content:space-between;padding:4px 8px;background:rgba(255,255,255,0.03);border-radius:3px}
.ai-data-label{color:#888;font-size:12px}
.ai-data-value{color:#eee;font-size:12px;font-weight:bold}
.ai-analysis-text{color:#ccc;font-size:12px;line-height:1.6;white-space:pre-wrap}
.ai-reason-text{color:#4fc3f7;font-size:13px;line-height:1.5;font-style:italic}
.ai-confidence{font-size:12px;color:#888;margin-bottom:4px}
.ai-risk-text{color:#ff6b6b;font-size:12px}

/* 开关样式 */
.switch{position:relative;display:inline-block;width:40px;height:20px}
.switch input{opacity:0;width:0;height:0}
.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background:var(--bg3);border-radius:20px;transition:.3s}
.slider:before{position:absolute;content:"";height:16px;width:16px;left:2px;bottom:2px;background:#fff;border-radius:50%;transition:.3s}
.switch input:checked+.slider{background:var(--blue)}
.switch input:checked+.slider:before{transform:translateX(20px)}

/* ==================== 策略面板样式 ==================== */
/* 策略执行按钮 */
.ai-execute-section{margin-top:16px;padding:12px;background:rgba(0,200,83,0.1);border:1px solid rgba(0,200,83,0.3);border-radius:8px;text-align:center}
.btn-execute-strategy{background:linear-gradient(135deg,#00c853,#00e676);color:#000;border:none;padding:10px 24px;border-radius:6px;font-size:14px;font-weight:bold;cursor:pointer;transition:all .3s}
.btn-execute-strategy:hover{transform:scale(1.05);box-shadow:0 4px 12px rgba(0,200,83,0.4)}
.btn-execute-strategy:disabled{opacity:.6;cursor:not-allowed;transform:none}
.btn-execute-strategy.executed{background:#4caf50}
.execute-hint{display:block;margin-top:8px;color:#888;font-size:12px}

/* 观望状态 */
.ai-observe-section{margin-top:16px;padding:12px;background:rgba(255,193,7,0.1);border:1px solid rgba(255,193,7,0.3);border-radius:8px;text-align:center}
.observe-badge{font-size:16px;font-weight:bold;color:#ffc107}
.observe-hint{display:block;margin-top:6px;color:#aaa;font-size:12px}

/* 策略持仓Tab */
.strategy-empty{text-align:center;padding:40px 20px;color:#888}
.strategy-empty .hint{color:#666;font-size:12px;margin-top:8px}
.strategy-list{padding:8px}
.strategy-card{background:rgba(255,255,255,0.03);border:1px solid #333;border-radius:8px;padding:12px;margin-bottom:10px}
.strategy-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.strategy-underlying{font-weight:bold;font-size:14px;color:#eee}
.strategy-status{padding:2px 8px;border-radius:4px;font-size:11px}
.status-filled{background:rgba(0,200,83,0.2);color:#00c853}
.status-executing{background:rgba(33,150,243,0.2);color:#2196f3}
.status-partial{background:rgba(255,152,0,0.2);color:#ff9800}
.status-closing{background:rgba(255,87,34,0.2);color:#ff5722}
.status-closed{background:rgba(158,158,158,0.2);color:#9e9e9e}
.status-cancelled{background:rgba(158,158,158,0.2);color:#757575}
.status-pending{background:rgba(52,152,219,0.2);color:#3498db}

.strategy-legs{margin:8px 0}
.leg-item{display:flex;gap:8px;padding:4px 0;font-size:12px;color:#ccc;border-bottom:1px solid rgba(255,255,255,0.05)}
.leg-instrument{flex:2}
.leg-direction.buy{color:#f44336}
.leg-direction.sell{color:#4caf50}
.leg-volume{flex:1;text-align:right}
.leg-price{flex:1;text-align:right}

.strategy-pnl{margin:8px 0;font-size:14px}
.pnl-positive{color:#f44336;font-weight:bold}
.pnl-negative{color:#4caf50;font-weight:bold}
.pnl-label{color:#aaa}

.strategy-actions{display:flex;gap:8px;margin-top:8px}
.btn-close-strategy,.btn-cancel-strategy{padding:4px 12px;border-radius:4px;border:1px solid;font-size:12px;cursor:pointer;background:transparent;transition:all .2s}
.btn-close-strategy{border-color:#f44336;color:#f44336}
.btn-close-strategy:hover{background:rgba(244,67,54,0.1)}
.btn-cancel-strategy{border-color:#9e9e9e;color:#9e9e9e}
.btn-cancel-strategy:hover{background:rgba(158,158,158,0.1)}
.strategy-time{margin-top:6px;font-size:11px;color:#666}

/* 绩效统计 */
.perf-section{margin-top:16px;padding:12px;border-top:1px solid #333}
.perf-title{font-size:13px;font-weight:bold;color:#eee;margin-bottom:10px}
.perf-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.perf-card{background:rgba(255,255,255,0.03);border:1px solid #333;border-radius:6px;padding:8px;text-align:center}
.perf-label{font-size:11px;color:#aaa;margin-bottom:4px}
.perf-value{font-size:14px;font-weight:bold;color:#eee}
.perf-value.pnl-positive{color:#f44336}
.perf-value.pnl-negative{color:#4caf50}

/* GEX预警页面 */
.gex-alert-header-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.gex-alert-filters{display:flex;gap:8px}
.gex-alert-filter-btn{padding:6px 16px;border-radius:4px;border:1px solid #555;background:transparent;color:#ccc;cursor:pointer}
.gex-alert-filter-btn.active{background:#4299e1;color:#fff;border-color:#4299e1}
.gex-alert-countdown{color:#888;font-size:13px}

.gex-alert-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:16px}

.gex-alert-card{background:#1e1e3f;border-radius:10px;padding:16px;border-left:4px solid #555}
.gex-alert-card.alert-long{border-left-color:#48bb78}
.gex-alert-card.alert-short{border-left-color:#fc8181}

.gex-alert-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.gex-alert-symbol{font-size:16px;font-weight:bold;color:#fff}
.gex-alert-name{font-size:13px;color:#aaa;font-weight:normal}
.gex-alert-tags{display:flex;gap:6px}
.gex-alert-dir{padding:2px 8px;border-radius:3px;font-size:12px;font-weight:bold}
.gex-alert-dir.alert-long{background:rgba(72,187,120,0.2);color:#48bb78}
.gex-alert-dir.alert-short{background:rgba(252,129,129,0.2);color:#fc8181}
.gex-alert-tf{padding:2px 8px;border-radius:3px;font-size:12px;background:rgba(66,153,225,0.2);color:#63b3ed}
.gex-alert-neg-gamma{padding:2px 8px;border-radius:3px;font-size:12px;font-weight:bold;background:rgba(255,107,0,0.2);color:#ff6b00;animation:blink-neg-gamma 2s ease-in-out infinite}
@keyframes blink-neg-gamma{0%,100%{opacity:1}50%{opacity:0.6}}

.gex-alert-reason{color:#e0e0e0;font-size:14px;margin-bottom:12px;line-height:1.5}

.gex-alert-metrics{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:10px}
.gex-alert-metric{text-align:center;white-space:nowrap;min-width:0}
.gex-alert-metric label{display:block;font-size:11px;color:#888;margin-bottom:2px}
.gex-alert-metric span{font-size:14px;color:#fff;font-weight:bold}
.gex-alert-metric .target{color:#48bb78}
.gex-alert-metric .stop{color:#fc8181}
.gex-alert-metric .suggested{color:#ecc94b}

.gex-alert-levels{display:flex;gap:12px;flex-wrap:wrap;font-size:12px;color:#888}
.gex-alert-footer{margin-top:10px;padding-top:8px;border-top:1px solid rgba(255,255,255,0.1);display:flex;align-items:center;justify-content:space-between;gap:6px}
.gex-alert-time{font-size:12px;color:#888;white-space:nowrap}
.gex-alert-header-right{display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex-shrink:0}
.gex-alert-confidence{font-size:14px;color:#ecc94b;white-space:nowrap}

.gex-alert-holding{display:flex;align-items:center;gap:4px;flex-shrink:0}
.gex-alert-holding label{font-size:11px;color:#888}
.gex-alert-holding span{font-size:14px;color:#fff;font-weight:bold}

.gex-alert-empty{text-align:center;padding:60px 20px;color:#888;font-size:16px}

/* X1/X2交叉信号标签 */
.gex-alert-cross-tag{padding:2px 8px;border-radius:3px;font-size:12px;font-weight:bold;background:rgba(156,39,176,0.2);color:#ce93d8}
.gex-alert-cross-tag.highlight{background:rgba(255,68,68,0.2);color:#ff6666}

/* 重点告警卡片样式 */
.gex-alert-card.highlight-alert{border:2px solid #ff4444;animation:highlight-pulse 1.5s ease-in-out infinite}
@keyframes highlight-pulse{0%,100%{box-shadow:0 0 5px rgba(255,68,68,0.3)}50%{box-shadow:0 0 20px rgba(255,68,68,0.6)}}

/* 高质量信号金色边框 */
.gex-alert-card.quality-high{border:2px solid #ffd700;box-shadow:0 0 10px rgba(255,215,0,0.2)}

/* 设置按钮 */
.gex-alert-settings-btn{padding:4px 12px;border-radius:4px;background:rgba(100,100,100,0.3);color:#aaa;border:1px solid #555;cursor:pointer;font-size:12px}
.gex-alert-settings-btn:hover{background:rgba(100,100,100,0.5);color:#fff}

/* 一键开仓按钮 */
.gex-alert-quick-open-btn{padding:4px 14px;border-radius:4px;background:linear-gradient(135deg,#48bb78,#38a169);color:#fff;border:none;cursor:pointer;font-size:13px;font-weight:bold;white-space:nowrap;transition:all 0.2s}
.gex-alert-quick-open-btn:hover{background:linear-gradient(135deg,#68d391,#48bb78);transform:scale(1.05);box-shadow:0 2px 8px rgba(72,187,120,0.4)}

/* 配置弹窗 */
.gex-alert-config-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#1e1e2e;border:1px solid #444;border-radius:8px;padding:24px;z-index:10000;min-width:360px;max-width:600px;max-height:80vh;overflow-y:auto;box-shadow:0 10px 40px rgba(0,0,0,0.5)}
.gex-alert-config-modal h3{margin:0 0 16px;color:#fff}
.gex-alert-config-modal label{display:block;color:#aaa;font-size:12px;margin-bottom:4px}
.gex-alert-config-modal input{width:100%;padding:6px 10px;border:1px solid #555;border-radius:4px;background:#2a2a3e;color:#fff;margin-bottom:12px}
.gex-alert-config-modal .config-actions{display:flex;gap:8px;justify-content:flex-end}
.gex-alert-config-modal button{padding:6px 16px;border-radius:4px;border:none;cursor:pointer}
.gex-alert-config-modal .btn-save{background:#4ecdc4;color:#000}
.gex-alert-config-modal .btn-cancel{background:#555;color:#fff}
.config-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);z-index:9999}

/* X1/X2筛选按钮 */
.gex-alert-cross-filter{padding:6px 16px;border-radius:4px;border:1px solid #9b59b6;background:transparent;color:#ce93d8;cursor:pointer;font-weight:bold}
.gex-alert-cross-filter.active{background:#9b59b6;color:#fff;border-color:#9b59b6}

/* 日间模式适配 */
body.light-theme .gex-alert-config-modal{background:#fff;border-color:#ddd}
body.light-theme .gex-alert-config-modal h3{color:#333}
body.light-theme .gex-alert-config-modal label{color:#666}
body.light-theme .gex-alert-config-modal input{background:#f5f5f5;border-color:#ddd;color:#333}
body.light-theme .gex-alert-settings-btn{background:rgba(0,0,0,0.05);color:#666;border-color:#ddd}
body.light-theme .gex-alert-card.quality-high{border-color:#daa520;box-shadow:0 0 10px rgba(218,165,32,0.2)}
body.light-theme .gex-alert-card{background:#fff;border:1px solid #e2e8f0;box-shadow:0 1px 3px rgba(0,0,0,0.08)}
body.light-theme .gex-alert-symbol{color:#2d3748}
body.light-theme .gex-alert-reason{color:#4a5568}
body.light-theme .gex-alert-metric span{color:#2d3748}
body.light-theme .gex-alert-levels{color:#718096}
body.light-theme .gex-alert-footer{border-top-color:#e2e8f0}
body.light-theme .gex-alert-holding span{color:#2d3748}
body.light-theme .gex-alert-holding label{color:#718096}
body.light-theme .gex-alert-filter-btn{border-color:#d0d5dd;color:#4a5568}
body.light-theme .gex-alert-neg-gamma{background:rgba(255,107,0,0.1);color:#e65100}
body.light-theme .gex-alert-card.highlight-alert{border-color:#e53e3e;box-shadow:0 0 10px rgba(229,62,62,0.3)}
body.light-theme .gex-alert-cross-tag{background:rgba(156,39,176,0.1);color:#7b1fa2}
body.light-theme .gex-alert-cross-tag.highlight{background:rgba(229,62,62,0.1);color:#c62828}
body.light-theme .gex-alert-quick-open-btn{background:linear-gradient(135deg,#38a169,#2f855a)}
body.light-theme .gex-alert-quick-open-btn:hover{background:linear-gradient(135deg,#48bb78,#38a169)}

/* 移动端单列 */
@media(max-width:768px){
.gex-alert-list{grid-template-columns:1fr}
.gex-alert-metrics{grid-template-columns:repeat(2,1fr)}
}

.gex-alert-metrics.cols2{grid-template-columns:repeat(2,1fr)}

/* spinner */
.spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(0,0,0,0.3);border-top-color:#000;border-radius:50%;animation:spin .8s linear infinite;vertical-align:middle}

/* ========== 移动端响应式适配 ========== */

/* 汉堡菜单 - 默认隐藏 */
.hamburger {
    display: none;
    background: none;
    border: none;
    cursor: pointer;
    padding: 8px;
    flex-direction: column;
    gap: 4px;
    z-index: 200;
}
.hamburger span {
    display: block;
    width: 22px;
    height: 2px;
    background: var(--text0);
    transition: all 0.3s;
    border-radius: 2px;
}
.hamburger.active span:nth-child(1) { transform: rotate(45deg) translate(4px, 4px); }
.hamburger.active span:nth-child(2) { opacity: 0; }
.hamburger.active span:nth-child(3) { transform: rotate(-45deg) translate(4px, -4px); }

/* 侧边栏遮罩 */
.sidebar-overlay {
    display: none;
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0,0,0,0.5);
    z-index: 149;
}
.sidebar-overlay.show { display: block; }

/* ---- 平板及以下 (<768px) ---- */
@media (max-width: 768px) {
    /* 汉堡菜单显示 */
    .hamburger { display: flex; }

    /* 主布局改为单列 */
    .flex {
        grid-template-columns: 1fr !important;
    }

    /* 侧边栏改为侧滑覆盖 */
    .side {
        position: fixed;
        top: 0;
        left: -260px;
        width: 260px;
        height: 100vh;
        z-index: 150;
        background: var(--bg1);
        transition: left 0.3s ease;
        padding-top: 72px;
        box-shadow: 4px 0 20px rgba(0,0,0,0.5);
    }
    .side.open { left: 0; }

    /* Header适配 */
    .header {
        padding: 0 12px;
    }
    /* Header中的统计信息在小屏隐藏 */
    .hstat:not(:first-child) {
        display: none;
    }

    /* 起爆监控双栏改为单栏 */
    .exp-main-content {
        flex-direction: column !important;
    }
    .exp-heatmap-panel {
        width: 100% !important;
        min-width: unset !important;
        height: 40vh;
        max-height: 300px;
    }
    .exp-detail-panel {
        width: 100% !important;
        height: auto;
        min-height: 50vh;
    }

    /* GEX卡片网格自适应 */
    .gc {
        grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)) !important;
    }

    /* 通用卡片适配 */
    .card-grid {
        grid-template-columns: 1fr !important;
    }

    /* 表格水平滚动 */
    .sym-table-wrap, .sig-table-wrap, table {
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
    }

    /* 弹窗宽度适配 */
    .mo, .sym-dialog, .exp-modal {
        width: 92vw !important;
        max-width: 92vw !important;
        margin: 4vh auto !important;
    }

    /* 字体最小值保证 */
    .exp-heat-code, .exp-heat-name {
        font-size: 11px !important;
    }

    /* 按钮触摸优化 */
    button, .btn, .mi, .exp-tab-btn, .exp-heat-row {
        min-height: 36px;
    }

    /* 四列指标栏改为两列 */
    .prg {
        grid-template-columns: 1fr 1fr !important;
    }

    /* 设置页面表单适配 */
    .set-row {
        flex-direction: column;
        align-items: flex-start;
        gap: 8px;
    }

    /* 多列网格适配 */
    .exg, .exw, .dg, .dcd {
        grid-template-columns: 1fr !important;
    }
    .sent-grid, .sent-grid-4 {
        grid-template-columns: 1fr 1fr !important;
    }
    .plat-grid {
        grid-template-columns: repeat(2, 1fr) !important;
    }
    .perf-grid, .rm-grid, .am-grid, .sig-dash {
        grid-template-columns: repeat(2, 1fr) !important;
    }
    .vm-grid {
        grid-template-columns: repeat(3, 1fr) !important;
    }
    .gk-grid {
        grid-template-columns: repeat(2, 1fr) !important;
    }
    .sc-grid, .findings-grid {
        grid-template-columns: 1fr !important;
    }
    .hv-grid {
        grid-template-columns: repeat(2, 1fr) !important;
    }
    .vol-grid {
        grid-template-columns: 1fr !important;
    }
    .ctp-upper-panel {
        flex-direction: column !important;
    }
    .ctp-col-order, .ctp-col-depth, .ctp-col-trades {
        flex: 1 1 auto !important;
    }
    .sym-form-grid {
        grid-template-columns: 1fr !important;
    }
    .sym-form-group.full {
        grid-column: span 1;
    }
    .fr {
        grid-template-columns: 1fr !important;
    }
    .gk-detail {
        grid-template-columns: 1fr !important;
    }
    .gk-left {
        grid-template-columns: repeat(2, 1fr) !important;
    }
    .ai-data-grid {
        grid-template-columns: 1fr !important;
    }
    .hv-range {
        grid-template-columns: 1fr !important;
    }
    .sent-stat-grid {
        grid-template-columns: 1fr !important;
    }
}

/* ---- 小手机 (<480px) ---- */
@media (max-width: 480px) {
    .header {
        height: 56px;
        padding: 0 8px;
    }
    .flex {
        height: calc(100vh - 56px);
    }
    .side {
        padding-top: 56px;
    }

    /* 热力板更紧凑 */
    .exp-heatmap-panel {
        height: 35vh;
        max-height: 250px;
    }

    /* GEX网格2列 */
    .gc {
        grid-template-columns: repeat(2, 1fr) !important;
        gap: 4px !important;
    }

    /* Tab按钮滚动 */
    .exp-tabs, .vtabs {
        overflow-x: auto;
        white-space: nowrap;
        -webkit-overflow-scrolling: touch;
    }
    .exp-tab {
        font-size: 12px;
        padding: 6px 10px;
    }

    /* 情绪页2列更紧凑 */
    .sent-grid, .sent-grid-4 {
        grid-template-columns: 1fr !important;
    }

    /* 品种组横向滚动 */
    .sym-group {
        overflow-x: auto;
        max-width: 60vw;
    }
}

/* ==================== 登录页 ==================== */
#login-page{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0a0a0a 0%,#1a1a2e 50%,#0a0a0a 100%)}
.login-card{background:var(--bg1);border:1px solid var(--bd);border-radius:12px;padding:40px 36px;width:380px;max-width:90vw;box-shadow:0 20px 60px rgba(0,0,0,0.5),0 0 40px rgba(52,152,219,0.1)}
.login-logo{font-size:48px;text-align:center;margin-bottom:8px}
.login-title{font-size:20px;font-weight:700;color:var(--blue);text-align:center;letter-spacing:2px;margin-bottom:4px}
.login-subtitle{font-size:11px;color:var(--text2);text-align:center;margin-bottom:28px}
.login-field{margin-bottom:16px}
.login-field label{display:block;font-size:11px;color:var(--text1);margin-bottom:6px;font-weight:500}
.login-field input{width:100%;padding:10px 14px;background:var(--bg2);border:1px solid var(--bd);border-radius:6px;color:var(--text0);font-size:13px;font-family:inherit;outline:none;transition:border-color .2s}
.login-field input:focus{border-color:var(--blue)}
.login-field input::placeholder{color:var(--text2)}
.login-error{color:var(--red);font-size:11px;min-height:18px;margin-bottom:8px;text-align:center}
.send-code-btn{padding:8px 12px;background:var(--blue);color:#fff;border:none;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;font-family:inherit;white-space:nowrap}
.send-code-btn:hover{transform:translateY(-1px);box-shadow:0 4px 15px rgba(52,152,219,0.4)}
.send-code-btn:disabled{background:var(--bg3);color:var(--text2);cursor:not-allowed;transform:none;box-shadow:none}
.login-btn{width:100%;padding:12px;background:linear-gradient(135deg,var(--blue),#2980b9);color:#fff;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s;font-family:inherit}
.login-btn:hover{transform:translateY(-1px);box-shadow:0 4px 15px rgba(52,152,219,0.4)}
.login-btn:active{transform:translateY(0)}
.login-btn:disabled{opacity:0.6;cursor:not-allowed;transform:none}

/* ==================== 登录页响应式 ==================== */
@media(max-width:480px){
  .login-card{padding:28px 20px;width:90vw}
  .login-title{font-size:17px}
}

/* ==================== 侧边栏用户信息 ==================== */
.sidebar-user{margin-top:auto;padding:12px 14px;border-top:1px solid var(--bd);display:flex;align-items:center;justify-content:space-between;background:var(--bg1)}
.sidebar-user-info{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.sidebar-user-name{font-size:12px;font-weight:600;color:var(--text0);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sidebar-user-role{font-size:9px;color:var(--blue);background:rgba(52,152,219,0.15);padding:1px 6px;border-radius:3px;display:inline-block;width:fit-content}
.sidebar-logout-btn{background:none;border:1px solid var(--bd);color:var(--text2);width:30px;height:30px;border-radius:4px;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}
.sidebar-logout-btn:hover{border-color:var(--red);color:var(--red)}

/* ==================== 用户管理表格 ==================== */
.user-mgmt-table{width:100%;border-collapse:collapse;font-size:11px}
.user-mgmt-table th{padding:8px 10px;text-align:left;color:var(--text2);font-weight:500;border-bottom:1px solid var(--bd);font-size:10px;text-transform:uppercase;letter-spacing:0.5px}
.user-mgmt-table td{padding:8px 10px;border-bottom:1px solid var(--bd);color:var(--text1)}
.user-mgmt-table tr:hover td{background:var(--bg3)}
.user-mgmt-table .role-tag{font-size:9px;padding:2px 8px;border-radius:3px;font-weight:600;display:inline-block}
.role-tag.admin{background:rgba(155,89,182,0.2);color:var(--purple)}
.role-tag.trader{background:rgba(52,152,219,0.2);color:var(--blue)}
.role-tag.viewer{background:rgba(136,136,136,0.2);color:var(--text1)}
.status-active{color:var(--green)}
.status-disabled{color:var(--red)}

/* ==================== 角色权限控制 ==================== */
.role-viewer .admin-only{display:none !important}
.side{display:flex;flex-direction:column}
.menu{flex:1;overflow-y:auto}

/* ==================== 日间/夜间主题切换 ==================== */

/* 日间模式 CSS 变量覆盖 */
body.light-theme{
  --bg0:#f7fafc;--bg1:#ffffff;--bg2:#ffffff;--bg3:#e2e8f0;
  --text0:#222;--text1:#555;--text2:#888;
  --bd:#e2e8f0;
  background:#f7fafc;color:#222;
}

/* 侧边栏 - 白色背景 */
.light-theme .side{background:#ffffff;border-right:1px solid #e2e8f0}
.light-theme .mt{color:#94a3b8}
.light-theme .mi{color:#64748b}
.light-theme .mi:hover{background:#f1f5f9;color:#334155}
.light-theme .mi.on{background:#eff6ff;color:#3b82f6}
.light-theme .mi-i{color:#64748b}
.light-theme .mi.on .mi-i{color:#3b82f6}
.light-theme .mi-t{color:inherit}
.light-theme .mi.on .mi-t{color:#3b82f6}
.light-theme .mdiv{background:#e2e8f0}

/* 主内容区 */
.light-theme .main{background:#f7fafc}

/* Header */
.light-theme .header{background:#fff;border-bottom:1px solid #e2e8f0;box-shadow:none}
.light-theme .clock{background:#f0f2f5;border-color:#d0d5dd;color:#555}
.light-theme .sym-price{background:#f0f2f5;border-color:#d0d5dd}
.light-theme .sym-wrap select{background:#f0f2f5;border-color:#d0d5dd;color:#222}
.light-theme .mgr-btn{background:linear-gradient(135deg,#4299e1,#3182ce);color:#fff;box-shadow:0 2px 4px rgba(66,153,225,.3)}
.light-theme .mgr-btn:hover{background:linear-gradient(135deg,#3182ce,#2b6cb0)}

/* 卡片/面板 通用 */
.light-theme .card,.light-theme .gcard,.light-theme .prc,.light-theme .sent-card,.light-theme .vol-card,
.light-theme .sig-dash-card,.light-theme .vm-card,.light-theme .hv-card,
.light-theme .perf-card,.light-theme .rm-card,.light-theme .am-card,
.light-theme .gk-card,.light-theme .sc-card,.light-theme .plat-card,
.light-theme .mk-chart,.light-theme .mk-dept,.light-theme .mk-trades,
.light-theme .anl-chart,.light-theme .export-log,.light-theme .sent-list,
.light-theme .vol-surf,.light-theme .pnl-spark,.light-theme .vts-wrap,
.light-theme .vcone-wrap,.light-theme .skew-wrap,.light-theme .zsc,
.light-theme .dc,.light-theme .exc{
  background:#fff;border-color:#d0d5dd;color:#222;
}
/* 卡片 - 微阴影+圆角 */
.light-theme .card,.light-theme .gcard{
  border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.08);
}
/* 统计卡片顶部彩条 */
.light-theme .dc:nth-child(1){border-top:3px solid #e53e3e}
.light-theme .dc:nth-child(2){border-top:3px solid #dd6b20}
.light-theme .dc:nth-child(3){border-top:3px solid #38a169}
.light-theme .dc:nth-child(4){border-top:3px solid #3182ce}
.light-theme .dc:nth-child(5){border-top:3px solid #805ad5}
.light-theme .dc:nth-child(6){border-top:3px solid #d69e2e}
.light-theme .dc:nth-child(7){border-top:3px solid #319795}
.light-theme .dc:nth-child(8){border-top:3px solid #e53e3e}
/* 期权链Put/Call区分 */
.light-theme .exc[data-type="Put"]{background:#fff5f5}
.light-theme .exc[data-type="Call"]{background:#f0fff4}
.light-theme .exc .put-tag{background:#fff5f5}
.light-theme .exc .call-tag{background:#f0fff4}

/* Section */
.light-theme .sec,.light-theme .dsec,.light-theme .exs,.light-theme .prs,
.light-theme .wws,.light-theme .exp-stats-bar,.light-theme .sym-header{
  background:#fff;border-color:#e0e0e0;
}
/* Section标题 */
.light-theme .sec h3,.light-theme .dsec h3{
  color:#2d3748;border-left:none;padding-left:0;
}
.light-theme .exp-panel-header{background:#f8f9fa;border-color:#e0e0e0}

/* 表格 */
.light-theme table th,.light-theme .sig-table th,.light-theme .mbt th,
.light-theme .anl-table th,.light-theme .iv-detail-table th,
.light-theme .sym-table th,.light-theme .ctp-table th,
.light-theme .user-mgmt-table th{
  background:#f0f2f5;color:#444;
}
.light-theme table td,.light-theme .sig-table td,.light-theme .mbt td,
.light-theme .anl-table td,.light-theme .sym-table td,.light-theme .ctp-table td,
.light-theme .user-mgmt-table td{
  border-color:#e0e0e0;color:#333;
}
.light-theme .sym-table tbody tr:hover{background:rgba(25,118,210,.06)}
.light-theme .sig-table tr:hover td,.light-theme .mbt tr:hover td,
.light-theme .anl-table tr:hover td,.light-theme .iv-detail-table tr:hover td{
  background:#f5f7fa;
}
.light-theme .iv-detail-table th{background:#f0f2f5}
.light-theme .iv-detail-table tr:hover td{background:#f5f7fa}
.light-theme .sym-table thead{background:#f0f2f5}

/* 输入框 */
.light-theme input,.light-theme select,.light-theme textarea,
.light-theme .si,.light-theme .sr input,
.light-theme .set-r select,.light-theme .set-r input,
.light-theme .anl-filters select,.light-theme .anl-filters input,
.light-theme .sym-form-group input,.light-theme .sym-form-group select,
.light-theme .login-field input,
.light-theme .llm-prompt-textarea,
.light-theme .ctp-input,.light-theme .ctp-select,
.light-theme .setting-input,
.light-theme .sym-form-section{
  background:#fff;border-color:#c0c6d0;color:#222;
}
.light-theme input::placeholder,.light-theme textarea::placeholder{color:#999}
.light-theme input:focus,.light-theme select:focus,.light-theme textarea:focus,
.light-theme .si:focus,.light-theme .sr input:focus,
.light-theme .login-field input:focus{
  border-color:#1976d2;
}
.light-theme .sym-form-group input[readonly]{background:#f0f2f5;color:#888}
.light-theme .setting-input:focus{border-color:#1976d2}

/* Tab 按钮 */
.light-theme .vtabs,.light-theme .exp-tabs{
  background:#f0f2f5;border-color:#d0d5dd;
}
.light-theme .vtab,.light-theme .exp-tab{
  color:#555;
}
.light-theme .vtab:hover,.light-theme .exp-tab:hover{
  background:#e0e5ec;color:#222;
}
.light-theme .vtab.on,.light-theme .exp-tab.active{
  background:rgba(25,118,210,.12);color:#1976d2;
}

/* 弹窗/对话框 */
.light-theme .mo{background:rgba(0,0,0,.4)}
.light-theme .md,.light-theme .sym-dialog,.light-theme .exp-modal{
  background:#fff;border-color:#d0d5dd;
}
.light-theme .mh,.light-theme .sym-dialog-h,.light-theme .exp-modal-header{
  border-color:#e0e0e0;
}
.light-theme .mx{background:#f0f2f5;color:#555}
.light-theme .mx:hover{background:#e0e5ec;color:#222}
.light-theme .sym-dialog-close{color:#888}
.light-theme .sym-dialog-close:hover{color:#222}
.light-theme .sym-dialog-f{border-color:#e0e0e0}
.light-theme .exp-modal-content{background:#f5f7fa;color:#222}
.light-theme .exp-modal-header button:last-of-type{background:#f0f2f5;border-color:#d0d5dd;color:#555}
.light-theme .exp-modal-header button:last-of-type:hover{background:#e0e5ec;color:#222}
.light-theme .sym-overlay{background:rgba(0,0,0,.4)}
.light-theme .exp-modal-overlay{background:rgba(0,0,0,.4)}

/* 按钮 */
.light-theme .btn-s{background:#f0f2f5;color:#555;border:1px solid #d0d5dd;box-shadow:0 1px 3px rgba(0,0,0,.04)}
.light-theme .btn-s:hover{background:#e0e5ec;color:#222}
.light-theme .ds-btn{background:#f0f2f5;border-color:#d0d5dd;color:#555}
.light-theme .ds-btn:hover{border-color:#1976d2;color:#222}
.light-theme .ds-btn.on{background:rgba(25,118,210,.12);border-color:#1976d2;color:#1976d2}
.light-theme .ac.ae{background:#1976d2;color:#fff}
.light-theme .sym-btn.primary{background:#1976d2}
.light-theme .llm-prompt-btn{background:linear-gradient(135deg,rgba(25,118,210,.12),rgba(155,89,182,.12));border-color:var(--purple);color:var(--purple)}
.light-theme .llm-prompt-btn:hover{border-color:#1976d2;color:#1976d2}
.light-theme .llm-prompt-close-btn{background:#f0f2f5;border-color:#d0d5dd;color:#555}
.light-theme .llm-prompt-close-btn:hover{background:#e0e5ec;color:#222}
.light-theme .sym-toggle.off{background:#e0e5ec;color:#888}
.light-theme .sym-edit-btn{color:#1976d2}
.light-theme .sym-edit-btn:hover{background:rgba(25,118,210,.1)}
.light-theme .exp-refresh-btn{border-color:#d0d5dd;color:#555}
.light-theme .exp-refresh-btn:hover{background:#e0e5ec;color:#222}

/* 滚动条 */
.light-theme ::-webkit-scrollbar-track{background:#f0f2f5}
.light-theme ::-webkit-scrollbar-thumb{background:#c0c6d0}

/* 状态标签 */
.light-theme .lb{background:rgba(0,180,100,.08);border-color:rgba(0,180,100,.25);color:#00875a}
.light-theme .lb-d{background:#00875a}
.light-theme .sent-tag.up{background:rgba(0,180,100,.1);color:#00875a}
.light-theme .sent-tag.dn{background:rgba(220,50,50,.1);color:#d32f2f}
.light-theme .sig-tag.buy{background:rgba(0,180,100,.1);color:#00875a}
.light-theme .sig-tag.sell{background:rgba(220,50,50,.1);color:#d32f2f}
.light-theme .sig-tag.hold{background:rgba(25,118,210,.1);color:#1976d2}
.light-theme .regime-badge.high{background:rgba(220,50,50,.1);color:#d32f2f}
.light-theme .regime-badge.medium{background:rgba(230,140,0,.1);color:#e68c00}
.light-theme .regime-badge.low{background:rgba(0,180,100,.1);color:#00875a}
.light-theme .ai-tag.bull{background:rgba(0,180,100,.1);color:#00875a}
.light-theme .ai-tag.bear{background:rgba(220,50,50,.1);color:#d32f2f}
.light-theme .ai-tag.neutral{background:rgba(25,118,210,.1);color:#1976d2}
.light-theme .dctp.put{background:rgba(220,50,50,.12);color:#d32f2f}
.light-theme .dctp.call{background:rgba(0,180,100,.12);color:#00875a}
.light-theme .sym-tag.inner{background:rgba(25,118,210,.1);color:#1976d2}
.light-theme .sym-tag.foreign{background:rgba(0,180,100,.1);color:#00875a}
.light-theme .sym-tag.cn{background:rgba(230,140,0,.1);color:#e68c00}
.light-theme .sym-code{color:#1976d2}
.light-theme .role-tag.admin{background:rgba(155,89,182,.12);color:#7b1fa2}
.light-theme .role-tag.trader{background:rgba(25,118,210,.12);color:#1976d2}
.light-theme .status-active{color:#00875a}
.light-theme .status-disabled{color:#d32f2f}

/* 热力板格子 */
.light-theme .exp-heatmap-panel{background:#fff;border-color:#d0d5dd}
.light-theme .exp-heat-row:hover{background:#e8f0fe}
.light-theme .exp-heat-row.selected{background:rgba(25,118,210,.08);border-color:#1976d2}
.light-theme .exp-heat-bar-wrap{background:#e8eaed}
.light-theme .exp-detail-panel{background:#fff;border-color:#d0d5dd}
.light-theme .exp-ind-card{background:#f5f7fa;border-color:#d0d5dd}
.light-theme .exp-signal-item{background:#f5f7fa;border-color:#d0d5dd}
.light-theme .exp-signal-bar{background:#e0e5ec}
.light-theme .exp-history-panel{background:#fff;border-color:#d0d5dd}
.light-theme .exp-alert-item:hover{background:#e8f0fe}
.light-theme .exp-heat-section-title{border-color:rgba(0,0,0,.06)}
.light-theme .exp-heat-section-count{color:#aaa}
.light-theme .exp-option-known{background:#f5f7fa;border-color:#d0d5dd}
.light-theme .exp-ai-panel{background:#f5f7fa;border-color:rgba(0,0,0,.08)}
.light-theme .exp-ai-header{border-color:rgba(0,0,0,.06)}
.light-theme .exp-ai-content{color:#555}

/* 底栏 */
.light-theme .ft{background:#f0f4f8;border-color:#e0e0e0;color:#888}
.light-theme .ft a{color:#555}
.light-theme .ft a:hover{color:#222}

/* 登录页 */
.light-theme #login-page{background:linear-gradient(135deg,#f5f7fa 0%,#e8f0fe 50%,#f5f7fa 100%)}
.light-theme .login-card{background:#fff;border-color:#d0d5dd;box-shadow:0 20px 60px rgba(0,0,0,.08),0 0 40px rgba(25,118,210,.08)}
.light-theme .login-field input{background:#f5f7fa;border-color:#d0d5dd;color:#222}
.light-theme .login-field input::placeholder{color:#aaa}
.light-theme .login-field label{color:#555}
.light-theme .login-btn{background:linear-gradient(135deg,#1976d2,#1565c0)}

/* 侧边栏用户区 */
.light-theme .sidebar-user{background:#f7fafc;border-top:1px solid #e2e8f0;color:#4a5568}
.light-theme .sidebar-logout-btn{border-color:#cbd5e0;color:#718096}
.light-theme .sidebar-logout-btn:hover{border-color:#4a5568;color:#2d3748}

/* CTP页面 */
.light-theme .ctp-panel{background:#fff}
.light-theme .ctp-topbar,.light-theme .ctp-data-panel{background:#f5f7fa}
.light-theme .ctp-log-area{background:#f5f7fa;color:#333}
.light-theme .ctp-table th{background:#f0f2f5;color:#444}
.light-theme .ctp-table td{border-color:#e0e0e0;color:#333}
.light-theme .ctp-table tr:hover td{background:#f5f7fa}
.light-theme .ctp-input,.light-theme .ctp-select{background:#fff;border-color:#c0c6d0;color:#222}
.light-theme .ctp-empty{color:#888}

/* AI分析 */
.light-theme .ai-box{background:linear-gradient(135deg,rgba(25,118,210,.06),rgba(155,89,182,.06));border-color:rgba(25,118,210,.2)}
.light-theme .ai-result-header{color:#e68c00}
.light-theme .ai-field label{color:#888}
.light-theme .ai-field span{color:#333}
.light-theme .ai-field .ai-code{color:#1976d2}
.light-theme .ai-section-title{color:#e68c00;border-color:rgba(230,140,0,.2)}
.light-theme .ai-data-item{background:rgba(0,0,0,.02)}
.light-theme .ai-data-label{color:#888}
.light-theme .ai-data-value{color:#333}
.light-theme .ai-analysis-text{color:#444}
.light-theme .ai-reason-text{color:#1976d2}
.light-theme .ai-risk-text{color:#d32f2f}
.light-theme .ai-confidence{color:#888}
.light-theme .ai-empty{color:#888}
.light-theme .ai-result-footer{border-color:rgba(0,0,0,.08);color:#888}

/* 策略面板 */
.light-theme .strategy-card{background:#f5f7fa;border-color:#d0d5dd}
.light-theme .strategy-underlying{color:#222}
.light-theme .leg-item{color:#555;border-color:rgba(0,0,0,.06)}
.light-theme .pnl-label{color:#888}
.light-theme .perf-section{border-color:#e0e0e0}
.light-theme .perf-card{background:#f5f7fa;border-color:#d0d5dd}
.light-theme .perf-label{color:#888}
.light-theme .perf-value{color:#222}
.light-theme .strategy-time{color:#888}
.light-theme .strategy-empty{color:#888}
.light-theme .strategy-empty .hint{color:#aaa}
.light-theme .observe-hint{color:#888}
.light-theme .execute-hint{color:#888}
.light-theme .spinner{border-color:rgba(0,0,0,.15);border-top-color:#333}

/* 进度条/背景条 */
.light-theme .sent-bar{background:#e0e5ec}
.light-theme .sent-stat-item{background:#f5f7fa}
.light-theme .exd{background:#e0e5ec}
.light-theme .exb{background:#f5f7fa}
.light-theme .exw-i{background:#f5f7fa;border-color:#d0d5dd}
.light-theme .dci{background:#f5f7fa}
.light-theme .zscs{background:#e0e5ec}
.light-theme .sig-bar{background:#e0e5ec}
.light-theme .fx-bar-wrap{background:#e0e5ec}
.light-theme .strat-bar{background:#e0e5ec}
.light-theme .hv-card .hv-bar-wrap{background:#e0e5ec}
.light-theme .ai-conf-bar{background:#e0e5ec}
.light-theme .exp-heat-bar-wrap{background:#e0e5ec}
.light-theme .exp-signal-bar{background:#e0e5ec}

/* 汉堡菜单 */
.light-theme .hamburger span{background:#4a5568}

/* 未使用CSS变量的硬编码深色颜色覆盖 */
.light-theme .btn-xs{background:#d0d5dd;color:#333}
.light-theme .btn-xs:hover{background:#c0c6d0}
.light-theme .ai-observe-section{background:rgba(230,140,0,.08);border-color:rgba(230,140,0,.25)}
.light-theme .ai-execute-section{background:rgba(0,150,80,.08);border-color:rgba(0,150,80,.25)}
.light-theme .btn-execute-strategy{background:linear-gradient(135deg,#00875a,#00a86b);color:#fff}
.light-theme .btn-execute-strategy.executed{background:#4caf50;color:#fff}
.light-theme .observe-badge{color:#e68c00}
.light-theme .btn-close-strategy{border-color:#d32f2f;color:#d32f2f}
.light-theme .btn-close-strategy:hover{background:rgba(211,47,47,.08)}
.light-theme .btn-cancel-strategy{border-color:#999;color:#999}
.light-theme .btn-cancel-strategy:hover{background:rgba(0,0,0,.05)}
.light-theme .leg-direction.buy{color:#d32f2f}
.light-theme .leg-direction.sell{color:#00875a}
.light-theme .pnl-positive{color:#d32f2f}
.light-theme .pnl-negative{color:#00875a}
.light-theme .status-filled{background:rgba(0,150,80,.12);color:#00875a}
.light-theme .status-executing{background:rgba(25,118,210,.12);color:#1976d2}
.light-theme .status-partial{background:rgba(230,140,0,.12);color:#e68c00}
.light-theme .status-closing{background:rgba(211,47,47,.12);color:#d32f2f}
.light-theme .status-closed{background:rgba(0,0,0,.06);color:#888}
.light-theme .status-cancelled{background:rgba(0,0,0,.06);color:#999}
.light-theme .status-pending{background:rgba(25,118,210,.12);color:#1976d2}
.light-theme .wwc{background:#fff;border-color:#d0d5dd}
.light-theme .ww-water{background:linear-gradient(180deg,rgba(25,118,210,.04),rgba(25,118,210,.08),rgba(25,118,210,.12))}
.light-theme .ww-waves path{fill:rgba(25,118,210,.12)}
.light-theme .ww-block{border-color:#d32f2f;background:linear-gradient(180deg,rgba(211,47,47,.3),rgba(211,47,47,.18),rgba(211,47,47,.08))}
.light-theme .ww-block.call{border-color:#00875a;background:linear-gradient(180deg,rgba(0,135,90,.3),rgba(0,135,90,.18),rgba(0,135,90,.08))}
.light-theme .ww-val{background:#fff;border-color:#d0d5dd}
.light-theme .pm{background:linear-gradient(180deg,#e68c00,rgba(230,140,0,.3));box-shadow:0 0 16px rgba(230,140,0,.3)}
.light-theme .pm-mg-dot{background:var(--purple);border-color:#fff}
.light-theme .pm-mg{border-color:var(--purple)}
.light-theme .pm-pw{border-color:#d32f2f}
.light-theme .pm-cw{border-color:#00875a}
.light-theme .leg-b.put{background:rgba(211,47,47,.2);border-color:#d32f2f}
.light-theme .leg-b.call{background:rgba(0,135,90,.2);border-color:#00875a}
.light-theme .leg-b.mg{border-color:var(--purple)}
.light-theme .leg-d{background:#e68c00}
.light-theme .peak{background:linear-gradient(135deg,rgba(155,89,182,.06),rgba(155,89,182,.03));border-color:rgba(155,89,182,.2)}
.light-theme .hv-status{background:linear-gradient(135deg,rgba(155,89,182,.08),rgba(25,118,210,.05));border-color:rgba(155,89,182,.2)}
.light-theme .toast.success{background:#00875a;color:#fff}
.light-theme .toast.error{background:#d32f2f;color:#fff}
.light-theme .toast.info{background:#1976d2;color:#fff}
.light-theme .toggle{background:#d0d5dd}
.light-theme .toggle.on{background:#1976d2}
.light-theme .slider{background:#d0d5dd}
.light-theme .switch input:checked+.slider{background:#1976d2}
.light-theme .exp-state-flash{animation-name:expStateFlashLight}
.light-theme .kl-period-btn{background:#f0f2f5;border-color:#d0d5dd;color:#555}
.light-theme .kl-period-btn:hover:not(.on){background:#e0e5ec!important}
.light-theme .kl-period-btn.on{background:#1976d2!important;color:#fff!important;border-color:#1976d2!important}
.light-theme .finding-card{background:#fff;border-color:#d0d5dd}
.light-theme .gk-item{background:#fff;border-color:#d0d5dd}
.light-theme .gk-risk-item{background:#fff;border-color:#d0d5dd}
.light-theme .llm-prompt-textarea{background:#fff;border-color:#d0d5dd;color:#222}
.light-theme .llm-prompt-copy-btn{background:var(--purple);color:#fff}
.light-theme .llm-prompt-copy-btn:hover{background:#7b1fa2}
.light-theme .exp-ai-btn{background:linear-gradient(135deg,rgba(155,89,182,.12),rgba(25,118,210,.12));border-color:var(--purple);color:var(--purple)}
.light-theme .exp-ai-btn:hover{border-color:#1976d2;color:#1976d2}
.light-theme .exp-modal-header button:first-of-type{background:var(--purple);color:#fff;border-color:var(--purple)}
.light-theme .exp-modal-header button:first-of-type:hover{background:#7b1fa2}
.light-theme .exp-alert-banner{border-top:1px solid #e0e0e0}
.light-theme .sidebar-user-role{background:#edf2f7;color:#4299e1}
.light-theme .sym-toggle.pos{background:#e68c00;color:#fff}
.light-theme .sym-toggle.pos:hover{background:#cc7a00}
.light-theme .sym-toggle.on{background:#00875a;color:#fff}
.light-theme .sym-toggle.on:hover{background:#00704a}
@keyframes expStateFlashLight{0%,100%{background:transparent}25%{background:rgba(211,47,47,.1)}50%{background:rgba(230,140,0,.06)}75%{background:rgba(211,47,47,.06)}}

/* 主题切换按钮 */
#theme-toggle-btn{
  border:none;background:transparent;font-size:20px;cursor:pointer;
  padding:4px 6px;border-radius:4px;transition:opacity .2s;line-height:1;
}
#theme-toggle-btn:hover{opacity:.7}

/* ��Чͳ�� */
.perf-section{margin-top:16px;padding:12px;border-top:1px solid #333}
.perf-title{font-size:13px;font-weight:bold;color:#eee;margin-bottom:10px}
.perf-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.perf-card{background:rgba(255,255,255,0.03);border:1px solid #333;border-radius:6px;padding:8px;text-align:center}
.perf-label{font-size:11px;color:#aaa;margin-bottom:4px}
.perf-value{font-size:14px;font-weight:bold;color:#eee}
.perf-value.pnl-positive{color:#f44336}
.perf-value.pnl-negative{color:#4caf50}

/* ==================== 系统设置页重构 ==================== */
.settings-layout{display:flex;height:calc(100vh - 130px);overflow:hidden}
.settings-nav{width:180px;background:var(--bg1);border-right:1px solid var(--bd);padding:12px 0;flex-shrink:0;overflow-y:auto}
.settings-tab{display:flex;align-items:center;gap:10px;width:100%;padding:11px 20px;border:none;background:transparent;color:var(--text1);font-size:13px;cursor:pointer;transition:all .15s;text-align:left;font-family:inherit;border-left:3px solid transparent}
.settings-tab:hover{background:var(--bg2);color:var(--text0)}
.settings-tab.active{background:rgba(52,152,219,.08);color:var(--blue);border-left-color:var(--blue);font-weight:600}
.settings-tab .st-icon{font-size:16px;width:24px;text-align:center;flex-shrink:0}
.settings-content{flex:1;overflow-y:auto;padding:0}
.settings-panel{display:none}
.settings-panel.active{display:block}
.settings-card{background:var(--bg1);border:1px solid var(--bd);border-radius:8px;margin:16px 20px;overflow:hidden}
.settings-card-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background:var(--bg2);border-bottom:1px solid var(--bd)}
.settings-card-title{font-size:14px;font-weight:600;color:var(--text0);display:flex;align-items:center;gap:8px}
.settings-card-title .st-icon{font-size:16px}
.settings-card-badge{font-size:10px;padding:3px 10px;border-radius:10px;font-weight:600;background:var(--bg3);color:var(--text2)}
.settings-card-badge.active{background:rgba(0,216,122,.1);color:var(--green);border:1px solid rgba(0,216,122,.2)}
.settings-card-badge.warn{background:rgba(255,165,2,.1);color:var(--yellow);border:1px solid rgba(255,165,2,.2)}
.settings-card-body{padding:16px 20px}
.settings-card-footer{display:flex;align-items:center;gap:10px;padding:12px 20px;border-top:1px solid var(--bd);background:var(--bg2)}
/* 风控模板行内表单元格 */
.rt-row{display:flex;align-items:center;justify-content:space-between;padding:9px 14px;border-bottom:1px solid var(--bd)}
.rt-row:last-child{border-bottom:none}
.rt-row:hover{background:rgba(255,255,255,.025)}
.rt-lbl{font-size:12px;color:var(--text1);flex:1;padding-right:12px;white-space:nowrap}
.rt-inp{width:110px;padding:5px 10px;background:var(--bg3) !important;border:1px solid var(--bd);border-radius:5px;color:var(--text0) !important;font-size:12px;font-family:'JetBrains Mono','Microsoft YaHei',monospace;text-align:right;transition:border-color .15s;-webkit-appearance:none;appearance:none;box-sizing:border-box}
.rt-inp:focus{outline:none !important;border-color:var(--blue) !important;box-shadow:0 0 0 2px rgba(52,152,219,.15)}
.tf-toggle-group{display:inline-flex;align-items:center;gap:3px;width:max-content;max-width:100%;padding:3px;background:var(--bg3);border:1px solid var(--bd);border-radius:6px;box-sizing:border-box;white-space:nowrap}
.tf-toggle{position:relative;display:inline-flex;align-items:center;justify-content:center;margin:0;cursor:pointer;user-select:none}
.tf-toggle input{position:absolute;opacity:0;pointer-events:none}
.tf-toggle span{display:inline-flex;align-items:center;justify-content:center;min-width:38px;height:24px;padding:0 8px;border-radius:4px;color:var(--text2);font-size:11px;font-weight:700;font-family:'JetBrains Mono','Microsoft YaHei',monospace;line-height:1;transition:background .15s,color .15s,box-shadow .15s}
.tf-toggle:hover span{background:rgba(255,255,255,.06);color:var(--text0)}
.tf-toggle input:checked + span{background:rgba(24,144,255,.22);color:#eaf5ff;box-shadow:inset 0 0 0 1px rgba(24,144,255,.62)}
.tf-toggle input:checked:hover + span{background:rgba(24,144,255,.3)}
.rt-row .tf-toggle-group{margin-left:auto;flex-shrink:0}
.rx-cfg-item .tf-toggle-group{width:100%;justify-content:space-between}
.entry-shape-filter-widget{gap:12px}
.entry-shape-filter-box{width:100%;max-width:780px;margin-left:auto;border:1px solid var(--bd);border-radius:6px;background:var(--bg2);overflow:hidden}
.entry-shape-filter-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border-bottom:1px solid var(--bd)}
.entry-shape-filter-title{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;color:var(--text0)}
.entry-shape-filter-summary{font-size:11px;color:var(--text2);white-space:nowrap}
.entry-shape-filter-body{display:grid;grid-template-columns:1fr 1fr;gap:0}
.entry-shape-filter-section{padding:11px 12px;border-right:1px solid var(--bd)}
.entry-shape-filter-section:last-child{border-right:none}
.entry-shape-filter-section.is-muted{opacity:.45}
.entry-shape-filter-section-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.entry-shape-filter-section-title{font-size:12px;font-weight:700;color:var(--text1)}
.entry-shape-filter-options{display:flex;flex-wrap:wrap;gap:6px}
.entry-shape-chip{position:relative;display:inline-flex;align-items:center;cursor:pointer;user-select:none;max-width:100%}
.entry-shape-chip input{position:absolute;opacity:0;pointer-events:none}
.entry-shape-chip span{display:inline-flex;align-items:center;max-width:260px;min-height:24px;padding:4px 8px;border:1px solid var(--bd);border-radius:5px;background:var(--bg1);color:var(--text2);font-size:11px;font-weight:600;line-height:1.35;white-space:normal}
.entry-shape-chip:hover span{border-color:rgba(52,152,219,.45);color:var(--text0)}
.entry-shape-chip input:checked + span{border-color:rgba(52,152,219,.72);background:rgba(52,152,219,.13);color:var(--blue)}
.entry-shape-mini-toggle{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text2);white-space:nowrap}
.entry-shape-mini-toggle input{width:13px;height:13px}
.entry-shape-empty{font-size:11px;color:var(--text2);padding:4px 0}
@media (max-width: 1180px){.entry-shape-filter-body{grid-template-columns:1fr}.entry-shape-filter-section{border-right:none;border-bottom:1px solid var(--bd)}.entry-shape-filter-section:last-child{border-bottom:none}}
/* 风控模板级别列表项 */
.rt-tier-item{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:11px 6px;border:none;background:transparent !important;color:var(--text2);font-size:11px;cursor:pointer;width:100%;border-left:3px solid transparent;transition:all .15s;gap:3px;-webkit-appearance:none;appearance:none}
.rt-tier-item:hover{background:rgba(255,255,255,.04) !important;color:var(--text0)}
.rt-tier-item.active{background:rgba(52,152,219,.1) !important;border-left-color:var(--blue)}
.rt-tier-item .rt-tier-name{font-weight:700;font-size:12px;line-height:1.2}
.rt-tier-item .rt-tier-range{font-size:9px;opacity:.65;line-height:1.2}
.settings-field{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid rgba(42,42,42,.5)}
.settings-field:last-child{border-bottom:none}
.settings-label{display:flex;flex-direction:column;gap:2px}
.settings-label span:first-child{font-size:12px;font-weight:500;color:var(--text0)}
.settings-hint{font-size:10px;color:var(--text2)}
.settings-control{display:flex;align-items:center;gap:10px;flex-shrink:0}
.settings-row-2{display:flex;gap:16px;padding:10px 0;border-bottom:1px solid rgba(42,42,42,.5)}
.settings-row-2:last-child{border-bottom:none}
.setting-input{padding:8px 12px;background:var(--bg0);border:1px solid var(--bd);border-radius:6px;color:var(--text0);font-size:12px;font-family:'JetBrains Mono','Microsoft YaHei',monospace;transition:border-color .15s}
.setting-input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 2px rgba(52,152,219,.15)}
.setting-input::placeholder{color:var(--text2)}
.settings-hint-block{font-size:11px;color:var(--text2);background:rgba(52,152,219,.06);border:1px solid rgba(52,152,219,.1);border-radius:6px;padding:10px 14px;margin-bottom:12px}
.settings-warning{font-size:10px;color:var(--yellow);background:rgba(255,165,2,.06);border:1px solid rgba(255,165,2,.12);border-radius:6px;padding:8px 14px;margin-top:4px;line-height:1.6}
.email-notify-row{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text1);cursor:pointer;padding:4px 0}
.email-notify-row input[type=checkbox]{accent-color:var(--blue);cursor:pointer}
.settings-test-result{font-size:11px;font-weight:500;min-width:80px}
.switch{position:relative;display:inline-block;width:44px;height:24px}
.switch input{opacity:0;width:0;height:0}
.switch .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background:var(--bg3);transition:.2s;border-radius:24px}
.switch .slider:before{content:"";position:absolute;height:18px;width:18px;left:3px;bottom:3px;background:#fff;transition:.2s;border-radius:50%}
.switch input:checked+.slider{background:var(--blue)}
.switch input:checked+.slider:before{transform:translateX(20px)}
.user-mgmt-table{width:100%;border-collapse:collapse;font-size:11px}
.user-mgmt-table th{text-align:left;padding:10px 16px;background:var(--bg2);color:var(--text2);font-weight:500;font-size:10px;text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--bd)}
.user-mgmt-table td{padding:10px 16px;border-bottom:1px solid rgba(42,42,42,.3);color:var(--text0)}
.user-mgmt-table tr:hover td{background:rgba(52,152,219,.03)}
@media (max-width:768px){
.settings-layout{flex-direction:column}
.settings-nav{width:100%;display:flex;overflow-x:auto;border-right:none;border-bottom:1px solid var(--bd);padding:8px;gap:4px}
.settings-tab{border-left:none;border-bottom:3px solid transparent;padding:8px 14px;white-space:nowrap;font-size:12px}
.settings-tab .st-icon{display:none}
.settings-tab.active{border-left-color:transparent;border-bottom-color:var(--blue)}
.settings-card{margin:12px}
.settings-field{flex-direction:column;align-items:flex-start;gap:8px}
.settings-control{margin-left:0}
}

/* ===== GEX持仓页面 ===== */
.gex-trade-header-bar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:rgba(255,255,255,0.03);border-radius:8px;margin-bottom:12px;flex-wrap:wrap;gap:8px}
.gex-trade-filters{display:flex;gap:8px;flex-wrap:wrap}
.gex-trade-filter-btn{padding:6px 14px;border-radius:4px;background:rgba(100,100,100,0.2);color:#ccc;border:1px solid #555;cursor:pointer;font-size:13px;transition:all 0.2s}
.gex-trade-filter-btn.active{background:rgba(72,187,120,0.2);color:#48bb78;border-color:#48bb78}
.gex-trade-filter-btn:hover{background:rgba(100,100,100,0.4)}
.gex-trade-refresh-btn{padding:6px 14px;border-radius:4px;background:rgba(59,130,246,0.2);color:#60a5fa;border:1px solid #3b82f6;cursor:pointer;font-size:13px}
.gex-trade-refresh-btn:hover{background:rgba(59,130,246,0.4)}
.gex-trade-stats-bar{display:flex;gap:16px;font-size:13px;color:#aaa}
.gex-trade-stats-bar b{color:#fff}
.gex-trade-position-list{display:flex;flex-direction:column;gap:10px}

/* 状态标签 */
.gt-status-active{font-size:12px;padding:2px 8px;border-radius:3px;background:rgba(72,187,120,0.15);color:#48bb78}
.gt-status-warn{font-size:12px;padding:2px 8px;border-radius:3px;background:rgba(252,129,129,0.15);color:#fc8181;animation:highlight-pulse 1.5s ease-in-out infinite}
.gt-status-closed{font-size:12px;padding:2px 8px;border-radius:3px;background:rgba(150,150,150,0.15);color:#888}

/* 平仓告警原因条 */
.gt-alert-reason{padding:6px 10px;background:rgba(252,129,129,0.1);border-left:3px solid #fc8181;border-radius:3px;font-size:12px;color:#fc8181;margin-bottom:8px}

/* 操作按钮 */
.gt-actions{display:flex;gap:6px;flex-shrink:0}
.gt-btn{padding:3px 10px;border-radius:3px;border:1px solid;cursor:pointer;font-size:12px;transition:all 0.2s}
.gt-btn-detail{background:rgba(59,130,246,0.1);color:#60a5fa;border-color:#3b82f6}
.gt-btn-detail:hover{background:rgba(59,130,246,0.25)}
.gt-btn-eval{background:rgba(236,201,75,0.1);color:#ecc94b;border-color:#ecc94b}
.gt-btn-eval:hover{background:rgba(236,201,75,0.25)}
.gt-btn-close{background:rgba(252,129,129,0.1);color:#fc8181;border-color:#fc8181}
.gt-btn-close:hover{background:rgba(252,129,129,0.25)}

/* 详情表格 */
.gt-detail-table{width:100%;border-collapse:collapse;font-size:12px;margin:8px 0}
.gt-detail-table td{padding:4px 8px;border-bottom:1px solid rgba(255,255,255,0.05)}
.gt-detail-table td:first-child{color:#888;width:40%}
.gt-detail-table td:last-child{color:#ddd}

/* 浅色主题 */
body.light-theme .gex-trade-header-bar{background:#f7f8fa}
body.light-theme .gex-trade-filter-btn{background:#edf2f7;color:#4a5568;border-color:#d0d5dd}
body.light-theme .gex-trade-filter-btn.active{background:rgba(72,187,120,0.1);color:#38a169;border-color:#38a169}
body.light-theme .gex-trade-stats-bar{color:#718096}
body.light-theme .gex-trade-stats-bar b{color:#2d3748}
body.light-theme .gt-detail-table td:last-child{color:#2d3748}
body.light-theme .gt-status-active{background:rgba(72,187,120,0.1);color:#38a169}
body.light-theme .gt-status-warn{background:rgba(252,129,129,0.1);color:#e53e3e}
body.light-theme .gt-status-closed{background:rgba(150,150,150,0.1);color:#718096}

/* ==================== 热点品种监控页面 ==================== */
.hs-stats-bar{display:flex;align-items:center;gap:8px;padding:10px 16px;background:var(--bg1);border-bottom:1px solid var(--bd);font-size:11px;color:var(--text1)}
.hs-stat-item{white-space:nowrap}
.hs-stat-item b{color:var(--text0)}
.hs-stat-sep{color:var(--text2);margin:0 2px}
.hs-ws-status{display:flex;align-items:center;gap:5px;margin-left:auto;font-size:10px;color:var(--text2)}
.hs-ws-dot{width:7px;height:7px;border-radius:50%;display:inline-block}
.hs-ws-dot.on{background:var(--green);box-shadow:0 0 6px var(--green)}
.hs-ws-dot.off{background:var(--red)}

/* 筛选栏 */
.hs-filter-bar{display:flex;align-items:center;gap:20px;padding:8px 16px;background:var(--bg2);border-bottom:1px solid var(--bd);font-size:11px}
.hs-filter-group{display:flex;align-items:center;gap:6px}
.hs-filter-label{color:var(--text2);font-weight:500;margin-right:2px}
.hs-filter-btn{padding:4px 10px;background:var(--bg3);border:1px solid var(--bd);border-radius:4px;color:var(--text1);font-size:11px;cursor:pointer;transition:all .15s}
.hs-filter-btn:hover{border-color:var(--blue);color:var(--text0)}
.hs-filter-btn.on{background:var(--blue);color:#fff;border-color:var(--blue)}

/* 主内容区 */
.hs-main-content{display:flex;gap:12px;padding:12px 16px;height:calc(100vh - 72px - 42px - 48px - 24px);min-height:320px}

/* 左侧表格面板 */
.hs-table-panel{flex:1;min-width:0;background:var(--bg2);border:1px solid var(--bd);border-radius:8px;display:flex;flex-direction:column;overflow:hidden}
.hs-table-wrap{flex:1;overflow-y:auto;padding:0}
.hs-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--text2);font-size:13px}

/* 表格样式 */
.hs-table{width:100%;border-collapse:collapse;font-size:12px}
.hs-table thead{position:sticky;top:0;z-index:2}
.hs-table thead th{background:var(--bg3);color:var(--text2);font-weight:500;padding:8px 10px;text-align:left;white-space:nowrap;border-bottom:1px solid var(--bd)}
.hs-table tbody tr{border-bottom:1px solid var(--bd);cursor:pointer;transition:background .15s}
.hs-table tbody tr:hover{background:rgba(52,152,219,0.08)}
.hs-table tbody tr.selected{background:rgba(52,152,219,0.12)}

.hs-th-rank{width:48px;text-align:center}
.hs-th-name{min-width:120px}
.hs-th-score{min-width:140px}
.hs-th-dir{width:60px;text-align:center}
.hs-th-conf{width:65px;text-align:center}
.hs-th-urg{width:70px;text-align:center}
.hs-th-filter{width:64px;text-align:center}
.hs-th-strat{min-width:80px}

.hs-td-rank{text-align:center;color:var(--text2);font-weight:600}
.hs-td-name{padding:6px 10px}
.hs-sym-code{font-family:'JetBrains Mono',monospace;font-weight:600;color:var(--text0)}
.hs-sym-name{font-size:11px;color:var(--text2);margin-left:4px}
.hs-td-score{padding:6px 10px}
.hs-score-bar{display:inline-block;width:60px;height:6px;background:var(--bg3);border-radius:3px;vertical-align:middle;margin-right:6px;overflow:hidden}
.hs-score-fill{height:100%;border-radius:3px;transition:width .3s}
.hs-score-val{font-size:12px;font-weight:600;vertical-align:middle}

.hs-td-dir{text-align:center}
.hs-dir{font-size:11px;font-weight:600;padding:2px 6px;border-radius:3px}
.hs-dir-long{color:var(--green);background:rgba(0,216,122,0.12)}
.hs-dir-short{color:var(--red);background:rgba(255,71,87,0.12)}
.hs-dir-neutral{color:var(--text2);background:rgba(85,85,85,0.15)}

.hs-td-conf{text-align:center;font-size:12px}
.hs-td-urg{text-align:center}
.hs-td-filter{text-align:center}
.hs-urg{font-size:11px;font-weight:600}
.hs-urg-high{color:var(--red)}
.hs-urg-med{color:var(--yellow)}
.hs-urg-low{color:var(--green)}
.hs-filter-pill{display:inline-flex;align-items:center;justify-content:center;min-width:40px;padding:1px 6px;border-radius:4px;font-size:11px;font-weight:600}
.hs-filter-pill.ok{color:var(--green);background:rgba(0,216,122,0.12);border:1px solid rgba(0,216,122,0.3)}
.hs-filter-pill.bad{color:var(--red);background:rgba(255,71,87,0.12);border:1px solid rgba(255,71,87,0.3)}
.hs-td-strat{font-size:11px;color:var(--text1)}

/* 详情样式(右侧面板) */
.hs-detail-content{padding:12px 16px;background:var(--bg1)}
.hs-detail-grid{display:flex;flex-direction:column;gap:12px}

.hs-detail-section{background:var(--bg2);border:1px solid var(--bd);border-radius:6px;padding:12px}
.hs-detail-title{font-size:13px;font-weight:600;color:var(--text0);margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid var(--bd)}

/* 聚合指标网格 */
.hs-metrics-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.hs-metric-card{background:var(--bg3);border-radius:6px;padding:8px 10px;text-align:center}
.hs-metric-label{font-size:10px;color:var(--text2);margin-bottom:4px}
.hs-metric-value{font-size:14px;font-weight:600}

/* 推荐合约列表 */
.hs-no-contracts{color:var(--text2);font-size:12px;padding:8px 0}
.hs-contracts-list{display:flex;flex-direction:column;gap:8px}
.hs-contract-item{background:var(--bg3);border:1px solid var(--bd);border-radius:6px;padding:8px 12px}
.hs-contract-item.primary{border-color:var(--yellow);background:rgba(255,165,2,0.05)}
.hs-contract-header{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.hs-contract-star{font-size:14px}
.hs-contract-idx{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:var(--bd);color:var(--text2);font-size:10px;font-weight:600}
.hs-contract-code{font-size:13px;font-weight:600;color:var(--text0)}
.hs-contract-dir{font-size:11px;font-weight:700;padding:1px 5px;border-radius:3px;background:rgba(0,0,0,0.3)}
.hs-contract-reason{font-size:11px;color:var(--text2);margin-left:auto}
.hs-contract-meta{display:flex;gap:16px;font-size:11px;color:var(--text1)}
.hs-contract-meta b{color:var(--text0)}

/* 闪烁高亮动画 */
.hs-flash{animation:hsFlashAnim 1.5s ease}
@keyframes hsFlashAnim{0%{background:rgba(255,165,2,0.3)}100%{background:transparent}}

/* 右侧详情面板(大屏) */
.hs-detail-panel{width:38%;min-width:280px;background:var(--bg2);border:1px solid var(--bd);border-radius:8px;display:none;flex-direction:column;overflow:hidden}
.hs-detail-panel.on{display:flex}
.hs-detail-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--text2)}

/* 浅色主题适配 */
body.light-theme .hs-stats-bar{background:#f7f8fa}
body.light-theme .hs-filter-bar{background:#f0f2f5}
body.light-theme .hs-filter-btn{background:#edf2f7;color:#4a5568;border-color:#d0d5dd}
body.light-theme .hs-filter-btn.on{background:var(--blue);color:#fff}
body.light-theme .hs-table-panel{background:#fff}
body.light-theme .hs-table thead th{background:#f7f8fa;color:#718096}
body.light-theme .hs-detail-content{background:#f7f8fa}
body.light-theme .hs-detail-section{background:#fff}
body.light-theme .hs-metric-card{background:#f0f2f5}
body.light-theme .hs-contract-item{background:#f7f8fa}
body.light-theme .hs-contract-item.primary{background:rgba(255,165,2,0.05)}
body.light-theme .hs-sym-name{color:#718096}
body.light-theme .hs-contract-reason{color:#718096}

/* 响应式：小屏幕时详情面板隐藏，用表格内展开代替 */
@media(max-width:900px){
  .hs-main-content{flex-direction:column;height:auto}
  .hs-table-panel{width:100%}
  .hs-detail-panel{display:none !important}
}

/* ===== 自动交易控制台 ===== */
.at-top-bar{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;background:var(--bg1);border-bottom:1px solid var(--bd)}
.at-top-title{font-size:16px;font-weight:700;color:var(--text0)}
.at-top-status{display:flex;align-items:center;gap:8px}
.at-status-dot{width:8px;height:8px;border-radius:50%;background:var(--text2)}

.at-section{margin:12px;background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:16px}
.at-section-title{display:flex;align-items:center;font-size:13px;font-weight:700;color:var(--text0);margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--bd)}

/* 开关卡片网格 */
.at-switch-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
@media(max-width:900px){.at-switch-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:500px){.at-switch-grid{grid-template-columns:1fr}}

.at-switch-card{background:var(--bg3);border:1px solid var(--bd);border-radius:6px;padding:14px;display:flex;flex-direction:column;gap:8px}
.at-switch-card.at-switch-master{border-color:var(--blue);background:rgba(52,152,219,0.08)}
.at-switch-header{display:flex;align-items:center;gap:8px}
.at-switch-icon{font-size:16px}
.at-switch-name{font-size:13px;font-weight:700;color:var(--text0)}
.at-switch-status{font-size:11px;font-weight:600;margin-left:auto;padding:2px 8px;border-radius:3px;background:var(--bg2)}
.at-switch-desc{font-size:11px;color:var(--text2);line-height:1.5}

/* 按钮 */
.at-btn{padding:8px 20px;border:none;border-radius:5px;cursor:pointer;font-size:12px;font-weight:600;transition:all .2s;font-family:inherit}
.at-btn:hover{opacity:.85;transform:translateY(-1px)}
.at-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.at-btn-primary{background:var(--blue);color:#fff}
.at-btn-success{background:var(--green);color:#000}
.at-btn-danger{background:var(--red);color:#fff}
.at-btn-warning{background:var(--yellow);color:#000}

/* 配置表单 */
.at-config-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
@media(max-width:900px){.at-config-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:500px){.at-config-grid{grid-template-columns:1fr}}

.at-config-item{display:flex;flex-direction:column;gap:4px}
.at-config-label{font-size:11px;font-weight:600;color:var(--text1)}
.at-config-input{padding:8px 10px;background:var(--bg0);border:1px solid var(--bd);border-radius:4px;color:var(--text0);font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:600;width:100%}
.at-config-input:focus{border-color:var(--blue);outline:none}
.at-config-hint{font-size:10px;color:var(--text2)}

/* 对账统计卡片 */
.at-stat-card{background:var(--bg3);border:1px solid var(--bd);border-radius:5px;padding:10px;text-align:center}
.at-stat-label{font-size:10px;color:var(--text2);margin-bottom:4px}
.at-stat-val{font-size:16px;font-weight:700;font-family:'JetBrains Mono',monospace;color:var(--text0)}

/* 差异列表 */
.at-disc-list{display:flex;flex-direction:column;gap:10px}
.at-disc-group{background:var(--bg3);border:1px solid var(--bd);border-radius:5px;padding:10px}
.at-disc-title{font-size:12px;font-weight:700;margin-bottom:6px}
.at-disc-item{display:flex;align-items:center;gap:8px;padding:5px 8px;font-size:11px;border-radius:3px;background:var(--bg0)}
.at-disc-item + .at-disc-item{margin-top:4px}
.at-disc-code{font-family:'JetBrains Mono',monospace;font-weight:600;color:var(--text0);min-width:80px}
.at-disc-level{font-weight:700;font-size:10px}
.at-disc-detail{color:var(--text2);flex:1}

/* 空状态 */
.at-empty{text-align:center;padding:30px;color:var(--text2);font-size:13px}

/* 日期选择器 */
.at-date-input{padding:6px 10px;background:var(--bg0);border:1px solid var(--bd);border-radius:4px;color:var(--text0);font-family:'JetBrains Mono',monospace;font-size:12px;margin-left:auto;cursor:pointer}
.at-date-input:focus{border-color:var(--blue);outline:none}

/* 交易记录表格 */
.at-table-wrap{overflow-x:auto}
.at-table{width:100%;border-collapse:collapse;font-size:12px}
.at-table thead th{position:sticky;top:0;background:var(--bg3);color:var(--text2);font-weight:600;font-size:11px;padding:8px 10px;text-align:left;border-bottom:2px solid var(--bd);white-space:nowrap}
.at-table tbody td{padding:7px 10px;border-bottom:1px solid var(--bd);color:var(--text1);white-space:nowrap}
.at-table tbody tr:hover{background:var(--bg3)}
.at-table .at-pnl-positive{color:var(--green)}
.at-table .at-pnl-negative{color:var(--red)}
.at-table .at-action-open{color:var(--blue)}
.at-table .at-action-close{color:var(--yellow)}

/* 浅色主题适配 */
body.light-theme .at-top-bar{background:#f7f8fa}
body.light-theme .at-section{background:#fff}
body.light-theme .at-switch-card{background:#f7f8fa}
body.light-theme .at-switch-card.at-switch-master{background:rgba(52,152,219,0.04)}
body.light-theme .at-config-input{background:#f0f2f5;color:#333;border-color:#d0d5dd}
body.light-theme .at-stat-card{background:#f7f8fa}
body.light-theme .at-disc-group{background:#f7f8fa}
body.light-theme .at-disc-item{background:#eef0f2}

/* ==================== 穿透测试告警模态对话框 ==================== */
.modal-overlay {
    display: none;
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0,0,0,0.7);
    z-index: 9999;
    align-items: center;
    justify-content: center;
}
.modal-dialog {
    background: #1e1e1e;
    border: 1px solid #dc3545;
    border-radius: 8px;
    min-width: 400px;
    max-width: 500px;
}
.modal-header { padding: 15px 20px; border-radius: 7px 7px 0 0; }
.modal-header h3 { margin: 0; font-size: 18px; }
.modal-body { padding: 20px; color: #fff; font-size: 16px; }
.modal-footer { padding: 15px 20px; text-align: right; border-top: 1px solid #333; }
.btn-danger { padding: 6px 16px; background: #dc3545; color: #fff; border: none; border-radius: 4px; cursor: pointer; font-size: 13px; font-weight: 600; }
.btn-danger:hover { background: #c82333; }

/* ===== 期权策略页面 ===== */
.os-stats-row { grid-template-columns: repeat(6, 1fr) !important; gap: 8px; }
.os-stats-row .gcard { padding: 10px 12px; }
.os-stats-row .gl { font-size: 10px; }
.os-stats-row .gv { margin-top: 2px; }
.os-filter-btn {
  padding: 6px 14px; border: 1px solid var(--bd); border-radius: 20px;
  background: var(--bg3); color: var(--text1); cursor: pointer;
  font-size: 12px; transition: all .2s;
}
.os-filter-btn:hover { border-color: var(--blue); color: var(--blue); }
.os-filter-btn.active { background: var(--blue); color: #fff; border-color: var(--blue); }

.os-card {
  background: var(--bg1); border-radius: 10px; margin-bottom: 14px;
  overflow: hidden; border: 1px solid var(--bd);
}
.os-card-header {
  display: flex; justify-content: space-between; align-items: center;
  padding: 14px 18px 0;
}
.os-card-title { display: flex; align-items: center; gap: 8px; }
.os-card-icon { font-size: 20px; }
.os-card-symbol { font-size: 16px; font-weight: 700; color: var(--text0); }
.os-card-badge { font-size: 11px; padding: 2px 10px; border-radius: 12px; font-weight: 600; }
.os-card-meta { display: flex; align-items: center; gap: 10px; }
.os-card-time { font-size: 11px; color: var(--text2); }
.os-card-gex { font-size: 11px; padding: 2px 8px; border-radius: 8px; font-weight: 600; }
.os-card-gex.pos { background: rgba(39,174,96,.15); color: #27ae60; }
.os-card-gex.neg { background: rgba(231,76,60,.15); color: #e74c3c; }

.os-card-reason {
  padding: 8px 18px; font-size: 12px; color: var(--text1); line-height: 1.5;
  background: var(--bg2); margin: 10px 14px; border-radius: 6px;
}
.os-reason-icon { margin-right: 4px; }

.os-pricing-row {
  display: grid; grid-template-columns: repeat(6,1fr);
  gap: 1px; padding: 0 18px 10px;
}
.os-price-item { text-align: center; padding: 6px 4px; }
.os-price-item label { display: block; font-size: 9px; color: var(--text2); margin-bottom: 2px; text-transform: uppercase; letter-spacing: .5px; }
.os-price-val { font-size: 13px; font-weight: 600; color: var(--text0); font-family: 'JetBrains Mono', monospace; }
.os-price-val.up { color: #27ae60; }
.os-price-val.down { color: #e74c3c; }
.os-price-val.strike { color: #2980b9; }
.os-price-item.highlight { background: var(--bg2); border-radius: 6px; }
.os-profit { color: #27ae60; font-weight: 700; }
.os-loss { color: #e74c3c; font-weight: 700; }

.os-risk-row {
  display: grid; grid-template-columns: repeat(5,1fr);
  gap: 1px; padding: 8px 18px; border-top: 1px solid var(--bd);
  border-bottom: 1px solid var(--bd); background: var(--bg2);
}
.os-risk-item { text-align: center; padding: 6px 4px; }
.os-risk-item label { display: block; font-size: 9px; color: var(--text2); margin-bottom: 2px; }
.os-risk-item span { font-size: 13px; font-weight: 600; font-family: 'JetBrains Mono', monospace; }
.os-risk-item.risk-ratio span { color: #f39c12; }

.os-pnl-bar { padding: 12px 18px; }
.os-pnl-label { font-size: 10px; color: var(--text2); margin-bottom: 6px; }
.os-pnl-track { display: flex; height: 10px; border-radius: 5px; overflow: hidden; background: var(--bg3); }
.os-pnl-loss { background: rgba(231,76,60,.3); }
.os-pnl-neutral { width: 4px; background: var(--text2); }
.os-pnl-gain { background: rgba(39,174,96,.3); }
.os-pnl-legend { display: flex; justify-content: space-between; font-size: 9px; color: var(--text2); margin-top: 4px; padding: 0 2px; }

.os-card-footer {
  display: flex; justify-content: space-between; align-items: center;
  padding: 10px 18px;
}
.os-card-codes { display: flex; gap: 6px; align-items: center; }
.os-code-tag { font-size: 10px; padding: 2px 8px; border-radius: 4px; font-family: monospace; }
.os-code-tag.call { background: rgba(39,174,96,.15); color: #27ae60; }
.os-code-tag.put { background: rgba(231,76,60,.15); color: #e74c3c; }
.os-risk-tag { font-size: 10px; color: #f39c12; background: rgba(243,156,18,.15); padding: 2px 8px; border-radius: 4px; }
.os-exec-btn {
  padding: 8px 18px; border: none; border-radius: 6px;
  background: var(--blue); color: #fff; cursor: pointer;
  font-size: 12px; font-weight: 600; transition: all .2s;
}
.os-exec-btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(52,152,219,.3); }

.os-empty {
  text-align: center; padding: 60px 20px; color: var(--text2);
}
.os-empty-icon { font-size: 48px; margin-bottom: 12px; }
.os-empty h3 { color: var(--text1); margin: 0 0 8px; font-size: 16px; }
.os-empty p { margin: 0 0 16px; font-size: 13px; }
.os-empty-hints { display: flex; flex-direction: column; gap: 6px; font-size: 12px; }
.os-empty-hints span { padding: 6px 12px; background: var(--bg3); border-radius: 6px; }
.os-loading { text-align: center; padding: 60px 20px; color: var(--text2); }
.os-spinner {
  display: inline-block; width: 20px; height: 20px;
  border: 2px solid var(--bd); border-top-color: var(--blue);
  border-radius: 50%; animation: os-spin .6s linear infinite;
  margin-right: 8px; vertical-align: middle;
}
@keyframes os-spin { to { transform: rotate(360deg); } }

.os-result-success {
  padding: 16px; background: rgba(39,174,96,.08); border-radius: 8px;
  border: 1px solid rgba(39,174,96,.2);
}
.os-result-icon { font-size: 28px; margin-bottom: 4px; }
.os-result-title { font-size: 14px; font-weight: 700; color: #27ae60; margin-bottom: 10px; }
.os-result-detail { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; font-size: 12px; color: var(--text1); }
.os-result-detail code { background: var(--bg3); padding: 1px 6px; border-radius: 3px; font-size: 10px; }
.os-result-pending { text-align: center; padding: 20px; color: var(--text2); }
.os-result-fail { padding: 12px 16px; background: rgba(231,76,60,.08); border-radius: 6px; color: #e74c3c; font-size: 13px; }

/* ===== Tab切换 ===== */
.os-tab-bar {
  display: flex; gap: 0; background: var(--bg1); border-bottom: 1px solid var(--bd);
  padding: 0 18px;
}
.os-tab {
  padding: 12px 24px; font-size: 13px; font-weight: 600; color: var(--text2);
  cursor: pointer; border: none; background: none; border-bottom: 2px solid transparent;
  transition: all .15s;
}
.os-tab:hover { color: var(--text0); background: rgba(255,255,255,.03); }
.os-tab.active { color: var(--blue); border-bottom-color: var(--blue); }
.os-tab-content { display: none; }
.os-tab-content.active { display: block; }

/* ===== 买权信号卡片 ===== */
.los-stats-row { grid-template-columns: repeat(5, 1fr) !important; }

.los-filter-btn {
  padding: 6px 14px; font-size: 12px; border: 1px solid var(--bd); border-radius: 16px;
  background: var(--bg2); color: var(--text1); cursor: pointer; transition: all .15s; font-weight: 500;
}
.los-filter-btn:hover { border-color: var(--blue); color: var(--text0); }
.los-filter-btn.active { background: var(--blue); color: #fff; border-color: var(--blue); }

.los-card {
  background: var(--bg2); border: 1px solid var(--bd); border-radius: 10px;
  padding: 16px; margin-bottom: 12px; transition: all .15s;
}
.los-card:hover { border-color: var(--blue); box-shadow: 0 2px 12px rgba(0,0,0,.2); }

.los-card-header {
  display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;
}
.los-card-title { display: flex; align-items: center; gap: 8px; }
.los-card-icon { font-size: 20px; }
.los-card-symbol { font-size: 16px; font-weight: 700; color: var(--text0); }
.los-score-badge {
  font-size: 11px; padding: 2px 8px; border-radius: 10px; font-weight: 600;
}
.los-score-high { background: rgba(39,174,96,.15); color: #27ae60; }
.los-score-mid { background: rgba(243,156,18,.15); color: #f39c12; }
.los-score-low { background: rgba(149,165,166,.15); color: #95a5a6; }
.los-card-meta { display: flex; align-items: center; gap: 8px; }
.los-contract-code {
  font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text2); background: var(--bg3); padding: 2px 8px; border-radius: 4px;
}
.los-card-gex { font-size: 11px; padding: 2px 8px; border-radius: 8px; font-weight: 600; }
.los-card-gex.neg { background: rgba(231,76,60,.15); color: #e74c3c; }
.los-card-gex.pos { background: rgba(39,174,96,.15); color: #27ae60; }

.los-metrics-row {
  display: flex; gap: 12px; margin-bottom: 10px; flex-wrap: wrap;
}
.los-metric-item {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  padding: 8px 14px; background: var(--bg3); border-radius: 8px; min-width: 70px;
}
.los-metric-item label { font-size: 10px; color: var(--text2); font-weight: 500; }
.los-metric-val { font-size: 14px; font-weight: 700; color: var(--text0); font-family: 'JetBrains Mono', monospace; }
.los-metric-item.highlight { border: 1px solid var(--yellow); }
.los-cost { color: var(--yellow) !important; }

.los-card-reason {
  font-size: 12px; color: var(--text1); margin-bottom: 10px; line-height: 1.5; padding: 8px 10px;
  background: var(--bg3); border-radius: 6px;
}

.los-risk-row {
  display: flex; gap: 16px; margin-bottom: 12px; padding: 8px 10px;
  background: rgba(231,76,60,.05); border-radius: 6px; border: 1px solid rgba(231,76,60,.1);
}
.los-risk-item { display: flex; flex-direction: column; gap: 2px; }
.los-risk-item label { font-size: 10px; color: var(--text2); }
.los-risk-val { font-size: 12px; font-weight: 600; color: var(--text0); }
.los-risk-val.los-loss { color: #e74c3c; }

.los-card-footer { display: flex; justify-content: flex-end; }

/* ===== 确认弹窗 (标准化双规格) ===== */
.os-confirm-overlay {
  position: fixed; top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0,0,0,.65); z-index: 99999;
  display: flex; align-items: center; justify-content: center;
  animation: osFadeIn .15s ease;
}
@keyframes osFadeIn { from{opacity:0} to{opacity:1} }

.os-confirm-box {
  background: var(--bg1); border-radius: 14px; padding: 28px 32px;
  box-shadow: 0 12px 48px rgba(0,0,0,.5); border: 1px solid var(--bd);
  display: flex; flex-direction: column;
  /* 默认小弹窗 */
  width: 750px; max-width: 95vw; height: 550px; max-height: 90vh;
  animation: osSlideUp .2s ease;
}
@keyframes osSlideUp { from{transform:translateY(20px);opacity:0} to{transform:translateY(0);opacity:1} }

/* 大弹窗规格 */
.os-confirm-box.modal-lg {
  width: 950px; max-width: 95vw; height: 550px; max-height: 90vh;
}

.os-confirm-title {
  font-size: 16px; font-weight: 700; color: var(--text0);
  margin-bottom: 6px; display: flex; align-items: center; gap: 8px;
}
.os-confirm-subtitle {
  font-size: 12px; color: var(--text2); margin-bottom: 18px;
}
.os-confirm-body {
  flex: 1; overflow-y: auto; padding-right: 4px;
  margin-bottom: 16px;
}
.os-confirm-body::-webkit-scrollbar { width: 4px; }
.os-confirm-body::-webkit-scrollbar-thumb { background: var(--bd); border-radius: 2px; }

/* 详情网格 (2列) */
.os-confirm-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 6px 12px; margin-bottom: 8px;
}
.os-confirm-cell {
  display: flex; justify-content: space-between; align-items: center;
  padding: 6px 12px; background: var(--bg2); border-radius: 6px;
  font-size: 12px; border: 1px solid transparent;
}
.os-confirm-cell .os-lbl { color: var(--text2); font-size: 11px; white-space: nowrap; }
.os-confirm-cell .os-val { font-weight: 600; color: var(--text0); text-align: right; font-family: 'JetBrains Mono',monospace; font-size: 12px; }
.os-confirm-cell.full { grid-column: 1 / -1; }

/* 到期时间重点高亮 */
.os-confirm-expiry {
  animation: expiryPulse 2s ease-in-out infinite;
}
@keyframes expiryPulse {
  0%, 100% { opacity: 1; }
  50% { opacity: .75; }
}

/* 旧行样式保留兼容 */
.os-confirm-row {
  display: flex; justify-content: space-between; align-items: center;
  padding: 7px 12px; border-bottom: 1px solid var(--bd); font-size: 13px;
}
.os-confirm-row:last-child { border-bottom: none; }
.os-confirm-row .os-lbl { color: var(--text2); min-width: 80px; }
.os-confirm-row .os-val { font-weight: 600; color: var(--text0); text-align: right; font-family: 'JetBrains Mono',monospace; }
.os-confirm-row .os-val.up { color: #e74c3c; }
.os-confirm-row .os-val.down { color: #27ae60; }

/* 双列价格布局 */
.os-confirm-legs {
  display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 14px;
}
.os-confirm-leg {
  background: var(--bg2); border-radius: 10px; padding: 14px 16px; border: 1px solid var(--bd);
}
.os-confirm-leg h4 {
  font-size: 12px; color: var(--text1); margin-bottom: 8px; font-weight: 600;
  display: flex; align-items: center; gap: 6px;
}
.os-confirm-leg .leg-price {
  font-size: 20px; font-weight: 700; font-family: 'JetBrains Mono',monospace;
}
.os-confirm-leg .leg-code {
  font-size: 10px; color: var(--text2); font-family: 'JetBrains Mono',monospace; margin-top: 4px;
  word-break: break-all;
}
.os-confirm-leg.call .leg-price { color: #e74c3c; }
.os-confirm-leg.put .leg-price { color: #27ae60; }

.os-confirm-warn {
  text-align: center; font-size: 12px; color: #f39c12;
  padding: 10px; background: rgba(243,156,18,.08); border-radius: 8px; margin: 10px 0;
  border: 1px solid rgba(243,156,18,.15);
}
.os-confirm-btns { display: flex; gap: 10px; justify-content: flex-end; margin-top: 4px; }
.os-confirm-cancel {
  padding: 9px 24px; border: 1px solid var(--bd); border-radius: 8px;
  background: var(--bg3); color: var(--text1); cursor: pointer; font-size: 13px;
  transition: all .15s;
}
.os-confirm-cancel:hover { background: var(--bg2); color: var(--text0); }
.os-confirm-ok {
  padding: 9px 24px; border: none; border-radius: 8px;
  background: var(--blue); color: #fff; cursor: pointer; font-size: 13px; font-weight: 600;
  transition: all .15s;
}
.os-confirm-ok:hover { background: #2980b9; }
.os-confirm-ok.danger { background: var(--red); }
.os-confirm-ok.danger:hover { background: #e0313f; }

/* ===== 合约管理页面 ===== */
.ct-code { font-family: 'JetBrains Mono', monospace; font-size: 11px; padding: 2px 6px; border-radius: 3px; }
.ct-code.futures { background: #3498db20; color: #3498db; }
.ct-code.option { background: #8e44ad20; color: #8e44ad; }
.ct-code.call { background: #e74c3c20; color: #e74c3c; }
.ct-code.put { background: #27ae6020; color: #27ae60; }
.ct-opt-count { display:inline-block; background:var(--bg3); padding:2px 10px; border-radius:12px; font-size:12px; font-weight:600; }
.ct-view-btn { padding:4px 12px; border:1px solid var(--bd); border-radius:4px; background:var(--bg2); color:var(--blue); cursor:pointer; font-size:11px; }
.ct-view-btn:hover { background:var(--blue); color:#fff; }
.ct-group-header td { background:var(--bg1); padding:6px 12px!important; font-size:12px; border-top:2px solid var(--bd); border-bottom:1px solid var(--bd); }
.ct-opt-row td { padding:3px 8px!important; font-size:11px; }
.ct-opt-row:hover { background:var(--bg1); }
.gex-pos { color:var(--green); }
.gex-neg { color:var(--red); }
.ct-modal-overlay { position:fixed; top:0; left:0; right:0; bottom:0; background:rgba(0,0,0,.6); z-index:9999; display:flex; align-items:flex-start; justify-content:center; padding-top:40px; }
.ct-modal-box { background:var(--bg1); border-radius:10px; max-width:800px; width:95%; max-height:85vh; display:flex; flex-direction:column; box-shadow:0 8px 40px rgba(0,0,0,.4); }
.ct-modal-header { display:flex; justify-content:space-between; align-items:center; padding:16px 20px; border-bottom:1px solid var(--bd); }
.ct-modal-close { background:none; border:none; font-size:20px; cursor:pointer; color:var(--text2); padding:4px 8px; }
.ct-modal-close:hover { color:var(--red); }
.ct-modal-body { padding:16px 20px; overflow-y:auto; flex:1; }
.ct-detail-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:16px; }
.ct-detail-item { padding:8px; background:var(--bg0); border-radius:6px; }
.ct-detail-item label { display:block; font-size:10px; color:var(--text2); margin-bottom:3px; }
.ct-detail-item span { font-size:13px; font-weight:600; }
.ct-opt-chain { border-top:1px solid var(--bd); padding:12px 20px 16px; overflow-y:auto; max-height:50vh; }
.ct-opt-chain-title { font-size:14px; font-weight:600; }
.ct-opt-table { width:100%; border-collapse:collapse; }
.ct-opt-table th,.ct-opt-table td { padding:6px 8px; text-align:left; border-bottom:1px solid var(--bd); font-size:12px; }
.ct-opt-table th { background:var(--bg0); font-size:10px; color:var(--text2); font-weight:600; }
.ct-opt-table tr:hover td { background:var(--bg1); }

/* ===== RISK MANAGEMENT PAGE (rx-*) ===== */
#page-risk { padding: 0 20px 24px; }
.rx-mono { font-family:'JetBrains Mono',monospace; }

/* --- Topbar --- */
.rx-topbar { display:flex; align-items:center; justify-content:space-between; padding:16px 0 14px; border-bottom:1px solid var(--bd); margin-bottom:16px; }
.rx-topbar-left { display:flex; align-items:baseline; gap:12px; }
.rx-page-title { font-size:18px; font-weight:700; color:var(--text0); letter-spacing:.5px; }
.rx-page-badge { font-size:11px; color:var(--text2); background:var(--bg2); border:1px solid var(--bd); padding:2px 10px; border-radius:20px; }
.rx-topbar-right { display:flex; align-items:center; gap:8px; }

/* --- Buttons --- */
.rx-btn { padding:6px 14px; border-radius:5px; border:none; font-size:11px; font-weight:600; cursor:pointer; transition:all .15s; }
.rx-btn-ghost { background:transparent; border:1px solid var(--bd); color:var(--text1); }
.rx-btn-ghost:hover { border-color:var(--text1); color:var(--text0); }
.rx-btn-primary { background:var(--blue); color:#fff; }
.rx-btn-primary:hover { background:#2980b9; }
.rx-btn-warn { background:rgba(230,126,34,.15); border:1px solid rgba(230,126,34,.3); color:#e67e22; }
.rx-btn-warn:hover { background:rgba(230,126,34,.25); }
.rx-btn-danger { background:rgba(231,76,60,.12); border:1px solid rgba(231,76,60,.3); color:#e74c3c; }
.rx-btn-danger:hover { background:rgba(231,76,60,.22); }
.rx-btn-tiny { padding:3px 10px; border-radius:4px; border:1px solid var(--bd); background:transparent; color:var(--text2); font-size:10px; cursor:pointer; margin-left:auto; transition:.15s; }
.rx-btn-tiny:hover { color:var(--text0); border-color:var(--text1); }

/* --- Status Banner --- */
.rx-status-banner { display:flex; align-items:center; gap:16px; padding:12px 18px; background:var(--bg1); border:1px solid var(--bd); border-radius:8px; margin-bottom:14px; flex-wrap:wrap; }
.rx-status-main { display:flex; align-items:center; gap:10px; }
.rx-status-dot { width:12px; height:12px; border-radius:50%; background:#27ae60; box-shadow:0 0 8px rgba(39,174,96,.6); flex-shrink:0; transition:background .3s,box-shadow .3s; }
.rx-status-dot.danger { background:#e74c3c; box-shadow:0 0 8px rgba(231,76,60,.7); }
.rx-status-text { font-size:15px; font-weight:700; color:var(--text0); }
.rx-status-divider { width:1px; height:32px; background:var(--bd); flex-shrink:0; }
.rx-status-item { display:flex; flex-direction:column; gap:2px; min-width:80px; }
.rx-status-label { font-size:9px; color:var(--text2); text-transform:uppercase; letter-spacing:.8px; }
.rx-status-val { font-size:14px; font-weight:700; color:var(--text0); font-family:'JetBrains Mono',monospace; }

/* --- Metrics Row --- */
.rx-metrics-row { display:grid; grid-template-columns:repeat(5,1fr); gap:10px; margin-bottom:14px; }
.rx-metric-card { background:var(--bg1); border:1px solid var(--bd); border-radius:8px; padding:12px 14px; position:relative; overflow:hidden; transition:border-color .15s; }
.rx-metric-card:hover { border-color:rgba(52,152,219,.4); }
.rx-metric-card::before { content:''; position:absolute; top:0; left:0; right:0; height:2px; background:var(--bd); }
.rx-metric-tier::before { background:linear-gradient(90deg,var(--blue),var(--purple)); }
.rx-metric-label { font-size:9px; color:var(--text2); text-transform:uppercase; letter-spacing:.8px; margin-bottom:6px; }
.rx-metric-val { font-size:20px; font-weight:700; color:var(--text0); font-family:'JetBrains Mono',monospace; line-height:1.1; margin-bottom:4px; }
.rx-metric-unit { font-size:12px; font-weight:400; color:var(--text1); }
.rx-metric-sub { font-size:10px; color:var(--text2); }
.rx-metric-hint { font-size:10px; color:var(--text2); }
.rx-progress-wrap { display:flex; align-items:center; gap:8px; margin-top:4px; }
.rx-progress-track { flex:1; height:4px; background:var(--bg3); border-radius:2px; overflow:hidden; }
.rx-progress-fill { height:100%; background:#e67e22; border-radius:2px; transition:width .4s; }

/* --- Panels --- */
.rx-panel { background:var(--bg1); border:1px solid var(--bd); border-radius:8px; margin-bottom:10px; overflow:hidden; }
.rx-panel-head { display:flex; align-items:center; gap:8px; padding:10px 14px; border-bottom:1px solid var(--bd); min-height:40px; }
.rx-panel-clickable { cursor:pointer; user-select:none; }
.rx-panel-clickable:hover { background:var(--bg2); }
.rx-panel-icon { font-size:13px; color:var(--text2); flex-shrink:0; }
.rx-panel-title { font-size:12px; font-weight:600; color:var(--text0); }
.rx-collapse-arrow { margin-left:auto; font-size:10px; color:var(--text2); transition:transform .2s; }
.rx-panel-body { padding:12px 14px; }
.rx-empty { color:var(--text2); text-align:center; padding:28px 0; font-size:12px; }

/* --- Three Column Grid --- */
.rx-main-grid { display:grid; grid-template-columns:1fr 1fr 1fr; gap:10px; margin-bottom:10px; }

/* --- Rule Rows (inside risk-rules-list) --- */
.rule-row { display:flex; align-items:center; gap:8px; padding:7px 0; border-bottom:1px solid var(--bd); }
.rule-row:last-child { border-bottom:none; }
.rule-label { font-size:11px; color:var(--text1); flex:1; }
.rule-dot { width:7px; height:7px; border-radius:50%; flex-shrink:0; }
.rule-val { font-size:11px; font-family:'JetBrains Mono',monospace; font-weight:600; min-width:90px; text-align:right; }

/* --- Config Panel --- */
.rx-config-body { padding:14px 16px 0; }
.rx-config-section { margin-bottom:14px; }
.rx-config-section-title { font-size:10px; color:var(--text2); text-transform:uppercase; letter-spacing:1px; font-weight:600; margin-bottom:8px; padding-bottom:4px; border-bottom:1px solid var(--bd); }
.rx-config-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(160px,1fr)); gap:8px; }
.rx-cfg-item { display:flex; flex-direction:column; gap:4px; }
.rx-cfg-label { font-size:10px; color:var(--text2); }
.rx-cfg-input { padding:6px 10px; background:var(--bg2); border:1px solid var(--bd); border-radius:5px; color:var(--text0); font-size:12px; font-family:'JetBrains Mono',monospace; outline:none; transition:border-color .15s; }
.rx-cfg-input:focus { border-color:var(--blue); }
.rx-cfg-input::placeholder { color:var(--text2); }
.rx-config-footer { display:flex; gap:8px; justify-content:flex-end; padding:12px 0 14px; border-top:1px solid var(--bd); margin-top:6px; }

/* --- Bottom Grid (scheduler + paper) --- */
.rx-bot-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:10px; }
.rx-scheduler-status { font-size:11px; font-weight:600; color:var(--text2); }
.rx-scheduler-status.active { color:#27ae60; }
.rx-paper-status { font-size:11px; color:var(--text2); }

/* --- Scheduler row --- */
.rx-sched-row { display:flex; align-items:center; gap:20px; flex-wrap:wrap; }
.rx-sched-item { display:flex; align-items:center; gap:6px; }
.rx-sched-label { font-size:10px; color:var(--text2); }
.rx-sched-val { font-size:13px; font-weight:700; font-family:'JetBrains Mono',monospace; color:var(--text0); }

/* --- Paper stats --- */
.rx-paper-capital-row { display:flex; align-items:center; gap:8px; margin-bottom:10px; padding-bottom:10px; border-bottom:1px solid var(--bd); }
.rx-paper-capital-row .rx-cfg-label { white-space:nowrap; flex-shrink:0; }
.rx-paper-capital-row .rx-cfg-input { flex:1; }
.rx-paper-stats { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; }
.rx-paper-stat { padding:8px; background:var(--bg0); border-radius:6px; text-align:center; }
.rx-paper-stat-label { font-size:9px; color:var(--text2); text-transform:uppercase; letter-spacing:.6px; margin-bottom:4px; }
.rx-paper-stat-val { font-size:14px; font-weight:700; color:var(--text0); }

/* --- Toggle Switch (rx) --- */
.rx-toggle { position:relative; display:inline-block; width:36px; height:20px; flex-shrink:0; }
.rx-toggle input { opacity:0; width:0; height:0; }
.rx-toggle-slider { position:absolute; cursor:pointer; inset:0; background:var(--bg3); border-radius:20px; transition:.25s; }
.rx-toggle-slider:before { content:''; position:absolute; width:14px; height:14px; left:3px; bottom:3px; background:#fff; border-radius:50%; transition:.25s; }
.rx-toggle input:checked + .rx-toggle-slider { background:var(--blue); }
.rx-toggle input:checked + .rx-toggle-slider:before { transform:translateX(16px); }

/* --- Event list items --- */
.rx-event-item { padding:5px 0; border-bottom:1px solid var(--bd); font-size:11px; line-height:1.5; }
.rx-event-item:last-child { border-bottom:none; }
.rx-event-type { font-weight:700; margin-right:4px; }

/* Light theme overrides */
.light-theme .rx-status-banner { background:#fff; }
.light-theme .rx-metric-card { background:#fff; }
.light-theme .rx-panel { background:#fff; }
.light-theme .rx-cfg-input { background:#f5f5f5; }
.light-theme .rx-paper-stat { background:#f5f5f5; }
