:root{
  --bg:#0b0f16; --panel:#121826; --panel2:#0f1522; --line:#1e2839;
  --txt:#dfe7f3; --dim:#8a99b0; --acc:#e04a4a; --acc2:#3fa66a;
  --warn:#d99b2b; --info:#4a8fe0; --mono:ui-monospace,"Cascadia Mono",Consolas,monospace;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--txt);
  font:14px/1.6 "Segoe UI","Microsoft YaHei",system-ui,sans-serif}
a{color:var(--info);text-decoration:none}
.hidden{display:none!important}

/* ---------- 顶栏 ---------- */
.topbar{display:flex;align-items:center;gap:24px;padding:10px 18px;
  background:linear-gradient(180deg,#121a29,#0d131f);border-bottom:1px solid var(--line);
  position:sticky;top:0;z-index:20;flex-wrap:wrap}
.brand{display:flex;align-items:baseline;gap:8px}
.logo{color:var(--acc);font-size:20px}
.title{font-weight:700;letter-spacing:.5px}
.sub{color:var(--dim);font-size:12px}
.headline{display:flex;gap:22px;margin-left:auto}
.kpi{display:flex;flex-direction:column;line-height:1.2}
.kpi label{color:var(--dim);font-size:11px}
.kpi b{font-family:var(--mono);font-size:15px}
.statusline{display:flex;gap:8px;align-items:center}
.pill{padding:2px 9px;border-radius:999px;background:#1b2436;border:1px solid var(--line);
  font-size:12px;color:var(--txt)}
.pill.ghost{color:var(--dim)}
.pill.live{background:#12301f;border-color:#1d5136;color:#57c98a}
.pill.off{background:#2a2029;border-color:#4a2b38;color:#c07a8f}
.pill.run{background:#2b2413;border-color:#5c4a1c;color:#e0b344}

/* ---------- 标签页 ---------- */
.tabs{display:flex;gap:2px;padding:0 14px;background:var(--panel2);
  border-bottom:1px solid var(--line);position:sticky;top:57px;z-index:19;overflow-x:auto}
.tabs a{padding:10px 16px;color:var(--dim);border-bottom:2px solid transparent;white-space:nowrap}
.tabs a.active{color:var(--txt);border-bottom-color:var(--acc)}

main{padding:18px;max-width:1500px;margin:0 auto}
.loading{color:var(--dim);padding:40px;text-align:center}

/* ---------- 通用块 ---------- */
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}
.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px 16px}
.card h3{margin:0 0 10px;font-size:13px;color:var(--dim);font-weight:600;
  letter-spacing:.4px;text-transform:uppercase}
.card .big{font-family:var(--mono);font-size:24px;font-weight:600}
.mono{font-family:var(--mono)}
.dim{color:var(--dim)}
.up{color:var(--acc)}      /* A股：红涨 */
.down{color:var(--acc2)}   /* 绿跌 */
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.spacer{flex:1}

/* ---------- 表格 ---------- */
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{padding:7px 9px;text-align:right;border-bottom:1px solid var(--line)}
th{color:var(--dim);font-weight:500;font-size:12px;text-align:right;white-space:nowrap}
th:first-child,td:first-child{text-align:left}
tbody tr:hover{background:#151d2c}
td.l{text-align:left}

/* ---------- 按钮 ---------- */
.btn{background:#1d2739;color:var(--txt);border:1px solid var(--line);border-radius:7px;
  padding:7px 14px;cursor:pointer;font-size:13px;transition:.15s}
.btn:hover{background:#26344c;border-color:#2f405c}
.btn.primary{background:#8f2f2f;border-color:#b13b3b}
.btn.primary:hover{background:#a63a3a}
.btn.ok{background:#1d4a33;border-color:#276b48}
.btn.tiny{padding:3px 9px;font-size:12px}
.btn:disabled{opacity:.45;cursor:not-allowed}

/* ---------- 表单 ---------- */
label.f{display:block;margin-bottom:10px}
label.f span{display:block;color:var(--dim);font-size:12px;margin-bottom:4px}
input,select,textarea{width:100%;background:#0d1420;border:1px solid var(--line);
  color:var(--txt);border-radius:7px;padding:8px 10px;font-family:var(--mono);font-size:13px}
input:focus,textarea:focus{outline:none;border-color:#33507a}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}

/* ---------- 徽章 / 标签 ---------- */
.tag{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11px;
  background:#1b2436;border:1px solid var(--line);color:var(--dim);margin-right:4px}
.tag.hot{background:#3a1c1c;border-color:#632c2c;color:#e88}
.tag.ok{background:#15321f;border-color:#245c37;color:#6bd39a}
.tag.warn{background:#2f2714;border-color:#5c4a1c;color:#e0b344}

/* ---------- 列表 ---------- */
.list{display:flex;flex-direction:column;gap:8px;max-height:520px;overflow:auto}
.item{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:9px 12px;
  cursor:pointer;transition:.12s}
.item:hover{border-color:#33507a}
.item .meta{color:var(--dim);font-size:12px}
pre{background:#080d16;border:1px solid var(--line);border-radius:8px;padding:12px;
  overflow:auto;font-family:var(--mono);font-size:12px;line-height:1.55;
  white-space:pre-wrap;word-break:break-word;max-height:560px}
.two-col{display:grid;grid-template-columns:minmax(240px,1fr) 2fr;gap:14px}
@media(max-width:900px){.two-col{grid-template-columns:1fr}}

/* ---------- 权益曲线 ---------- */
.chart{width:100%;height:190px;display:block}
.chart .grid-line{stroke:#1c2537;stroke-width:1}
.chart .line{fill:none;stroke:#e04a4a;stroke-width:1.8}
.chart .area{fill:rgba(224,74,74,.12);stroke:none}
.chart text{fill:#6b7c96;font-size:10px;font-family:var(--mono)}

/* ---------- 任务面板 ---------- */
.jobpanel{position:fixed;right:16px;bottom:16px;width:min(680px,92vw);
  background:#0d131f;border:1px solid #2b3446;border-radius:12px;
  box-shadow:0 12px 40px rgba(0,0,0,.55);z-index:60}
.jobhead{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid var(--line)}
.jobhead b{font-size:13px}
.jobhead .spacer{flex:1}
#job-log{margin:0;max-height:290px;border:0;border-radius:0 0 12px 12px;background:#080d16}

/* ---------- K 线图 ---------- */
.kline-wrap{position:relative;background:#0a1018;border:1px solid var(--line);border-radius:10px;padding:6px}
.kline-svg{width:100%;height:auto;display:block}
.kline-svg text{fill:#6b7c96;font-size:10px;font-family:var(--mono)}
.kline-svg .axis{stroke:#1c2537;stroke-width:1}
.kline-svg .wick-up{stroke:#e04a4a;stroke-width:1}
.kline-svg .wick-down{stroke:#3fa66a;stroke-width:1}
.kline-svg .body-up{fill:#e04a4a}
.kline-svg .body-down{fill:#3fa66a}
.kline-svg .ma5{fill:none;stroke:#e8c46a;stroke-width:1.2}
.kline-svg .ma10{fill:none;stroke:#5fb3e8;stroke-width:1.2}
.kline-svg .ma20{fill:none;stroke:#c07ae0;stroke-width:1.2}
.kline-svg .ma60{fill:none;stroke:#8a99b0;stroke-width:1.2}
.kline-svg .stop-line{stroke:#d99b2b;stroke-width:1;stroke-dasharray:5 4}
.kline-svg .tgt-line{stroke:#4a8fe0;stroke-width:1;stroke-dasharray:5 4}
.kline-svg .buy-mark{fill:#e04a4a}
.kline-svg .sell-mark{fill:#3fa66a}
.kline-svg .plan-mark{fill:none;stroke:#e8c46a;stroke-width:1.4;stroke-dasharray:3 2}
.kline-svg .dec-mark{stroke:#4a8fe0;stroke-width:2}
.kline-svg .cross{stroke:#3a4a63;stroke-width:1;stroke-dasharray:3 3}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--dim);margin:8px 0 0}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:middle}
.legend .tri-up{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:9px solid #e04a4a;border-radius:0}
.legend .tri-down{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:9px solid #3fa66a;border-radius:0}
.legend .ring{background:none;border:1.5px dashed #e8c46a;border-radius:50%}
.legend .tick{background:#4a8fe0;width:3px;height:10px}

/* ---------- Toast ---------- */
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:28px;
  background:#1d2739;border:1px solid #33507a;color:var(--txt);padding:9px 18px;
  border-radius:999px;z-index:80;font-size:13px;box-shadow:0 8px 24px rgba(0,0,0,.5)}
.toast.err{border-color:#b13b3b;background:#2a1618}

/* ---------- 交互式行情图（十字光标 / 浮层） ---------- */
.kchart{position:relative;background:#0a1018;border:1px solid var(--line);border-radius:10px;padding:6px;cursor:crosshair;overflow:hidden}
.k-tip{position:absolute;pointer-events:none;background:rgba(11,17,27,.97);border:1px solid #33507a;
  border-radius:8px;padding:8px 10px;font-size:12px;line-height:1.55;min-width:180px;z-index:6;
  box-shadow:0 10px 28px rgba(0,0,0,.55)}
.k-tip .kt{color:#e8c46a;font-weight:600;margin-bottom:3px;font-family:var(--mono)}
.k-tip b{font-family:var(--mono)}
#k-periods .btn.primary{background:#8f2f2f;border-color:#b13b3b}

/* 局部刷新过渡：数据更新时轻微高亮，避免整页闪烁 */
#view{transition:opacity .18s ease}
#view.soft-updated{opacity:.86}
