/* 黎明量化交易bot1.0 - 全局样式 */
:root{
  --bg:#0b0e14; --panel:#121722; --panel2:#171d2b; --line:#222b3a;
  --txt:#d7dde8; --txt2:#8a93a6; --gold:#f5c451; --blue:#4f9dff;
  --up:#26a69a; --down:#ef5350; --green:#3ddc84; --red:#ff5d5d;
  --mono:"SF Mono","Cascadia Code",Consolas,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden}
body{
  background:var(--bg);color:var(--txt);
  font-family:"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",sans-serif;
  font-size:13px;
}
/* 背景网格 */
.bggrid{position:fixed;inset:0;pointer-events:none;z-index:0;
  background-image:linear-gradient(rgba(79,157,255,.03) 1px,transparent 1px),
                   linear-gradient(90deg,rgba(79,157,255,.03) 1px,transparent 1px);
  background-size:44px 44px;}
/* 顶部导航 */
.topbar{position:fixed;top:0;left:0;right:0;height:48px;z-index:100;
  background:linear-gradient(180deg,#0f141d,#0b0e14);
  border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 16px;gap:16px}
.topbar .logo{width:28px;height:28px;border-radius:7px;flex:none;
  background:linear-gradient(135deg,#f5c451,#ff9d3c);color:#14181f;
  display:flex;align-items:center;justify-content:center;font-weight:800;font-size:14px}
.topbar .title{font-weight:700;color:var(--gold);font-size:14px;letter-spacing:.5px;white-space:nowrap}
.topbar .title small{color:var(--txt2);font-weight:400;font-size:9px;letter-spacing:.8px;margin-left:8px}
.topbar .spacer{flex:1}
.topbar .ex-status{display:flex;align-items:center;gap:8px;font-size:11px}
.ex-badge{padding:3px 10px;border-radius:12px;font-size:10px;font-weight:700;letter-spacing:.5px;
  border:1px solid var(--line);background:var(--panel2);color:var(--txt2)}
.ex-badge.on{border-color:rgba(61,220,132,.4);background:rgba(61,220,132,.08);color:#7ee7ae}
.ex-badge.weex{border-color:rgba(79,157,255,.4);background:rgba(79,157,255,.08);color:#7db8ff}
.ex-badge.gate{border-color:rgba(245,196,81,.4);background:rgba(245,196,81,.08);color:var(--gold)}
/* 自动交易开关 */
.auto-toggle{display:flex;align-items:center;gap:6px;cursor:pointer;user-select:none}
.auto-toggle .switch{width:36px;height:20px;border-radius:10px;background:var(--panel2);
  border:1px solid var(--line);position:relative;transition:all .2s}
.auto-toggle .switch::after{content:'';position:absolute;top:2px;left:2px;width:14px;height:14px;
  border-radius:50%;background:var(--txt2);transition:all .2s}
.auto-toggle.on .switch{background:rgba(239,83,80,.15);border-color:rgba(239,83,80,.5)}
.auto-toggle.on .switch::after{left:18px;background:var(--red)}
.auto-toggle .label{font-size:10px;color:var(--txt2);letter-spacing:.5px;white-space:nowrap}
.auto-toggle.on .label{color:var(--red);font-weight:700}
/* 用户菜单 */
.user-menu{cursor:pointer;padding:4px 10px;border-radius:8px;background:var(--panel2);
  border:1px solid var(--line);font-size:11px;color:var(--txt)}
.user-menu:hover{border-color:var(--gold)}
/* 主内容区 */
.main{position:fixed;top:48px;left:0;right:0;bottom:0;overflow-y:auto;padding:12px;z-index:1}
/* 网格布局 */
.grid{display:grid;gap:10px}
.col-4{grid-template-columns:repeat(4,1fr)}
.col-3{grid-template-columns:repeat(3,1fr)}
.col-2{grid-template-columns:repeat(2,1fr)}
@media(max-width:1200px){.col-4{grid-template-columns:repeat(2,1fr)}.col-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:768px){.col-4,.col-3,.col-2{grid-template-columns:1fr}}
/* 面板卡片 */
.panel{background:linear-gradient(180deg,var(--panel),#0f141d);
  border:1px solid var(--line);border-radius:10px;padding:14px;position:relative;overflow:hidden}
.panel-title{font-size:10px;font-weight:700;letter-spacing:1.5px;color:var(--txt2);
  text-transform:uppercase;margin-bottom:10px;display:flex;align-items:center;gap:6px}
.panel-title .icon{font-size:13px}
.panel-title .en{color:var(--txt2);font-weight:400;margin-left:4px}
.panel-title .run-tag{margin-left:auto;font-size:9px;color:var(--gold);
  background:rgba(245,196,81,.08);border:1px solid rgba(245,196,81,.3);
  border-radius:3px;padding:1px 6px}
/* 信号漏斗 */
.funnel{display:flex;flex-direction:column;gap:6px}
.funnel-step{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:6px;
  background:var(--panel2);border:1px solid var(--line);font-size:11px}
.funnel-step.active{border-color:var(--blue);background:rgba(79,157,255,.05)}
.funnel-step .num{font-size:10px;color:var(--txt2);font-family:var(--mono);min-width:20px}
.funnel-step .name{flex:1;color:var(--txt)}
.funnel-step .val{font-size:11px;font-weight:700;font-family:var(--mono);color:var(--gold)}
.funnel-step.passed .val{color:var(--green)}
.funnel-step.rejected .val{color:var(--red)}
/* 风控仪表 */
.risk-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.risk-item{padding:8px;border-radius:6px;background:var(--panel2);border:1px solid var(--line)}
.risk-item .label{font-size:9px;color:var(--txt2);letter-spacing:.5px;margin-bottom:4px}
.risk-item .val{font-size:14px;font-weight:700;font-family:var(--mono)}
.risk-item .val.ok{color:var(--green)}
.risk-item .val.warn{color:var(--gold)}
.risk-item .val.bad{color:var(--red)}
/* 实时指标 */
.metrics-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.metric{padding:10px;border-radius:6px;background:var(--panel2);border:1px solid var(--line);text-align:center}
.metric .val{font-size:22px;font-weight:800;font-family:var(--mono);color:var(--gold)}
.metric .label{font-size:9px;color:var(--txt2);letter-spacing:.5px;margin-top:2px}
/* 判定生命周期 */
.lifecycle{display:flex;align-items:center;gap:4px;padding:8px 0}
.life-stage{flex:1;padding:10px;border-radius:8px;background:var(--panel2);border:1px solid var(--line);
  text-align:center;position:relative}
.life-stage.active{border-color:var(--gold);background:rgba(245,196,81,.05)}
.life-stage .stage-icon{font-size:20px;margin-bottom:4px}
.life-stage .stage-name{font-size:10px;font-weight:700;color:var(--gold);letter-spacing:.5px}
.life-stage .stage-role{font-size:9px;color:var(--txt2);margin-top:2px}
.life-arrow{color:var(--txt2);font-size:14px;flex:none}
/* 信号流 */
.signal-list{max-height:340px;overflow-y:auto}
.signal-item{padding:10px;border-radius:8px;background:var(--panel2);border:1px solid var(--line);
  margin-bottom:6px;transition:all .15s}
.signal-item:hover{border-color:var(--blue)}
.signal-item.passed{border-left:3px solid var(--green)}
.signal-item.rejected{border-left:3px solid var(--red)}
.signal-item.watch{border-left:3px solid var(--gold)}
.signal-header{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.signal-symbol{font-weight:700;font-size:13px;color:var(--txt)}
.signal-name{font-size:10px;color:var(--txt2)}
.signal-dir{font-size:10px;font-weight:700;padding:2px 8px;border-radius:10px;letter-spacing:.5px}
.signal-dir.long{background:rgba(38,166,154,.15);color:var(--up);border:1px solid rgba(38,166,154,.3)}
.signal-dir.short{background:rgba(239,83,80,.15);color:var(--down);border:1px solid rgba(239,83,80,.3)}
.signal-dir.flat{background:var(--panel2);color:var(--txt2)}
.signal-status{margin-left:auto;font-size:9px;padding:2px 6px;border-radius:3px;font-weight:700}
.signal-status.passed{background:rgba(61,220,132,.1);color:var(--green);border:1px solid rgba(61,220,132,.3)}
.signal-status.rejected{background:rgba(255,93,93,.1);color:var(--red);border:1px solid rgba(255,93,93,.3)}
.signal-status.watch{background:rgba(245,196,81,.1);color:var(--gold);border:1px solid rgba(245,196,81,.3)}
.signal-prices{display:flex;gap:12px;font-size:10px;font-family:var(--mono);flex-wrap:wrap}
.signal-prices .price-item{display:flex;align-items:center;gap:3px}
.signal-prices .pl{color:var(--txt2)}
.signal-prices .pv{color:var(--txt);font-weight:600}
.signal-prices .pv.tp{color:var(--green)}
.signal-prices .pv.sl{color:var(--red)}
.signal-prices .pv.entry{color:var(--blue)}
.signal-confidence{margin-top:6px;display:flex;align-items:center;gap:6px}
.conf-bar{flex:1;height:4px;border-radius:2px;background:var(--line);overflow:hidden}
.conf-fill{height:100%;border-radius:2px;background:linear-gradient(90deg,var(--gold),var(--blue));transition:width .3s}
.conf-val{font-size:10px;font-family:var(--mono);color:var(--gold);font-weight:700;min-width:30px;text-align:right}
.signal-reason{margin-top:4px;font-size:10px;color:var(--txt2);line-height:1.5}
/* 市场纠缠图 */
.entangle-canvas{width:100%;height:180px;background:#0d1119;border-radius:8px;border:1px solid var(--line)}
/* 岗位报告 */
.report-list{max-height:200px;overflow-y:auto}
.report-item{padding:8px;border-radius:6px;background:var(--panel2);border:1px solid var(--line);margin-bottom:4px;font-size:10px}
.report-item .rtitle{color:var(--gold);font-weight:700;margin-bottom:3px}
.report-item .rcontent{color:var(--txt2);line-height:1.5}
/* 交易记录 */
.trade-list{max-height:260px;overflow-y:auto}
.trade-item{padding:8px;border-radius:6px;background:var(--panel2);border:1px solid var(--line);margin-bottom:4px}
.trade-item .th{display:flex;align-items:center;gap:6px;margin-bottom:3px}
.trade-item .ts{font-size:10px;color:var(--txt2);font-family:var(--mono)}
.trade-item .tsym{font-size:11px;font-weight:700;color:var(--txt)}
.trade-item .tstatus{margin-left:auto;font-size:9px;padding:1px 5px;border-radius:3px}
.trade-item .tstatus.executed{background:rgba(61,220,132,.1);color:var(--green)}
.trade-item .tstatus.failed{background:rgba(255,93,93,.1);color:var(--red)}
.trade-item .tstatus.pending{background:rgba(79,157,255,.1);color:var(--blue)}
.trade-item .td{font-size:10px;color:var(--txt2);font-family:var(--mono)}
/* 配置面板 */
.config-panel{display:none;position:fixed;top:48px;left:0;right:0;bottom:0;
  background:rgba(11,14,20,.92);z-index:200;justify-content:center;align-items:center;padding:20px}
.config-panel.show{display:flex}
.config-box{width:720px;max-width:100%;max-height:85vh;overflow-y:auto;
  background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:24px}
.config-box h2{color:var(--gold);font-size:16px;margin-bottom:16px}
/* 设置按钮 */
.settings-btn{padding:6px 14px;border:1px solid var(--gold);border-radius:8px;cursor:pointer;
  background:rgba(245,196,81,.08);color:var(--gold);font-size:11px;font-weight:700;letter-spacing:.5px}
.settings-btn:hover{background:rgba(245,196,81,.18)}
/* Tab */
.cfg-tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:1px solid var(--line)}
.cfg-tab{padding:8px 16px;cursor:pointer;font-size:11px;color:var(--txt2);
  border-bottom:2px solid transparent;transition:all .15s}
.cfg-tab:hover{color:var(--txt)}
.cfg-tab.active{color:var(--gold);border-bottom-color:var(--gold)}
.config-section{margin-bottom:14px;padding:14px;background:var(--panel2);border-radius:8px;border:1px solid var(--line)}
.config-section h3{color:var(--blue);font-size:12px;margin-bottom:10px;letter-spacing:.5px}
.config-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.config-row label{font-size:11px;color:var(--txt2);min-width:130px;flex:none}
.config-row input,.config-row select{flex:1;background:#0d1119;border:1px solid var(--line);border-radius:6px;
  color:var(--txt);padding:6px 10px;font-size:12px;outline:none;font-family:var(--mono)}
.config-row input:focus,.config-row select:focus{border-color:var(--blue)}
.config-row select{cursor:pointer}
.cfg-unit{font-size:10px;color:var(--txt2);flex:none}
.cfg-hint{font-size:10px;color:var(--txt2);margin-top:4px;line-height:1.5;padding-left:130px}
/* 开关 */
.cfg-switch{position:relative;display:inline-block;width:36px;height:20px;flex:none}
.cfg-switch input{opacity:0;width:0;height:0}
.cfg-slider{position:absolute;cursor:pointer;inset:0;background:var(--panel2);
  border:1px solid var(--line);border-radius:10px;transition:.2s}
.cfg-slider::before{content:'';position:absolute;height:14px;width:14px;left:2px;top:2px;
  background:var(--txt2);border-radius:50%;transition:.2s}
.cfg-switch input:checked + .cfg-slider{background:rgba(245,196,81,.2);border-color:var(--gold)}
.cfg-switch input:checked + .cfg-slider::before{transform:translateX(16px);background:var(--gold)}
.config-btn{padding:8px 20px;border:none;border-radius:8px;cursor:pointer;
  background:linear-gradient(90deg,#f5c451,#ff9d3c);color:#14181f;font-size:12px;font-weight:700}
.config-btn:hover{filter:brightness(1.08)}
.config-btn-sm{padding:6px 14px;font-size:11px;margin-top:6px}
.config-close{background:var(--panel2);color:var(--txt);border:1px solid var(--line)}
/* 品种映射编辑器 */
.sym-map-row{display:grid;grid-template-columns:120px 1fr 1fr;gap:8px;margin-bottom:6px;align-items:center}
.sym-map-row label{font-size:11px;color:var(--gold);font-weight:700;font-family:var(--mono)}
.sym-map-row input{background:#0d1119;border:1px solid var(--line);border-radius:6px;
  color:var(--txt);padding:5px 8px;font-size:11px;font-family:var(--mono);outline:none}
/* 滚动条 */
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--line);border-radius:3px}
::-webkit-scrollbar-thumb:hover{background:var(--txt2)}
/* 动画 */
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
.pulse{animation:pulse 1.5s infinite}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.fade-in{animation:fadeIn .3s ease}
/* 空状态 */
.empty{text-align:center;padding:30px;color:var(--txt2);font-size:11px}
/* 信号广告 ticker */
.signal-ticker{position:fixed;bottom:0;left:0;right:0;height:32px;z-index:50;
  background:linear-gradient(180deg,#0f141d,#0b0e14);border-top:1px solid var(--line);
  display:flex;align-items:center;overflow:hidden;padding:0 12px}
.ticker-label{font-size:9px;font-weight:700;color:var(--gold);letter-spacing:1px;margin-right:10px;flex:none}
.ticker-content{flex:1;overflow:hidden;white-space:nowrap}
.ticker-track{display:inline-block;animation:scroll 60s linear infinite}
.ticker-item{display:inline-block;margin-right:40px;font-size:10px;color:var(--txt)}
.ticker-item .tk-sym{color:var(--gold);font-weight:700}
.ticker-item .tk-dir.long{color:var(--up)}
.ticker-item .tk-dir.short{color:var(--down)}
.ticker-item .tk-tp{color:var(--green)}
.ticker-item .tk-sl{color:var(--red)}
@keyframes scroll{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}
