/* Mindthink Capital 样式。变量在 :root / [data-theme=light]
   颜色语义：green / yellow / orange / red 只表示状态（达标 / 复核 / 提醒 / 超限）；链接、按钮、焦点、选中用 --act（cyan）；品牌与强调用 --ink */
  :root{
    color-scheme:dark;
    --bg-top:#0b120e; --bg-bot:#070b09; --bg:#0a100d;
    --surface:rgba(255,255,255,.028); --surface-2:rgba(255,255,255,.06); --surface-solid:#111a15;
    --line:rgba(140,220,160,.10); --line-strong:rgba(140,220,160,.22);
    --ink:#f2f5f0; --ink-2:#b9c4bb; --ink-3:#7d8a80;
    --yellow:#f2d94e; --green:#5ed48a; --cyan:#4fd1c5; --orange:#f0a04b; --red:#ef5b5b; --blue:#6ea8fe; --violet:#c9a0ff;
    --act:var(--cyan);
    --good:var(--green); --warn:var(--orange); --crit:var(--red); --info:var(--cyan);
    --good-bg:rgba(94,212,138,.12); --warn-bg:rgba(240,160,75,.12); --crit-bg:rgba(239,91,91,.12); --info-bg:rgba(79,209,197,.10); --yellow-bg:rgba(242,217,78,.12);
    --band-1:rgba(255,255,255,.06); --band-2:rgba(255,255,255,.14); --band-3:rgba(255,255,255,.26);
    --up:var(--green); --down:var(--red);
    --radius:10px; --shadow:none;
  }
  :root[data-theme="light"]{
    color-scheme:light;
    --bg-top:#f5f8f5; --bg-bot:#eef3ee; --bg:#f3f6f3;
    --surface:#ffffff; --surface-2:#eef3ee; --surface-solid:#ffffff;
    --line:#dfe7e0; --line-strong:#c2d0c4;
    --ink:#101a13; --ink-2:#45524a; --ink-3:#5f6b63;
    --yellow:#876c00; --green:#15804a; --cyan:#0a766c; --orange:#a4570a; --red:#c02f2f; --blue:#2f6fd6; --violet:#8a4fd6;
    --good-bg:rgba(21,128,74,.1); --warn-bg:rgba(164,87,10,.1); --crit-bg:rgba(192,47,47,.1); --info-bg:rgba(10,118,108,.1); --yellow-bg:rgba(135,108,0,.12);
    --band-1:rgba(16,26,19,.05); --band-2:rgba(16,26,19,.13); --band-3:rgba(16,26,19,.24);
    --shadow:0 1px 2px rgba(16,26,19,.05),0 2px 10px rgba(16,26,19,.04);
  }
  *{box-sizing:border-box}
  html{scroll-behavior:smooth;scroll-padding-top:calc(var(--topbar-h, 52px) + 12px)}
  @media (prefers-reduced-motion: reduce){ html{scroll-behavior:auto} *,*::before,*::after{transition:none!important;animation:none!important} }
  body{margin:0;min-height:100vh;background:linear-gradient(180deg,var(--bg-top) 0%,var(--bg-bot) 100%) fixed;color:var(--ink);font:14px/1.55 "PingFang SC",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}
  a{color:var(--ink-2);text-decoration:none} a:hover{color:var(--act);text-decoration:underline}
  button{font:inherit;border:1px solid var(--line-strong);background:transparent;color:var(--ink-2);border-radius:8px;padding:6px 14px;cursor:pointer;line-height:1.3;min-height:24px}
  button:hover{border-color:var(--act);color:var(--act)}
  button.primary{background:var(--ink);border-color:var(--ink);color:var(--bg);font-weight:600} button.primary:hover{opacity:.88;color:var(--bg)}
  button:disabled{opacity:.35;cursor:not-allowed}
  button.primary:disabled{background:transparent;border-color:var(--line-strong);color:var(--ink-3);font-weight:400}
  button.ghost{border-color:transparent;padding:2px 8px;font-size:12px;color:var(--ink-2)} button.ghost:hover{border-color:var(--line-strong)}
  :focus-visible{outline:2px solid var(--act);outline-offset:2px;border-radius:4px}
  input:focus-visible,select:focus-visible,textarea:focus-visible{outline-offset:1px}
  .vh{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

  /* header */
  .topbar{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg-top) 86%,transparent);backdrop-filter:saturate(1.2) blur(12px);border-bottom:1px solid var(--line)}
  .topbar .in{max-width:1280px;margin:0 auto;padding:10px 24px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
  .brand{font-weight:700;font-size:19px;letter-spacing:.02em;display:flex;align-items:center;gap:8px}
  .brand .dot{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 0 3px var(--good-bg)}
  .brand .dot.off{background:var(--ink-3);box-shadow:none}
  .brand .ver{font-size:12px;font-weight:500;color:var(--ink-3);margin-left:2px}
  nav.sections{display:flex;gap:2px;flex-wrap:wrap;margin-left:6px}
  nav.sections a{padding:5px 10px;border-radius:7px;color:var(--ink-3);font-size:13px}
  nav.sections a:hover{background:var(--surface-2);text-decoration:none;color:var(--ink)}
  .topbar .meta{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-3)}
  @media(max-width:1400px){.topbar #asof{display:none}}
  @media(max-width:1100px){.topbar nav.sections{display:none}}
  .pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:12px;border:1px solid var(--line-strong);color:var(--ink-2)}
  .pill.live{border-color:var(--green);color:var(--green)}

  main{max-width:1280px;margin:0 auto;padding:18px 24px 40px}

  /* 纪律状态条：三条硬规则的子弹图 */
  .discipline{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:-14px 0 24px}
  @media(max-width:1100px){ .discipline{grid-template-columns:repeat(2,minmax(0,1fr))} }
  .rule{position:relative;overflow:hidden;min-width:0;padding:12px 14px 11px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}
  .rule::before{content:"";position:absolute;left:0;right:0;top:0;height:2px;background:var(--line)}
  .rule-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
  .rule-k{font-size:12px;color:var(--ink-3)}
  .rule-v{font-size:18px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em;line-height:1.2;color:var(--ink)}
  .bullet{position:relative;height:6px;margin:9px 0 8px;border-radius:3px;background:var(--band-1)}
  .bullet .band{position:absolute;top:0;bottom:0} .bullet .b1{background:transparent} .bullet .b2{background:var(--band-1)} .bullet .b3{background:var(--band-2)}
  .bullet .band:first-child{border-radius:3px 0 0 3px} .bullet .band:last-child{border-radius:0 3px 3px 0}
  .bullet .bar{position:absolute;left:0;top:0;bottom:0;max-width:100%;background:var(--ink-2);border-radius:3px}
  .bullet .tick{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;background:var(--ink);border-radius:1px}
  .rule-s{font-size:12px;color:var(--ink-3);display:flex;gap:8px;align-items:baseline;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .rule-s .word{font-weight:600;flex:none}
  .rule.good::before,.rule.good .bar{background:var(--green)} .rule.good .word{color:var(--green)}
  .rule.warn::before,.rule.warn .bar{background:var(--orange)} .rule.warn .word,.rule.warn .rule-v{color:var(--orange)}
  .rule.crit::before,.rule.crit .bar{background:var(--red)} .rule.crit .word,.rule.crit .rule-v{color:var(--red)}
  @media(max-width:600px){ main{display:flex;flex-direction:column} main > *{min-width:0} .discipline{order:-1;margin:0 0 14px} }
  @media(max-width:760px){ .discipline{grid-template-columns:1fr;gap:8px} }

  .banner{padding:10px 14px;border-radius:10px;margin-bottom:18px;font-size:13px;display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);color:var(--ink-2);background:var(--surface)}
  .banner.crit{border-color:var(--red);color:var(--red)} .banner.warn{border-color:var(--orange)}

  /* sections */
  section{margin-bottom:24px}
  .sec-h{display:flex;align-items:baseline;gap:10px;margin:0 0 10px}
  .sec-h h2{font-size:17px;font-weight:700;margin:0}
  .sec-h .sub{font-size:12px;color:var(--ink-3)}
  .sec-h .right{margin-left:auto;font-size:12px;color:var(--ink-3)}
  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
  @media(max-width:900px){.grid2{grid-template-columns:1fr}}
  .pad{padding:12px 14px}
  .card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);position:relative;overflow:hidden}
  /* 顶部色条只表示结论（告警等级、机会结论） */
  .card.top-red::before,.card.top-yellow::before,.card.top-green::before{content:"";position:absolute;left:0;right:0;top:0;height:2px}
  .card.top-red::before{background:var(--red)} .card.top-yellow::before{background:var(--yellow)} .card.top-green::before{background:var(--green)}
  .card .ch{display:flex;align-items:center;gap:8px;padding:10px 14px;font-size:13px;font-weight:700;border-bottom:1px solid var(--line)}
  .card .ch .n{margin-left:auto;font-weight:600;color:var(--ink-3);font-size:12px}
  .card .ch .n b{color:var(--ink);font-size:16px;margin-left:4px}

  /* hero + kpis */
  .hero{display:grid;grid-template-columns:minmax(260px,1.3fr) minmax(250px,1.5fr) repeat(3,minmax(150px,1fr));gap:10px;margin-bottom:24px}
  @media(max-width:1000px){.hero{grid-template-columns:repeat(3,1fr)} .hero .card.big,.hero .card.alloc{grid-column:span 3}}
  @media(max-width:560px){.hero{grid-template-columns:repeat(2,1fr)}}
  .stat{padding:12px 14px;display:flex;flex-direction:column;gap:4px;min-height:92px}
  .stat .label{font-size:12px;color:var(--ink-3)}
  .stat .value{font-size:24px;font-weight:700;line-height:1.1;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
  .stat.big .value{font-size:40px;font-weight:800;letter-spacing:-.02em;margin-top:2px;color:var(--ink)}
  .stat.big .label{display:flex;align-items:center;justify-content:space-between;gap:8px}
  .stat.big{container-type:inline-size} .stat.big .value{font-size:min(40px, calc(100cqi / (var(--chars, 10) * .62)))}
  .stat.big .fx{display:block;margin-top:2px}
  .stat.big .hl{display:inline-flex;align-items:center;gap:4px} .eye{display:inline-grid;place-items:center;width:24px;height:24px;border:0;border-radius:6px;background:transparent;color:var(--ink-3);padding:0;cursor:pointer} .eye:hover{color:var(--ink);background:var(--surface-2)} .eye[aria-pressed="true"]{color:var(--ink)}
  .seg.ccy button{min-height:24px;padding:0 8px;font-size:11px;letter-spacing:.02em}
  .stat .sub{font-size:12px;color:var(--ink-3);margin-top:auto}
  .stat .status{display:inline-flex;align-items:center;gap:6px;font-size:12px;margin-top:auto;font-weight:500}
  .status.good{color:var(--green)} .status.warn{color:var(--orange)} .status.crit{color:var(--red)} .status.serious{color:var(--orange)}

  /* tables：行高 36px */
  .tw{overflow-x:auto;border-radius:var(--radius)}
  .tw.scroll{max-height:520px;overflow-y:auto}
  table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
  thead th{position:sticky;top:0;background:var(--surface-solid);font-size:12px;font-weight:600;color:var(--ink-3);text-align:left;padding:8px 12px;line-height:20px;border-bottom:1px solid var(--line-strong);white-space:nowrap;z-index:1}
  tbody td{padding:8px 12px;line-height:20px;border-bottom:1px solid var(--line);white-space:nowrap;vertical-align:middle}
  tbody tr:last-child td{border-bottom:0}
  tbody tr:hover td{background:var(--surface-2)}
  .num{text-align:right;font-variant-numeric:tabular-nums}
  th.num{text-align:right}
  .sym{font-weight:600} .sym small{display:block;font-weight:400;color:var(--ink-3);font-size:11.5px;max-width:180px;overflow:hidden;text-overflow:ellipsis}
  .up{color:var(--up)} .down{color:var(--down)} .flat{color:var(--ink-3)} .warn{color:var(--orange)}
  .chip{display:inline-block;font-size:11px;padding:1px 8px;border-radius:6px;color:var(--ink-2);border:1px solid var(--line-strong);background:var(--surface)}
  button.chip{min-height:0;line-height:inherit;cursor:pointer} button.chip.bad:hover{filter:brightness(1.15)}
  .chip.bad{border-color:transparent;background:var(--warn-bg);color:var(--red)} .chip.okay{color:var(--green)}
  .chip.warn{border-color:transparent;background:var(--warn-bg);color:var(--orange)}
  .chip.opt{border-color:transparent;background:var(--info-bg);color:var(--cyan)}
  .chip.y{border-color:transparent;background:var(--yellow-bg);color:var(--yellow)}
  .empty{color:var(--ink-3);font-size:13px;padding:14px 16px}
  .grade{display:inline-block;min-width:34px;text-align:center;font-size:11.5px;font-weight:700;padding:1px 7px;border-radius:6px;color:#07130b}
  .grade.a{background:var(--green)} .grade.b{background:var(--yellow)} .grade.c{background:var(--orange)} .grade.d{background:var(--red);color:#fff}

  /* alerts */
  .alert-group{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px}
  .agroup .gh{display:flex;align-items:center;gap:8px;padding:12px 16px;font-size:13px;font-weight:700;border-bottom:1px solid var(--line)}
  .agroup.crit .gh{color:var(--red)} .agroup.warn .gh{color:var(--yellow)} .agroup.info .gh{color:var(--ink-2)}
  .agroup .gh .n{margin-left:auto;font-weight:600;font-size:15px}
  .arow{display:grid;grid-template-columns:minmax(0,176px) 1fr;gap:10px;padding:8px 14px;border-bottom:1px solid var(--line);font-size:13px;align-items:baseline}
  .arow:last-child{border-bottom:0}
  .arow .s{font-weight:600;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}
  .arow .m{color:var(--ink-2)}
  .arow .m::before{content:"▸ ";color:var(--ink-3)}
  details.more summary{cursor:pointer;color:var(--ink-3);font-size:12.5px;padding:9px 16px;list-style:none}
  details.more summary::-webkit-details-marker{display:none}
  details.more[open] summary{border-bottom:1px solid var(--line)}

  /* fear & greed */
  .fg-head{display:flex;align-items:baseline;gap:10px;padding:14px 16px 6px;flex-wrap:wrap}
  .fg-head .score{font-size:34px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1}
  .fg-head .rating{font-size:15px;font-weight:700;white-space:nowrap}
  .fg-head small{color:var(--ink-3);font-size:11px;margin-left:auto;white-space:nowrap}
  .fg-bar{position:relative;margin:8px 16px 4px;height:8px;border-radius:4px;background:linear-gradient(90deg,var(--red),var(--orange) 30%,var(--yellow) 50%,var(--green) 75%,var(--cyan))}
  .fg-bar i{position:absolute;top:-4px;width:4px;height:16px;margin-left:-2px;border-radius:2px;background:var(--ink);box-shadow:0 0 0 2px var(--surface)}
  .fg-scale{display:flex;justify-content:space-between;padding:0 16px 8px;font-size:10px;color:var(--ink-3)}
  .fg-hist{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:4px 16px 10px;border-bottom:1px solid var(--line)}
  .fg-hist div{font-size:12px;color:var(--ink-2)} .fg-hist b{display:block;font-size:14px;font-variant-numeric:tabular-nums}
  .fg-comp{padding:8px 16px 4px}
  .fg-comp .mrow{padding:6px 0;grid-template-columns:1fr auto auto} .fg-comp .mrow .v{font-size:13px}
  /* whitelist */
  .chips{display:flex;flex-wrap:wrap;gap:6px;flex:1 1 320px}
  .chip{display:inline-flex;align-items:center;gap:6px;padding:3px 8px 3px 10px;border:1px solid var(--line);border-radius:999px;font-size:12px;background:var(--surface-2)}
  .chip button{font-size:11px;width:24px;height:24px;min-height:24px;padding:0;margin:-3px -6px -3px -4px;border:0;border-radius:50%;background:transparent;color:var(--ink-3);display:inline-flex;align-items:center;justify-content:center} .chip button:hover{color:var(--red);background:var(--crit-bg)}
  .wl-add{display:flex;gap:6px;align-items:center} .wl-add input{width:170px;text-transform:uppercase} .wl-add .msg{font-size:12px;color:var(--ink-3)}
  /* week plan */
  .wp{margin-top:12px} #plan .sec-h .msg{font-size:12px;color:var(--ink-3)} #plan .sec-h .msg.down{color:var(--red)}
  .wp-col>label{font-size:11px;color:var(--ink-3);display:block;margin:0 0 6px;letter-spacing:.04em}
  .wp textarea,.wp input:not([type]){width:100%;padding:8px 10px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface-solid);color:var(--ink);font:inherit;resize:vertical}
  .wp textarea{min-height:132px;line-height:1.55} .wp textarea:focus,.wp input:focus{border-color:var(--act);outline:none}
  .wp-rules{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid var(--line);font-size:13px}
  .wp-rules .wp-k{font-size:11px;color:var(--ink-3);letter-spacing:.04em;margin-right:4px}
  .wp-sw{display:inline-flex;align-items:center;gap:8px;padding:5px 12px 5px 8px;border:1px solid var(--line-strong);border-radius:999px;color:var(--ink-2);cursor:pointer;user-select:none;transition:background .15s,border-color .15s,color .15s}
  .wp-sw input{appearance:none;-webkit-appearance:none;position:relative;width:28px;height:16px;margin:0;border-radius:999px;background:var(--line-strong);cursor:pointer;transition:background .15s;flex:none}
  .wp-sw input::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--surface-solid);transition:transform .15s}
  .wp-sw input:checked{background:var(--red)} .wp-sw input:checked::after{transform:translateX(12px)}
  .wp-sw input:focus-visible{outline:2px solid var(--act);outline-offset:2px}
  .wp-sw:has(input:checked){background:var(--crit-bg);border-color:transparent;color:var(--red);font-weight:600}
  .wp-step{display:inline-flex;align-items:center;gap:4px;padding:2px 10px 2px 12px;border:1px solid var(--line-strong);border-radius:999px;color:var(--ink-2)}
  .wp-step.on{background:var(--crit-bg);border-color:transparent;color:var(--red);font-weight:600}
  .wp-step button{border:0;background:transparent;color:inherit;width:24px;height:24px;padding:0;border-radius:6px;font-size:15px;line-height:1} .wp-step button:hover{background:var(--surface-2)}
  .wp-step input[type=number]{width:44px;padding:2px 0;border:0;background:transparent;color:inherit;font:inherit;font-weight:600;text-align:center;-moz-appearance:textfield} .wp-step input::-webkit-inner-spin-button,.wp-step input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
  .wp-step input::placeholder{color:var(--ink-3);font-weight:400}
  .wp-cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px} @media(max-width:760px){.wp-cols{grid-template-columns:1fr;gap:14px}}
  .wp-items{list-style:none;margin:0;padding:0} .wp-items li{display:flex;gap:8px;align-items:center;min-height:34px;border-bottom:1px solid var(--line);font-size:13px}
  .wp-items li label{flex:1;display:flex;gap:8px;align-items:center;min-height:32px;cursor:pointer} .wp-items li input[type=checkbox]{width:16px;height:16px;margin:0;accent-color:var(--act);flex:none}
  .wp-items li.done span{text-decoration:line-through;color:var(--ink-3)} .wp-items li button{border:0;background:transparent;color:var(--ink-3);width:28px;height:28px;padding:0;opacity:0;transition:opacity .15s} .wp-items li:hover button,.wp-items li button:focus-visible{opacity:1} .wp-items li button:hover{color:var(--red)}
  @media(hover:none){.wp-items li button{opacity:1}}
  .wp-items li.empty{color:var(--ink-3);border-bottom:0;padding:0}
  .wp-add{display:flex;gap:6px;margin-top:8px} .wp-add input{flex:1} .wp-add .kbtn{min-width:36px;font-size:15px}
  /* k-line */
  [hidden]{display:none!important}
  .kmodal{position:fixed;inset:0;background:rgba(0,0,0,.72);z-index:50;display:flex;align-items:center;justify-content:center;padding:16px;backdrop-filter:blur(4px)}
  .kmodal-in{width:min(1400px,100%);max-height:100%;overflow:auto;background:var(--bg);border:1px solid var(--line-strong);border-radius:12px;padding:12px 16px 14px}
  .kmodal-head{display:flex;gap:12px;align-items:center;margin-bottom:8px} .kmodal-head b{font-size:16px} .kmodal .kmeta{font-size:12px;color:var(--ink-3)}
  .kx{border-top:1px solid var(--line);padding:6px 16px 8px}
  .kbtn{font-size:12px;padding:3px 10px}
  .kx-row{display:flex;align-items:center} .kx .kmeta{font-size:11px;color:var(--ink-3);margin-left:10px}
  .kx .kfull{margin-left:auto;font-size:12px;white-space:nowrap;display:inline-flex;align-items:center;min-height:24px;padding:0 4px}
  .kwrap{margin-top:8px;position:relative}
  .kwrap svg{width:100%;height:auto;display:block;font-family:inherit}
  .kwrap .grid{stroke:var(--line);stroke-width:1} .kwrap .axis{fill:var(--ink-3);font-size:10px}
  .kwrap .wick{stroke-width:1} .kwrap .up{stroke:var(--green);fill:var(--bg)} .kwrap .down{stroke:var(--red);fill:var(--red)}
  .kwrap .vol{fill:var(--ink-3);opacity:.35} .kwrap .ma{fill:none;stroke:var(--cyan);stroke-width:2;stroke-linejoin:round}
  .kwrap .ref{stroke-dasharray:4 4;stroke-width:1} .kwrap .ref.buy{stroke:var(--yellow)} .kwrap .ref.tgt{stroke:var(--ink-3)} .kwrap .ref.px{stroke:var(--ink);stroke-dasharray:none;opacity:.6}
  .kwrap .reflbl{font-size:10px;fill:var(--ink-2)} .kwrap .malbl{font-size:10px;fill:var(--cyan)}
  .kwrap .xhair{stroke:var(--ink-2);stroke-width:1;opacity:.6;pointer-events:none}
  .ktip{position:absolute;top:6px;left:8px;background:var(--surface-2);border:1px solid var(--line);border-radius:6px;padding:6px 8px;font-size:11px;line-height:1.5;pointer-events:none;color:var(--ink-2);backdrop-filter:blur(6px)}
  .ktip b{color:var(--ink);font-variant-numeric:tabular-nums}
  .ktbl{width:100%;font-size:11px;border-collapse:collapse;margin-top:6px} .ktbl th,.ktbl td{text-align:right;padding:3px 6px;border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums} .ktbl th:first-child,.ktbl td:first-child{text-align:left}
  /* opportunities */
  .opp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:12px}
  .opp .ch{justify-content:space-between} .opp .ch .sym{font-size:15px} .opp .ch small{color:var(--ink-3);font-weight:400;margin-left:6px}
  .opp .verdict{font-size:12px;padding:2px 8px;border-radius:999px;font-weight:700}
  .opp .verdict.go{background:var(--good-bg);color:var(--green)} .opp .verdict.watch{background:var(--yellow-bg);color:var(--yellow)} .opp .verdict.no{background:var(--crit-bg);color:var(--red)}
  .opp .score{font-variant-numeric:tabular-nums;color:var(--ink-3);font-size:12px;margin-left:8px}
  .opp .reasons{padding:8px 14px;font-size:12px;color:var(--ink-2);border-bottom:1px solid var(--line)}
  .opp .chk{padding:6px 14px;font-size:12px;display:grid;grid-template-columns:64px 1fr;gap:8px;border-bottom:1px solid var(--line)}
  .opp .chk > span{color:var(--ink-2)} .opp .chk b{font-weight:600} .opp .chk.ok b{color:var(--green)} .opp .chk.warn b{color:var(--orange)} .opp .chk.bad b{color:var(--red)}
  .opp .best{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:center;padding:8px 14px;font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums;border-bottom:1px solid var(--line)}
  .opp .best .best-k{color:var(--ink-3)} .opp .best b{color:var(--ink);font-size:13px} .opp .best > button{margin-left:auto}
  .opp .best .stock-trade{margin-left:auto;display:inline-flex;gap:4px} .opp .best .stock-held{color:var(--ink-3)}
  .opp-more summary{cursor:pointer;list-style:none;padding:6px 14px;min-height:32px;display:flex;align-items:center;font-size:12px;color:var(--ink-3)}
  .opp-more summary::-webkit-details-marker{display:none}
  .opp-more summary::before{content:"›";display:inline-block;width:12px;transition:transform .15s} .opp-more[open] summary::before{transform:rotate(90deg)}
  .opp-more summary:hover{color:var(--act)} .opp-more[open] summary{border-bottom:1px solid var(--line)}
  .opp table{width:100%;border-collapse:collapse;font-size:12px} .opp th{color:var(--ink-3);font-weight:500;text-align:right;padding:6px 8px;border-bottom:1px solid var(--line)} .opp th:first-child,.opp td:first-child{text-align:left}
  .opp td{padding:4px 8px;text-align:right;font-variant-numeric:tabular-nums;border-bottom:1px solid var(--line)} .opp td small{color:var(--ink-3)} .opp tr.dim td{color:var(--ink-3)}
  /* macro */
  .macro-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;align-items:start}
  .macro-grid .msent{grid-column:1/-1}
  .sent-body{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);align-items:start}
  .sent-main{border-right:1px solid var(--line)} .sent-comp{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:0}
  .sent-comp .mrow:nth-child(odd){border-right:1px solid var(--line)} .sent-comp .mrow:last-child{border-bottom:1px solid var(--line)}
  .sent-comp .mrow{grid-template-columns:minmax(0,1fr) 40px 48px} .sent-comp .mrow .v{font-size:14px}
  @media (max-width:960px){.macro-grid{grid-template-columns:repeat(2,minmax(0,1fr))} .sent-body{grid-template-columns:1fr} .sent-main{border-right:0;border-bottom:1px solid var(--line)}}
  @media (max-width:640px){.macro-grid{grid-template-columns:1fr} .sent-comp{grid-template-columns:1fr} .sent-comp .mrow:nth-child(odd){border-right:0}}
  .mrow{display:grid;grid-template-columns:minmax(0,1fr) 96px 68px;gap:10px;padding:9px 16px;border-bottom:1px solid var(--line);font-size:13px;align-items:baseline}
  .mrow:last-child{border-bottom:0}
  .mrow .l{color:var(--ink-2);min-width:0} .mrow .l .n,.mrow .l small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .mrow .l small{color:var(--ink-3);font-size:11px;margin-top:1px}
  .mrow .v{font-weight:700;font-variant-numeric:tabular-nums;font-size:16px;text-align:right;white-space:nowrap}
  .mrow .d{font-variant-numeric:tabular-nums;font-size:12px;text-align:right;white-space:nowrap}
  .events{margin-top:12px}
  .ev{display:grid;grid-template-columns:96px 1fr auto;gap:12px;padding:9px 16px;border-bottom:1px solid var(--line);font-size:13px;align-items:baseline}
  .ev:last-child{border-bottom:0}
  .ev .d{color:var(--ink-3);font-variant-numeric:tabular-nums;font-size:12px}
  .ev .kv{color:var(--ink-3);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}
  .ev.cfg .c{color:var(--ink);font-weight:600}

  /* news */
  .news{columns:2;column-gap:28px} @media(max-width:900px){.news{columns:1}}
  .nrow{break-inside:avoid;display:grid;grid-template-columns:56px 1fr;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);font-size:13px}
  .nrow .s{color:var(--ink);font-size:12px;font-weight:600} .nrow .t small{color:var(--ink-3);margin-left:6px;font-size:11.5px;white-space:nowrap}

  /* plan & trade */
  .rules{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0}
  ul.checks{list-style:none;margin:8px 0 0;padding:0}
  ul.checks li{display:grid;grid-template-columns:26px 1fr 22px;gap:12px;padding:9px 0;border-bottom:1px solid var(--line);font-size:13.5px;align-items:center}
  ul.checks li:last-child{border-bottom:0}
  ul.checks li .no{width:24px;height:24px;border-radius:50%;background:var(--surface-2);color:var(--ink-2);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums}
  ul.checks li.ok .no{background:var(--good-bg);color:var(--green)} ul.checks li.fail .no{background:var(--crit-bg);color:var(--red)} ul.checks li.warn .no{background:var(--yellow-bg);color:var(--yellow)}
  ul.checks li .d{color:var(--ink-3);font-size:12px;display:block}
  ul.checks li .box{width:20px;height:20px;border:1px solid var(--line-strong);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}
  ul.checks li.ok .box{border-color:var(--green);color:var(--green)} ul.checks li.ok .box::before{content:"✓"}
  ul.checks li.fail .box{border-color:var(--red);color:var(--red)} ul.checks li.fail .box::before{content:"✕"}
  ul.checks li.warn .box{border-color:var(--yellow);color:var(--yellow)} ul.checks li.warn .box::before{content:"!"}
  ul.checks li.skip .box{color:var(--ink-3)} ul.checks li.skip .box::before{content:"–"}
  ul.checks.plain li{grid-template-columns:1fr 22px}
  ul.todo{margin:6px 0 0;padding-left:18px;font-size:13px} ul.todo li{padding:3px 0}
  .principle{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin:0 0 16px}
  @media(max-width:600px){.principle{grid-template-columns:1fr}}
  .principle .box{border:1px solid var(--line);border-radius:10px;padding:10px 12px;text-align:center;background:var(--surface)}
  .principle .box .k{font-size:12px;color:var(--ink-3)} .principle .box .t{font-size:14px;font-weight:700;margin-top:2px}
  .principle .box.g .t{color:var(--green)} .principle .box.r .t{color:var(--red)}
  .principle .box .t.up{color:var(--up)} .principle .box .t.down{color:var(--down)} .principle .box .t.flat{color:var(--ink-2)}

  /* 上周复盘 */
  .rv-h{display:flex;align-items:baseline;gap:10px;font-size:12px;color:var(--ink-3);margin-bottom:12px}
  .rv-h b{font-size:14px;color:var(--ink)} .rv-h a:first-of-type{margin-left:auto} .rv-h a{color:var(--act);text-decoration:none} .rv-h a:hover{text-decoration:underline}
  .rv-body{display:grid;grid-template-columns:150px minmax(0,1fr) minmax(0,1fr);gap:0;border:1px solid var(--line);border-radius:8px}
  .rv-body > *{padding:12px 16px;min-width:0} .rv-body > * + *{border-left:1px solid var(--line)}
  .rv-total{display:flex;flex-direction:column;justify-content:center;gap:2px}
  .rv-total span,.rv-nums span,.rv-k{font-size:12px;color:var(--ink-3)}
  .rv-total b{font-size:30px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em;line-height:1.1}
  .rv-total small{font-size:13px;font-weight:500;color:var(--ink-3);margin-left:2px}
  .rv-total.good b{color:var(--green)} .rv-total.warn b{color:var(--orange)} .rv-total.crit b{color:var(--red)}
  .tplan summary{display:flex;gap:10px;align-items:baseline;cursor:pointer;list-style:none} .tplan summary::-webkit-details-marker{display:none}
  .tplan summary::before{content:'›';display:inline-block;transition:transform .15s;color:var(--ink-3)} .tplan[open] summary::before{transform:rotate(90deg)}
  .tplan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:14px 22px;margin-top:12px}
  .tplan-s{min-width:0} .tplan-t{font-size:11px;color:var(--ink-3);letter-spacing:.06em;margin-bottom:4px}
  .tplan-s ul{margin:0;padding-left:18px;display:grid;gap:4px;font-size:13px;line-height:1.55;color:var(--ink-2)}
  @media (prefers-reduced-motion:reduce){.tplan summary::before{transition:none}}
  .opp-list{padding:0;overflow:hidden}
  .opp-head,.opp-row{display:grid;grid-template-columns:12px 64px minmax(120px,1.3fr) 44px minmax(140px,1.6fr) 72px 64px minmax(140px,1.2fr) 60px 70px 56px;gap:10px;align-items:center;padding:8px 14px}
  .opp-head{font-size:11px;color:var(--ink-3);letter-spacing:.04em;border-bottom:1px solid var(--line);background:var(--surface-2)}
  .opp-head .num,.opp-row .num,.opp-row .o-n,.opp-row .o-fill{text-align:right}
  .opp-row{border-bottom:1px solid var(--line);cursor:pointer;font-size:13px}
  .opp-row:hover,.opp-row.open{background:var(--surface-2)} .opp-row:focus-visible{outline:2px solid var(--act);outline-offset:-2px}
  .o-dot i{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--yellow)}
  .o-sym b{font-size:14px} .o-sym small{display:block;color:var(--ink-3);font-size:11.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .o-block{min-width:0;overflow:hidden} .o-block > span{display:block;font-size:12.5px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .o-block b{font-weight:500} .o-ct{font-size:12.5px;white-space:nowrap} .o-ct small{color:var(--ink-3)}
  .opp-fill{border-color:var(--act);color:var(--act)} .kbtn:disabled{opacity:.4;cursor:not-allowed;border-color:var(--line-strong);color:var(--ink-3)}
  .opp-row .o-bind{display:block;font-size:11px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .o-meta{display:none}
  .opp-detail{border-bottom:1px solid var(--line);background:var(--surface-2);padding:12px 14px 14px 36px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:12px 22px}
  .opp-detail > *{min-width:0} .od-k{grid-column:1/-1} .od-k .kx-row{flex-wrap:wrap} .od-right{display:grid;gap:8px;align-content:start}
  .opp-nogo summary{list-style:none;cursor:pointer;padding:10px 14px;font-size:13px;color:var(--ink-2);display:flex;gap:8px;align-items:baseline} .opp-nogo summary::-webkit-details-marker{display:none}
  .opp-nogo summary::before{content:'›';color:var(--ink-3);transition:transform .15s} .opp-nogo[open] summary::before{transform:rotate(90deg)}
  .opp-list .empty{padding:16px 14px;color:var(--ink-3);font-size:13px}
  .opp-count{display:inline-flex;gap:6px;flex-wrap:wrap} .ochg{border-color:var(--yellow);color:var(--yellow)}
  .opp-count .verdict{font-size:12px;padding:2px 8px;border-radius:999px;font-weight:700}
  .opp-count .verdict.go{background:var(--good-bg);color:var(--green)} .opp-count .verdict.watch{background:var(--yellow-bg);color:var(--yellow)} .opp-count .verdict.no{background:var(--crit-bg);color:var(--red)}
  .opp-detail .chk{padding:4px 0;border-bottom:0} .opp-detail .best{padding:6px 0} .opp-detail .reasons{padding:0 0 6px;border-bottom:0}
  @media (max-width:760px){
    .opp-head{display:none}
    .opp-row{grid-template-columns:10px 62px 1fr auto;grid-template-areas:"d v s f" ". b b b" ". m m m";gap:4px 8px}
    .opp-row > .o-dot{grid-area:d} .opp-row > .o-v{grid-area:v} .opp-row > .o-sym{grid-area:s} .opp-row > .o-fill{grid-area:f}
    .opp-row > .o-block{grid-area:b} .opp-row > .o-block > span{white-space:normal}
    .opp-row > .o-meta{grid-area:m;display:flex;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums}
    .opp-row > .o-score,.opp-row > .o-ma,.opp-row > .o-d10,.opp-row > .o-ct,.opp-row > .o-r,.opp-row > .o-n{display:none}
    .opp-detail{grid-template-columns:1fr;padding-left:14px}
  }
  @media (prefers-reduced-motion:reduce){.opp-nogo summary::before{transition:none}}
  .opp-tools{display:flex;gap:6px 12px;align-items:center;flex-wrap:wrap;margin-bottom:12px;font-size:12px;color:var(--ink-3)}
  .opp-tools .wl-add input{width:180px}
  .wl-x{display:inline-flex;margin-left:6px;vertical-align:middle} .wl-del{min-height:0;padding:0 6px;line-height:20px;font-size:12px;border-color:transparent;color:var(--ink-3)}
  .wl-del:hover,.wl-del:focus-visible{border-color:var(--line-strong);color:var(--down)}
  .hero-pnl{display:grid;gap:3px;margin:10px 0 8px;padding:8px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
  .hero-pnl > span{display:flex;align-items:baseline;gap:8px;min-width:0} .hero-pnl em{font-style:normal;font-size:12px;color:var(--ink-3);margin-right:auto}
  .hero-pnl b{font-size:14px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap} .hero-pnl b.up{color:var(--up)} .hero-pnl b.down{color:var(--down)}
  .hero-pnl small{font-size:11.5px;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:52px;text-align:right}
  .mt-h{display:flex;gap:10px;align-items:baseline;margin-bottom:10px}
  .mt-body{display:grid;grid-template-columns:minmax(220px,1fr) minmax(260px,1.4fr);gap:18px;align-items:start} .mt-body > *{min-width:0}
  @media (max-width:640px){.mt-body{grid-template-columns:1fr}}
  .mt-type{display:flex;gap:8px;align-items:baseline} .mt-dir{font-size:22px;font-weight:600} .mt-vol{font-size:14px;color:var(--ink-2)}
  .mt-dir.d0,.mt-dir.d1{color:var(--down)} .mt-dir.d3,.mt-dir.d4{color:var(--up)}
  /* 宏观收起时的一行摘要 */
  .macrosum{display:flex;flex-wrap:wrap;gap:6px 18px;align-items:baseline;padding:10px 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);font-size:13px;font-variant-numeric:tabular-nums;margin-bottom:12px}
  .macrosum:empty{display:none} .macrosum > span, .macrosum #macrosum-mt > span{display:inline-flex;gap:6px;align-items:baseline} .macrosum #macrosum-mt:empty{display:none}
  .macrosum i{font-style:normal;font-size:11.5px;color:var(--ink-3)} .macrosum b{font-weight:600;color:var(--ink)} .macrosum small{font-size:11.5px;color:var(--ink-3)}
  .macrosum .mt-dir{font-size:13px;padding:0;background:none}
  .mt-scale{display:grid;grid-template-columns:repeat(5,1fr);gap:3px;margin:8px 0 6px} .mt-scale i{font-style:normal;font-size:11px;text-align:center;padding:3px 0;border-radius:4px;background:var(--band-1);color:var(--ink-3)}
  .mt-scale i.on{background:var(--info-bg);color:var(--ink);font-weight:600;outline:1px solid var(--info)}
  .mt-nums{font-size:12px} .mt-same{font-size:13px;margin-top:8px;color:var(--ink-2)}
  .mt-tbl{width:100%;font-size:12.5px} .mt-tbl .cur{background:var(--info-bg);font-weight:600} .mt-tbl tbody th{text-align:left;font-weight:400;color:var(--ink-3)}
  .mtbanner{display:flex;gap:6px 14px;flex-wrap:wrap;align-items:baseline;font-size:13px;color:var(--ink-2);padding:8px 12px;margin-bottom:12px;border:1px solid var(--line);border-radius:10px}
  .mtbanner b{color:var(--ink)} .mtbanner.weak{border-color:var(--warn);background:var(--warn-bg)}
  .oppblock{display:flex;flex-direction:column;gap:6px;padding:8px 12px;margin-bottom:12px;border-radius:10px;background:var(--crit-bg);color:var(--red);font-size:13px}
  .oppblock:not([hidden]){display:grid;grid-template-columns:1fr auto;align-items:center;gap:6px 12px} .oppblock b{color:var(--red)}
  #alerts .t.flash{animation:flash 1.6s ease-out} @keyframes flash{0%,40%{background:var(--crit-bg)}100%{background:transparent}}
  .objh{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin-bottom:12px}
  .objgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px 22px}
  .obj{display:grid;gap:6px;min-width:0;align-content:start} .obj-k{font-size:11px;color:var(--ink-3);letter-spacing:.06em} .obj-v{font-size:20px;font-variant-numeric:tabular-nums}
  .obj-v small{display:block;font-size:12px;line-height:1.4;color:var(--ink-3);margin-top:2px}
  .obar{position:relative;height:8px;border-radius:4px;background:var(--band-1)} .obar > b{position:absolute;left:0;top:0;bottom:0;border-radius:4px}
  .obar > i{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--ink-3)} .obar > i.pace{background:var(--info)}
  .oscale{position:relative;height:14px;font-size:10px;color:var(--ink-3);font-variant-numeric:tabular-nums} .oscale span{position:absolute;transform:translateX(-50%);white-space:nowrap}
  .ochecks{display:flex;gap:6px;flex-wrap:wrap;font-size:12px}
  .rv-scores{display:flex;flex-direction:column;justify-content:center;gap:9px}
  .rv-s{display:grid;grid-template-columns:56px 1fr 40px;align-items:center;gap:10px;font-size:12px;color:var(--ink-2)}
  .rv-s i{height:6px;border-radius:3px;background:var(--band-1);overflow:hidden} .rv-s i b{display:block;height:100%;border-radius:3px}
  .rv-s em{font-style:normal;font-weight:600;text-align:right;font-variant-numeric:tabular-nums}
  .rv-s.good b{background:var(--green)} .rv-s.warn b{background:var(--orange)} .rv-s.crit b{background:var(--red)}
  .rv-s.good em{color:var(--green)} .rv-s.warn em{color:var(--orange)} .rv-s.crit em{color:var(--red)}
  .rv-nums{display:flex;flex-direction:column;justify-content:center;gap:8px}
  .rv-nums > div{display:grid;grid-template-columns:56px auto 1fr;align-items:baseline;gap:10px}
  .rv-nums b{font-size:15px;font-variant-numeric:tabular-nums} .rv-nums small{font-size:12px;color:var(--ink-3)}
  .rv-nums .up{color:var(--green)} .rv-nums .down{color:var(--red)}
  .rv-row{display:grid;grid-template-columns:64px 1fr;gap:10px;align-items:baseline;margin-top:10px}
  .rv-chips{display:flex;flex-wrap:wrap;gap:6px}
  .rv-chips .chip{gap:6px;padding:2px 9px;font-size:12px;color:var(--ink-2)} .rv-chips .chip small{font-size:11.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}
  .rv-chips .chip.down{border-color:color-mix(in srgb,var(--red) 45%,transparent)} .rv-chips .chip.down small{color:var(--red)}
  .rv-chips small.up{color:var(--green)} .rv-chips small.down{color:var(--red)}
  @media(max-width:760px){ .rv-body{grid-template-columns:1fr} .rv-body > * + *{border-left:0;border-top:1px solid var(--line)} .rv-total{flex-direction:row;align-items:baseline;justify-content:flex-start;gap:12px} .rv-row{grid-template-columns:1fr;gap:4px} }
  form.trade{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;align-items:start}
  form.trade label{font-size:12px;color:var(--ink-3);display:block;margin-bottom:4px}
  form.trade input,form.trade select{width:100%;height:38px;box-sizing:border-box;padding:8px 10px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface-solid);color:var(--ink);font:inherit}
  form.trade input::placeholder{color:var(--ink-3)}
  form.trade input:focus,form.trade select:focus,.confirm .crow input:focus,.wl-add input:focus{border-color:var(--act)}
  .wl-add input{padding:6px 10px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface-solid);color:var(--ink);font:inherit}
  .result{font-size:13px;margin-top:12px;padding:9px 14px;border-radius:8px;border:1px solid var(--line);color:var(--ink-2)}
  .result.ok{border-color:var(--green);color:var(--green);background:var(--good-bg)} .result.bad{border-color:var(--red);color:var(--red);background:var(--crit-bg)}
  .result.pending{border-color:var(--act);color:var(--ink);display:flex;align-items:center;gap:8px}
  .spin{display:inline-block;flex:none;width:12px;height:12px;margin-right:6px;vertical-align:-1px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .7s linear infinite}
  .result .spin{margin-right:0;color:var(--act)}
  @keyframes spin{to{transform:rotate(360deg)}}
  @media(prefers-reduced-motion:reduce){.spin{animation-duration:2s}}
  button[aria-busy=true],button[aria-busy=true]:disabled{cursor:progress;opacity:1}
  .symhint{display:block;min-height:16px;margin-top:3px;font-size:11.5px;line-height:1.4;color:var(--ink-3)}
  .mk-trade{white-space:nowrap} .mk-trade .kbtn + .kbtn{margin-left:4px}
  .gate.ok{color:var(--green)} .gate.bad{color:var(--red)} .gate.na{color:var(--ink-3)}
  .sev.red{color:var(--red)} .sev.yellow{color:var(--yellow)} .sev.info{color:var(--ink-3)}
  .side-buy{color:var(--cyan);font-weight:600} .side-sell{color:var(--orange);font-weight:600}
  footer{max-width:1280px;margin:0 auto;padding:18px 24px 36px;display:flex;justify-content:space-between;align-items:baseline;gap:10px 16px;flex-wrap:wrap;border-top:1px solid var(--line);font-size:12px;color:var(--ink-3)}
  footer .quote{margin:0 0 4px;min-width:0;flex:1 0 100%} footer .core{color:var(--ink-2);min-width:0;flex:1 1 auto} footer .core b{font-weight:700;margin-right:6px;color:var(--ink)} footer .quote blockquote{margin:0;text-wrap:pretty;font-size:14px;line-height:1.6;color:var(--ink-2);cursor:help} footer .quote .cl{display:inline-block} footer .quote figcaption{margin-top:4px;font-size:12px;color:var(--ink-3)} footer .quote figcaption::before{content:'—— '} footer .core .r{white-space:nowrap}

/* 登录页 */
body.login{display:grid;place-items:center;min-height:100dvh;padding:24px 18px 12vh}
.login-wrap{width:min(360px,100%)}
.login-card{display:flex;flex-direction:column;padding:30px 28px 28px;border:1px solid var(--line);border-radius:14px;background:var(--surface);box-shadow:var(--shadow)}
.login-card .brand{margin:0 0 26px;font-size:22px}
.login-card .dot.bad{background:var(--red);box-shadow:0 0 0 3px var(--crit-bg)}
.login-card label{margin:14px 0 6px;font-size:12.5px;color:var(--ink-2)} .login-card .brand + label{margin-top:0}
.login-card input{height:44px;padding:0 12px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface-solid);color:var(--ink);font:inherit;font-size:16px}
.login-card input:hover{border-color:var(--ink-3)} .login-card input:focus-visible{border-color:var(--act);outline-offset:0}
.login-card input[aria-invalid=true]{border-color:var(--red)} .login-card input[aria-invalid=true]:focus-visible{outline-color:var(--red)}
.login-err{margin:12px 0 0;font-size:13px;color:var(--red)}
.login-card button{margin-top:22px;height:44px;font-size:15px}

/* 下单二次确认 */
.confirm{margin-top:12px;border:1px solid var(--red);border-radius:10px;background:var(--crit-bg)}
.confirm .ch{padding:10px 14px;font-weight:700;color:var(--red);border-bottom:1px solid var(--line)}
.confirm .cbody{padding:10px 14px;font-size:14px;line-height:1.7} .confirm .cbody b{font-variant-numeric:tabular-nums}
.confirm .crow{display:flex;gap:8px;padding:0 14px 10px;flex-wrap:wrap} .confirm .crow input{flex:1;min-width:180px;padding:8px 10px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface-solid);color:var(--ink);font:inherit}
.confirm .cnote{padding:0 14px 10px;font-size:11px;color:var(--ink-3)}
.confirm .cwarn{margin-top:8px;padding:8px 10px;border-radius:8px;background:var(--warn-bg);color:var(--orange);font-size:13px;line-height:1.6} .confirm .cwarn b{color:var(--orange)}

/* 宏观：统一行 + 可展开曲线 */
.mgroup .ch small{color:var(--ink-3);font-weight:400;margin-left:8px;font-size:11px}
.mrow.hasx{cursor:pointer} .mrow.hasx:hover{background:var(--surface-2)}
.mrow .l .x{display:inline-block;width:12px;color:var(--ink-3);font-style:normal;transition:transform .15s;margin-right:2px}
.mrow.open .l .x{transform:rotate(90deg)}
.mchart{padding:6px 16px 10px;border-bottom:1px solid var(--line);background:var(--surface-2)} .mchart svg{width:100%;height:auto;display:block}
.mchart-meta{font-size:11px;color:var(--ink-3);margin-top:2px}

/* 资产分布环形图 */
.stat.alloc .al-wrap{display:flex;gap:8px;align-items:center;margin:2px 0 4px}
.stat.alloc .donut{width:80px;height:80px;flex:none}
.stat.alloc .al-legend{display:flex;flex-direction:column;gap:0;font-size:12px;min-width:0;flex:1}
.stat.alloc .al{display:flex;align-items:center;gap:6px;color:var(--ink-2);width:100%;min-height:24px;padding:0 4px;margin:0 -4px;border:0;border-radius:4px;background:transparent;font-size:12px;text-align:left} .stat.alloc .al:hover{color:var(--ink);background:var(--surface-2)} .stat.alloc .al i{width:8px;height:8px;border-radius:2px;flex:none} .stat.alloc .al span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .stat.alloc .al b{font-variant-numeric:tabular-nums;color:var(--ink)}
/* 持仓表排序 */
th.sortable{cursor:pointer;user-select:none;white-space:nowrap} th.sortable:hover{color:var(--ink)} th.sortable i{font-style:normal;font-size:10px;color:var(--ink-3)} th.sortable.on{color:var(--ink)} th.sortable.on i{color:var(--cyan)}
  footer .copy{white-space:nowrap}

  /* 换仓方案面板 / 净值曲线 */
  .rollbtn{margin-left:8px;font-size:12px;border:1px solid var(--line-strong);border-radius:999px;padding:0 10px;min-height:24px;display:inline-flex;align-items:center;vertical-align:middle;color:var(--ink-2);text-decoration:none;white-space:nowrap}
  .rollbtn:hover{border-color:var(--act);color:var(--act);text-decoration:none}
  a.chip,.rollclose,#tokenrefresh{min-height:24px;display:inline-flex;align-items:center}
  .rollpanel{padding:10px 16px 14px;border-bottom:1px solid var(--line);background:var(--surface-2,transparent);font-size:12.5px}
  .rollpanel table{width:100%;border-collapse:collapse;margin-top:8px} .rollpanel th,.rollpanel td{padding:5px 8px;text-align:left;white-space:nowrap;border-bottom:1px solid var(--line)} .rollpanel tr.dim{opacity:.55} .rollpanel th.num,.rollpanel td.num{text-align:right}
  .rollhead{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap} .rollhead .rollclose{margin-left:auto;color:var(--ink-3)}
  /* 净值曲线 */
  .eqhead{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:10px} .eqhead .seg button{white-space:nowrap}
  .seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:8px;padding:2px;gap:2px}
  .seg button{border:0;border-radius:6px;padding:2px 10px;font-size:12px;color:var(--ink-3)} .seg button:hover{color:var(--ink);background:var(--surface-2)}
  .seg button[aria-pressed="true"]{background:var(--surface-2);color:var(--ink);font-weight:600;box-shadow:inset 0 0 0 1px var(--line-strong)}
  .eqstats{display:flex;flex-wrap:wrap;gap:4px 20px;align-items:baseline;font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums;margin-bottom:6px}
  .eqstats i{font-style:normal;color:var(--ink-3);margin-right:6px} .eqstats b{font-weight:600}
  .eqstats .eqret{font-size:22px;font-weight:700;letter-spacing:-.01em;line-height:1.2}
  #eqchart{position:relative} #eqchart svg{display:block;width:100%;height:auto;font-family:inherit;touch-action:pan-y}
  .eq-grid{stroke:var(--line);stroke-width:1} .eq-grid.zero{stroke:var(--line-strong)} .eq-tick{stroke:var(--line-strong)}
  .eq-ax{font-size:11px;fill:var(--ink-3);font-variant-numeric:tabular-nums}
  .eq-area.up{fill:var(--good-bg)} .eq-area.dn{fill:var(--crit-bg)}
  .eq-line{fill:none;stroke:var(--ink-2);stroke-width:1.5;stroke-linejoin:round;stroke-linecap:round}
  .eq-bench{fill:none;stroke:var(--blue);stroke-width:1.25;stroke-dasharray:4 3;stroke-linejoin:round;opacity:.85} .eqstats .bn{color:var(--blue)} .eq-tip .bn{color:var(--blue)}
  .eq-last{fill:var(--ink)} .eq-dot{fill:var(--bg);stroke:var(--ink);stroke-width:2}
  .eq-x{stroke:var(--ink-3);stroke-width:1;stroke-dasharray:2 3}
  .eq-hit{fill:transparent;cursor:crosshair}
  .eq-tip{position:absolute;top:4px;display:flex;flex-direction:column;gap:1px;padding:6px 9px;font-size:12px;line-height:1.4;border:1px solid var(--line-strong);border-radius:6px;background:var(--surface-solid);color:var(--ink-2);pointer-events:none;font-variant-numeric:tabular-nums;white-space:nowrap}
  .eq-tip b{color:var(--ink);font-weight:600}
  .eqweeks{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px} .eqweeks .chip{gap:6px;font-variant-numeric:tabular-nums} .eqweeks .chip b{font-weight:600;color:var(--ink-2)} .eqweeks .chip small{color:var(--ink-3);font-size:11px}
  .eqweeks .chip.up{color:var(--green)} .eqweeks .chip.down{color:var(--red)}
  @media(max-width:600px){ .eqweeks .chip:nth-last-child(n+5){display:none} }
  #closedtbl td small{display:block;color:var(--ink-3);font-size:11px}

  /* 资产分布：悬停 / 点击高亮 */
  .stat.alloc .seg{cursor:pointer;transition:opacity .15s,stroke-width .15s} .stat.alloc .seg.dim{opacity:.35} .stat.alloc .seg.on{stroke-width:15}
  .stat.alloc .al.on{background:var(--line-strong);color:var(--ink)} .stat.alloc .al.on b{color:var(--ink)}
  .stat.alloc .al-note{font-size:11px;color:var(--ink-2);min-height:14px;margin:2px 0 4px;line-height:1.35}
  #postbl tbody tr.hl td{background:var(--good-bg)} #postbl tbody tr.hl td.sym{box-shadow:inset 3px 0 0 var(--cyan)}

  /* 逐笔复盘归因 */
  .jhead{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px} .jhead .chip.up{color:var(--green);border-color:var(--green)} .jhead .chip.down{color:var(--red);border-color:var(--red)}
  .jgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px} .jb{border:1px solid var(--line);border-radius:10px;padding:8px 10px;min-width:0} .jb-t{font-size:11px;color:var(--ink-3);letter-spacing:.06em;margin-bottom:4px}
  .jgrid + .jhead{margin-top:14px}
  .jb-r{display:grid;grid-template-columns:1fr auto auto;gap:8px;font-size:12px;padding:3px 0;border-bottom:1px solid var(--line)} .jb-r:last-child{border-bottom:0} .jb-r b{font-weight:600}
  .chip.vio{color:var(--red);border-color:var(--red);font-size:10.5px;padding:1px 6px}

  /* 手机：≤600px */
  .hero > *, #oppgrid > *, .grid2 > *, .jgrid > *{min-width:0}
  @media(max-width:1100px){
    .topbar nav.sections{display:flex;flex-wrap:nowrap;overflow-x:auto;width:100%;order:9;margin:2px -4px 0;padding-bottom:2px;-webkit-overflow-scrolling:touch}
    .topbar nav.sections a{white-space:nowrap;flex:none}
  }
  @media(max-width:600px){
    main{padding:14px 12px 32px}
    .sec-h{flex-wrap:wrap;gap:6px 8px} .sec-h h2{white-space:nowrap;font-size:17px} .sec-h .right{margin-left:0;width:100%;text-align:left}
    .hero{grid-template-columns:1fr 1fr;gap:8px} .hero .card.big,.hero .card.alloc{grid-column:1/-1} .hero .value{font-size:22px}
    #oppgrid{grid-template-columns:1fr}
    .card.opp .ch{flex-wrap:wrap}
    form.trade{grid-template-columns:1fr 1fr}
    .arow{grid-template-columns:1fr;gap:2px} .arow .s{font-weight:600}
    .rollpanel table, .card.opp table{font-size:11.5px}
    .principle{grid-template-columns:1fr}
    table{font-size:12px} th,td{padding:8px 8px}
    footer{flex-direction:column;align-items:flex-start;gap:10px}
  }

  .rollbtn.snz{color:var(--ink-3)} .agroup.snoozed{opacity:.8} .agroup.snoozed summary{padding:8px 16px;cursor:pointer;font-size:12px;color:var(--ink-3)}

  .impact{display:flex;gap:14px;flex-wrap:wrap;align-items:center;font-size:12.5px;color:var(--ink-2);padding:8px 12px;border:1px dashed var(--line-strong);border-radius:10px;margin-top:8px} .impact .k{font-weight:700;color:var(--ink)} .impact b{font-weight:600} .impact b.up{color:var(--green)} .impact b.down{color:var(--red)} .impact b.flat{color:var(--ink-2)}
  #postbl td.dist{white-space:nowrap;font-size:12px} #postbl td.dist .warn{color:var(--orange)}
  #postbl td.dist > span{display:inline-flex;gap:3px;align-items:baseline;margin-left:10px} #postbl td.dist > span:first-child{margin-left:0}
  #postbl td.dist i{font-style:normal;font-size:11px;color:var(--ink-3)}

  /* 操作失败的统一提示（core.js run） */
  #toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:60;max-width:min(560px,calc(100% - 32px));padding:10px 14px;border-radius:10px;font-size:13px;line-height:1.5;background:var(--surface-solid);border:1px solid var(--red);color:var(--red);box-shadow:0 4px 20px rgba(0,0,0,.3)}
.simfoot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;font-size:12px;color:var(--ink-3);border-top:1px solid var(--line)}
#simtbl tr.cur td{background:var(--surface-2)}
.selfcheck{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:10px 0 12px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;font-size:13px}
.selfcheck .sc-q{display:flex;flex-wrap:wrap;gap:6px 16px;flex-basis:100%}
.selfcheck .sc-q label{display:inline-flex;align-items:center;gap:6px;color:var(--ink-2);cursor:pointer}

/* ---- 交易台改版：三视图、指标带、待处理、持仓展开、下单抽屉 ---- */
.topbar .views{display:flex;gap:2px;border:1px solid var(--line-strong);border-radius:9px;padding:2px;margin-left:6px}
.topbar .views button{border:0;border-radius:7px;padding:4px 14px;min-height:28px;color:var(--ink-3);display:inline-flex;gap:6px;align-items:center}
.topbar .views button:hover{color:var(--ink);background:var(--surface-2)}
.topbar .views button[aria-selected="true"]{background:var(--surface-2);color:var(--ink);font-weight:600}
.topbar .views .badge{font-size:11px;min-width:18px;padding:0 5px;border-radius:9px;background:var(--crit-bg);color:var(--red);font-weight:700;text-align:center}
.topbar nav.sections{display:flex;gap:2px;max-width:1280px;margin:0 auto;padding:0 18px 6px;overflow-x:auto}
.topbar nav.sections a{font-size:12px;padding:3px 8px}
.topbar #tradebtn{padding:5px 16px;position:relative} #tradebtn.needself::after{content:"";position:absolute;top:-3px;right:-3px;width:9px;height:9px;border-radius:50%;background:var(--orange);box-shadow:0 0 0 2px var(--bg-top)}
.todaybar{display:flex;align-items:center;gap:10px;justify-content:space-between;margin:0 0 14px;padding:8px 14px;border-radius:10px;background:var(--crit-bg);color:var(--red);font-size:13px}
.view > section:first-child, .view > .hero{margin-top:0}

.hero{grid-template-columns:minmax(250px,1.05fr) minmax(250px,1.1fr) minmax(0,3fr);align-items:stretch}
.strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));padding:0;overflow:hidden}
.strip > *{min-width:0;padding:11px 14px;border-right:1px solid var(--line)} .strip > :nth-child(4n){border-right:0}
.strip > :nth-child(-n+4){border-bottom:1px solid var(--line)}
.strip .rule{border:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);border-radius:0;background:transparent;padding:11px 14px 10px} .strip .rule:nth-child(4){border-right:0}
.strip .rule::before{height:2px}
.strip .m .k{font-size:12px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.strip .m .v{font-size:19px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.25;margin-top:2px}
.strip .m .s{font-size:12px;color:var(--ink-3);overflow:hidden;margin-top:3px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;line-height:1.4}
@media(max-width:1100px){ .hero{grid-template-columns:1fr 1fr} .hero .strip{grid-column:1/-1} }

.todo{overflow:hidden}
#alerts .t{display:grid;grid-template-columns:4px minmax(150px,1.1fr) minmax(0,3fr) auto;column-gap:14px;align-items:center;padding:10px 14px 10px 0;border-bottom:1px solid var(--line)}
.t .sev{align-self:stretch;border-radius:0 3px 3px 0;grid-row:1 / span 2} .t.crit .sev{background:var(--red)} .t.warn .sev{background:var(--orange)}
.t .who{min-width:0} .t .who b{display:block;font-size:13.5px;overflow-wrap:anywhere} .t .who small{font-size:12px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.t.crit .who b{color:var(--ink)} .t.warn .who b{color:var(--ink-2)}
.t .why{display:flex;flex-wrap:wrap;gap:5px;min-width:0} .t .why .chip{cursor:help}
.t .do{display:flex;gap:6px;justify-content:flex-end;flex-wrap:wrap}
.kbtn.danger{border-color:transparent;background:var(--crit-bg);color:var(--red);font-weight:600} .kbtn.danger:hover{border-color:var(--red);color:var(--red)}
.t .tmsg{grid-column:2 / -1;font-size:12px} .t .tmsg summary{cursor:pointer;color:var(--ink-3);width:max-content;margin-top:2px} .t .tmsg .arow{grid-template-columns:1fr;padding:6px 0;border-bottom:0}
.t + .rollpanel, .t .rollpanel{grid-column:1/-1}
.todo .tinfo{border-top:1px solid var(--line)} .todo .tinfo summary{padding:8px 14px;cursor:pointer;font-size:12px;color:var(--ink-3)}
.todo .empty{padding:16px}
@media(max-width:760px){ #alerts .t{grid-template-columns:4px minmax(0,1fr);padding-right:12px;row-gap:6px} .t .sev{grid-row:1 / span 4} .t .why,.t .do,.t .tmsg{grid-column:2} .t .do{justify-content:flex-start} }

#postbl tr.pos{cursor:pointer} #postbl tr.pos:hover td{background:var(--surface-2)}
#postbl .sym .x{display:inline-block;width:12px;color:var(--ink-3);font-style:normal;transition:transform .15s} #postbl tr.pos[aria-expanded="true"] .sym .x{transform:rotate(90deg)}
#postbl tr.posdet td{background:var(--surface);padding:10px 14px 12px}
.pd{display:flex;flex-wrap:wrap;gap:8px 26px;font-size:12.5px} .pd em{display:block;font-style:normal;font-size:11px;color:var(--ink-3)} .pd b{font-variant-numeric:tabular-nums;font-weight:600}

.scrim{position:fixed;inset:0;z-index:40;background:rgba(0,0,0,.5)} :root[data-theme="light"] .scrim{background:rgba(16,26,19,.3)}
.drawer{position:fixed;top:0;right:0;bottom:0;z-index:41;width:min(480px,100%);display:flex;flex-direction:column;background:var(--surface-solid);border-left:1px solid var(--line-strong);transform:translateX(100%);transition:transform .2s ease;visibility:hidden}
.drawer.open{transform:none;visibility:visible}
.drawer .dh{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line)} .drawer .dh b{font-size:15px;overflow-wrap:anywhere} .drawer .dh button{margin-left:auto;flex:none}
.drawer .db{flex:1;overflow-y:auto;padding:14px 16px 24px;display:flex;flex-direction:column;gap:12px}
.drawer .dctx{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:10px 12px;border-radius:8px;background:var(--surface-2);font-size:12.5px} .drawer .dctx em{display:block;font-style:normal;font-size:11px;color:var(--ink-3)} .drawer .dctx b{font-variant-numeric:tabular-nums}
.drawer .dmeta{display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px 12px;font-size:12px;color:var(--ink-3)}
.drawer .selfcheck{margin:0}
.drawer form.trade{grid-template-columns:1fr 1fr}
.drawer form.trade > div:has(#f_symbol){grid-column:1/-1}
.drawer .confirm{margin-top:0}
body.drawer-open{overflow:hidden}
@media (prefers-reduced-motion: reduce){ .drawer{transition:none} }
@media(max-width:600px){ .topbar .views{order:5;width:100%;margin:4px 0 0} .topbar .views button{flex:1;justify-content:center} .strip{grid-template-columns:1fr 1fr} .strip > :nth-child(n){border-right:1px solid var(--line);border-bottom:1px solid var(--line)} .strip > :nth-child(2n){border-right:0} .strip .rule:nth-child(4){border-right:0} .strip .rule:nth-child(3){border-right:1px solid var(--line)} }
.strip .rule-h{flex-wrap:nowrap;min-width:0} .strip .rule-k{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0} .strip .rule-v{font-size:17px;flex:none}
/* 规则说明是「该怎么办」，不能被省略号切掉：最多两行，完整文字在 title 里 */
.strip .rule-s{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal;line-height:1.4;min-height:2.8em} .strip .rule-s .word{margin-right:6px}
.strip .rule-k{font-size:11.5px} .strip .rule-h{gap:6px}
.t .tmsg{grid-column:2 / -1;font-size:12px;margin-top:4px} .t .tmsg .arow{grid-template-columns:1fr;padding:4px 0;border-bottom:0}
.linkbtn{border:0;background:none;padding:2px 4px;min-height:0;font-size:12px;color:var(--ink-3);text-decoration:underline dotted;text-underline-offset:3px} .linkbtn:hover{color:var(--act)}
.drawer form.trade > div:has(> [data-act="pretrade"]){grid-column:1}

/* 手机：持仓表每行变卡片，标的 + 买卖一行，其余三列带标签；盈亏、R、市值排前面 */
@media(max-width:640px){
  #postbl thead{display:none} #postbl, #postbl tbody{display:block;width:100%}
  #postbl tr.pos{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px 10px;padding:10px 12px;border-bottom:1px solid var(--line)}
  #postbl tr.pos td{display:block;padding:0;border:0;text-align:left;white-space:normal;min-width:0;background:transparent}
  #postbl tr.pos td[data-k]::before{content:attr(data-k);display:block;font-size:11px;color:var(--ink-3);font-weight:400;margin-bottom:1px}
  #postbl tr.pos td.sym{grid-column:1 / 3;order:-2;font-size:13.5px} #postbl tr.pos td.mk-trade{order:-1;text-align:right}
  #postbl tr.pos td.pnl{order:0;font-weight:600} #postbl tr.pos td.rcell{order:1} #postbl tr.pos td.mv{order:2}
  #postbl tr.pos td{order:3} #postbl tr.pos td.none{display:none}
  #postbl tr.pos:hover td{background:transparent}
  #postbl tr.posdet{display:block} #postbl tr.posdet td{display:block}
  #positions .pos-hint{display:none} #positions .pos-sort{display:inline-block}
}
.pos-sort{display:none;font:inherit;font-size:12px;padding:3px 8px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface-solid);color:var(--ink)}

/* 本周成交：未过门禁的补救动作 */
.ungfix{display:flex;flex-wrap:wrap;gap:6px;margin-top:5px} #orderstbl tr.notegrow input{min-width:0} #orderstbl tr.notegrow td{background:var(--surface-2);padding:8px 10px}

/* 只有一行空状态的表：不摆表头，空状态文字里自带表名 */
.tw table:has(> tbody > tr:only-child > td.empty) > thead{display:none}
.tw table:has(> tbody > tr:only-child > td.empty) td.empty{padding:10px 14px;text-align:left}
.kbhelp{position:fixed;right:16px;bottom:16px;z-index:40;padding:12px 16px;border:1px solid var(--line-strong);border-radius:10px;background:var(--surface-solid);box-shadow:var(--shadow);font-size:12.5px;color:var(--ink-2)}
.kbhelp dl{display:grid;grid-template-columns:auto auto;gap:4px 14px;margin:8px 0 0} .kbhelp dt{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--ink)} .kbhelp dd{margin:0}
/* 标的行情 16 列：收紧左右内边距，1280 宽放得下 */
#markettbl th,#markettbl td{padding-left:8px;padding-right:8px} #markettbl th:first-child,#markettbl td:first-child{padding-left:12px}
/* 买入三问：标签在左、输入框在右，三行 */
form.trade fieldset.thesis{display:grid;grid-template-columns:auto 1fr;gap:6px 10px;align-items:center;margin:0;padding:10px 12px 12px;border:1px solid var(--line);border-radius:10px}
form.trade fieldset.thesis[hidden]{display:none}
form.trade fieldset.thesis legend{padding:0 4px;font-size:12px;color:var(--ink-3)}
form.trade fieldset.thesis label{margin:0}
