:root {
  --bg: #050507;
  --bg2: #080814;
  --panel: rgba(8, 11, 28, .68);
  --panel2: rgba(12, 16, 40, .56);
  --line: rgba(122, 91, 255, .34);
  --line2: rgba(43, 161, 255, .48);
  --text: #f7f8ff;
  --muted: #98a6cf;
  --subtle: #63719e;
  --blue: #2f8cff;
  --cyan: #19e6ff;
  --purple: #8c3dff;
  --pink: #ff2fb2;
  --green: #15f2a3;
  --red: #ff3d71;
  --shadow: 0 24px 90px rgba(0,0,0,.58), 0 0 38px rgba(64,115,255,.16);
  --font: "Microsoft YaHei", "PingFang SC", "Noto Sans CJK SC", Arial, sans-serif;
}
*{box-sizing:border-box} html,body{min-height:100%;margin:0} body{font-family:var(--font);color:var(--text);background:var(--bg);overflow:auto}
body:before{content:"";position:fixed;inset:0;background:radial-gradient(circle at 72% 15%,rgba(255,47,178,.20),transparent 24%),radial-gradient(circle at 22% 4%,rgba(47,140,255,.18),transparent 25%),linear-gradient(135deg,#050507 0%,#080817 52%,#0c0520 100%);z-index:-5}
.neural-energy-background{position:fixed;inset:-20%;z-index:-4;opacity:.32;background:repeating-linear-gradient(90deg,transparent 0 70px,rgba(47,140,255,.10) 71px,transparent 72px),repeating-linear-gradient(0deg,transparent 0 70px,rgba(139,61,255,.08) 71px,transparent 72px);transform:perspective(900px) rotateX(64deg) translateY(-18%);animation:tunnel 16s linear infinite}
@keyframes tunnel{from{background-position:0 0,0 0}to{background-position:260px 520px,520px 260px}}
.particle-field{position:fixed;inset:0;z-index:-3;background-image:radial-gradient(circle,rgba(255,47,178,.75) 0 1px,transparent 1.5px),radial-gradient(circle,rgba(33,230,255,.55) 0 1px,transparent 1.5px);background-size:120px 120px,180px 180px;background-position:20px 30px,80px 10px;opacity:.36;animation:pulse 6s ease-in-out infinite alternate}@keyframes pulse{to{opacity:.58;filter:blur(.2px)}}
.holographic-dragon-ring{position:fixed;right:-8vw;top:-10vh;width:58vw;height:58vw;border-radius:50%;z-index:-2;background:conic-gradient(from 180deg,transparent,rgba(47,140,255,.08),rgba(139,61,255,.28),rgba(255,47,178,.20),transparent 70%);filter:blur(.2px) drop-shadow(0 0 34px rgba(139,61,255,.32));animation:ring 18s linear infinite}.holographic-dragon-ring:after{content:"";position:absolute;inset:12%;border:1px solid rgba(47,140,255,.23);border-radius:50%;box-shadow:0 0 55px rgba(255,47,178,.18) inset}@keyframes ring{to{transform:rotate(360deg)}}
.scanline{position:fixed;inset:0;z-index:10;pointer-events:none;background:linear-gradient(180deg,transparent 0 50%,rgba(255,255,255,.025) 51%,transparent 52%);background-size:100% 4px;mix-blend-mode:screen;opacity:.25}.orb{position:fixed;border-radius:50%;filter:blur(40px);z-index:-1;opacity:.35}.orb-a{right:10%;top:13%;width:210px;height:210px;background:var(--pink)}.orb-b{right:28%;top:18%;width:150px;height:150px;background:var(--cyan)}
.hidden{display:none!important}.glass,.panel,.card,.status-strip>div,.login-card{background:linear-gradient(145deg,rgba(16,19,45,.70),rgba(6,8,24,.55));border:1px solid rgba(132,116,255,.27);box-shadow:var(--shadow);backdrop-filter:blur(3px)}
#app{min-height:100%;position:relative}.dashboard-shell{min-height:100vh;padding:18px;display:grid;gap:14px;overflow:visible}.topbar{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:76px;padding:10px 16px}.brand-area,.brand-row{display:flex;align-items:center;gap:14px}.brand-mark{width:78px;height:78px;border-radius:20px;display:grid;place-items:center;font-size:38px;font-weight:1000;letter-spacing:-4px;background:linear-gradient(135deg,var(--pink),var(--blue));color:#fff;box-shadow:0 0 36px rgba(139,61,255,.45)}.brand-mark.small{width:62px;height:62px;font-size:30px}.brand-area h1{font-size:34px;line-height:1;margin:0 0 8px;letter-spacing:-1px}.brand-area p{margin:0;color:var(--muted);font-size:15px}.top-actions{display:flex;align-items:center;gap:10px;flex-wrap:nowrap}.badge,button{border:1px solid rgba(89,124,255,.38);background:linear-gradient(135deg,rgba(72,74,255,.95),rgba(166,67,255,.88),rgba(255,47,178,.72));color:white;border-radius:14px;padding:12px 18px;font-weight:900;font-family:var(--font);cursor:pointer;box-shadow:0 0 22px rgba(139,61,255,.25)}.badge{background:rgba(16,242,163,.12);color:var(--green);border-color:rgba(21,242,163,.36);cursor:default}.badge.running{background:rgba(21,242,163,.18)}.badge.analyzing{background:rgba(255,200,50,.18);color:#ffd700;border-color:rgba(255,200,50,.45);animation:pulse 1.2s ease-in-out infinite}button.analyzing{background:linear-gradient(135deg,rgba(255,200,50,.85),rgba(255,140,50,.85));border-color:rgba(255,200,50,.6);animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.75;transform:scale(1.02)}}button.secondary{background:rgba(25,31,68,.75)}button.ghost{background:rgba(255,61,113,.09);border-color:rgba(255,61,113,.42)}button:disabled{opacity:.55;cursor:not-allowed}
.status-strip{display:grid;gap:10px}.status-strip-main{grid-template-columns:repeat(4,1fr);min-height:78px}.status-strip.compact{grid-template-columns:repeat(3,1fr);margin-bottom:10px}.status-strip>div{border-radius:18px;padding:14px 18px;min-width:0}.status-strip span,.card span,.quote-grid span,.kv span{display:block;color:var(--muted);font-size:12px;font-weight:800}.status-strip strong{font-size:25px;display:block;margin-top:8px}.module-pages{display:grid;gap:14px;position:relative}.module-page{display:grid;height:auto;overflow:visible;gap:14px}.module-page.active{display:grid;gap:14px}.panel{border-radius:18px;padding:14px 16px;min-height:0;overflow:hidden;position:relative}.glow-border{box-shadow:var(--shadow),0 0 0 1px rgba(47,140,255,.28),0 0 28px rgba(139,61,255,.18)}.panel-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.panel-title h2{font-size:18px;margin:0}.panel-title span{color:var(--muted);font-size:12px}.chart-title-row{margin-bottom:6px}.interval-tabs{display:flex;gap:8px}.interval{padding:8px 15px;border-radius:12px;background:rgba(9,12,31,.72);box-shadow:none}.interval.active{background:linear-gradient(135deg,var(--purple),var(--blue));box-shadow:0 0 20px rgba(47,140,255,.36)}.chart-hero{display:grid;grid-template-rows:auto auto;min-height:0}.module-page[data-page="overview"]{grid-template-rows:auto auto}.kline-chart{width:calc(100% + 32px);height:420px;min-height:420px;margin:0 -16px;border-radius:0;overflow:hidden;background:rgba(4,7,18,.52);display:grid;place-items:center;color:var(--muted)}.kline-chart svg{display:block;width:100%;height:100%}.overview-cards{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;min-height:118px}.card{border-radius:16px;padding:14px 16px;min-width:0;overflow:hidden}.card strong{display:block;margin-top:9px;font-size:26px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card small{display:block;margin-top:7px;color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.price-card strong{font-size:32px;color:#82e8ff}.decision-long{color:var(--green)}.decision-short{color:var(--red)}.decision-wait{color:#d5dcff}.ok{color:var(--green)}.blocked{color:var(--red)}
.grid-two{display:grid;grid-template-columns:1fr 1fr;gap:12px;min-height:0}.grid-two.wide-left{grid-template-columns:1.45fr 1fr}.market-grid{grid-template-columns:1fr 1.25fr}.quote-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.quote-grid>div,.kv>div{padding:11px 12px;border:1px solid rgba(117,145,255,.22);border-radius:12px;background:rgba(5,7,20,.45);min-width:0}.quote-grid strong,.kv strong{display:block;margin-top:6px;font-size:16px;word-break:break-word}.kv{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;overflow:auto;max-height:100%}.kv.dense{grid-template-columns:repeat(2,1fr);gap:7px}.reason-box{white-space:pre-wrap;line-height:1.65;color:#dbe4ff;font-size:13px;background:rgba(5,7,20,.45);border:1px solid rgba(117,145,255,.22);border-radius:14px;padding:14px;overflow:auto;max-height:100%}.model-votes{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:10px}.vote-card{padding:12px;border:1px solid rgba(117,145,255,.22);border-radius:14px;background:rgba(5,7,20,.50)}.vote-card small,.vote-card p{color:var(--muted)}.vote{display:inline-block;margin:8px 0;padding:4px 10px;border-radius:999px;background:rgba(255,255,255,.08)}.vote.long{color:var(--green)}.vote.short{color:var(--red)}.vote.wait{color:#ccd7ff}.events{display:grid;gap:8px;overflow:auto}.compact-events{max-height:150px}.event{padding:10px 12px;border:1px solid rgba(117,145,255,.22);border-radius:12px;background:rgba(5,7,20,.45);font-size:13px;line-height:1.5}.table-wrap{overflow:auto;max-height:200px}table{width:100%;border-collapse:collapse;font-size:12px}th,td{border-bottom:1px solid rgba(117,145,255,.16);padding:8px;text-align:left;white-space:nowrap}th{color:var(--muted)}.flow-steps,.protection-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.flow-step,.protection-card{padding:12px;border:1px solid rgba(117,145,255,.22);border-radius:14px;background:rgba(5,7,20,.45)}.flow-step.done{border-color:rgba(21,242,163,.38)}.flow-step.blocked{border-color:rgba(255,61,113,.42)}.protection-card strong{font-size:18px}.bottom-nav{position:fixed;left:0;right:0;bottom:0;height:68px;display:grid;grid-template-columns:repeat(5,1fr);gap:0;padding:8px 18px;background:linear-gradient(180deg,rgba(13,13,42,.70),rgba(5,5,12,.92));border-top:1px solid rgba(122,91,255,.42);box-shadow:0 -16px 40px rgba(47,140,255,.18);z-index:20}.nav-item{border-radius:16px;background:transparent;box-shadow:none;color:#aab6df;font-size:16px}.nav-item span{display:inline-block;margin-right:9px}.nav-item.active{background:linear-gradient(135deg,rgba(139,61,255,.75),rgba(47,140,255,.38));color:white;box-shadow:0 0 26px rgba(139,61,255,.35)}
.login-card{width:min(650px,calc(100vw - 32px));position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);padding:34px;border-radius:28px}.login-card h1{font-size:36px;margin:0 0 8px}.login-card p{color:var(--muted);margin:0 0 20px}.login-card form{display:grid;gap:10px}.login-card label{font-weight:900}.login-card input{height:52px;border-radius:12px;border:1px solid rgba(122,145,255,.35);background:rgba(4,7,18,.55);color:white;padding:0 14px;font-size:16px}.login-card input:focus{outline:none;border-color:var(--cyan);box-shadow:0 8px 24px rgba(47,140,255,.18)}.login-card button{height:56px;margin-top:10px}.login-foot{margin-top:18px;text-align:center;color:var(--green);font-weight:800}.dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:var(--green);box-shadow:0 0 14px var(--green);margin-right:8px}.error{color:var(--red);margin-top:12px}.config-form{display:grid;grid-template-columns:180px minmax(0,1fr);gap:10px 12px;align-items:center}.config-form button{grid-column:1 / -1}.config-form label{color:var(--muted);font-weight:900}.hint{margin-top:10px;color:var(--green);font-weight:800}.small-reason{min-height:190px}
@media(max-width:1200px){.overview-cards{grid-template-columns:repeat(3,1fr)}.status-strip-main{grid-template-columns:repeat(2,1fr)}.grid-two,.grid-two.wide-left,.market-grid{grid-template-columns:1fr}.dashboard-shell{overflow:visible}.module-page{overflow:visible}.brand-area h1{font-size:26px}.topbar{align-items:flex-start;flex-direction:column}.config-form{grid-template-columns:1fr}}

/* V3.7 单页整体界面：移除底部栏，所有模块顺序展示 */
.bottom-nav{display:none!important}
.module-page{scroll-margin-top:18px}

.data-tree{display:grid;gap:10px;max-height:560px;overflow:auto;padding-right:4px}
.data-tree details{border:1px solid rgba(117,145,255,.20);border-radius:14px;background:rgba(5,7,20,.42);padding:8px 10px}
.data-tree summary{cursor:pointer;font-weight:900;color:#dfe7ff;list-style:none;display:flex;align-items:center;gap:8px}
.data-tree summary::-webkit-details-marker{display:none}
.data-tree summary:before{content:"";width:7px;height:7px;border-radius:50%;background:linear-gradient(135deg,var(--blue),var(--pink));box-shadow:0 0 12px rgba(139,61,255,.45)}
.tree-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px}
.tree-grid.level-0{grid-template-columns:repeat(2,minmax(0,1fr))}
.tree-grid.level-1{grid-template-columns:repeat(2,minmax(0,1fr))}
.tree-grid.level-2,.tree-grid.level-3{grid-template-columns:1fr}
.tree-kv{border:1px solid rgba(117,145,255,.17);background:rgba(5,7,20,.44);border-radius:12px;padding:9px 10px;min-width:0}
.tree-kv span{display:block;color:var(--muted);font-size:12px;font-weight:800;margin-bottom:5px}
.tree-kv strong{font-size:14px;line-height:1.45;word-break:break-word}
.tree-list{display:grid;gap:8px;margin-top:8px}
.mini-pair{display:inline-block;line-height:1.45;color:#e6ecff;font-weight:800}
.empty-value{color:#8290bd!important;font-weight:800}
.kv strong .mini-pair{font-size:13px}
.event .mini-pair{font-size:12px}
@media(max-width:1200px){.tree-grid,.tree-grid.level-0,.tree-grid.level-1{grid-template-columns:1fr}.data-tree{max-height:none}}

/* V3.11 实盘安全监控面板增强样式 */
.monitor-panel{overflow:visible}
.monitor-status-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}
.monitor-stat{border-radius:16px;padding:14px 16px;background:rgba(5,7,20,.55);border:1px solid rgba(117,145,255,.22);text-align:center}
.monitor-stat span{display:block;color:var(--muted);font-size:11px;font-weight:800;margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px}
.monitor-stat strong{display:block;font-size:18px;margin-top:0;word-break:break-word}

/* 连接状态颜色 */
.conn-state{padding:4px 12px;border-radius:10px;font-size:14px;font-weight:900;display:inline-block}
.conn-state.connected{color:var(--green);background:rgba(21,242,163,.12);border:1px solid rgba(21,242,163,.35);box-shadow:0 0 12px rgba(21,242,163,.15)}
.conn-state.connecting{color:#ffd700;background:rgba(255,215,0,.10);border:1px solid rgba(255,215,0,.30);animation:pulse 1.5s ease-in-out infinite}
.conn-state.reconnecting{color:#ff8c00;background:rgba(255,140,0,.10);border:1px solid rgba(255,140,0,.30);animation:pulse 1.2s ease-in-out infinite}
.conn-state.disconnected{color:var(--red);background:rgba(255,61,113,.08);border:1px solid rgba(255,61,113,.25)}

/* 健康状态徽章 */
.health-badge{padding:4px 12px;border-radius:10px;font-size:14px;font-weight:900;display:inline-block}
.health-badge.healthy{color:var(--green);background:rgba(21,242,163,.12);border:1px solid rgba(21,242,163,.35)}
.health-badge.stale{color:#ff8c00;background:rgba(255,140,0,.10);border:1px solid rgba(255,140,0,.30)}
.health-badge.reconnecting{color:#ffd700;background:rgba(255,215,0,.10);border:1px solid rgba(255,215,0,.30)}
.health-badge.disconnected{color:var(--red);background:rgba(255,61,113,.08);border:1px solid rgba(255,61,113,.25)}
.health-badge.stopped{color:#8290bd;background:rgba(130,144,189,.08);border:1px solid rgba(130,144,189,.25)}

/* 详细监控区域 */
.monitor-details{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}
.monitor-section{background:rgba(5,7,20,.45);border:1px solid rgba(117,145,255,.18);border-radius:14px;padding:14px}
.monitor-section h3{font-size:13px;color:var(--muted);font-weight:900;margin:0 0 10px;text-transform:uppercase;letter-spacing:.5px}

/* 订单事件计数器 */
.monitor-event-counters{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.event-counter{text-align:center;padding:10px 8px;background:rgba(5,7,20,.50);border:1px solid rgba(117,145,255,.15);border-radius:10px}
.event-counter span{display:block;color:var(--muted);font-size:10px;font-weight:800;margin-bottom:4px}
.event-counter strong{display:block;font-size:20px;color:#e6ecff}

/* 连接与安全 KV 网格 */
.monitor-kv-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.monitor-kv-grid>div{padding:10px 12px;background:rgba(5,7,20,.50);border:1px solid rgba(117,145,255,.15);border-radius:10px}
.monitor-kv-grid span{display:block;color:var(--muted);font-size:11px;font-weight:800;margin-bottom:4px}
.monitor-kv-grid strong{display:block;font-size:14px;color:#e6ecff;word-break:break-word}

/* 错误条 */
.monitor-error-strip{background:rgba(255,61,113,.08);border:1px solid rgba(255,61,113,.30);border-radius:12px;padding:12px 14px;margin-bottom:12px;display:flex;align-items:center;gap:10px}
.monitor-error-strip span{color:var(--red);font-size:12px;font-weight:900;white-space:nowrap}
.monitor-error-strip strong{color:#ffb3c6;font-size:13px;word-break:break-word}

/* 最近事件列表 */
.monitor-recent-events{margin-top:4px}
.monitor-recent-events h3{font-size:13px;color:var(--muted);font-weight:900;margin:0 0 10px;display:flex;align-items:center;gap:8px}
.monitor-recent-events h3 small{color:#8290bd;font-size:11px;font-weight:800}
.compact-events-monitor{display:grid;gap:6px;max-height:220px;overflow:auto}

/* 单个事件条目 */
.monitor-event-item{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;background:rgba(5,7,20,.45);border:1px solid rgba(117,145,255,.18);border-radius:10px;font-size:13px;line-height:1.5;transition:background .15s}
.monitor-event-item:hover{background:rgba(5,7,20,.65)}
.monitor-event-icon{font-size:16px;flex-shrink:0;margin-top:1px}
.monitor-event-body strong{color:#e6ecff;font-size:13px}
.monitor-event-body small{color:var(--muted);font-size:11px}

/* 响应式 */
@media(max-width:1200px){
  .monitor-status-strip{grid-template-columns:repeat(2,1fr)}
  .monitor-details{grid-template-columns:1fr}
  .monitor-event-counters{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:600px){
  .monitor-status-strip{grid-template-columns:1fr 1fr}
  .monitor-event-counters{grid-template-columns:repeat(2,1fr)}
  .monitor-kv-grid{grid-template-columns:1fr}
}
