/* =====================================================================
   exec-center.css — 执行中心（价差监控 → 一键下单）专用样式
   依赖：style.css + perpdex.css 的 :root 变量（纯黑底 / 薄荷强调 / 12px 圆角）
   本文件只做「执行中心」独有的排版与交互件，颜色尺寸全部取主题变量。
   ===================================================================== */

/* ---------- 页面容器 ---------- */
.ex-wrap{max-width:var(--container); margin:0 auto; padding:0 22px 72px}
/* 【20261001b 回退】左侧选择栏方案已按用户指令移除：门禁升级墙/执行中心
   就是一整个独立页面，导航走顶栏。侧栏相关规则已全部删除，勿再加回。 */

/* ---------- 嵌入模式（被信号台 iframe ?embed=1 加载）----------
   外壳已经有一整套导航，本页必须把自己的顶栏与语言条藏掉，
   否则会出现「两套导航」（顶栏各一套）。exec.html 内联脚本另有一道 JS 兜底。 */
body.embed #topbar{display:none !important}
body.embed #langbar{display:none !important}
body.embed .ex-wrap{padding-top:10px}

/* ---------- 页头 ---------- */
/* 页头：左=标题区，右=「口径说明」入口（20260922⑤ 用户要求放到页面右上角） */
.ex-head{padding:24px 0 14px; display:flex; align-items:flex-start; justify-content:space-between; gap:16px}
.ex-head-main{flex:1; min-width:0}
.ex-head-side{flex:none; padding-top:6px}
.ex-title{font-family:var(--display); font-size:26px; font-weight:600; letter-spacing:.01em; margin:0; display:flex; align-items:center; gap:10px}
/* 【20260922⑤】.ex-sub（页头副标题）连同三语词条一起删掉了 —— 用户要求页面上不留那句
   「把价差监控变成可执行的订单：…逐条过 G1–G7 闸门…」，内容收进口径弹窗的 .cintro。 */

/* ---------- 状态条 ---------- */
.ex-status{display:flex; align-items:stretch; gap:1px; background:var(--line);
           border:1px solid var(--line); border-radius:var(--radius); overflow:hidden; margin-bottom:16px}
.ex-st{background:linear-gradient(180deg, var(--panel2, #121b27), var(--panel, #0d141e)); padding:11px 15px; flex:1 1 auto; min-width:0}
.ex-st .k{font-size:10px; letter-spacing:.07em; text-transform:uppercase; color:var(--txt-3); white-space:nowrap}
.ex-st .v{font-family:var(--display); font-size:16px; font-weight:600; margin-top:5px; line-height:1.15;
          display:flex; align-items:center; gap:7px; white-space:nowrap}
.ex-st .d{font-size:11px; color:var(--txt-2); margin-top:3px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.ex-st .v .dot{width:7px; height:7px; border-radius:50%; flex:none}
.ex-st .v .dot.ok{background:var(--ok); box-shadow:0 0 8px var(--ok)}
.ex-st .v .dot.warn{background:var(--orange); box-shadow:0 0 8px var(--orange)}
.ex-st .v .dot.bad{background:var(--down); box-shadow:0 0 8px var(--down)}

/* ---------- 页签 ---------- */
.ex-tabs{display:flex; gap:2px; border-bottom:1px solid var(--line); margin-bottom:0}
.ex-tabs button{background:transparent; border:0; border-bottom:2px solid transparent; color:var(--txt-2);
                font-family:inherit; font-size:13px; padding:9px 13px; cursor:pointer; white-space:nowrap}
.ex-tabs button:hover{color:var(--txt)}
.ex-tabs button.on{color:var(--txt); border-bottom-color:var(--accent)}
.ex-tabs .cnt{color:var(--txt-3); font-size:11px; margin-left:2px}

/* ---------- 工具栏 ---------- */
.ex-bar{display:flex; align-items:center; flex-wrap:wrap; gap:9px; padding:11px 0;
        border-bottom:1px solid var(--line); margin-bottom:14px}
.ex-bar .lbl{color:var(--txt-2); font-size:12px}
.ex-bar .sp{flex:1; min-width:6px}
.ex-in,.ex-btn{background:var(--bg-secondary); border:1px solid var(--line); border-radius:var(--radius-ctl,r8);
               color:var(--txt); font-family:inherit; font-size:13px; padding:0 10px; height:32px}
.ex-in:focus{outline:none; border-color:var(--accent-line); box-shadow:0 0 0 3px var(--accent-weak)}
.ex-in::placeholder{color:var(--txt-3)}
.ex-in.num{width:110px}
select.ex-in{cursor:pointer}
.ex-btn{cursor:pointer; color:var(--txt-2); display:inline-flex; align-items:center; gap:6px}
.ex-btn:hover{color:var(--txt); border-color:var(--accent-line)}
.ex-btn.pri{color:var(--accent); border-color:var(--accent-line); background:var(--accent-weak); font-weight:600}
.ex-btn:disabled{opacity:.45; cursor:not-allowed}
.ex-btn.sm{height:26px; font-size:12px; padding:0 8px}
.ex-seg{display:inline-flex; border:1px solid var(--line); border-radius:var(--radius-ctl,r8); overflow:hidden}
.ex-seg button{background:transparent; border:0; color:var(--txt-2); font-family:inherit; font-size:12px;
               padding:0 10px; height:32px; cursor:pointer}
.ex-seg button + button{border-left:1px solid var(--line)}
.ex-seg button.on{background:var(--accent-weak); color:var(--accent)}
.ex-seg button:hover:not(.on){color:var(--txt)}
.ex-ts{font-size:11px; color:var(--txt-3)}
.ex-note{font-size:12px; color:var(--txt-2); line-height:1.7; padding:9px 12px; margin-bottom:12px;
         border:1px solid var(--line); border-left:2px solid var(--orange);
         border-radius:var(--radius-ctl,r8); background:var(--panel)}

/* ---------- 机会卡片流 ---------- */
.ex-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(408px, 1fr)); gap:12px}
.ex-card{border:1px solid var(--line); border-radius:var(--radius); background:var(--panel);
         overflow:hidden; display:flex; flex-direction:column; transition:border-color .15s}
.ex-card:hover{border-color:var(--hair-strong)}
.ex-card.g-pass{border-left:2px solid var(--ok)}
.ex-card.g-warn{border-left:2px solid var(--orange)}
.ex-card.g-block{border-left:2px solid var(--line); opacity:.72}
.ex-c-head{display:flex; align-items:center; gap:8px; padding:11px 13px 9px}
.ex-sym{font-family:var(--display); font-size:16px; font-weight:600; white-space:nowrap}
.ex-base{color:var(--txt-3); font-size:11px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:160px}
.ex-c-head .sp{flex:1}
.ex-c-net{text-align:right; line-height:1.25}
.ex-c-net .v{font-family:var(--display); font-size:18px; font-weight:600}
.ex-c-net .k{font-size:10px; color:var(--txt-3); letter-spacing:.05em}

.ex-combo{display:flex; align-items:center; gap:5px; padding:0 13px 9px; font-size:13px; color:var(--txt-2);
          flex-wrap:wrap}
.ex-combo .lg{color:var(--up)}
.ex-combo .sh{color:var(--down)}
.ex-combo .arw{color:var(--txt-3)}

.ex-c-body{padding:0 13px 11px; display:flex; flex-direction:column; gap:8px}
.ex-row{display:flex; align-items:baseline; justify-content:space-between; gap:10px; font-size:13px}   /* 【20260928】12.5→13，卡内行字向信号台 13.5px 靠拢 */
.ex-row .k{color:var(--txt-2); white-space:nowrap}
.ex-row .v{font-family:var(--mono); font-variant-numeric:tabular-nums; text-align:right}
.ex-row .v.sm{font-size:12px; color:var(--txt-2)}
.ex-split{display:flex; gap:1px; background:var(--line); border:1px solid var(--line);
          border-radius:var(--radius-ctl); overflow:hidden}
.ex-split > div{background:var(--panel2, #121b27); padding:8px 9px; flex:1; min-width:0}
.ex-split .k{font-size:10px; color:var(--txt-3); letter-spacing:.05em; white-space:nowrap}
.ex-split .v{font-family:var(--mono); font-size:13px; margin-top:3px; white-space:nowrap;
             overflow:hidden; text-overflow:ellipsis}

.ex-costbar{display:flex; height:5px; border-radius:3px; overflow:hidden; background:var(--panel3)}
.ex-costbar i{display:block; height:100%}
.ex-costbar .fee{background:var(--blue,#5ac8fa)}
.ex-costbar .slip{background:var(--orange,#ffb454)}
.ex-costbar .pad{background:var(--purple,#a9b8ff)}
.ex-costbar .basis{background:var(--down)}

.ex-legend{display:flex; gap:10px; flex-wrap:wrap; font-size:11px; color:var(--txt-3)}
.ex-legend i{display:inline-block; width:7px; height:7px; border-radius:2px; margin-right:4px; vertical-align:0}

.ex-c-foot{display:flex; align-items:center; gap:7px; padding:9px 13px; border-top:1px solid var(--line);
           margin-top:auto; background:var(--panel2)}
.ex-c-foot .sp{flex:1}

/* ---------- 闸门徽章 ---------- */
.ex-gate{display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:600;
         letter-spacing:.03em; padding:2px 7px; border-radius:999px; border:1px solid}
.ex-gate.pass{color:var(--ok); border-color:rgba(var(--accent-rgb),.4); background:rgba(var(--accent-rgb),.1)}
.ex-gate.warn{color:var(--orange); border-color:rgba(255,180,84,.4); background:rgba(255,180,84,.1)}
.ex-gate.block{color:var(--down); border-color:rgba(255,91,110,.36); background:rgba(255,91,110,.08)}
.ex-gate .sc{opacity:.75; font-weight:400}
.ex-chip{display:inline-flex; align-items:center; gap:4px; font-size:11px; padding:2px 7px;
         border-radius:6px; border:1px solid var(--line); color:var(--txt-2); background:var(--panel2);
         white-space:nowrap; flex:none}
.ex-chip.auto{color:var(--orange); border-color:rgba(255,180,84,.32)}
.ex-chip.est{color:var(--txt-3)}

/* ---------- 空态 ---------- */
.ex-empty{border:1px dashed var(--line); border-radius:var(--radius); padding:40px 20px; text-align:center;
          color:var(--txt-2); font-size:13px; line-height:1.9}
.ex-empty b{color:var(--txt)}

/* ---------- 表格（订单单 / 持仓 / 通道） ---------- */
.ex-tblwrap{overflow-x:auto; border:1px solid var(--line); border-radius:var(--radius)}
table.ex-tbl{width:100%; border-collapse:collapse; font-size:13px}
.ex-tbl thead th{background:var(--panel2); color:var(--txt-3); font-weight:500; font-size:11px;
                 letter-spacing:.06em; text-transform:uppercase; text-align:right; padding:9px 12px;
                 white-space:nowrap; border-bottom:1px solid var(--line)}
.ex-tbl thead th.l{text-align:left}
.ex-tbl tbody tr{border-bottom:1px solid var(--line)}
.ex-tbl tbody tr:last-child{border-bottom:0}
.ex-tbl tbody tr:hover{background:var(--bg-hover)}
.ex-tbl td{padding:9px 12px; text-align:right; vertical-align:middle; white-space:nowrap}
.ex-tbl td.l{text-align:left}
.ex-tbl td.mono{font-family:var(--mono); font-variant-numeric:tabular-nums}
.ex-tbl .sub{display:block; font-size:11px; color:var(--txt-3); margin-top:2px}

/* ---------- 抽屉（一键下单） ---------- */
.ex-mask{position:fixed; inset:0; z-index:90; background:rgba(0,0,0,.62); backdrop-filter:blur(2px);
         opacity:0; pointer-events:none; transition:opacity .18s}
.ex-mask.on{opacity:1; pointer-events:auto}
.ex-drawer{position:fixed; top:0; right:0; bottom:0; z-index:91; width:min(560px,100vw);
           background:linear-gradient(180deg, var(--panel2, #121b27), var(--panel, #0d141e)); border-left:1px solid var(--line); display:flex; flex-direction:column;
           transform:translateX(100%); transition:transform .22s cubic-bezier(.4,0,.2,1)}
.ex-drawer.on{transform:none}
.ex-d-head{display:flex; align-items:center; gap:9px; padding:15px 18px; border-bottom:1px solid var(--line)}
.ex-d-head .ttl{font-family:var(--display); font-size:16px; font-weight:600}
.ex-d-head .sp{flex:1}
.ex-d-close{background:transparent; border:1px solid var(--line); border-radius:var(--radius-ctl);
            color:var(--txt-2); width:30px; height:30px; cursor:pointer; font-size:15px; line-height:1}
.ex-d-close:hover{color:var(--txt); border-color:var(--accent-line)}
.ex-d-body{flex:1; overflow-y:auto; padding:15px 18px; display:flex; flex-direction:column; gap:13px}
/* 【必须】.ex-sec 带 overflow:hidden；在 flex 列容器里 min-height:auto 会解析为 0，
   于是区块被压缩裁剪（清单只剩一行、腿参数少一行）。锁死不收缩。 */
.ex-d-body > *{flex:0 0 auto}
.ex-d-foot{padding:13px 18px; border-top:1px solid var(--line); display:flex; gap:9px; align-items:center;
           background:var(--panel2)}
.ex-d-foot .sp{flex:1}

.ex-sec{border:1px solid var(--line); border-radius:var(--radius); overflow:hidden}
.ex-sec > h4{margin:0; padding:8px 12px; font-size:12px; font-weight:600; letter-spacing:.04em;
             color:var(--txt-2); background:var(--panel2); border-bottom:1px solid var(--line);
             display:flex; align-items:center; gap:7px}
.ex-sec > h4 .sp{flex:1}
.ex-sec > .bd{padding:11px 12px}
.ex-sec.warn > h4{color:var(--orange)}
.ex-sec.block > h4{color:var(--down)}
.ex-sec.ok > h4{color:var(--ok)}

.ex-leg{border:1px solid var(--line); border-radius:var(--radius-ctl); padding:10px 11px; margin-bottom:8px}
.ex-leg:last-child{margin-bottom:0}
/* 【20260919】原为 .ex-leg .top —— 那会跟全站顶栏的 .top 撞类名（同样的元素被顶栏样式命中，
   也让「页面上有几套导航」的检测误判）。改成独立类名，作用域收在本组件内。 */
.ex-leg .lg-top{display:flex; align-items:center; gap:7px; margin-bottom:8px}
.ex-leg .ttl{font-weight:600; font-size:13px}
.ex-leg .dir{font-size:11px; padding:1px 6px; border-radius:5px; font-weight:600}
.ex-leg .dir.buy{color:var(--up); background:rgba(var(--accent-rgb),.12)}
.ex-leg .dir.sell{color:var(--down); background:rgba(255,91,110,.12)}
.ex-leg .grid{display:grid; grid-template-columns:repeat(2,1fr); gap:6px 12px}
.ex-leg .grid .k{font-size:10px; color:var(--txt-3); letter-spacing:.04em}
.ex-leg .grid .v{font-family:var(--mono); font-size:12px; margin-top:2px}
.ex-leg .grid .v.big{font-size:15px; font-weight:600; color:var(--txt)}
.ex-leg .go{margin-top:9px; display:inline-flex}

.ex-kv{display:flex; align-items:baseline; justify-content:space-between; gap:10px; font-size:12px;
       padding:4px 0}
.ex-kv .k{color:var(--txt-2)}
.ex-kv .v{font-family:var(--mono); font-variant-numeric:tabular-nums}
.ex-kv.total{border-top:1px dashed var(--line); margin-top:4px; padding-top:8px; font-size:13px; font-weight:600}
.ex-kv.total .k{color:var(--txt)}

.ex-list{margin:0; padding-left:17px; font-size:12px; color:var(--txt-2); line-height:1.9}
.ex-list li::marker{color:var(--txt-3)}
.ex-reasons{display:flex; flex-direction:column; gap:5px; font-size:12px}
.ex-reasons .r{display:flex; gap:8px; align-items:flex-start; line-height:1.6}
.ex-reasons .r .mk{flex:none; font-weight:700; width:12px}
.ex-reasons .r.ok .mk{color:var(--ok)}
.ex-reasons .r.warn .mk{color:var(--orange)}
.ex-reasons .r.block .mk{color:var(--down)}
.ex-reasons .r.ok{color:var(--txt-2)}
.ex-reasons .r.warn{color:var(--orange)}
.ex-reasons .r.block{color:var(--down)}

.ex-pre{font-family:var(--mono); font-size:11px; line-height:1.75; white-space:pre-wrap; word-break:break-word;
        background:var(--panel, #0d141e); border:1px solid var(--line); border-radius:var(--radius-ctl); padding:11px 12px;
        color:var(--txt-2); max-height:280px; overflow:auto}

.ex-field{display:flex; flex-direction:column; gap:5px}
.ex-field label{font-size:11px; color:var(--txt-2)}
.ex-field .ex-in{height:34px}

/* ---------- 数据新鲜度 ---------- */
.ex-fresh{display:inline-flex; align-items:center; gap:4px; font-size:11px; color:var(--txt-3)}
.ex-fresh i{width:6px; height:6px; border-radius:50%; background:var(--ok)}
.ex-fresh.stale i{background:var(--orange)}

/* ---------- 连接交易所面板 ---------- */
.ex-keyrows{display:flex; flex-direction:column; gap:6px; margin-bottom:4px}
.ex-keyrow{display:flex; align-items:center; gap:8px; font-size:12px}
.ex-keyrow .dot{width:8px; height:8px; border-radius:50%; background:var(--orange)}
.ex-keyrow .dot.up{background:var(--ok,#3ad29f)}
.ex-keyrow .dot.down{background:var(--down,#ff5c5c)}
.ex-keyrow .mono{font-size:11px; color:var(--txt-2)}
.ex-switch{display:inline-flex; align-items:center; gap:6px; font-size:12px; cursor:pointer; user-select:none}
.ex-switch input{accent-color:var(--accent)}

/* ---------- 下单引导页 / 成功页 ---------- */
.ex-steps{list-style:none; margin:14px 0 4px; padding:0; display:flex; flex-direction:column; gap:10px}
.ex-steps li{display:flex; gap:12px; align-items:flex-start}
.ex-steps li>b{flex:none; width:24px; height:24px; border-radius:50%; background:var(--accent-weak); color:var(--accent); display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:700; border:1px solid var(--accent-line)}
.ex-steps li .t{display:block; font-weight:600; color:var(--txt); font-size:13px}
.ex-steps li .d{display:block; color:var(--txt-2); font-size:12px; line-height:1.6; margin-top:2px}
.ex-ok{display:flex; flex-direction:column; align-items:center; text-align:center; padding:30px 16px}
.ex-ok-badge{width:56px; height:56px; border-radius:50%; background:rgba(58,210,159,.14); color:var(--ok,#3ad29f); display:flex; align-items:center; justify-content:center; font-size:30px; font-weight:700; border:1px solid rgba(58,210,159,.4); margin-bottom:14px}
.ex-ok h3{font-size:16px; color:var(--txt); margin:0 0 4px}
.ex-ok-sub{font-size:12px; color:var(--txt-2); margin-bottom:16px}
.ex-ok .ex-card{width:100%; max-width:360px; text-align:left; background:var(--panel2,#111317); border:1px solid var(--line); border-radius:10px; padding:12px 14px}

/* ---------- 响应式 ---------- */
@media (max-width:900px){
  .ex-grid{grid-template-columns:1fr}
  .ex-status{flex-wrap:wrap}
  .ex-st{flex:1 1 45%}
  .ex-wrap{padding:0 14px 60px}
  /* 窄屏：页头两栏换行，按钮单独占一行并靠右（仍算"右上"） */
  .ex-head{flex-wrap:wrap}
  .ex-head-side{width:100%; display:flex; justify-content:flex-end; padding-top:0}
}

/* ══════════════════════════════════════════════════════════════════
   「我的方案」页签（20260922② 由 pages/plan.html 整合进来）
   ⚠ 所有规则都挂在 .pbwrap 下：本文件与 style.css / perpdex.css 同页共存，
     不加作用域的话 .panel / .row / .bd / .hint 这类通用类名会互相踩。
   ══════════════════════════════════════════════════════════════════ */
.pbwrap{max-width:1080px}
.pbwrap .pb-hero{background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:18px 18px 14px; margin-bottom:14px}
.pbwrap .pb-hero h2{font-size:18px; letter-spacing:-.2px; margin:0 0 5px; color:var(--txt)}
.pbwrap .pb-hero .sub{color:var(--muted); font-size:13px; margin:0 0 12px; line-height:1.6}
.pbwrap textarea{width:100%; min-height:74px; background:var(--panel2); color:var(--txt); border:1px solid var(--line);
  border-radius:9px; padding:11px 13px; font-size:14px; font-family:inherit; line-height:1.6; resize:vertical}
.pbwrap .row{display:flex; gap:9px; align-items:center; flex-wrap:wrap; margin-top:10px}
.pbwrap .pb-btn{background:var(--navy); color:#04150e; border:none; border-radius:8px; padding:9px 18px;
  font-size:14px; font-weight:700; cursor:pointer}
.pbwrap .pb-btn.ghost{background:var(--panel2); color:var(--txt); border:1px solid var(--line); font-weight:600}
.pbwrap .pb-btn.tiny{padding:4px 11px; font-size:12px; font-weight:600}
.pbwrap .pb-btn:disabled{opacity:.5; cursor:default}
.pbwrap .hint{color:var(--muted); font-size:12px; margin-top:8px}
.pbwrap .chips{display:flex; flex-wrap:wrap; gap:7px}
.pbwrap .chip{background:var(--accent-weak); border:1px solid var(--accent-line); color:var(--txt);
  border-radius:20px; padding:5px 12px; font-size:13px}
/* 【20260923】方案页提示统一走 style.css 的 .notice（温和琥珀 / calm 中性），
   .pb-err 保留类名但换掉红色与"出错"腔调：它承载的大多是"还没填 / 接口抖了一下"。
   想看到红色，只有真·急迫预警（.err-urgent）才允许。 */
.pbwrap .pb-err{color:var(--notice-fg); font-size:13px; line-height:1.65; margin:10px 0;
  background:var(--notice-bg); border:1px solid var(--notice-line); border-left:3px solid var(--warn);
  border-radius:8px; padding:9px 12px}
.pbwrap .pb-panel{background:var(--panel); border:1px solid var(--line); border-radius:11px; margin-bottom:12px; overflow:hidden}
.pbwrap .pb-panel h3{font-size:13px; font-weight:600; padding:11px 15px; background:var(--panel2);
  border-bottom:1px solid var(--line); cursor:pointer; display:flex; align-items:center; justify-content:space-between; gap:8px; margin:0; color:var(--txt)} /* 【20261007b】14/700→13/600，对齐全站 .panel h3 */
.pbwrap .pb-panel.collapsed h3{border-bottom:none}
.pbwrap .pb-panel.collapsed .pb-bd{display:none}
.pbwrap .pb-panel h3 .arr{color:var(--muted); font-size:12px; flex:none}
.pbwrap .pb-bd{padding:14px 15px}
.pbwrap .pb-concl{background:var(--panel); border:1px solid var(--accent-line); border-radius:11px;
  padding:16px 17px; margin-bottom:12px}
.pbwrap .pb-concl .hl{font-size:15px; line-height:1.6; font-weight:600; color:var(--txt)}
.pbwrap .pb-kpis{display:grid; grid-template-columns:repeat(3,1fr); gap:11px; margin-top:13px}
.pbwrap .pb-kpi{background:var(--panel2); border:1px solid var(--line); border-radius:9px; padding:11px 13px}
.pbwrap .pb-kpi b{display:block; font-size:18px; font-weight:700; color:var(--txt)}
.pbwrap .pb-kpi span{color:var(--muted); font-size:12px}
.pbwrap .pb-note{font-size:13px; color:var(--muted); line-height:1.7; border-left:3px solid var(--line);
  padding:6px 11px; margin-top:9px}
.pbwrap .pb-pick{border:1px solid var(--line); border-radius:10px; padding:13px 14px; margin-bottom:10px; background:var(--panel2)}
.pbwrap .pb-pick .ph{display:flex; align-items:center; gap:9px; flex-wrap:wrap; margin-bottom:8px}
.pbwrap .pb-pick .sym{font-size:16px; font-weight:700; color:var(--txt)}
.pbwrap .pb-pick .combo{color:var(--muted); font-size:12px}
.pbwrap .pb-pick .sp{flex:1}
.pbwrap .tag{border-radius:5px; padding:2px 7px; font-size:11px; border:1px solid var(--line);
  color:var(--muted); background:var(--panel)}
.pbwrap .tag.ok{border-color:var(--accent-line); color:var(--navy); background:var(--accent-weak)}
.pbwrap .tag.warn{border-color:var(--orange); color:var(--orange)}
.pbwrap .pb-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:9px; margin-top:6px}
.pbwrap .pb-grid div span{display:block; color:var(--muted); font-size:11px}
.pbwrap .pb-grid div b{font-size:14px; font-weight:700; color:var(--txt)}
.pbwrap .pb-rejrow{display:flex; justify-content:space-between; gap:12px; padding:8px 0;
  border-bottom:1px solid var(--line); font-size:13px; color:var(--txt)}
.pbwrap .pb-rejrow:last-child{border-bottom:none}
.pbwrap .pb-rejrow .n{color:var(--muted); flex:none; font-variant-numeric:tabular-nums}
.pbwrap ol.steps,.pbwrap ul.risks{padding-left:20px; margin:0}
.pbwrap ol.steps li,.pbwrap ul.risks li{margin-bottom:7px; font-size:13px; line-height:1.7; color:var(--txt)}
.pbwrap .frm{display:grid; grid-template-columns:repeat(2,1fr); gap:12px}
.pbwrap .frm label{display:block; color:var(--muted); font-size:12px; margin-bottom:4px}
/* ⚠ 只给"文本类"控件拉满宽度，必须排除 checkbox/radio：
   否则下面这条会命中 .sw 芯片里的勾选框，把它拉满整行、把同排文字顶出去 ——
   表现就是「内容框和内容全部重叠在一起」（20260922 用户反馈的根因）。 */
.pbwrap .frm input:not([type="checkbox"]):not([type="radio"]),
.pbwrap .frm select{width:100%; background:var(--panel2); color:var(--txt);
  border:1px solid var(--line); border-radius:7px; padding:8px 10px; font-size:13px}
/* 开关行：组名在左（.plb），选项横着排一排（.sws 里全是 .sw 芯片）
   20260922 用户：「排除类别和接受跨所搬币……都横着排一排吧」 */
.pbwrap .pb-line{display:flex; align-items:flex-start; gap:10px; flex-wrap:wrap}
.pbwrap .pb-line > .plb{color:var(--muted); font-size:12px; flex:none;
  min-width:64px; line-height:26px; padding-top:2px}
.pbwrap .sws{display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding-top:2px}
.pbwrap .sw{display:inline-flex; align-items:center; gap:7px; font-size:13px; color:var(--txt);
  background:var(--panel2); border:1px solid var(--line); border-radius:16px; padding:4px 12px;
  cursor:pointer; user-select:none; line-height:1.5; white-space:nowrap}
.pbwrap .sw:hover{border-color:var(--accent)}
/* 勾选框必须保持原始尺寸（width/height/flex 三样都锁死，防被 .frm 的 width:100% 或
   全局 input 规则撑开） */
.pbwrap .sw input[type="checkbox"],
.pbwrap .sw input[type="radio"]{width:auto; height:auto; min-width:0; margin:0;
  flex:0 0 auto; accent-color:var(--accent); cursor:pointer}
.pbwrap .sw label{margin:0; display:inline; color:inherit; font-size:13px; cursor:pointer}
/* 勾选高亮：纯 CSS，程序赋值 .checked（风险预设）也能同步上 */
.pbwrap .sw:has(input:checked){background:var(--accent-weak); border-color:var(--accent-line); color:var(--navy)}
.pbwrap .pb-rks{display:flex; gap:8px; flex-wrap:wrap; padding-top:2px}
.pbwrap .pb-rk{background:var(--panel2); color:var(--txt); border:1px solid var(--line); border-radius:8px;
  padding:7px 14px; font-size:13px; cursor:pointer; font-weight:600}
.pbwrap .pb-rk.on{background:var(--accent-weak); border-color:var(--accent-line); color:var(--navy)}
@media (max-width:760px){
  .pbwrap .frm{grid-template-columns:1fr}
  .pbwrap .pb-kpis{grid-template-columns:1fr}
  .pbwrap .pb-grid{grid-template-columns:repeat(2,1fr)}
}

/* ==================================================================
   【20260922⑤】「口径说明」入口已移到页面右上角（.ex-head-side）
   ——原来放在页底（.ex-foot：一条细分隔线 + 按钮 + 一行说明文案）。
   用户要求：1) 入口挪到页面右上角；2) 页面上**不要留**这类解释性文字
   （原文「把价差监控变成可执行订单的完整口径：G1–G7 闸门、评分与当前生效阈值」），
   所以 .ex-foot / .ex-foot-note 的规则连同那句文案一起删掉了，
   内容改由弹窗第一段（.cal-modal .cintro）承载。
   ================================================================== */
#cal-modal .cal-modal{max-width:820px}
/* 弹窗开篇导语 */
.cal-modal .cintro{color:var(--txt); font-size:13px; line-height:1.75; margin:0 0 16px;
  padding:11px 13px; background:var(--panel2); border-left:3px solid var(--accent);
  border-radius:0 8px 8px 0}
/* 浅色主题下的弹窗（覆盖 caliber.js 里写死的深色底）
   ⚠ 必须带 !important：perpdex.css 第 39 行有一条
     `.modal, .cal-modal, .sc-modal, .wl-modal { background:#14161b !important; ... }`
     —— 两条都是 !important 时按**特异性**决胜，所以这里的选择器要比它更具体（多两个限定符）。
     只作用于口径弹窗，不动 sc-modal/wl-modal 等其它弹窗（那些页面是深色设计，
     强行改底会把内部写死的浅色文字变成白底白字）。 */
html[data-theme="light"] .cal-mask{background:rgba(26,34,51,.42)}
html[data-theme="light"] #cal-modal .cal-modal{background:#fff !important; border-color:var(--line) !important}
html[data-theme="light"] .cal-hero{background:var(--panel2)}
html[data-theme="light"] .cal-modal .cm-close{background:var(--panel2); color:var(--muted)}
html[data-theme="light"] .cal-btn{background:var(--panel2); color:var(--muted)}

/* ── 弹窗内容 ── */
.cal-modal .calh{font-size:11px; font-weight:800; letter-spacing:.6px; text-transform:uppercase;
  color:var(--accent); margin:18px 0 8px; padding-bottom:5px; border-bottom:1px solid var(--line)}
.cal-modal .calh:first-child{margin-top:0}

/* 流程图：两栏（平台侧 / 你的账户侧），中间一条虚线分界 */
.cfl{display:flex; gap:12px; align-items:stretch; margin:2px 0 4px}
.cfl-col{flex:1; min-width:0}
.cfl-col > ol{list-style:none; margin:0; padding:0}
.cfl-col > ol > li{position:relative; background:var(--panel2); border:1px solid var(--line);
  border-radius:10px; padding:9px 11px; margin-bottom:16px}
.cfl-col > ol > li:last-child{margin-bottom:0}
/* 节点之间的向下箭头（纯 CSS，不占 DOM） */
.cfl-col > ol > li:not(:last-child)::after{content:"\25BC"; position:absolute; left:50%; bottom:-14px;
  transform:translateX(-50%); font-size:9px; line-height:1; color:var(--accent); opacity:.75}
.cfl-col > ol > li > b{display:block; font-size:12px; font-weight:700; color:var(--txt); line-height:1.5}
.cfl-col > ol > li > p{margin:3px 0 0; font-size:11px; line-height:1.65; color:var(--muted)}
.cfl-i{display:inline-flex; align-items:center; justify-content:center; width:16px; height:16px;
  border-radius:50%; background:var(--accent-weak); color:var(--accent); font-size:10px; font-weight:800;
  margin-right:6px; vertical-align:1px}
.cfl-h{font-size:11px; font-weight:700; color:var(--muted); margin-bottom:8px; letter-spacing:.3px}
/* 用户侧那一栏：用户账户里的动作，用金色系区分开 */
.cfl-col.u > ol > li{border-color:var(--gold-line, rgba(227,179,65,.34))}
.cfl-col.u > ol > li:not(:last-child)::after{color:var(--gold, #e3b341)}
.cfl-col.u .cfl-i{background:rgba(227,179,65,.14); color:var(--gold, #e3b341)}
/* 平台/账户 分界线：给足宽度好让竖排标签真的落在线上
   （原来用 transform:rotate(90deg) 把横排文字转 90° ⇒ 中文整句被转成"横躺着"，
     而且 0 宽的容器让标签直接压到两侧卡片上。竖排用 writing-mode 才是正解。） */
.cfl-div{flex:none; width:30px; position:relative}
.cfl-div::before{content:""; position:absolute; left:50%; top:0; bottom:0;
  border-left:1px dashed var(--line)}
.cfl-div span{position:absolute; left:50%; top:50%; transform:translate(-50%,-50%);
  writing-mode:vertical-rl; text-orientation:mixed; white-space:nowrap;
  font-size:10px; letter-spacing:.1em; color:var(--muted); background:var(--panel, #0d141e);
  padding:8px 3px; border:1px solid var(--line); border-radius:999px}
/* 退出回流提示（用户侧 → 平台侧） */
.cfl-back{margin-top:10px; text-align:right; font-size:11px; color:var(--gold, #e3b341)}

/* 边界声明 */
.cwarn{border-left:3px solid var(--orange); background:var(--panel2); border-radius:0 8px 8px 0;
  padding:9px 12px; margin:12px 0 0; font-size:12px; line-height:1.75; color:var(--txt)}

/* 闸门条目 */
.calg{background:var(--panel2); border:1px solid var(--line); border-left:3px solid var(--line);
  border-radius:0 9px 9px 0; padding:9px 12px; margin-bottom:8px}
.calg.bad{border-left-color:var(--red)}
.calg.warn{border-left-color:var(--orange)}
.calg-h{display:flex; align-items:center; gap:7px; font-size:12px; font-weight:700; color:var(--txt);
  margin-bottom:5px; flex-wrap:wrap}
.calg-id{display:inline-block; font-family:ui-monospace, Consolas, monospace; font-size:11px; font-weight:800;
  background:var(--panel, #0d141e); border:1px solid var(--line); border-radius:5px; padding:0 6px; color:var(--accent)}
.calg-lv{margin-left:auto; font-size:10px; font-weight:800; letter-spacing:.4px; border-radius:999px;
  padding:1px 8px; border:1px solid}
.calg-lv.bad{color:var(--red); border-color:var(--red)}
.calg-lv.warn{color:var(--orange); border-color:var(--orange)}
.calg p{margin:0 0 3px; font-size:12px; line-height:1.75; color:var(--txt)}
.calg p i{display:inline-block; font-style:normal; font-size:10px; font-weight:700; color:var(--muted);
  background:var(--panel, #0d141e); border:1px solid var(--line); border-radius:4px; padding:0 5px; margin-right:6px;
  vertical-align:1px}

/* 状态清单 */
.cal-modal .clv{list-style:none; margin:0 0 10px; padding:0}
.cal-modal .clv li{display:flex; align-items:flex-start; gap:8px; margin-bottom:5px; font-size:12px; line-height:1.7}
.clv-t{flex:none; font-size:10px; font-weight:800; letter-spacing:.4px; border-radius:999px;
  padding:1px 8px; border:1px solid; margin-top:2px}
.clv-t.ok{color:var(--accent); border-color:var(--accent-line)}
.clv-t.warn{color:var(--orange); border-color:var(--orange)}
.clv-t.bad{color:var(--red); border-color:var(--red)}

/* 实时阈值表 */
.cthr{width:100%; border-collapse:collapse; font-size:12px}
.cthr td{padding:5px 8px; border-bottom:1px solid var(--line); color:var(--txt)}
.cthr tr:last-child td{border-bottom:none}
.cthr-v{text-align:right; font-family:ui-monospace, Consolas, monospace; font-weight:700;
  font-variant-numeric:tabular-nums; white-space:nowrap}
.cthr-u{color:var(--muted); font-weight:400; margin-left:4px; font-size:11px}
.cal-modal .cnote{margin:7px 0 0; font-size:11px; line-height:1.75; color:var(--muted)}

@media (max-width:640px){
  .cfl{flex-direction:column}
  .cfl-div{width:auto; height:0; border-left:none; border-top:1px dashed var(--line); margin:4px 0}
  .cfl-div span{position:static; transform:none; display:inline-block; background:transparent; border:none}
}
