/* ==========================================================================
   光谱 SPECTRUM · 设计系统
   1. 设计令牌 / 2. 基础 / 3. 侧栏 / 4. 顶栏 / 5. 版式
   6. 卡片与面板 / 7. 表单 / 8. 按钮 / 9. 列表 / 10. 行情 / 11. 指标与表格
   12. 图表 / 13. 资讯与健康 / 14. 进化 / 15. 回测 / 16. 提示与页脚 / 17. 响应式
   主题：html[data-theme="light|dark"]，由 /theme.js 在首屏前写入。
   ========================================================================== */

/* ---------- 1. 设计令牌 ---------- */
:root{
  color-scheme:light;
  --bg:#f5f6f8;
  --surface:#ffffff;
  --surface-2:#f4f6f9;
  --surface-3:#eceff4;
  --field:#ffffff;
  --line:#e5e8ee;
  --line-strong:#d3d9e3;
  --text:#131820;
  --text-2:#55606f;
  --text-3:#6d7787;
  --accent:#0f9b86;
  --accent-hover:#0c8574;
  --accent-fg:#ffffff;
  --accent-soft:#e8f6f3;
  --accent-line:#bfe6dd;
  --up:#d93b45;
  --up-soft:#fdecec;
  --down:#12885a;
  --down-soft:#e7f6ee;
  --ok:#0f8a5f;
  --ok-soft:#e6f6ee;
  --ok-line:#bfe3d0;
  --warn:#a9701a;
  --warn-soft:#fdf4e4;
  --warn-line:#eedcba;
  --danger:#cd3543;
  --danger-soft:#fdecee;
  --danger-line:#f2c7cd;
  --shadow-1:0 1px 2px rgba(16,24,40,.04),0 1px 3px rgba(16,24,40,.05);
  --shadow-2:0 12px 32px rgba(16,24,40,.10),0 2px 8px rgba(16,24,40,.06);
  --ring:0 0 0 3px rgba(15,155,134,.16);
  --chart-grid:rgba(19,24,32,.07);
  --chart-bench:#9aa4b2;
  --blur-bg:rgba(245,246,248,.84);
  --radius:14px;
  --radius-sm:10px;
  --sidebar:252px;
  --font:-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;
}

html[data-theme="dark"]{
  color-scheme:dark;
  --bg:#0a0e13;
  --surface:#111822;
  --surface-2:#16202d;
  --surface-3:#1d2836;
  --field:#0d131b;
  --line:#222c39;
  --line-strong:#303d4e;
  --text:#e9eff7;
  --text-2:#9aa8ba;
  --text-3:#8492a4;
  --accent:#4fd6ba;
  --accent-hover:#6ee0c8;
  --accent-fg:#04231d;
  --accent-soft:#0f2b26;
  --accent-line:#1f4a41;
  --up:#ff6b73;
  --up-soft:#2c1a1e;
  --down:#3ddc97;
  --down-soft:#102a22;
  --ok:#3ddc97;
  --ok-soft:#0f2a22;
  --ok-line:#1e4437;
  --warn:#f0b45e;
  --warn-soft:#2a2114;
  --warn-line:#4a3a1e;
  --danger:#ff7a86;
  --danger-soft:#2e1b20;
  --danger-line:#5b3038;
  --shadow-1:0 1px 2px rgba(0,0,0,.32);
  --shadow-2:0 14px 36px rgba(0,0,0,.5);
  --ring:0 0 0 3px rgba(79,214,186,.18);
  --chart-grid:rgba(255,255,255,.07);
  --chart-bench:#7f8b9c;
  --blur-bg:rgba(10,14,19,.8);
}

/* ---------- 2. 基础 ---------- */
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font-family:var(--font);
  font-size:14px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;background:none;border:0;padding:0}
button:disabled{cursor:not-allowed}
h1,h2,h3,p,ol,ul{margin:0}
ol,ul{padding:0;list-style:none}
svg{display:block}
hr{border:0;border-top:1px solid var(--line);margin:18px 0}
::selection{background:var(--accent-soft);color:var(--text)}
:where(a,button,input,select,textarea,summary):focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
*::-webkit-scrollbar{width:10px;height:10px}
*::-webkit-scrollbar-track{background:transparent}
*::-webkit-scrollbar-thumb{background:var(--surface-3);border-radius:99px;border:2px solid transparent;background-clip:content-box}
*::-webkit-scrollbar-thumb:hover{background:var(--text-3);background-clip:content-box}

/* ---------- 3. 侧栏 ---------- */
.sidebar{
  position:fixed;inset:0 auto 0 0;width:var(--sidebar);
  display:flex;flex-direction:column;
  padding:22px 14px 16px;
  background:var(--surface);
  border-right:1px solid var(--line);
}
.brand{display:flex;align-items:center;gap:11px;padding:4px 8px 0}
.brand-mark{
  display:inline-flex;align-items:center;justify-content:center;
  width:34px;height:34px;border-radius:10px;
  background:var(--accent-soft);color:var(--accent);
  border:1px solid var(--accent-line);font-size:17px;line-height:1;
}
.brand-text{font-size:17px;font-weight:650;letter-spacing:.02em;line-height:1.25}
.brand-text small{display:block;font-size:9px;font-weight:500;letter-spacing:.18em;color:var(--text-3);margin-top:1px}

nav{margin-top:22px;display:flex;flex-direction:column;min-height:0;overflow-y:auto}
.nav-group{margin-bottom:16px}
.nav-label{display:block;padding:0 10px;margin-bottom:5px;font-size:10px;font-weight:600;letter-spacing:.14em;color:var(--text-3)}
nav a{
  position:relative;display:flex;align-items:center;gap:10px;
  padding:8px 10px;border-radius:9px;
  color:var(--text-2);font-size:13px;line-height:1.4;
  transition:background .14s,color .14s;
}
nav a svg{width:17px;height:17px;flex:0 0 auto;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;opacity:.85}
nav a:hover{background:var(--surface-2);color:var(--text)}
nav a.active{background:var(--accent-soft);color:var(--accent);font-weight:560}
nav a.active svg{opacity:1}
nav b{
  margin-left:auto;min-width:18px;height:18px;padding:0 5px;
  display:inline-flex;align-items:center;justify-content:center;
  border-radius:9px;background:var(--up);color:#fff;
  font-size:10.5px;font-weight:650;font-variant-numeric:tabular-nums;
}
.sidebar-foot{margin-top:auto;padding:12px 10px 0;border-top:1px solid var(--line);color:var(--text-3)}
.sidebar-foot p{font-size:11px;line-height:1.75}
.foot-meta{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:10.5px;color:var(--text-3)}
.tag{border:1px solid var(--line);border-radius:6px;padding:1px 6px;font-size:10px;letter-spacing:.02em}

/* ---------- 4. 顶栏 ---------- */
.shell{margin-left:var(--sidebar);display:flex;flex-direction:column;min-height:100vh}
header{
  position:sticky;top:0;z-index:40;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  height:62px;padding:0 28px;
  background:var(--blur-bg);
  backdrop-filter:blur(14px) saturate(1.4);
  -webkit-backdrop-filter:blur(14px) saturate(1.4);
  border-bottom:1px solid var(--line);
}
.crumb{font-size:12px;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.header-right{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.status-chip{
  display:inline-flex;align-items:center;gap:7px;
  padding:4px 11px;border-radius:99px;
  background:var(--surface-2);border:1px solid var(--line);
  font-size:11.5px;color:var(--text-2);white-space:nowrap;
}
.status-chip::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ok);animation:pulse 2.6s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}
.icon-button{
  width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;
  border-radius:9px;border:1px solid var(--line);background:var(--surface);color:var(--text-2);
  transition:background .14s,color .14s,border-color .14s;
}
.icon-button:hover{background:var(--surface-2);color:var(--text);border-color:var(--line-strong)}
.icon-button svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.theme-sun{display:none}
html[data-theme="dark"] .theme-sun{display:block}
html[data-theme="dark"] .theme-moon{display:none}
.user-chip{
  display:inline-flex;align-items:center;gap:8px;
  height:32px;max-width:190px;padding:0 12px 0 9px;
  border-radius:99px;border:1px solid var(--line);background:var(--surface);
  font-size:12.5px;color:var(--text);
  overflow:hidden;white-space:nowrap;text-overflow:ellipsis;
  transition:border-color .14s,background .14s;
}
.user-chip:hover{border-color:var(--line-strong);background:var(--surface-2)}
.user-chip::before{content:"";width:17px;height:17px;border-radius:50%;flex:0 0 auto;background:var(--accent-soft);border:1px solid var(--accent-line)}

/* ---------- 5. 版式 ---------- */
main{flex:1 0 auto;width:100%;max-width:1440px;margin:0 auto;padding:26px 30px 68px}
[data-page]:not([hidden]){animation:pageIn .24s ease-out}
@keyframes pageIn{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
.page-title{display:flex;align-items:flex-end;justify-content:space-between;gap:22px;flex-wrap:wrap;margin-bottom:22px}
.page-title-main{min-width:0}
.eyebrow{font-size:10.5px;font-weight:650;letter-spacing:.15em;color:var(--accent)}
h1{font-size:clamp(25px,2.1vw,32px);font-weight:640;letter-spacing:-.022em;line-height:1.24;margin:7px 0 6px}
.page-title p{font-size:13px;color:var(--text-2);max-width:64ch}
.page-actions{display:flex;align-items:center;gap:9px;flex:0 0 auto}
.pill{
  display:inline-flex;align-items:center;
  padding:3px 9px;border-radius:99px;
  border:1px solid var(--line);background:var(--surface-2);
  font-size:11px;color:var(--text-2);white-space:nowrap;line-height:1.55;
}
a.pill{transition:border-color .14s,color .14s}
a.pill:hover{border-color:var(--accent);color:var(--accent)}
.hint{font-size:11.5px;line-height:1.7;color:var(--text-3);margin-top:10px}
.muted,.empty{color:var(--text-3)}
.link-quiet{font-size:12px;color:var(--accent);white-space:nowrap;transition:opacity .14s}
.link-quiet:hover{opacity:.75}
.notice{
  padding:11px 14px;margin-bottom:16px;border-radius:10px;
  background:var(--warn-soft);border:1px solid var(--warn-line);color:var(--warn);
  font-size:12.5px;line-height:1.65;
}
.stack{display:flex;flex-direction:column;gap:18px;min-width:0}

/* ---------- 6. 卡片与面板 ---------- */
.panel{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:20px 22px;margin-bottom:18px;min-width:0;box-shadow:var(--shadow-1);
}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.panel-head h2{display:flex;align-items:center;gap:8px;font-size:14.5px;font-weight:620;letter-spacing:-.01em;min-width:0}
.panel-note{font-size:11.5px;color:var(--text-3)}
.head-actions{display:flex;align-items:center;gap:7px}
.step-num{
  display:inline-flex;align-items:center;justify-content:center;
  width:20px;height:20px;border-radius:6px;
  background:var(--accent-soft);border:1px solid var(--accent-line);color:var(--accent);
  font-size:11px;font-weight:650;
}
.summary-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:18px}
.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:17px 19px;box-shadow:var(--shadow-1)}
.stat span{font-size:12px;color:var(--text-2)}
.stat strong{display:block;margin:5px 0 3px;font-size:28px;font-weight:620;letter-spacing:-.025em;font-variant-numeric:tabular-nums}
.stat small{font-size:10.5px;color:var(--text-3)}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start}
.lab-grid{display:grid;grid-template-columns:minmax(300px,.82fr) minmax(0,1.18fr);gap:18px;align-items:start}
.two-col>.panel,.lab-grid>.panel,.stack>.panel,.lab-grid>.stack>.panel{margin-bottom:0}

/* 研究路径与三步流程 */
.journey ol{display:grid;grid-template-columns:1fr 1fr;gap:18px 20px;margin-top:4px;counter-reset:steps}
.journey li{position:relative;padding-left:30px}
.journey li::before{
  counter-increment:steps;content:"0" counter(steps);
  position:absolute;left:0;top:0;
  display:flex;align-items:center;justify-content:center;
  width:22px;height:22px;border-radius:7px;
  background:var(--accent-soft);border:1px solid var(--accent-line);color:var(--accent);
  font-size:10.5px;font-weight:650;font-variant-numeric:tabular-nums;
}
.journey b{display:block;font-size:13px;font-weight:560}
.journey span{display:block;margin-top:2px;font-size:11.5px;line-height:1.6;color:var(--text-3)}
.three-col{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-top:2px}
.step{
  display:inline-flex;align-items:center;justify-content:center;
  width:26px;height:26px;border-radius:8px;
  background:var(--accent-soft);border:1px solid var(--accent-line);color:var(--accent);
  font-size:11px;font-weight:650;font-variant-numeric:tabular-nums;
}
.three-col h3{margin:9px 0 4px;font-size:13px;font-weight:560}
.three-col p{font-size:11.5px;line-height:1.65;color:var(--text-3)}

/* ---------- 7. 表单 ---------- */
label{display:flex;flex-direction:column;gap:6px;margin:14px 0 0;font-size:12px;color:var(--text-2)}
input,select,textarea{
  width:100%;min-width:0;
  border:1px solid var(--line-strong);border-radius:9px;
  background:var(--field);color:var(--text);
  font-size:13px;padding:0 11px;
  transition:border-color .14s,box-shadow .14s;
}
input,select{height:36px}
textarea{padding:9px 11px;line-height:1.65;resize:vertical}
input::placeholder,textarea::placeholder{color:var(--text-3)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:var(--ring)}
select{
  appearance:none;-webkit-appearance:none;cursor:pointer;
  padding-right:30px;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238a94a3' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 9px center;background-size:14px;
}
input[type="file"]{height:36px;padding:5px 9px;font-size:12px;color:var(--text-2);cursor:pointer}
input[type="checkbox"]{width:auto;height:auto;flex:0 0 auto;margin:0;accent-color:var(--accent);cursor:pointer}
.checkbox{display:flex;flex-direction:row;align-items:flex-start;gap:9px;margin:14px 0 0;font-size:12px;line-height:1.55;color:var(--text-2);cursor:pointer}
.checkbox input{margin-top:2px}
.form-row{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-top:14px}
.form-row>*{flex:1 1 120px;min-width:0;margin:0}
.form-row>.button{flex:0 0 auto}
.quick-fields{display:grid;grid-template-columns:1fr 1fr;gap:0 12px;margin-top:6px}
.quick-fields label{margin:12px 0 0}
.quick-fields label:first-child{grid-column:1/-1}
.panel-head select{width:auto;max-width:52%;margin:0;height:30px;font-size:12px;border-radius:8px}
.code{font-family:var(--mono);font-size:12px;line-height:1.75;tab-size:2;background:var(--surface-2);color:var(--text)}
details{margin-top:18px;border:1px solid var(--line);border-radius:11px;background:var(--surface-2)}
summary{
  display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;
  padding:10px 13px;border-radius:11px;font-size:12.5px;color:var(--text-2);
  transition:color .14s,background .14s;
}
summary::-webkit-details-marker{display:none}
summary::before{
  content:"";width:0;height:0;flex:0 0 auto;
  border-left:5px solid var(--text-3);
  border-top:4px solid transparent;border-bottom:4px solid transparent;
  transition:transform .15s;
}
summary:hover{color:var(--text)}
details[open]>summary{color:var(--text);border-bottom:1px solid var(--line);border-radius:11px 11px 0 0}
details[open]>summary::before{transform:rotate(90deg)}
details>*:not(summary){margin-left:13px;margin-right:13px}
details>*:not(summary):last-child{margin-bottom:13px}

/* ---------- 8. 按钮 ---------- */
.button{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  height:34px;padding:0 14px;border-radius:9px;
  border:1px solid var(--line-strong);background:var(--surface);color:var(--text);
  font-size:13px;font-weight:520;white-space:nowrap;box-shadow:var(--shadow-1);
  transition:background .14s,border-color .14s,color .14s,transform .06s,opacity .14s;
}
.button:hover{background:var(--surface-2);border-color:var(--text-3)}
.button:active{transform:translateY(.5px)}
.button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-fg);font-weight:600;box-shadow:0 1px 2px rgba(15,155,134,.24)}
.button.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}
.button.subtle{background:transparent;border-color:transparent;box-shadow:none}
.button.small{height:28px;padding:0 10px;font-size:12px;border-radius:8px;box-shadow:none}
.button.full{width:100%;height:38px;margin-top:14px}
.button:disabled{opacity:.45;box-shadow:none;transform:none}

/* ---------- 9. 列表 ---------- */
.rows{display:flex;flex-direction:column}
.rows .row{display:flex;align-items:center;gap:12px;padding:11px 8px;border-radius:9px;transition:background .14s}
.rows .row+.row{border-top:1px solid var(--line)}
.rows .row:hover{background:var(--surface-2)}
.row-content{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.row-content>span{display:block;font-size:13px;line-height:1.5}
.row small{display:block;margin-top:1px;font-size:11px;line-height:1.65;color:var(--text-3)}
.row>.button{flex:0 0 auto}
.rows>p.hint{padding:10px 8px;margin-top:0}
.rows.empty{min-height:40px}

/* ---------- 10. 行情卡片 ---------- */
.market-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:11px}
.market{
  background:var(--surface-2);border:1px solid var(--line);border-radius:12px;
  padding:13px 14px;min-width:0;
  transition:background .15s,border-color .15s;
}
.market:hover{background:var(--surface-3);border-color:var(--line-strong)}
.market h3{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12.5px;font-weight:520;color:var(--text-2);margin:0}
.market strong{
  display:block;margin:9px 0 5px;
  font-size:22px;font-weight:620;letter-spacing:-.025em;
  font-variant-numeric:tabular-nums;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.market small{display:block;font-size:10.5px;line-height:1.65;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dot{display:inline-block;flex:0 0 auto;width:7px;height:7px;border-radius:50%;background:var(--text-3)}
.dot.fresh{background:var(--ok)}
.dot.closed{background:var(--text-3)}
.dot.stale{background:var(--warn)}
.dot.unavailable{background:var(--danger)}
.chg{
  margin-left:8px;padding:2px 7px;border-radius:6px;
  font-size:11.5px;font-weight:620;font-variant-numeric:tabular-nums;
  vertical-align:2px;
}
.chg.up{color:var(--up);background:var(--up-soft)}
.chg.down{color:var(--down);background:var(--down-soft)}
.chg:empty{display:none}

/* ---------- 11. 指标与表格 ---------- */
.metrics{display:grid;grid-template-columns:repeat(auto-fill,minmax(128px,1fr));gap:8px;margin-top:4px}
.metric{min-width:0;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.metric span{display:block;font-size:10.5px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.metric b{display:block;margin-top:2px;font-size:17px;font-weight:620;letter-spacing:-.015em;font-variant-numeric:tabular-nums}
.table-scroll{overflow:auto;max-height:480px;margin-top:12px;border-radius:10px;-webkit-overflow-scrolling:touch}
table{width:100%;border-collapse:collapse;font-size:12px;text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
th{padding:8px 10px;border-bottom:1px solid var(--line-strong);font-size:10.5px;font-weight:600;letter-spacing:.04em;color:var(--text-3)}
.table-scroll thead th{position:sticky;top:0;z-index:1;background:var(--surface)}
td{padding:8px 10px;border-bottom:1px solid var(--line);color:var(--text-2)}
tbody tr:last-child td{border-bottom:0}
tbody tr:hover td{background:var(--surface-2);color:var(--text)}
th:first-child,td:first-child{text-align:left}
td.up{color:var(--up)}
td.down{color:var(--down)}
table:has(tbody:empty){display:none}

/* ---------- 12. 图表 ---------- */
#equity-chart,#bt-chart{
  display:block;width:100%;height:auto;
  margin-top:12px;padding:6px;
  background:var(--surface-2);border:1px solid var(--line);border-radius:12px;
}
#equity-chart polyline{fill:none;stroke:var(--accent);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.bt-line{fill:none;stroke:var(--accent);stroke-width:1.8;stroke-linejoin:round;stroke-linecap:round}
.bt-bench{fill:none;stroke:var(--chart-bench);stroke-width:1.2;stroke-dasharray:4 4}
.bt-dd{fill:var(--up);fill-opacity:.10;stroke:var(--up);stroke-opacity:.35;stroke-width:.8}
.bt-axis{fill:var(--text-3);font-size:10px}
.bt-grid{stroke:var(--chart-grid);stroke-width:1}

/* ---------- 13. 资讯、数据源与规则 ---------- */
.feed-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(186px,1fr));gap:9px;margin-top:2px}
.feed{min-width:0;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.feed b{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:3px;font-size:12px;font-weight:560}
.feed small{display:block;font-size:10.5px;line-height:1.65;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.feed.degraded{border-color:var(--danger-line);background:var(--danger-soft)}
.feed.degraded small{color:var(--danger)}
.news-filter{display:flex;flex-wrap:wrap;gap:6px}
.chip{
  height:26px;padding:0 11px;border-radius:99px;
  border:1px solid var(--line);background:var(--surface);color:var(--text-2);
  font-size:11.5px;transition:background .14s,border-color .14s,color .14s;
}
.chip:hover{border-color:var(--line-strong);color:var(--text)}
.chip.active{border-color:var(--accent-line);background:var(--accent-soft);color:var(--accent);font-weight:560}
.news-list{display:flex;flex-direction:column;max-height:520px;overflow-y:auto;margin-top:8px;padding-right:4px}
.news-item{display:flex;align-items:flex-start;gap:12px;padding:11px 9px;border-radius:10px;transition:background .14s}
.news-item+.news-item{border-top:1px solid var(--line)}
.news-item:hover{background:var(--surface-2)}
.news-main{flex:1 1 auto;min-width:0}
.news-main a{display:block;font-size:13px;font-weight:500;line-height:1.55}
.news-main a:hover{color:var(--accent)}
.news-main small{display:block;margin-top:2px;font-size:10.5px;line-height:1.65;color:var(--text-3)}
.news-main small+small{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.badge{
  flex:0 0 auto;margin-top:2px;padding:1px 8px;border-radius:99px;
  border:1px solid var(--line);color:var(--text-3);
  font-size:10.5px;white-space:nowrap;
}
.badge.high{color:var(--danger);border-color:var(--danger-line);background:var(--danger-soft)}
.badge.medium{color:var(--warn);border-color:var(--warn-line);background:var(--warn-soft)}
.badge.low{color:var(--text-3)}

/* ---------- 14. 策略进化 ---------- */
.range-rows{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.range-row{
  display:grid;grid-template-columns:minmax(104px,1.25fr) repeat(3,minmax(56px,.8fr)) auto;
  gap:6px;align-items:end;
  padding:8px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);
}
.range-row label{display:flex;flex-direction:column;gap:3px;margin:0;font-size:10.5px;color:var(--text-3)}
.range-row input,.range-row select{height:30px;padding:0 8px;font-size:12px;border-radius:7px}
.range-row select{padding-right:26px;background-position:right 7px center}
.range-row .button{align-self:center;height:28px}
.heat-grid{display:grid;gap:4px;margin:8px 0 4px}
.heat-cell{
  display:flex;align-items:center;justify-content:center;min-height:32px;
  border:1px solid var(--line);border-radius:7px;background:var(--surface-2);
  font-size:11px;font-variant-numeric:tabular-nums;
}
.verdict{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0 4px}
.verdict small{font-size:11px;line-height:1.6;color:var(--text-3)}
.grade{display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:34px;border-radius:9px;font-size:15px;font-weight:650}
.grade-a{background:var(--ok-soft);color:var(--ok);border:1px solid var(--ok-line)}
.grade-b{background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent-line)}
.grade-c{background:var(--warn-soft);color:var(--warn);border:1px solid var(--warn-line)}
.grade-d{background:var(--danger-soft);color:var(--danger);border:1px solid var(--danger-line)}

/* ---------- 15. 回测平台 ---------- */
/* 数据集、月度格子与运行历史样式已并到 18c「回测配置与结果」，此处只留分节占位。 */

/* ---------- 16. 提示与页脚 ---------- */
#message{
  position:fixed;z-index:80;top:16px;left:50%;transform:translateX(-50%);
  display:flex;align-items:center;gap:9px;
  width:min(560px,calc(100vw - 32px));
  padding:11px 15px;border-radius:11px;
  background:var(--surface);border:1px solid var(--line-strong);color:var(--text);
  font-size:12.5px;line-height:1.55;box-shadow:var(--shadow-2);
  animation:toastIn .22s ease-out;
}
#message::before{
  content:"✓";display:inline-flex;align-items:center;justify-content:center;
  width:18px;height:18px;flex:0 0 auto;border-radius:50%;
  background:var(--ok-soft);color:var(--ok);font-size:11px;font-weight:700;
}
#message.error{border-color:var(--danger-line)}
#message.error::before{content:"!";background:var(--danger-soft);color:var(--danger)}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}
pre{
  margin:0 0 10px;padding:12px 13px;border-radius:10px;
  background:var(--surface-2);border:1px solid var(--line);
  font-family:var(--mono);font-size:11.5px;line-height:1.75;
  white-space:pre-wrap;word-break:break-word;
}
footer{
  display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:18px 30px;border-top:1px solid var(--line);
  font-size:10.5px;letter-spacing:.06em;color:var(--text-3);
}

/* ---------- 17. 响应式 ---------- */
@media(max-width:1180px){
  :root{--sidebar:216px}
  main{padding:24px 22px 60px}
  .market-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .lab-grid{grid-template-columns:minmax(280px,.9fr) minmax(0,1.1fr)}
  table{font-size:11.5px}
}
@media(max-width:980px){
  .sidebar{position:static;inset:auto;width:auto;flex-direction:row;flex-wrap:wrap;align-items:center;padding:11px 14px;border-right:0;border-bottom:1px solid var(--line)}
  .brand{padding:0}
  .brand-text{font-size:16px}
  .shell{margin-left:0;min-height:0}
  nav{display:flex;gap:2px;width:100%;margin:8px 0 0;overflow-x:auto;overflow-y:hidden;padding-bottom:2px}
  .nav-group{display:flex;align-items:center;gap:2px;margin:0}
  .nav-label,.sidebar-foot{display:none}
  nav a{padding:7px 9px;font-size:12.5px;white-space:nowrap}
  nav a svg{width:15px;height:15px}
  header{height:56px;padding:0 16px}
  .two-col,.lab-grid{grid-template-columns:1fr}
  .summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .market-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  footer{padding:16px}
}
@media(max-width:640px){
  main{padding:18px 14px 52px}
  .page-title{gap:14px;align-items:flex-start}
  .page-actions{width:100%}
  .page-actions .button,.page-actions .pill{flex:1 1 auto}
  .summary-grid{gap:10px}
  .stat{padding:14px}
  .stat strong{font-size:24px}
  .panel{padding:15px 16px;border-radius:12px}
  .market-grid{grid-template-columns:1fr}
  .metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .quick-fields{grid-template-columns:1fr}
  .quick-fields label:first-child{grid-column:auto}
  .three-col{grid-template-columns:1fr;gap:16px}
  .journey ol{grid-template-columns:1fr}
  .form-row>*{flex:1 1 100%}
  .form-row>.button{flex:1 1 100%}
  .range-row{grid-template-columns:1fr 1fr 1fr}
  .range-row select{grid-column:1/-1}
  .news-list{max-height:none}
  .status-chip{display:none}
  .rows .row{flex-wrap:wrap}
  #bt-runs .bt-run-actions{width:100%;justify-content:flex-end;margin-top:6px}
  footer{flex-direction:column;gap:4px}
}
@media(prefers-reduced-motion:reduce){
  *{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}
[hidden]{display:none!important}

/* ---------- 18. 账户与安全 ---------- */
.brand-mark{background:#070c13;border-color:rgba(255,255,255,.09);color:#9bfbe4;box-shadow:inset 0 1px 0 rgba(255,255,255,.06)}
.brand-mark svg{display:block;width:24px;height:24px}
html[data-theme="dark"] .brand-mark{background:#050a10;border-color:#1b2735}

/* 密码框：右侧留出显隐按钮的位置，眼睛图标不遮住输入内容 */
.field{position:relative;display:block}
.field input{padding-right:40px}
.reveal{
  position:absolute;top:1px;right:1px;bottom:1px;width:36px;
  display:inline-flex;align-items:center;justify-content:center;
  border:0;border-radius:8px;background:transparent;color:var(--text-3);cursor:pointer;
  transition:color .14s,background .14s;
}
.reveal svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.reveal:hover{color:var(--text);background:var(--surface-2)}
.reveal:focus-visible{outline:none;box-shadow:var(--ring);color:var(--accent)}
.field-row{display:flex;gap:10px;align-items:flex-end;margin-top:6px}
.field-row input{flex:1 1 auto}
.code-button{flex:0 0 auto;height:36px}

.strength{display:flex;align-items:center;gap:9px;margin-top:8px;font-size:11px;color:var(--text-3)}
.strength-bars{display:flex;gap:4px}
.strength-bars i{width:26px;height:4px;border-radius:3px;background:var(--surface-3);transition:background .16s}
.strength[data-level="1"] .strength-bars i:nth-child(-n+1){background:var(--danger)}
.strength[data-level="2"] .strength-bars i:nth-child(-n+2){background:var(--warn)}
.strength[data-level="3"] .strength-bars i:nth-child(-n+3){background:var(--ok)}
.strength[data-level="4"] .strength-bars i{background:var(--ok)}

.hint.good{color:var(--ok)}
.hint.bad{color:var(--danger)}
.pill.ok{background:var(--ok-soft);border-color:var(--ok-line);color:var(--ok)}
.pill.warn{background:var(--warn-soft);border-color:var(--warn-line);color:var(--warn)}

.profile-head{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.profile-id{display:flex;align-items:center;gap:13px;min-width:0}
.profile-id h2{font-size:16px}
.profile-id .panel-note{margin-top:2px}
.profile-head .head-actions{display:flex;align-items:center;gap:8px}
.avatar{
  display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;
  width:44px;height:44px;border-radius:12px;
  background:linear-gradient(140deg,var(--accent-soft),var(--surface-2));
  border:1px solid var(--accent-line);color:var(--accent);
  font-size:17px;font-weight:650;
}
@media(max-width:640px){
  .field-row{flex-wrap:wrap}
  .code-button{width:100%}
  .profile-head{align-items:flex-start}
  .channel-wechat{grid-template-columns:1fr}
}

/* 即时通知渠道 */
.channel-list{display:flex;flex-direction:column;gap:8px;margin:14px 0}
.channel-item{display:flex;align-items:center;gap:12px;padding:11px 13px;border-radius:10px;background:var(--surface-2);border:1px solid var(--line)}
.channel-item .channel-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.channel-item .channel-name{font-size:13px;color:var(--text);font-weight:500}
.channel-item .channel-meta{font-size:11.5px;color:var(--text-3);word-break:break-all}
.channel-item .channel-actions{display:flex;gap:6px;flex-shrink:0}
.channel-item.channel-off{opacity:.62}
.channel-add{margin-top:14px}
.channel-add .field-row{display:flex;gap:8px;flex-wrap:wrap}
/* 公众号渠道有四个字段，单独排一块；selected 非公众号时整块收起。 */
.channel-wechat{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px}
.channel-wechat[hidden]{display:none}
.channel-add select,.channel-add input{flex:1;min-width:150px;height:38px;padding:0 11px;border-radius:9px;background:var(--field);border:1px solid var(--line-strong);color:var(--text);font-size:13px}
.channel-add select:focus,.channel-add input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.channel-push{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}

/* ---------- 18. 策略库 ---------- */
/* 一页纸的清单：标题 + 分组 tab + 筛选条 + 表格；行即入口，点哪儿都进编辑页。 */
.lib-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-1);overflow:hidden}
.lib-head{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding:15px 20px;border-bottom:1px solid var(--line)}
.lib-title{display:flex;align-items:center;gap:9px;font-size:16px;font-weight:640;letter-spacing:-.01em;margin:0}
.lib-title::before{content:"";width:3px;height:15px;border-radius:2px;background:var(--accent)}
.lib-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.lib-tools .button{gap:4px}
.lib-tools .button svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round}
.lib-tabs{display:flex;gap:24px;padding:0 20px;border-bottom:1px solid var(--line)}
.lib-tab{position:relative;padding:11px 0;font-size:13px;color:var(--text-3);transition:color .14s}
.lib-tab b{margin-left:5px;font-weight:600;font-variant-numeric:tabular-nums}
.lib-tab:hover{color:var(--text-2)}
.lib-tab.active{color:var(--accent);font-weight:600}
.lib-tab.active::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:var(--accent)}
.lib-bar{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap;padding:11px 20px;border-bottom:1px solid var(--line);background:var(--surface-2)}
.lib-bar select{width:auto;min-width:148px;height:32px;font-size:12.5px;border-radius:8px}
.lib-search{position:relative;width:min(280px,52vw)}
.lib-search svg{position:absolute;left:9px;top:50%;transform:translateY(-50%);width:14px;height:14px;fill:none;stroke:var(--text-3);stroke-width:1.8;stroke-linecap:round}
.lib-search input{height:32px;padding-left:29px;font-size:12.5px;border-radius:8px}
.lib-search input::-webkit-search-cancel-button{cursor:pointer}
.lib-scroll{overflow-x:auto}
.lib-table{width:100%;border-collapse:collapse;font-size:12.5px;text-align:left;white-space:nowrap}
.lib-table th{padding:10px 14px;background:var(--surface);border-bottom:1px solid var(--line);font-size:11px;font-weight:500;letter-spacing:0;color:var(--text-3);text-align:left}
.lib-table td{padding:11px 14px;border-bottom:1px solid var(--line);color:var(--text-2);text-align:left;vertical-align:middle}
.lib-table tbody tr{cursor:pointer;transition:background .12s}
.lib-table tbody tr:hover td{background:var(--surface-2);color:var(--text)}
.lib-table tbody tr:last-child td{border-bottom:0}
.lib-col-act{width:1%;white-space:nowrap}
.lib-name{display:flex;align-items:center;gap:10px;min-width:200px}
.lib-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:26px;height:26px;border-radius:8px;background:var(--accent-soft);border:1px solid var(--accent-line);color:var(--accent)}
.lib-icon svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.lib-name-text{min-width:0}
.lib-name-text b{display:block;font-size:12.5px;font-weight:560;color:var(--text);overflow:hidden;text-overflow:ellipsis}
.lib-name-text small{display:block;margin-top:1px;font-size:10.5px;color:var(--text-3);overflow:hidden;text-overflow:ellipsis;max-width:42ch}
.lib-time span{font-variant-numeric:tabular-nums}
.lib-time .lib-sub{display:block;margin-top:1px;font-size:10.5px;color:var(--text-3)}
.lib-runs span{font-variant-numeric:tabular-nums;color:var(--text-2)}
.lib-actions{white-space:nowrap}
.lib-act{padding:0 6px;font-size:12px;color:var(--accent);transition:opacity .14s}
.lib-act+.lib-act{margin-left:2px}
.lib-act:hover{text-decoration:underline}
.lib-act.danger{color:var(--danger)}
.lib-act:disabled{opacity:.45;text-decoration:none}
.lib-empty{padding:30px 20px;text-align:center;font-size:12px;color:var(--text-3)}

/* ---------- 18b. 策略编辑 ---------- */
.ed-top{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:12px}
.ed-back{display:inline-flex;align-items:center;gap:3px;font-size:12.5px;color:var(--text-2);transition:color .14s}
.ed-back svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.ed-back:hover{color:var(--accent)}
.ed-views{display:flex;gap:22px}
.ed-view{position:relative;padding:0 0 9px;font-size:13.5px;color:var(--text-3);transition:color .14s}
.ed-view:hover{color:var(--text-2)}
.ed-view.active{color:var(--accent);font-weight:600}
.ed-view.active::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;border-radius:2px;background:var(--accent)}
.ed-bar{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:10px 12px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-1);
}
.ed-lang{
  display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;
  height:32px;padding:0 10px;border-radius:8px;
  background:var(--surface-2);border:1px solid var(--line);color:var(--text-2);font-size:12px;
}
.ed-lang svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.ed-name{flex:1 1 240px;max-width:380px;height:32px;font-size:13px;font-weight:520;border-radius:8px}
.ed-bar .pill{flex:0 0 auto}
.ed-actions{display:flex;align-items:center;gap:7px;margin-left:auto;flex:0 0 auto}
.ed-card{margin-top:10px;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-1);overflow:hidden}
.ed-tabbar{display:flex;align-items:center;gap:22px;padding:0 16px;border-bottom:1px solid var(--line);overflow-x:auto}
.ed-pane-tab{position:relative;padding:11px 0;font-size:12.5px;color:var(--text-3);white-space:nowrap;transition:color .14s}
.ed-pane-tab:hover{color:var(--text-2)}
.ed-pane-tab.active{color:var(--accent);font-weight:600}
.ed-pane-tab.active::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:var(--accent)}
.ed-pane{padding:16px 18px}
.ed-pane#pane-code{padding:0}
.ed-field{margin:0;font-size:12px;color:var(--text-2)}
.ed-field textarea{margin-top:6px;font:12px/1.75 var(--mono);border-radius:9px}
.ed-status{
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  padding:6px 14px;border-top:1px solid var(--line);background:var(--surface-2);
  font:11px/1.6 var(--mono);color:var(--text-3);
}
.ed-status-right{margin-left:auto;color:var(--accent)}
.manual-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 26px}
.manual-grid h3{margin:0 0 7px;font-size:12.5px;font-weight:600;color:var(--text)}
.manual-grid dl{margin:0}
.manual-grid dt{margin-top:8px;font:11.5px/1.5 var(--mono);color:var(--accent)}
.manual-grid dd{margin:1px 0 0;font-size:11.5px;line-height:1.6;color:var(--text-3)}
.manual-grid code,.ed-pane code{padding:1px 4px;border-radius:4px;background:var(--surface-2);border:1px solid var(--line);font:11px/1 var(--mono);color:var(--text-2)}

/* ---------- AI 编码助手 ---------- */
.ai-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.ai-intro b{font-size:13px;color:var(--text)}
.ai-intro .hint{margin:3px 0 0}
.ai-chips{display:flex;flex-wrap:wrap;gap:7px;margin:14px 0 12px}
.ai-chip{
  padding:6px 12px;border-radius:999px;border:1px solid var(--line);background:var(--surface-2);
  color:var(--text-2);font-size:12px;transition:border-color .14s,color .14s,background .14s;
}
.ai-chip:hover{border-color:var(--line-strong);color:var(--text)}
.ai-chip.active{border-color:var(--accent-line);background:var(--accent-soft);color:var(--accent);font-weight:600}
.ai-submit{display:flex;align-items:center;gap:14px;margin-top:12px}
.ai-submit .hint{flex:1 1 auto;margin:0}
.ai-submit .button{flex:0 0 auto}
.ai-result{margin-top:16px;padding:13px 14px;border:1px solid var(--line);border-radius:11px;background:var(--surface-2)}
.ai-result-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ai-result-actions{display:flex;gap:7px;margin-left:auto;flex-wrap:wrap}
.ai-explain{margin:10px 0 0;font-size:12.5px;line-height:1.75;color:var(--text-2);white-space:pre-wrap;word-break:break-word}
.ai-explain:empty{display:none}
.ai-code-wrap{margin-top:11px;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--field)}
.ai-code-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 11px;border-bottom:1px solid var(--line);background:var(--surface);font:11px/1.5 var(--mono);color:var(--text-3)}
.ai-code{margin:0;padding:12px 14px;max-height:340px;overflow:auto;font:11.5px/1.7 var(--mono);color:var(--text);white-space:pre;tab-size:2}

/* 编辑器本体：行号 + 高亮层 + 透明 textarea 三层叠在一起 */
.editor{display:grid;grid-template-columns:48px minmax(0,1fr);height:clamp(360px,54vh,660px);border:0;border-radius:0;overflow:hidden;background:var(--field)}
.editor-gutter{padding:12px 8px 24px 0;text-align:right;font:12px/1.7 var(--mono);color:var(--text-3);background:var(--surface-2);border-right:1px solid var(--line);overflow:hidden;user-select:none;white-space:pre}
.editor-body{position:relative;overflow:hidden}
.editor-highlight,.editor-body textarea{position:absolute;inset:0;margin:0;padding:12px 14px;font:12px/1.7 var(--mono);white-space:pre;tab-size:2;border:0;overflow:auto;background:transparent}
.editor-highlight{pointer-events:none;color:var(--text)}
.editor-body textarea{color:transparent;caret-color:var(--text);resize:none;outline:none}
.editor-body textarea::selection{background:var(--accent-soft)}
.tok-com{color:var(--text-3);font-style:italic}
.tok-str{color:var(--down)}
.tok-kw{color:var(--accent)}
.tok-num{color:var(--up)}
.tok-api{color:var(--warn)}

/* ---------- 18c. 回测配置与结果 ---------- */
/* 配置参数一张卡，结果块从上到下：回测日志 / 状态信息 / 收益概览 / 日志信息。 */
.bt-cfg{padding-bottom:16px}
.bt-cfg .panel-head{margin-bottom:14px}
.cfg-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(172px,1fr));gap:12px 14px;align-items:end}
.cfg-grid-date{grid-template-columns:minmax(150px,220px) minmax(150px,220px) minmax(0,1fr);margin-top:12px}
.cfg-item{display:flex;flex-direction:column;gap:6px;margin:0;font-size:12px;color:var(--text-2);min-width:0}
.cfg-item input,.cfg-item select{height:34px;font-size:12.5px;border-radius:8px}
.cfg-item .seg{margin-top:0;height:34px}
.cfg-static{gap:2px}
.cfg-static b{display:block;padding:7px 0;font-size:13px;font-weight:560;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cfg-note{align-self:center;padding-bottom:8px;font-size:11.5px;line-height:1.6;color:var(--text-3)}
.cfg-block{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.cfg-block-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:9px}
.cfg-block-head b{font-size:12.5px;font-weight:600}
.cfg-block-head .hint{margin:0}
.cfg-foot{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.cfg-foot .button{height:38px;padding:0 22px}
.cfg-foot .hint{margin:0;flex:1 1 280px}
#bt-more .cfg-grid+.cfg-block-head{margin-top:16px}
#bt-params{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
#bt-more details{margin-top:12px}
.bt-dataset-list{display:flex;flex-direction:column;gap:7px}
.bt-dataset{
  display:flex;align-items:flex-start;gap:10px;
  padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);
  transition:background .14s,border-color .14s;
}
.bt-dataset:has(input:checked){border-color:var(--accent-line);background:var(--accent-soft)}
.bt-dataset input[type="checkbox"]{margin-top:4px}
.bt-dataset-info{display:flex;flex-direction:column;flex:1 1 auto;min-width:0}
.bt-dataset-info b{font-size:12.5px;font-weight:560;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bt-dataset-info small{font-size:10.5px;line-height:1.6;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bt-dataset .button{flex:0 0 auto;height:26px;font-size:11.5px}
#bt-datasets-toggle.active,#bt-more-toggle.active{border-color:var(--accent-line);background:var(--accent-soft);color:var(--accent)}

.bt-result{display:flex;flex-direction:column;gap:18px;margin-bottom:18px}
.bt-result>.panel{margin-bottom:0}
.run-pending .run-head{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.run-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.run-head h2{font-size:14.5px;font-weight:620;margin:0}
.pill.ok{border-color:var(--ok-line);background:var(--ok-soft);color:var(--ok)}
.pill.warn{border-color:var(--warn-line);background:var(--warn-soft);color:var(--warn)}
.pill.fail{border-color:var(--danger-line);background:var(--danger-soft);color:var(--danger)}
.run-counters{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:10px;
  padding:12px 14px;border:1px solid var(--line);border-radius:11px;background:var(--surface-2);
}
.run-counters i{display:block;font-size:10.5px;font-style:normal;color:var(--text-3)}
.run-counters b{display:block;margin-top:2px;font-size:15px;font-weight:600;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.run-assets{margin-top:12px}
.run-assets th,.run-assets td{padding:8px 10px}
.run-assets td.num{font-variant-numeric:tabular-nums}
.run-assets-total td{border-top:1px solid var(--line-strong);font-weight:600;color:var(--text);background:var(--surface-2)}
.run-assets-name{font-weight:560;color:var(--text)}
.run-fold>.panel-head{margin-bottom:0}
.run-fold details{margin:0;border:0;background:transparent}
.run-fold details>summary{padding:0;font-size:14.5px;font-weight:620;color:var(--text)}
.run-fold details>summary::before{border-left-color:var(--text-3)}
.run-fold details>*:not(summary){margin-left:0;margin-right:0}
.run-fold details[open]>summary{border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:12px;border-radius:0}
.run-sub{display:block;margin:14px 0 4px;font-size:12px;font-weight:600;color:var(--text-2)}
.run-kv>div{padding:8px 0}
.run-kv dd{text-align:right;max-width:62%}
.run-list{margin:4px 0 0;padding-left:2px;list-style:none;display:flex;flex-direction:column;gap:6px}
.run-list li{position:relative;padding-left:14px;font-size:11.5px;line-height:1.7;color:var(--text-3)}
.run-list li::before{content:"";position:absolute;left:2px;top:9px;width:4px;height:4px;border-radius:50%;background:var(--accent)}
.run-tabs{display:flex;align-items:center;gap:18px}
.run-tab{font-size:12.5px;color:var(--text-3)}
.run-tab.active{position:relative;color:var(--accent);font-weight:560}
.run-tab.active::after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:2px;border-radius:2px;background:var(--accent)}
.run-stats{display:flex;flex-wrap:wrap;gap:8px 22px;padding:2px 0 12px}
.run-stats span{display:flex;align-items:baseline;gap:6px;font-size:11.5px;color:var(--text-3)}
.run-stats b{font-size:13px;font-weight:620;color:var(--text);font-variant-numeric:tabular-nums}
.run-stats b.num.up{color:var(--up)}
.run-stats b.num.down{color:var(--down)}
.run-zoom{display:flex;align-items:center;gap:4px;flex-wrap:wrap;padding:7px 0 0;border-top:1px solid var(--line)}
.run-zoom i{margin-right:6px;font-size:11px;font-style:normal;color:var(--text-3)}
.run-zoom-item{padding:4px 9px;border-radius:7px;font-size:11.5px;color:var(--text-3);transition:background .14s,color .14s}
.run-zoom-item:hover{background:var(--surface-2);color:var(--text)}
.run-zoom-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600}
.run-chart{display:block;width:100%;height:auto;margin-top:10px;border-radius:10px;background:var(--surface-2);border:1px solid var(--line);padding:6px}
.bt-fill{fill:var(--accent);fill-opacity:.09;stroke:none}
.run-chart .bt-dd{fill:var(--danger);fill-opacity:.12;stroke:var(--danger);stroke-opacity:.35}
.run-legend{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:10px;font-size:11px;color:var(--text-3)}
.run-legend span{display:inline-flex;align-items:center;gap:6px}
.run-legend-dot{display:inline-block;width:14px;height:3px;border-radius:2px;background:var(--accent)}
.run-legend-dot.bench{background:var(--chart-bench)}
.run-legend-dot.dd{height:8px;border-radius:2px;background:color-mix(in srgb,var(--danger) 30%,transparent)}
.run-log-table{margin-top:2px}
.run-log-table td.num{font-variant-numeric:tabular-nums}
.run-tools{display:flex;justify-content:flex-end;margin-top:10px}
.monthly-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:7px}
.month-cell{
  display:flex;flex-direction:column;gap:1px;padding:8px 10px;
  border:1px solid var(--line);border-radius:9px;background:var(--surface-2);
  font-variant-numeric:tabular-nums;
}
.month-cell small{font-size:10px;letter-spacing:.02em;color:var(--text-3)}
.month-cell b{font-size:12.5px;font-weight:600}
.month-cell.pos b{color:var(--up)}
.month-cell.neg b{color:var(--down)}
.plot-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-top:4px}
.plot-card{padding:10px 12px;border-radius:10px;background:var(--surface-2);border:1px solid var(--line)}
.plot-card h3{margin:0 0 4px;font-size:12.5px;font-weight:500;color:var(--text-2)}
.plot-card svg{display:block;width:100%;height:96px}
.plot-line{fill:none;stroke:var(--accent);stroke-width:1.4;vector-effect:non-scaling-stroke}
.log-lines{margin:6px 0 0;max-height:320px;overflow:auto;padding:12px 14px;border-radius:10px;background:var(--surface-2);border:1px solid var(--line);font:12px/1.7 var(--mono);color:var(--text-2);white-space:pre-wrap;word-break:break-word}
.code-snapshot{margin:6px 0 0;max-height:420px;overflow:auto;padding:14px;border-radius:10px;background:var(--surface-2);border:1px solid var(--line);font:12px/1.7 var(--mono);color:var(--text);white-space:pre;tab-size:2}
#bt-runs .row-content>span{font-size:12.5px}
#bt-runs .bt-run-actions{display:flex;align-items:center;gap:6px;flex:0 0 auto}
#bt-runs .button.active{border-color:var(--accent-line);background:var(--accent-soft);color:var(--accent)}

@media(max-width:1080px){
  .cfg-grid-date{grid-template-columns:1fr 1fr}
  .cfg-note{grid-column:1/-1;padding-bottom:0}
  .manual-grid{grid-template-columns:1fr}
}
@media(max-width:860px){
  .lib-table th:nth-child(3),.lib-table td:nth-child(3){display:none}
  .ed-view{gap:16px}
  .ed-name{max-width:none;flex:1 1 100%}
  .ed-actions{margin-left:0;width:100%;justify-content:flex-end}
}
@media(max-width:640px){
  .lib-head,.lib-bar{padding:12px 14px}
  .lib-tabs{padding:0 14px}
  .lib-table th:nth-child(4),.lib-table td:nth-child(4){display:none}
  .lib-name{min-width:0}
  .lib-name-text small{display:none}
  .run-stats{gap:6px 14px}
  .editor{height:clamp(300px,50vh,480px)}
  .bt-cfg{padding:16px 14px}
  .run-counters{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ai-submit{flex-direction:column;align-items:stretch;gap:9px}
  .ai-result-actions{margin-left:0}
  .ai-result-actions .button{flex:1 1 auto}
}

/* ---------- 19. 访客版式与登录卡 ---------- */
/* 未登录时收起左侧工作台导航，改用顶部品牌条 + 居中登录卡（登录页参照 FMZ 的居中卡片式布局）。 */
.guest-bar{display:none}
body.guest .sidebar{display:none}
body.guest .shell{margin-left:0}
body.guest .shell>header{display:none}
body.guest .guest-bar{display:flex}
.guest-bar{
  position:sticky;top:0;z-index:50;
  align-items:center;gap:26px;height:58px;padding:0 26px;
  background:var(--blur-bg);
  backdrop-filter:blur(14px) saturate(1.4);
  -webkit-backdrop-filter:blur(14px) saturate(1.4);
  border-bottom:1px solid var(--line);
}
.guest-brand{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.guest-brand .brand-text{font-size:16px}
.guest-nav{display:flex;align-items:center;gap:22px;flex:1 1 auto;min-width:0;overflow:hidden}
.guest-nav a{font-size:13px;color:var(--text-2);white-space:nowrap;transition:color .14s}
.guest-nav a:hover{color:var(--accent)}
.guest-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.guest-login{display:inline-flex;align-items:center;height:32px;padding:0 12px;border-radius:8px;font-size:13px;color:var(--text-2);transition:color .14s,background .14s}
.guest-login:hover{color:var(--text);background:var(--surface-2)}
.guest-register{
  display:inline-flex;align-items:center;height:32px;padding:0 15px;border-radius:8px;
  background:var(--accent);color:var(--accent-fg);
  font-size:13px;font-weight:560;box-shadow:0 1px 2px rgba(15,155,134,.24);
  transition:background .14s;
}
.guest-register:hover{background:var(--accent-hover)}

.auth-wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:calc(100vh - 200px);padding:16px 0 24px}
.auth-stack{width:100%;max-width:372px}
.auth-card{
  width:100%;padding:34px 30px 26px;
  background:var(--surface);border:1px solid var(--line);
  border-radius:16px;box-shadow:var(--shadow-2);
}
.auth-kicker{text-align:center;font-size:10.5px;font-weight:650;letter-spacing:.17em;color:var(--accent)}
.auth-title{text-align:center;font-size:21px;font-weight:640;letter-spacing:-.02em;line-height:1.35;margin:9px 0 0}
.auth-sub{text-align:center;font-size:12px;line-height:1.7;color:var(--text-3);margin-top:7px}
.auth-tabs{display:flex;justify-content:center;gap:30px;margin:20px 0 0}
.auth-tab{position:relative;padding:0 0 9px;font-size:13.5px;color:var(--text-3);transition:color .14s}
.auth-tab:hover{color:var(--text-2)}
.auth-tab.active{color:var(--accent);font-weight:600}
.auth-tab.active::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;border-radius:2px;background:var(--accent)}
.auth-notice{margin:16px 0 0;padding:9px 11px;font-size:11.5px}
.auth-form{margin-top:16px}
.auth-form label{margin-top:12px}
.auth-form>input,.auth-form>.field,.auth-form .field-row{margin-top:10px}
.auth-form>input:first-child{margin-top:0}
.auth-form .field input,.auth-form .field-row input{margin-top:0}
#register-fields>*{margin-top:10px}
#register-fields>.field-row{margin-top:0}
.auth-code-row .code-button{height:36px}
.auth-form .hint{margin-top:8px}
.auth-form .button.full{margin-top:14px}
.auth-password-hint{margin-top:6px!important}
.auth-forgot{display:flex;justify-content:flex-end;margin:10px 0 0}
.auth-forgot button{font-size:12px;color:var(--text-2);transition:color .14s}
.auth-forgot button:hover{color:var(--accent)}
.auth-divider{display:flex;align-items:center;gap:11px;margin:20px 0 0;font-size:11px;color:var(--text-3)}
.auth-divider::before,.auth-divider::after{content:"";flex:1 1 auto;height:1px;background:var(--line)}
.auth-alt{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:14px;font-size:12.5px;color:var(--text-2)}
.auth-alt button{font-size:12.5px;font-weight:560;color:var(--accent)}
.auth-alt button:hover{text-decoration:underline}
.auth-legal{margin-top:18px;text-align:center;font-size:10.5px;line-height:1.7;color:var(--text-3)}

/* ---------- 20. 账户设置（登录后） ---------- */
/* 一块卡片承载「标题 + 分区 tab + 两列内容」，与登录卡的纵向节奏保持一致。 */
.acct{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-1);overflow:hidden}
.acct-top{padding:18px 24px 0;border-bottom:1px solid var(--line)}
.acct-head{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}
.acct-title{display:flex;align-items:center;gap:10px;font-size:16px;font-weight:640;letter-spacing:-.01em;margin:0}
.acct-title::before{content:"";width:3px;height:15px;border-radius:2px;background:var(--accent)}
.acct-tabs{display:flex;gap:26px;margin-top:16px;overflow-x:auto}
.acct-tab{position:relative;padding:0 0 12px;font-size:13px;color:var(--text-3);white-space:nowrap;transition:color .14s}
.acct-tab:hover{color:var(--text-2)}
.acct-tab.active{color:var(--accent);font-weight:600}
.acct-tab.active::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:var(--accent)}
.acct-body{padding:22px 24px 24px}
.acct-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:26px;align-items:start}
.acct-col{min-width:0}
.acct-section+.acct-section{margin-top:26px;padding-top:22px;border-top:1px solid var(--line)}
.acct-h{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:600;margin:0}
.acct-section-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.acct-lead{margin-top:6px}
.acct-id{display:flex;align-items:center;gap:14px;margin:16px 0 2px}
.acct-id .avatar{width:56px;height:56px;border-radius:50%;font-size:20px}
.acct-id-main{min-width:0}
.acct-id-main b{display:block;font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.acct-id-main p{margin-top:2px;font-size:12px;color:var(--text-3);overflow-wrap:anywhere}
.kv{margin:8px 0 0}
.kv>div{display:flex;align-items:baseline;justify-content:space-between;gap:18px;padding:9px 0;border-bottom:1px solid var(--line);font-size:12.5px}
.kv>div:last-child{border-bottom:0;padding-bottom:0}
.kv dt{flex:0 0 auto;font-size:12px;color:var(--text-3)}
.kv dd{margin:0;min-width:0;text-align:right;color:var(--text);overflow-wrap:anywhere}
.kv dd.ok{color:var(--ok)}
.kv dd.warn{color:var(--warn)}
.acct-level{margin-top:16px;padding:13px 14px;border:1px solid var(--line);border-radius:11px;background:var(--surface-2)}
.acct-level-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-size:12px;color:var(--text-2)}
.acct-level-head b{font-size:12.5px;font-weight:600;color:var(--text)}
.acct-level-track{height:6px;margin-top:9px;border-radius:99px;background:var(--surface-3);overflow:hidden}
.acct-level-fill{height:100%;width:0;border-radius:99px;background:var(--accent);transition:width .3s ease}
.acct-level-fill.warn{background:var(--warn)}
.acct-level-note{margin-top:9px;font-size:11.5px;line-height:1.65;color:var(--warn)}
.acct-level-note.good{color:var(--text-3)}
.acct-action{display:flex;align-items:center;gap:12px;margin-top:14px;padding:12px 13px;border:1px solid var(--line);border-radius:11px;background:var(--surface-2)}
.acct-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:34px;height:34px;border-radius:9px;background:var(--accent-soft);border:1px solid var(--accent-line);color:var(--accent)}
.acct-icon svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.acct-action-main{flex:1 1 auto;min-width:0}
.acct-action-main b{display:block;font-size:12.5px;font-weight:560}
.acct-action-main small{display:block;margin-top:1px;font-size:11px;line-height:1.55;color:var(--text-3)}
.acct-action .button{flex:0 0 auto}
.acct .channel-list{margin-top:12px}
.acct .channel-add{margin-top:12px}
@media(max-width:980px){
  .acct-grid{grid-template-columns:1fr;gap:0}
  .acct-col+.acct-col>.acct-section:first-child{margin-top:24px;padding-top:22px;border-top:1px solid var(--line)}
}
@media(max-width:720px){
  .guest-nav{display:none}
  .guest-bar{gap:12px;padding:0 16px}
  .guest-brand .brand-text{font-size:15px}
}
@media(max-width:640px){
  .auth-wrap{min-height:auto;padding:6px 0 20px}
  .auth-card{padding:26px 20px 22px;border-radius:14px}
  .acct-top,.acct-body{padding-left:16px;padding-right:16px}
  .acct-tabs{gap:20px}
}

/* 会话未定时先藏起登录/账户区，避免「登录卡闪一下再变账户页」。 */
body.auth-pending section[data-page="account"]{visibility:hidden}
/* 区间不足 60 根时把提示变橙，和下拉里的红色数字区分开 */
.cfg-note.cfg-warn{color:var(--warn)}
/* 持平的月份保持中性底色 */
.month-cell.flat b{color:var(--text-3)}

/* ---------- 21. 策略 API 文档 ---------- */
/* 左侧目录 + 右侧正文。正文用「卡片分段」而不是一整块白纸：
   平台其它页面都是卡片式，文档跟进来才不会像外挂。 */
.docs{display:grid;grid-template-columns:208px minmax(0,1fr);gap:22px;align-items:start}
.docs-rail{
  position:sticky;top:78px;
  padding:13px 11px 11px;
  background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-1);
}
.docs-rail-head{padding:0 8px;margin-bottom:7px;font-size:10px;font-weight:600;letter-spacing:.14em;color:var(--text-3)}
.docs-toc{display:flex;flex-direction:column;gap:1px}
.docs-toc a{
  display:block;padding:6px 9px;border-radius:7px;border-left:2px solid transparent;
  font-size:12.5px;line-height:1.5;color:var(--text-2);
  transition:background .14s,color .14s,border-color .14s;
}
.docs-toc a:hover{background:var(--surface-2);color:var(--text)}
.docs-toc a.active{background:var(--accent-soft);border-left-color:var(--accent);color:var(--accent);font-weight:560}
.docs-rail-note{margin-top:12px;padding:10px 8px 0;border-top:1px solid var(--line);font-size:10.5px;line-height:1.7;color:var(--text-3)}

.docs-body{display:flex;flex-direction:column;gap:18px;min-width:0}
.doc-sec{
  min-width:0;padding:22px 24px;scroll-margin-top:80px;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-1);
}
.doc-sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:5px}
.doc-sec-head h2{font-size:16px;font-weight:620;letter-spacing:-.012em;color:var(--text)}
.doc-sec-tag{font:11px/1 var(--mono);letter-spacing:.04em;color:var(--text-3)}
.doc-lead{margin-top:6px;max-width:80ch;font-size:12.5px;line-height:1.78;color:var(--text-2)}
.doc-lead + .doc-lead{margin-top:7px}
.doc-lead b,.doc-list b,.doc-steps b{color:var(--text);font-weight:600}
.doc-h3{margin:18px 0 0;font-size:12.5px;font-weight:620;color:var(--text)}

.doc-steps{margin-top:10px;counter-reset:docstep;display:flex;flex-direction:column;gap:10px}
.doc-steps li{position:relative;padding-left:27px;font-size:12.5px;line-height:1.7;color:var(--text-2)}
.doc-steps li::before{
  counter-increment:docstep;content:counter(docstep);
  position:absolute;left:0;top:1px;display:flex;align-items:center;justify-content:center;
  width:18px;height:18px;border-radius:6px;
  background:var(--accent-soft);border:1px solid var(--accent-line);color:var(--accent);
  font-size:10px;font-weight:650;
}
.doc-steps b{display:block;font-size:12.5px}
.doc-list{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.doc-list li{position:relative;padding-left:15px;font-size:12.5px;line-height:1.75;color:var(--text-2)}
.doc-list li::before{content:"";position:absolute;left:2px;top:8px;width:4px;height:4px;border-radius:50%;background:var(--accent)}

/* 表格：沿用站内 table 的骨架，但改成左对齐、可换行——文档要能读，不需要对齐小数点 */
.docs-table-wrap{max-height:none;margin-top:12px;border:1px solid var(--line);border-radius:10px}
.doc-table{white-space:normal;text-align:left;font-size:12px;font-variant-numeric:normal}
.doc-table th,.doc-table td{text-align:left;vertical-align:top;padding:9px 12px;line-height:1.65}
/* 说明列里的长标识符（rebalanceThresholdPct 这种）必须允许断行，
   否则它会把自己那一列撑宽，把别的列挤成四个字一行。
   首列不放宽：那里多是 Target(w) 这类短签名，断在中间反而更难读。 */
.doc-table td:not(:first-child) code{white-space:normal;overflow-wrap:anywhere}
.doc-table td{color:var(--text-2)}
.doc-table td:first-child{white-space:nowrap;color:var(--text)}
.doc-table tbody tr:hover td{background:var(--surface-2)}
.doc-table th{background:var(--surface)}
.docs-index-table tbody tr{cursor:pointer}
.docs-index-table tbody tr:hover td{background:var(--accent-soft);color:var(--text)}
/* 名称列是真链接：键盘 Tab 能到、可以右键复制地址，点行只是把命中面积放大。
   这里刻意不用代码块底色——整列都是色块会把表格压得很重，参考手册里也是纯文字链接。 */
.doc-link-inline{display:inline-block;border-radius:6px}
.docs-index-table .doc-link-inline code{font-size:12px;color:var(--accent-hover);background:none;border-color:transparent}
.docs-index-table .doc-link-inline:hover code{text-decoration:underline}
.doc-link-inline:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.doc-kind{
  display:inline-block;padding:1px 7px;border-radius:99px;
  border:1px solid var(--line);background:var(--surface-2);
  font-size:10px;line-height:1.55;color:var(--text-3);white-space:nowrap;
}
.doc-empty{margin-top:10px;font-size:12px;color:var(--text-3)}

/* 正文里的行内代码：比编辑器手册略大一点，长段落里也不至于看不清 */
.doc-sec code{
  padding:1px 5px;border-radius:5px;
  background:var(--surface-2);border:1px solid var(--line);
  font:11.5px/1.5 var(--mono);color:var(--text-2);
}

/* 代码块：头部一条浅色标题栏，右侧复制；正文用 pre 保留缩进 */
.doc-code{margin-top:14px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);overflow:hidden}
.doc-code-head{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:5px 8px 5px 13px;border-bottom:1px solid var(--line);
  background:var(--surface);font-size:11px;color:var(--text-3);
}
.doc-code pre{margin:0;padding:13px 15px;overflow:auto;font:12px/1.78 var(--mono);white-space:pre;tab-size:2;color:var(--text)}
.doc-code code{padding:0;border:0;background:none;font:inherit;color:inherit}
.doc-copy{
  flex:0 0 auto;padding:3px 9px;border-radius:7px;
  border:1px solid var(--line);background:var(--surface-2);
  font-size:11px;color:var(--text-2);transition:border-color .14s,color .14s;
}
.doc-copy:hover{border-color:var(--accent);color:var(--accent)}

/* 提示块：默认是「补充说明」，.warn 用于「这里会咬人」 */
.doc-note{
  margin-top:14px;padding:11px 14px;border-radius:10px;
  background:var(--accent-soft);border:1px solid var(--accent-line);
  font-size:12.5px;line-height:1.78;color:var(--text-2);
}
.doc-note b{color:var(--text);font-weight:620}
.doc-note .link-quiet{display:inline-block;margin-left:2px}
.doc-note.warn{background:var(--warn-soft);border-color:var(--warn-line);color:var(--text-2)}
.doc-note.warn b{color:var(--warn)}
.doc-note code{background:var(--surface);border-color:var(--line);color:var(--text-2)}

/* 速查表的过滤框 */
.docs-filter{
  display:flex;align-items:center;gap:9px;margin-top:12px;padding:0 11px;height:36px;
  border:1px solid var(--line);border-radius:9px;background:var(--field);
  transition:border-color .14s,box-shadow .14s;
}
.docs-filter:focus-within{border-color:var(--accent);box-shadow:var(--ring)}
.docs-filter svg{width:15px;height:15px;flex:0 0 auto;fill:none;stroke:var(--text-3);stroke-width:1.8;stroke-linecap:round}
.docs-filter input{flex:1 1 auto;min-width:0;border:0;background:transparent;outline:none;font-size:12.5px}
.docs-filter-clear{flex:0 0 auto;font-size:11px;color:var(--accent)}

@media(max-width:1180px){
  .docs{grid-template-columns:178px minmax(0,1fr);gap:16px}
  .doc-sec{padding:20px 20px}
}
@media(max-width:980px){
  .docs{grid-template-columns:1fr;gap:14px}
  /* 窄屏目录变成一排横向胶囊，滚动时不再占住半屏 */
  .docs-rail{position:static;display:flex;flex-wrap:wrap;align-items:center;gap:0;padding:9px}
  .docs-rail-head,.docs-rail-note{display:none}
  .docs-toc{flex-direction:row;flex-wrap:wrap;gap:5px}
  .docs-toc a{padding:4px 10px;border:1px solid var(--line);border-radius:99px;border-left-width:1px;font-size:12px}
  .docs-toc a.active{border-color:var(--accent-line)}
}
@media(max-width:640px){
  .doc-sec{padding:16px 15px}
  .doc-sec-head h2{font-size:15px}
  .doc-lead,.doc-steps li,.doc-list li,.doc-note{font-size:12px}
  .doc-code pre{font-size:11.5px;padding:12px 13px}
  /* 窄屏放开首列不换行，否则「Open High Low Close」会把表格撑出横向滚动 */
  .doc-table td:first-child{white-space:normal}
  .doc-table th,.doc-table td{padding:8px 10px}
  /* 速查表在窄屏藏掉「类型」列：两列刚好读得下，也就不需要横向滚动了 */
  .docs-index-table th:nth-child(2),.docs-index-table td:nth-child(2){display:none}
}

/* ---------- 22. 移动端：汉堡 + 抽屉 + 登录页 ---------- */
/* 汉堡按钮、遮罩、抽屉页脚默认隐藏，只有手机端才露出来。 */
.burger{
  display:none;flex:0 0 auto;
  width:40px;height:40px;border-radius:10px;
  align-items:center;justify-content:center;
  border:1px solid var(--line);background:var(--surface);color:var(--text-2);
  transition:background .14s,color .14s,border-color .14s;
}
.burger svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round}
.burger:hover{background:var(--surface-2);color:var(--text)}
.burger:focus-visible{outline:none;box-shadow:var(--ring)}
.drawer-scrim{display:none}
.guest-nav-foot{display:none}

@media(max-width:768px){
  .burger{display:inline-flex}

  /* 已登录：侧栏收纳成抽屉（推翻 ≤980 的横向化，恢复纵向分组） */
  .sidebar{
    position:fixed;inset:0 auto 0 0;z-index:90;
    width:min(84vw,300px);
    flex-direction:column;flex-wrap:nowrap;align-items:stretch;
    padding:20px 14px 16px;border-right:1px solid var(--line);border-bottom:0;
    box-shadow:0 0 44px rgba(0,0,0,.28);
    transform:translateX(-103%);visibility:hidden;
    transition:transform .24s cubic-bezier(.2,.7,.3,1),visibility 0s .24s;
  }
  body.drawer-open .sidebar{transform:translateX(0);visibility:visible;transition:transform .24s cubic-bezier(.2,.7,.3,1)}
  .sidebar .brand{padding:0 8px;margin-bottom:2px}
  .sidebar nav{flex-direction:column;gap:0;width:100%;margin:20px 0 0;overflow-x:hidden;overflow-y:auto;padding-bottom:0;min-height:0}
  .sidebar .nav-group{display:block;margin-bottom:16px}
  .sidebar .nav-label{display:block;padding:0 10px;margin-bottom:5px;font-size:10px;font-weight:600;letter-spacing:.14em;color:var(--text-3)}
  .sidebar .sidebar-foot{display:block;margin-top:auto;padding:12px 10px 0;border-top:1px solid var(--line)}
  .sidebar nav a{padding:9px 10px;font-size:14px;white-space:normal}
  .sidebar nav a svg{width:17px;height:17px}

  /* 顶栏：汉堡在左、压缩高度；面包屑让出位置 */
  header{height:56px;padding:0 12px;gap:10px}
  .crumb{flex:1 1 auto;min-width:0}
  .status-chip{display:none}

  /* 访客：顶栏只留 汉堡+品牌+主题；导航与登录/注册进抽屉。
     backdrop-filter 会为 fixed 后代建立包含块，抽屉必须去掉它才能贴视口。 */
  .guest-bar{
    height:56px;padding:0 12px;gap:12px;
    background:var(--surface);
    backdrop-filter:none;-webkit-backdrop-filter:none;
  }
  .guest-brand .brand-text{font-size:16px}
  .guest-actions .guest-login,.guest-actions .guest-register{display:none}
  .guest-nav{
    display:flex;position:fixed;inset:0 auto 0 0;z-index:90;
    width:min(84vw,300px);
    flex-direction:column;align-items:stretch;gap:2px;
    overflow-y:auto;overflow-x:hidden;padding:22px 14px;
    background:var(--surface);border-right:1px solid var(--line);
    box-shadow:0 0 44px rgba(0,0,0,.28);
    transform:translateX(-103%);visibility:hidden;
    transition:transform .24s cubic-bezier(.2,.7,.3,1),visibility 0s .24s;
  }
  body.drawer-open .guest-nav{transform:translateX(0);visibility:visible;transition:transform .24s cubic-bezier(.2,.7,.3,1)}
  .guest-nav a{display:flex;align-items:center;padding:13px 12px;border-radius:10px;font-size:15px;color:var(--text-2);transition:background .14s,color .14s}
  .guest-nav a:hover{background:var(--surface-2);color:var(--text)}
  .guest-nav-foot{margin-top:auto;padding-top:16px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:10px}
  .guest-nav-foot a{display:flex;align-items:center;justify-content:center;height:46px;padding:0 16px;border-radius:11px;font-size:15px}
  .guest-nav-foot .guest-login{border:1px solid var(--line-strong);color:var(--text)}
  .guest-nav-foot .guest-register{background:var(--accent);color:var(--accent-fg);font-weight:600}

  /* 遮罩：抽屉下面那层半透明底，点它收起 */
  .drawer-scrim{display:block;position:fixed;inset:0;z-index:85;background:rgba(16,24,40,.45);opacity:0;pointer-events:none;transition:opacity .2s}
  body.drawer-open .drawer-scrim{opacity:1;pointer-events:auto}
  body.drawer-open{overflow:hidden}

  /* 登录/注册：全宽卡 + 加大输入框（16px 规避 iOS 聚焦自动缩放） */
  .auth-wrap{min-height:auto;justify-content:flex-start;padding:20px 0 40px}
  .auth-stack{max-width:100%}
  .auth-card{padding:26px 22px 24px;border-radius:16px}
  .auth-title{font-size:22px}
  .auth-tabs{gap:40px}
  .auth-tab{font-size:15px}
  input,select{height:44px;font-size:16px;border-radius:11px;padding:0 13px}
  .field input{padding-right:46px}
  .reveal{width:40px;border-radius:9px}
  .reveal svg{width:19px;height:19px}
  .button{height:44px;font-size:15px;border-radius:11px}
  .button.full{height:46px}
  .button.small{height:34px;font-size:13px;border-radius:8px}
  .icon-button{width:40px;height:40px;border-radius:10px}
  .auth-code-row{gap:8px}
  .auth-code-row .code-button{height:44px;flex:0 0 auto}
}

/* ---------- 23. 移动端逐页版式 ---------- */
/* 断点 768：与第 22 节的抽屉共用同一条视口边界。
   原则：只做「多列 → 单列」「表格 → 卡片」「主按钮吸底」「字号触控放大」四件事，
   组件内部的语义（涨红跌绿、状态点、分区 tab）一个都不改。 */
@media(max-width:768px){
  /* --- 23a 通用骨架 --------------------------------------------------- */
  /* 顶栏 56 + 页面 14 边距；正文默认 14px（设计规范 28/2），标题升到 16/21 */
  input[type="checkbox"],input[type="radio"]{width:auto;height:auto;flex:0 0 auto}
  main{padding:16px 14px calc(28px + env(safe-area-inset-bottom))}
  .page-title{gap:12px;margin-bottom:18px}
  h1{font-size:21px;line-height:1.3;margin:6px 0 5px}
  .page-title p{font-size:13px;line-height:1.6}
  .eyebrow{font-size:10px}
  .page-actions{gap:8px}
  .panel{padding:16px;border-radius:14px;margin-bottom:14px}
  .panel-head{gap:10px;margin-bottom:10px}
  .panel-head h2{font-size:16px;gap:7px}
  .panel-note,.hint{font-size:12px;line-height:1.65}
  .notice{padding:12px 14px;font-size:13px;line-height:1.65;border-radius:12px}
  .pill{font-size:11.5px;padding:3px 10px}
  .link-quiet{font-size:13px}
  /* 行列表：整行最小 48px，右侧按钮不再挤成一条细线 */
  .rows .row{padding:12px 4px;gap:10px;min-height:48px}
  .rows .row+.row{border-top:1px solid var(--line)}
  .row-content>span{font-size:14px;line-height:1.5}
  .row small{font-size:11.5px}
  .row>.button{height:34px}
  /* 表格一律横向滚动、表头与首列钉住，避免数字被压成两行 */
  .table-scroll{border-radius:12px;max-height:none}
  table{font-size:12.5px}
  th{padding:9px 10px;font-size:11px}
  td{padding:9px 10px}
  .table-scroll table{min-width:100%}
  /* 表单：标签在上，输入框 44px / 16px 已在 22 节统一，这里只调间距 */
  label{font-size:12.5px;margin-top:14px;gap:7px}
  .form-row{gap:10px}
  .form-row>*{flex:1 1 100%}
  .form-row>.button{flex:1 1 100%}
  .button.full{margin-top:12px}
  .chip{height:32px;padding:0 13px;font-size:12.5px;flex:0 0 auto}
  /* 主提交按钮吸底：面板内部滚动时始终可点，底部留出 iPhone 安全区 */
  #run-backtest,#run-evolution,#code-submit{
    position:sticky;bottom:calc(10px + env(safe-area-inset-bottom));z-index:6;
    box-shadow:0 8px 24px rgba(16,24,40,.18),0 1px 2px rgba(16,24,40,.12);
  }

  /* --- 23b 01 总览 --------------------------------------------------- */
  .summary-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:14px}
  .stat{padding:14px 13px;border-radius:12px}
  .stat span{font-size:12px}
  .stat strong{font-size:26px;margin:4px 0 2px}
  .stat small{font-size:11px;line-height:1.5}
  .journey ol{grid-template-columns:1fr;gap:14px}
  .journey b{font-size:14px}
  .journey span{font-size:12.5px}
  .two-col{gap:14px}

  /* --- 23c 02 策略实验室 ---------------------------------------------- */
  /* 单列后按「编辑 → 回测结果 → AI 辅助 → 任务记录」重排：
     .stack 用 display:contents 摊平，子卡直接参与外层排序。
     排序只对策略实验室生效——策略进化页的右栈要保持原本的阅读顺序。 */
  .lab-grid{display:flex;flex-direction:column;gap:14px}
  .lab-grid>.stack{display:contents}
  [data-page="strategy"] .lab-grid>.panel{order:1}
  [data-page="strategy"] .lab-grid>.stack>.panel:nth-child(1){order:3}   /* AI 辅助编辑 */
  [data-page="strategy"] .lab-grid>.stack>.panel:nth-child(2){order:2}   /* 回测结果 */
  [data-page="strategy"] .lab-grid>.stack>.panel:nth-child(3){order:4}   /* 任务记录 */
  .quick-fields{grid-template-columns:1fr;gap:0}
  .quick-fields label:first-child{grid-column:auto}
  .panel-head select{max-width:56%;height:34px;font-size:12.5px}
  .metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .metric{padding:10px 11px}
  .metric span{font-size:11px}
  .metric b{font-size:17px}
  #equity-chart{height:auto}

  /* --- 23d 03 策略库（表 → 卡）---------------------------------------- */
  .lib-head{padding:14px;gap:10px}
  .lib-title{font-size:17px}
  .lib-tools{gap:7px;width:100%}
  .lib-tools .button{flex:1 1 auto;justify-content:center}
  .lib-tabs{padding:0 14px;gap:18px}
  .lib-bar{padding:10px 14px;gap:8px;justify-content:stretch}
  .lib-bar select{width:100%;height:40px;font-size:14px;min-width:0}
  .lib-search{width:100%}
  .lib-search input{height:40px;font-size:14px;padding-left:31px}
  .lib-scroll{overflow:visible}
  .lib-table{display:block;font-size:13px}
  .lib-table thead{display:none}
  .lib-table tbody{display:flex;flex-direction:column}
  .lib-table tbody tr{
    display:grid;grid-template-columns:minmax(0,1fr) auto;
    gap:3px 10px;padding:13px 14px;border-bottom:1px solid var(--line);
  }
  .lib-table tbody tr:last-child{border-bottom:0}
  .lib-table tbody tr:hover{background:var(--surface-2)}
  .lib-table td{padding:0;border:0;background:none!important}
  .lib-table td.lib-name{grid-column:1/-1;grid-row:1;align-items:flex-start;gap:11px;padding-bottom:4px}
  /* 640 以下把「创建日期」「回测次数」两列藏掉了；卡片形态下次数有用，
     位置也腾得出来，所以只把次数放回来，创建日期仍然不显示。
     时间格里是「相对时间 + 具体时刻」两行，必须用 flex 纵向排，
     否则 inline 的 span 会和 block 的 small 叠在同一行上。 */
  .lib-table td.lib-time{display:none}
  .lib-table td.lib-time:nth-of-type(2){
    display:flex;flex-direction:column;align-items:flex-start;gap:1px;
    grid-column:1;grid-row:2;font-size:12px;color:var(--text-3);
  }
  .lib-table td.lib-runs{display:block;grid-column:2;grid-row:2;justify-self:end;font-size:12px}
  .lib-table td.lib-actions{grid-column:1/-1;grid-row:3;display:flex;justify-content:flex-end;gap:8px;margin-top:7px}
  .lib-name{min-width:0}
  .lib-name-text b{font-size:15px;white-space:normal}
  .lib-name-text small{display:block;font-size:12px;max-width:none;margin-top:2px;white-space:normal}
  .lib-icon{width:32px;height:32px;border-radius:9px}
  .lib-icon svg{width:16px;height:16px}
  .lib-act{
    display:inline-flex;align-items:center;justify-content:center;
    height:34px;padding:0 14px;border-radius:9px;
    border:1px solid var(--line);background:var(--surface);color:var(--text-2);font-size:13px;
  }
  .lib-act+.lib-act{margin-left:0}
  .lib-act:hover{text-decoration:none;border-color:var(--line-strong);color:var(--text)}
  .lib-act.danger{border-color:var(--danger-line);color:var(--danger)}
  .lib-empty{padding:34px 18px;font-size:13px}
  .quota-bar{padding:14px}

  /* --- 23e 03b 策略编辑器 -------------------------------------------- */
  .ed-top{gap:10px;margin-bottom:10px}
  .ed-back{font-size:13px;padding:6px 0}
  .ed-views{gap:18px}
  .ed-view{font-size:14px}
  /* 工具条拆两行：名称 + 状态；三个动作按钮平分一行 */
  .ed-bar{gap:8px;padding:10px}
  .ed-lang{display:none}
  .ed-name{flex:1 1 60%;max-width:none;height:40px;font-size:14px}
  .ed-bar .pill{flex:0 0 auto}
  .ed-actions{width:100%;margin-left:0;gap:8px}
  .ed-actions .button{flex:1 1 0;justify-content:center}
  /* 六个分区改成横滑胶囊，代码分区固定在最左 */
  .ed-tabbar{gap:8px;padding:10px 12px;overflow-x:auto;scrollbar-width:none}
  .ed-tabbar::-webkit-scrollbar{display:none}
  .ed-pane-tab{
    display:inline-flex;align-items:center;flex:0 0 auto;
    height:34px;padding:0 14px;border-radius:99px;
    border:1px solid var(--line);background:var(--surface);font-size:13px;
  }
  .ed-pane-tab.active{background:var(--accent-soft);border-color:var(--accent-line)}
  .ed-pane-tab.active::after{display:none}
  .ed-pane{padding:14px}
  .ed-pane#pane-code{padding:0}
  /* 编辑器：16px 等宽避免 iOS 聚焦缩放；两层字号/行高必须完全一致，否则高亮会错行 */
  .editor{grid-template-columns:36px minmax(0,1fr);height:min(62vh,520px)}
  .editor-gutter{padding:12px 6px 24px 0;font-size:12px;line-height:26px}
  .editor-highlight,.editor-body textarea{font-size:16px;line-height:26px;padding:12px 12px}
  .ed-status{gap:10px;padding:7px 12px;font-size:11px}
  .ed-field textarea{font:15px/1.7 var(--mono)}
  .ai-top{gap:10px}
  .ai-intro b{font-size:14px}
  .ai-chips{gap:8px;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  .ai-chips::-webkit-scrollbar{display:none}
  .ai-chip{flex:0 0 auto;height:34px;font-size:13px}
  .ai-submit{flex-direction:column;align-items:stretch;gap:10px}
  .ai-submit .button{width:100%}
  .ai-result-head{gap:8px}
  .ai-result-actions{margin-left:0;width:100%}
  .ai-result-actions .button{flex:1 1 auto}
  .manual-grid{grid-template-columns:1fr;gap:18px}
  .manual-grid dt{font-size:12.5px}
  .manual-grid dd{font-size:12.5px}

  /* --- 23f 04 回测平台 ------------------------------------------------ */
  /* 配置单列；三个常量项（操作/平台/计价货币）并排成一行只读说明 */
  .bt-cfg{padding:16px 14px 14px}
  .cfg-grid{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end}
  .cfg-grid>.cfg-item{flex:1 1 100%}
  #bt-params>.cfg-item,#bt-more .cfg-grid>.cfg-item{flex:1 1 calc(50% - 6px)}
  .cfg-grid>.cfg-static{
    flex:1 1 auto;flex-direction:row;align-items:baseline;gap:6px;
    font-size:12px;color:var(--text-3);white-space:nowrap;
  }
  .cfg-grid>.cfg-static b{display:inline;padding:0;font-size:12.5px;color:var(--text-2);overflow:visible}
  .cfg-grid-date{gap:10px}
  .cfg-grid-date .cfg-item{flex:1 1 calc(50% - 5px)}
  .cfg-note{flex:1 1 100%;padding-bottom:0;font-size:12px}
  .cfg-item{font-size:12.5px}
  /* 数据源分段控件：桌面只靠 .seg 承载，窄屏补上轨道与选中态，点起来才像开关 */
  .seg{
    display:flex;align-items:center;gap:4px;height:44px;padding:4px;
    border:1px solid var(--line-strong);border-radius:12px;background:var(--field);
  }
  .seg-item{
    flex:1 1 auto;height:36px;padding:0 10px;border-radius:9px;
    font-size:13.5px;color:var(--text-2);white-space:nowrap;
    transition:background .14s,color .14s;
  }
  .seg-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600;box-shadow:inset 0 0 0 1px var(--accent-line)}
  .cfg-block{margin-top:14px;padding-top:12px}
  .cfg-foot{
    position:sticky;bottom:0;z-index:6;
    margin:16px -2px -6px;padding:12px 2px calc(10px + env(safe-area-inset-bottom));
    background:var(--surface);box-shadow:0 -6px 18px rgba(16,24,40,.07);
  }
  .cfg-foot .button{width:100%;height:46px;font-size:15px}
  .cfg-foot .hint{display:none}
  .head-actions{width:100%;justify-content:flex-start;gap:8px;margin-top:6px}
  .head-actions .button{flex:0 0 auto}
  /* 结果区：七列资产表 / 平仓明细横滚，首列钉住 */
  .bt-result{gap:14px;margin-bottom:14px}
  .run-head h2,.run-fold details>summary{font-size:16px}
  .run-counters{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:12px}
  .run-assets{max-height:none}
  .run-assets table{min-width:560px}
  .run-assets th:first-child,.run-assets td:first-child{
    position:sticky;left:0;z-index:2;background:var(--surface);
    box-shadow:1px 0 0 var(--line);
  }
  .run-assets tbody tr:hover td:first-child{background:var(--surface-2)}
  .run-zoom{gap:6px}
  .run-zoom-item{padding:6px 11px;font-size:12.5px}
  .run-stats{gap:8px 18px}
  .log-lines,.code-snapshot{max-height:340px;font-size:11.5px}
  .monthly-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .plot-grid{grid-template-columns:1fr}
  #bt-runs .row{gap:8px}
  #bt-runs .bt-run-actions{width:100%;justify-content:flex-end;margin-top:8px;gap:8px}

  /* --- 23g 05 策略 API ------------------------------------------------ */
  /* 左侧目录 → 顶栏下方的横滑胶囊条；正文表格 → 卡片 */
  .docs{gap:14px}
  /* 目录条是 grid 项：min-width:auto 会让 12 个胶囊的 min-content 撑开整列，
     页面因此横向溢出（手机上表现为整页被缩小）。两处都收到 0。 */
  .docs-rail{
    position:sticky;top:56px;z-index:8;min-width:0;
    padding:9px 0;border:0;border-radius:0;background:var(--bg);box-shadow:none;
  }
  .docs-toc{
    flex-direction:row;flex-wrap:nowrap;gap:7px;min-width:0;
    overflow-x:auto;padding:2px 0;scrollbar-width:none;
  }
  .docs-toc::-webkit-scrollbar{display:none}
  .docs-toc a{
    flex:0 0 auto;display:inline-flex;align-items:center;
    height:36px;padding:0 14px;border-radius:99px;
    border:1px solid var(--line);background:var(--surface);font-size:13px;
  }
  .docs-toc a.active{border-color:var(--accent-line);background:var(--accent-soft)}
  .doc-sec{padding:16px 14px;scroll-margin-top:118px}
  .doc-sec-head h2{font-size:17px}
  .doc-sec-tag{font-size:11px}
  .doc-lead{font-size:13px;line-height:1.72}
  .doc-h3{font-size:13.5px;margin-top:16px}
  .doc-steps li,.doc-list li{font-size:13px;padding-left:30px}
  .doc-steps li::before{width:20px;height:20px;font-size:10.5px}
  .doc-steps b{font-size:13px}
  .doc-note{font-size:13px;padding:12px 13px;line-height:1.7}
  .doc-sec code{font-size:12px}
  .docs-filter{height:44px;margin-top:10px}
  .docs-filter input{font-size:15px}
  .docs-table-wrap{margin-top:10px;border:0;border-radius:0;background:none;overflow:visible}
  .doc-table{display:block;font-size:13px;white-space:normal}
  .doc-table thead{display:none}
  .doc-table tbody{display:block}
  .doc-table tbody tr{
    display:block;padding:12px 0;border-bottom:1px solid var(--line);cursor:default;
  }
  .doc-table tbody tr:first-child{padding-top:2px}
  .doc-table tbody tr:last-child{border-bottom:0;padding-bottom:0}
  .doc-table td,.doc-table th{display:block;padding:0;border:0;text-align:left;white-space:normal}
  .doc-table td:first-child{padding-bottom:4px;font-weight:600;color:var(--text)}
  .doc-table td:not(:first-child){font-size:12.5px;line-height:1.65;color:var(--text-2)}
  .doc-table tbody tr:hover td,.docs-index-table tbody tr:hover td{background:none;color:inherit}
  .docs-index-table tbody tr:active td{background:var(--accent-soft)}
  /* 速查表：名称 + 类型徽标同一行，说明在下一行 */
  .docs-index-table td:first-child{display:inline-block;padding-bottom:0;vertical-align:middle}
  .docs-index-table td:nth-child(2){display:inline-block;margin-left:7px;vertical-align:middle}
  .docs-index-table td:nth-child(3){padding-top:5px}
  .doc-code pre{font-size:13px;padding:12px 13px}
  .doc-code-head{font-size:12px;padding:6px 8px 6px 12px}
  .doc-copy{height:32px;padding:0 12px;font-size:12.5px}

  /* --- 23h 06 全球风险（4 列卡 → 单列行情列表）------------------------ */
  .market-grid{grid-template-columns:1fr;gap:8px}
  .market{
    display:grid;grid-template-columns:minmax(0,1fr) auto;
    gap:1px 12px;padding:12px 13px;
  }
  .market h3{grid-column:1;grid-row:1;font-size:13px;gap:6px}
  .market strong{
    grid-column:2;grid-row:1/span 2;align-self:center;justify-self:end;text-align:right;
    margin:0;font-size:20px;letter-spacing:-.02em;
  }
  .market small{grid-column:1;font-size:11px;line-height:1.55;white-space:normal}
  .market small:nth-of-type(3){color:var(--text-3)}
  .three-col{grid-template-columns:1fr;gap:16px}
  .three-col h3{font-size:14px;margin:8px 0 3px}
  .three-col p{font-size:12.5px}
  .step{width:28px;height:28px;border-radius:9px;font-size:12px}

  /* --- 23i 07 预警与通知 --------------------------------------------- */
  .feed-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .feed{padding:11px 12px}
  .feed b{font-size:12.5px}
  .feed small{font-size:11px;white-space:normal}
  .news-filter{flex-wrap:nowrap;overflow-x:auto;padding-bottom:2px;scrollbar-width:none}
  .news-filter::-webkit-scrollbar{display:none}
  .news-list{max-height:none;overflow:visible;padding-right:0}
  .news-item{padding:12px 4px;gap:10px}
  .news-main a{font-size:14px;line-height:1.5}
  .news-main small{font-size:11.5px}
  .badge{font-size:11px}
  #rule-form .form-row>.form-row{gap:10px}
  #rules .row>.button,#alerts .row>.button,#mail-log .row>.button{height:34px}
  .checkbox{font-size:12.5px;line-height:1.55;gap:10px}

  /* --- 23j 08 策略进化 ----------------------------------------------- */
  /* 参数行拆成「参数名全宽 + 最小/最大/步长三格 + 移除」 */
  .range-rows{gap:10px}
  .range-row{
    grid-template-columns:repeat(3,minmax(0,1fr));
    gap:8px;padding:12px;
  }
  .range-row>select{grid-column:1/-1;height:40px;font-size:14px}
  .range-row label{font-size:11.5px}
  .range-row input,.range-row select{height:38px;font-size:13px}
  .range-row>.button{grid-column:1/-1;height:36px;justify-self:stretch}
  /* 六个数值字段两列排（搜索方式下拉独占一行），别把表单拉成十行 */
  [data-page="evolution"] .form-row>*{flex:1 1 calc(50% - 5px)}
  [data-page="evolution"] .form-row>label:has(select){flex:1 1 100%}
  [data-page="evolution"] .form-row>.button{flex:1 1 100%}
  .heat-grid{overflow-x:auto;grid-auto-flow:row}
  .heat-cell{min-width:40px;min-height:40px;font-size:11.5px}
  .verdict{gap:8px}
  .grade{min-width:38px;height:38px;font-size:16px}

  /* --- 23k 09 账户设置 ----------------------------------------------- */
  .acct{border-radius:14px}
  .acct-top{padding:16px 14px 0}
  .acct-title{font-size:17px}
  .acct-tabs{
    gap:8px;margin-top:14px;padding-bottom:14px;
    overflow-x:auto;scrollbar-width:none;
  }
  .acct-tabs::-webkit-scrollbar{display:none}
  .acct-tab{
    position:static;display:inline-flex;align-items:center;flex:0 0 auto;
    height:36px;padding:0 15px;border-radius:99px;
    border:1px solid var(--line);background:var(--surface);
    font-size:13.5px;color:var(--text-2);
  }
  .acct-tab.active{background:var(--accent-soft);border-color:var(--accent-line)}
  .acct-tab.active::after{display:none}
  .acct-body{padding:16px 14px 18px}
  .acct-grid{grid-template-columns:1fr;gap:0}
  .acct-h{font-size:14.5px}
  .acct-id{gap:12px}
  .acct-id .avatar{width:48px;height:48px;font-size:18px}
  .acct-id-main b{font-size:16px}
  .kv>div{font-size:13px;gap:12px;padding:10px 0}
  .kv dt{font-size:12.5px}
  .acct-action{padding:12px}
  .acct-action-main b{font-size:13.5px}
  .acct-action-main small{font-size:11.5px}
  .acct-action .button{flex:0 0 auto;height:36px}
  .acct-level{padding:12px 13px}
  .channel-item{flex-wrap:wrap;gap:8px;padding:12px}
  .channel-item .channel-actions{width:100%;justify-content:flex-end}
  .channel-add select,.channel-add input{min-width:0;width:100%;height:44px;font-size:16px}
  .channel-wechat{grid-template-columns:1fr}
  .field-row{flex-wrap:wrap;gap:8px}
  .field-row .code-button{width:100%;height:44px}
  .strength{font-size:11.5px}
  .profile-id h2{font-size:16px}
  .profile-head{gap:12px}
}
