:root{
    --bg:#0a0e14; --panel:#10151f; --panel2:#0d121b; --line:#1c2533; --line2:#141b27;
    --txt:#c9d4e3; --dim:#5c6b80; --bright:#eef4ff;
    --up:#00d68f; --down:#ff4d4d; --accent:#ffb000; --blue:#3d8bff; --purp:#a06bff;
    --bg2:#080b11; --inset:#0a0f17; --hover:#131a26; --lesson-bg:#0d1119;
    --mono:"SF Mono","JetBrains Mono","Roboto Mono",ui-monospace,monospace;
  }
  /* ☀️ 白天 / DAY THEME — 米黄纸感（呼应 C 杂志版） */
  body.light{
    --bg:#f4efe4; --panel:#fbf8f0; --panel2:#efe7d6; --line:#ddd3c0; --line2:#e9e1cf;
    --txt:#3b3327; --dim:#8a7c68; --bright:#211c16;
    --up:#2f7d4e; --down:#bb3a2b; --accent:#bd8a2e; --blue:#3d6aa8; --purp:#7a5bb0;
    --bg2:#ece3d1; --inset:#e9e0cd; --hover:#efe8d8; --lesson-bg:#f4ecd6;
  }
  body.light polyline[stroke="#00d68f"]{stroke:var(--up)}
  body.light polyline[stroke="#ff4d4d"]{stroke:var(--down)}
  body.light .b-buy{background:rgba(47,125,78,.12);border-color:rgba(47,125,78,.32)}
  body.light .b-sell{background:rgba(187,58,43,.12);border-color:rgba(187,58,43,.32)}
  *{margin:0;padding:0;box-sizing:border-box}
  body{background:var(--bg);color:var(--txt);font-family:var(--mono);font-size:13px;line-height:1.5;transition:background .25s,color .25s}
  .wrap{max-width:1320px;margin:0 auto;padding:0 16px}
  a{color:inherit;text-decoration:none}

  .topbar{border-bottom:1px solid var(--line);background:var(--panel2);position:sticky;top:0;z-index:20}
  .topbar .wrap{display:flex;align-items:center;gap:24px;height:46px}
  .logo{display:flex;align-items:center;min-width:0;color:var(--accent);font-weight:700;letter-spacing:2px;font-size:15px}
  .logo span{color:var(--dim);font-weight:400;letter-spacing:0}
  /* 顶栏名言：单行省略，不挤压导航 */
  .logo .quote{font-size:12px;margin-left:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:0 1 auto;min-width:0}
  .logo .q-roll{width:13px;height:13px;flex:none;margin-left:7px;color:var(--dim);cursor:pointer}
  .logo .q-roll:hover{color:var(--accent)}
  .nav{display:flex;gap:2px;margin-left:auto}
  .nav a{color:var(--dim);padding:6px 14px;border:1px solid transparent;font-size:12px;cursor:pointer}
  .nav a.on{color:var(--bright);border-color:var(--line);background:var(--panel)}
  .nav a:hover{color:var(--txt)}
  /* 隐私小眼睛：隐藏/显示绝对金额 */
  .eye-btn{background:transparent;border:1px solid var(--line);color:var(--dim);padding:0;width:32px;height:27px;cursor:pointer;display:flex;align-items:center;justify-content:center}
  .eye-btn:hover{color:var(--bright);border-color:var(--accent)}
  .eye-btn svg{width:15px;height:15px}
  .sens{transition:filter .15s}
  .privacy .sens{filter:blur(7px);user-select:none}
  .theme-btn{background:transparent;border:1px solid var(--line);color:var(--dim);font-family:var(--mono);font-size:12px;padding:5px 11px;cursor:pointer;display:flex;align-items:center;gap:6px;line-height:1}
  .theme-btn:hover{color:var(--bright);border-color:var(--accent)}
  .clock{color:var(--dim);font-size:11px}

  .ticker{overflow:hidden;border-bottom:1px solid var(--line);background:var(--bg2);height:30px;display:flex;align-items:center}
  .ticker-track{display:flex;flex:none;width:max-content;white-space:nowrap;animation:scroll 40s linear infinite}
  .ticker-seq{display:flex;flex:none;gap:34px;padding-right:34px}
  @keyframes scroll{from{transform:translateX(0)}to{transform:translateX(calc(-100% / var(--copies,2)))}}
  .tk{font-size:12px}.tk b{color:var(--bright)}.tk .u{color:var(--up)}.tk .d{color:var(--down)}

  .view{display:none}.view.on{display:block}

  /* kpi */
  .kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);border:1px solid var(--line);margin-top:18px}
  .kpi{background:var(--panel);padding:14px 16px}
  .kpi .l{color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:1px}
  .kpi .v{color:var(--bright);font-size:22px;font-weight:700;margin-top:6px}
  .kpi .s{font-size:11px;margin-top:3px}

  .sec{margin-top:20px}
  .sec-h{display:flex;align-items:center;gap:10px;margin-bottom:8px}
  .sec-h .bar{width:3px;height:14px;background:var(--accent)}
  .sec-h h2{font-size:12px;letter-spacing:2px;text-transform:uppercase;color:var(--bright);font-weight:600}
  .sec-h .meta{color:var(--dim);font-size:11px;margin-left:auto}
  /* 净值/收益率 单图切换分段控件 */
  .eq-seg{display:flex;border:1px solid var(--line)}
  .eq-seg span{padding:2px 10px;font-size:11px;color:var(--dim);cursor:pointer;user-select:none}
  .eq-seg span+span{border-left:1px solid var(--line)}
  .eq-seg span.on{color:var(--bright);background:var(--panel2)}

  .grid{display:grid;grid-template-columns:1.65fr 1fr;gap:16px}
  .panel{background:var(--panel);border:1px solid var(--line)}
  .panel-h{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--line);color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:1px}
  .panel-h .toggle{display:flex;gap:0}
  .panel-h .toggle span{padding:2px 9px;border:1px solid var(--line);color:var(--dim);font-size:10px;cursor:pointer}
  .panel-h .toggle span.on{background:var(--panel2);color:var(--bright);border-color:var(--blue)}

  /* equity curve */
  .chart{padding:8px}
  .chart svg{width:100%;height:140px;display:block}
  .chart svg line{stroke:var(--line)}

  /* 净值/收益率双图：右侧刻度 + hover tooltip */
  .eqchart{position:relative;padding:8px 44px 8px 8px}        /* 右留白给刻度标签 */
  .eqchart svg{width:100%;height:150px;display:block}
  .eqchart svg line{stroke:var(--line);stroke-width:.5}
  .eqchart .eq-axis{position:absolute;top:8px;right:6px;width:38px;height:150px;pointer-events:none}
  .eqchart .eq-axis span{position:absolute;right:0;transform:translateY(-50%);color:var(--dim);font-size:9px;font-family:var(--mono);white-space:nowrap}
  .eqchart .eq-tip{position:absolute;top:6px;background:var(--panel2);border:1px solid var(--line);padding:4px 8px;pointer-events:none;z-index:2;transform:translateX(-50%);white-space:nowrap}
  .eqchart .eq-tip .d{color:var(--dim);font-size:10px}
  .eqchart .eq-tip .v{color:var(--bright);font-size:12px;font-weight:600;font-family:var(--mono)}

  table{width:100%;border-collapse:collapse}
  th{color:var(--dim);font-size:10px;text-transform:uppercase;letter-spacing:1px;text-align:right;padding:9px 12px;border-bottom:1px solid var(--line);font-weight:500}
  th:first-child{text-align:left}
  td{padding:8px 12px;text-align:right;border-bottom:1px solid var(--line2);font-size:12px}
  td:first-child{text-align:left;color:var(--bright);font-weight:600}
  tr:hover td{background:var(--hover)}
  .up{color:var(--up)}.down{color:var(--down)}
  .tag{font-size:9px;border:1px solid var(--line);padding:1px 5px;color:var(--dim);margin-left:6px}
  .opt{color:var(--accent)!important}
  .mini{display:inline-block;width:48px;height:14px;vertical-align:middle}
  /* 持仓表：两行单元格 + 可排序表头 */
  .pos-tbl th.sortable{cursor:pointer;user-select:none;white-space:nowrap}
  .pos-tbl th.sortable:hover{color:var(--bright)}
  .pos-tbl th .arr{color:var(--accent);font-size:9px}
  .pos-tbl td .nm{color:var(--bright);font-weight:600}
  .pos-tbl td .sub{color:var(--dim);font-size:11px;margin-top:2px;font-weight:400}
  .pos-tbl td .sub.up{color:var(--up)}.pos-tbl td .sub.down{color:var(--down)}
  /* 期权分组：分隔行 + 橙色行（沿用 --accent，深色/米黄两套主题通吃） */
  .pos-tbl tr.grp-sep td{text-align:left;color:var(--accent);font-size:9px;letter-spacing:2px;text-transform:uppercase;padding:7px 12px 5px;border-bottom:1px solid var(--line);background:var(--bg2)}
  .pos-tbl tr.grp-sep:hover td{background:var(--bg2)}
  .pos-tbl tr.opt-row td .nm{color:var(--accent)}
  .pos-tbl tr.opt-row:hover td{background:var(--hover)}

  .alloc{padding:14px 16px}
  .alloc-row{display:flex;align-items:center;gap:10px;margin-bottom:11px}
  .alloc-row .nm{width:56px;color:var(--txt);font-size:12px}
  .alloc-row .track{flex:1;height:7px;background:var(--inset);border:1px solid var(--line);position:relative}
  .alloc-row .fill{height:100%;background:linear-gradient(90deg,var(--blue),#2a5fb0)}
  .alloc-row .pct{width:42px;color:var(--dim);font-size:11px;text-align:right}
  .cash .fill{background:linear-gradient(90deg,var(--up),#0a7a55)}
  .semi .fill{background:linear-gradient(90deg,var(--purp),#5a3aa0)}

  /* 配置权重 treemap（矩形树图）—— 面积 ∝ 占净值权重，布局由 JS 实时计算 */
  .tm-head{display:flex;align-items:baseline;justify-content:space-between;color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:1px;padding:12px 14px 0}
  .tm-head .tm-sub{font-size:10px;letter-spacing:.5px;text-transform:none}
  .tm{position:relative;width:100%;height:360px;margin-top:10px;background:var(--bg2);overflow:hidden}
  .tm .tile{position:absolute;border-radius:5px;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:3px;cursor:default;outline:1px solid transparent;transition:filter .12s,outline-color .12s}
  .tm .tile:hover{filter:brightness(1.09);outline-color:rgba(255,255,255,.32);z-index:3}
  body.light .tm .tile:hover{outline-color:rgba(0,0,0,.25)}
  .tm .tile .nm{font-weight:700;letter-spacing:.4px;line-height:1.05}
  .tm .tile .pc{font-weight:600;opacity:.9;margin-top:1px}
  .tm .tile.tm-opt{outline:1px dashed rgba(168,120,46,.9)}     /* 期权：虚线琥珀边（已调暗，配合淡化色块；tm-opt 避免撞全局 .opt 的 !important 文字色） */
  .tm .tm-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--dim);font-size:12px}
  .alloc-row.ind .nm{width:78px;font-size:12px;white-space:nowrap}     /* 行业占比：类目名比代码长，加宽 */

  /* movers */
  .movers{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line)}
  .mv{background:var(--panel);padding:11px 14px}
  .mv .s{color:var(--bright);font-weight:700;font-size:13px}
  .mv .p{color:var(--dim);font-size:11px;margin-top:2px}
  .mv .c{font-size:15px;font-weight:700;margin-top:4px}

  /* trades */
  .stat4{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);margin-top:18px}
  .st{background:var(--panel);padding:13px 16px}
  .st .l{color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:1px}
  .st .v{color:var(--bright);font-size:20px;font-weight:700;margin-top:5px}
  .filters{display:flex;gap:2px;margin:16px 0 8px}
  .filters span{padding:5px 13px;border:1px solid var(--line);color:var(--dim);font-size:11px;cursor:pointer}
  .filters span.on{color:var(--bright);background:var(--panel);border-color:var(--blue)}
  .month-h{color:var(--accent);font-size:11px;letter-spacing:2px;text-transform:uppercase;margin:18px 0 6px;padding-left:2px}

  .log .row{display:grid;grid-template-columns:62px 76px 1fr 96px 70px;gap:12px;padding:11px 14px;border-bottom:1px solid var(--line2);align-items:center}
  .log .row:hover{background:var(--hover)}
  .log .dt{color:var(--dim);font-size:11px}
  .log .dt .dt-tm{font-size:10px;opacity:.65;margin-top:1px}  /* 改名 dt-tm：裸 tm 撞 treemap 容器 .tm{height:360px} */
  .badge{font-size:10px;padding:2px 7px;text-align:center;font-weight:700;letter-spacing:1px}
  .b-buy{background:rgba(0,214,143,.14);color:var(--up);border:1px solid rgba(0,214,143,.3)}
  .b-sell{background:rgba(255,77,77,.14);color:var(--down);border:1px solid rgba(255,77,77,.3)}
  .log .desc b{color:var(--bright)}
  .log .note{color:var(--dim);font-size:11px;margin-top:3px;line-height:1.5}
  .log .amt{color:var(--bright);font-size:12px;font-weight:600;text-align:right}
  .log .pnl{text-align:right;font-size:12px;font-weight:600}

  /* 交易日期筛选（.filters 行右侧；tfilter- 前缀防撞车。双类选择器盖过 .filters span 的边框/内边距）
     position:relative 给 .dp-pop 日历弹层做定位锚 */
  .tfilter{display:flex;align-items:center;gap:6px;margin-left:auto;position:relative}
  .tfilter .tfilter-lab,.tfilter .tfilter-sep{padding:0;border:none;color:var(--dim);font-size:11px;cursor:default}
  .tfilter .tfilter-x{padding:2px 7px;border:1px solid var(--line);color:var(--dim);font-size:11px;line-height:1.5;cursor:pointer}
  .tfilter .tfilter-x:hover{color:var(--bright);border-color:var(--accent)}
  /* ===== 自绘日历（dp- 前缀）：按钮式触发字段 + 弹层，只亮有交易记录的日期 ===== */
  .tfilter .dp-trig{min-width:88px;text-align:center;background:var(--panel);border:1px solid var(--line);color:var(--txt);font-size:12px;padding:3px 6px;cursor:pointer;user-select:none}
  .tfilter .dp-trig:hover{border-color:var(--blue)}
  .tfilter .dp-trig.on{border-color:var(--blue);color:var(--bright)}
  .tfilter .dp-trig.dp-unset{color:var(--dim)}                /* 未选值占位 —— */
  /* 弹层内部 span 一律带 .dp-pop 前缀并显式声明 padding/border/color/font-size/cursor，
     盖过外层 .filters span 的按钮样式（specificity (0,2,0) > (0,1,1)） */
  .dp-pop{position:absolute;top:calc(100% + 6px);right:0;z-index:30;width:17em;padding:10px;background:var(--panel);border:1px solid var(--line);box-shadow:0 10px 28px rgba(0,0,0,.5)}
  body.light .dp-pop{box-shadow:0 10px 28px rgba(60,45,20,.22)}
  .dp-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
  .dp-pop .dp-ym{padding:0;border:none;cursor:default;color:var(--bright);font-size:12px;font-weight:600;letter-spacing:1px}
  .dp-pop .dp-nav{width:22px;height:20px;padding:0;display:flex;align-items:center;justify-content:center;border:1px solid var(--line);color:var(--dim);font-size:13px;cursor:pointer;user-select:none}
  .dp-pop .dp-nav:hover{color:var(--bright);border-color:var(--accent)}
  .dp-pop .dp-nav.off{opacity:.3;cursor:default;pointer-events:none}  /* 该方向已无有记录的月份 */
  .dp-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
  .dp-pop .dp-w{padding:1px 0 3px;border:none;cursor:default;color:var(--dim);font-size:10px;text-align:center}
  .dp-pop .dp-d{height:24px;padding:0;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--txt);border:1px solid transparent;cursor:default;user-select:none}
  .dp-pop .dp-d.dp-today{border-color:var(--dim)}                     /* 今天：细边框标记 */
  .dp-pop .dp-d.dp-dim{opacity:.28}                                   /* 无记录/越界：灰显，点击无效 */
  .dp-pop .dp-d.dp-ok{color:var(--bright);cursor:pointer}             /* 有记录且在边界内：可点 */
  .dp-pop .dp-d.dp-ok:hover{background:var(--hover);border-color:var(--line)}
  .dp-pop .dp-d.dp-sel{background:var(--accent);color:var(--bg);font-weight:700}   /* 当前字段选中 */
  .dp-pop .dp-d.dp-sel:hover{background:var(--accent)}
  /* ===== 标的筛选（sf- 前缀）：下拉选 underlying，期权归属对应正股 =====
     触发器与 tab/日期触发框同视觉语言；弹层范式参照 .dp-pop。
     内部 span 一律带 .sf-wrap / .sf-pop 前缀并显式声明 padding/border/color/font-size/cursor，
     盖过外层 .filters span 的按钮样式（specificity (0,2,0) > (0,1,1)） */
  .sf-wrap{display:flex;align-items:center;gap:6px;margin-left:10px;position:relative}
  .sf-wrap .sf-trig{background:var(--panel);border:1px solid var(--line);color:var(--txt);font-size:11px;padding:5px 11px;cursor:pointer;user-select:none}
  .sf-wrap .sf-trig:hover{border-color:var(--blue)}
  .sf-wrap .sf-trig.on{border-color:var(--blue);color:var(--bright)}
  .sf-wrap .sf-trig.sf-set{color:var(--accent);border-color:var(--accent)}        /* 已选标的：accent 高亮态 */
  .sf-wrap .sf-x{padding:2px 7px;border:1px solid var(--line);color:var(--dim);font-size:11px;line-height:1.5;cursor:pointer}
  .sf-wrap .sf-x:hover{color:var(--bright);border-color:var(--accent)}
  .sf-pop{position:absolute;top:calc(100% + 6px);left:0;z-index:30;min-width:13em;max-height:260px;overflow-y:auto;background:var(--panel);border:1px solid var(--line);box-shadow:0 10px 28px rgba(0,0,0,.5)}
  body.light .sf-pop{box-shadow:0 10px 28px rgba(60,45,20,.22)}
  .sf-pop .sf-item{display:flex;align-items:center;gap:7px;padding:6px 11px;font-size:11px;color:var(--txt);cursor:pointer;border-bottom:1px solid var(--line2);white-space:nowrap}
  .sf-pop .sf-item:last-child{border-bottom:none}
  .sf-pop .sf-item:hover{background:var(--hover);color:var(--bright)}
  .sf-pop .sf-item.sf-on{color:var(--accent)}                                     /* 当前选中项 */
  .sf-pop .sf-all{color:var(--dim)}                                               /* 顶部「全部标的」（清除选择） */
  .sf-pop .sf-sym{padding:0;border:none;color:inherit;font-size:11px;font-weight:600;cursor:pointer}
  .sf-pop .sf-n{padding:0;border:none;color:var(--dim);font-size:11px;cursor:pointer}
  .sf-pop .sf-opt{margin-left:auto;padding:0 4px;border:1px solid rgba(255,176,0,.45);color:var(--accent);font-size:9px;line-height:1.5;cursor:pointer}  /* 含期权标记：低调小字 */
  .sf-pop .sf-empty{padding:10px 11px;border:none;color:var(--dim);font-size:11px;text-align:center;cursor:default}
  /* 展开式截断条（沿用 .pager button 视觉语言：panel 底 + line 边框 + hover accent） */
  .tmore{display:block;width:100%;margin-top:10px;padding:8px 0;background:var(--panel);border:1px solid var(--line);color:var(--dim);font-family:var(--mono);font-size:11px;letter-spacing:1px;text-align:center;cursor:pointer}
  .tmore:hover{border-color:var(--accent);color:var(--bright)}

  /* reflection */
  .ref-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);margin-top:18px}
  .reflist{display:grid;grid-template-columns:1.4fr 1fr;gap:16px;margin-top:18px}
  .rcard{background:var(--panel);border:1px solid var(--line);padding:14px 16px;margin-bottom:12px;cursor:pointer}
  .rcard:hover{border-color:var(--blue)}
  .rcard .top{display:flex;align-items:center;gap:10px;margin-bottom:8px}
  .rcard .sc{font-weight:700;border:1px solid var(--line);padding:2px 8px;font-size:12px}
  .sc-good{color:var(--up);border-color:rgba(0,214,143,.4)}
  .sc-mid{color:var(--accent);border-color:rgba(255,176,0,.4)}
  .sc-bad{color:var(--down);border-color:rgba(255,77,77,.4)}
  .rcard h3{color:var(--bright);font-size:13px;font-weight:600;flex:1}
  .rcard .when{color:var(--dim);font-size:11px}
  .rcard p{color:var(--txt);font-size:12px;line-height:1.6}
  .rcard.expand{border-color:var(--accent)}
  .rcard .full{margin-top:10px}
  .rcard .full p{margin-bottom:8px}
  .lesson{border-left:2px solid var(--accent);padding:8px 12px;background:var(--lesson-bg);color:var(--bright);font-size:12px;margin-top:8px;line-height:1.6}
  .chips{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}
  .chip{font-size:10px;border:1px solid var(--line);color:var(--dim);padding:3px 8px;cursor:pointer}
  .chip:hover{border-color:var(--accent);color:var(--txt)}
  .chip.on{border-color:var(--accent);color:var(--accent)}
  /* 标签筛选提示条 */
  .tag-filter{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--dim);margin-bottom:12px;padding:8px 12px;background:var(--panel);border:1px solid var(--line)}
  .tag-filter b{color:var(--accent)}
  .tag-filter .clear{margin-left:auto;cursor:pointer;border:1px solid var(--line);padding:2px 8px}
  .tag-filter .clear:hover{color:var(--bright);border-color:var(--accent)}
  /* 分页器 */
  .pager{display:flex;gap:6px;margin-top:16px;justify-content:center}
  .pager button{background:var(--panel);border:1px solid var(--line);color:var(--dim);min-width:30px;height:30px;cursor:pointer;font-family:var(--mono);font-size:12px}
  .pager button:hover:not(:disabled){border-color:var(--accent);color:var(--bright)}
  .pager button.on{background:var(--accent);color:var(--bg);border-color:var(--accent);font-weight:700}
  .pager button:disabled{opacity:.35;cursor:not-allowed}
  .sidebox{background:var(--panel);border:1px solid var(--line);padding:14px 16px}
  .sidebox h4{color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:1px;margin-bottom:12px}
  .tagcloud{display:flex;flex-wrap:wrap;gap:7px}
  .tagcloud span{border:1px solid var(--line);padding:4px 9px;font-size:11px;color:var(--txt)}
  .tagcloud span.tag-item{cursor:pointer}
  .tagcloud span.tag-item:hover{border-color:var(--accent);color:var(--bright)}
  .tagcloud span.tag-item.on{background:var(--accent);color:var(--bg);border-color:var(--accent)}
  .ledger-lesson{border-bottom:1px solid var(--line2);padding:10px 0;color:var(--txt);font-size:12px;line-height:1.6}
  .ledger-lesson:last-child{border-bottom:none}
  .ledger-lesson .n{color:var(--accent);margin-right:6px}
  /* 经验库增删改：双击行内编辑 */
  .ledger-lesson .exp-row{display:flex;align-items:baseline;gap:6px;cursor:pointer}
  .ledger-lesson .exp-row .n{margin-right:0}
  .ledger-lesson .exp-body{flex:1;min-width:0}
  .exp-hint{margin-left:auto;color:var(--dim);font-size:10px;font-weight:400;text-transform:none;letter-spacing:0}
  .exp-add{margin-left:8px}
  .exp-edit{display:flex;flex-direction:column;gap:6px}
  .exp-acts{display:flex;gap:6px}

  .foot{color:var(--dim);font-size:11px;text-align:center;padding:24px 0;margin-top:24px;border-top:1px solid var(--line)}
  @media(max-width:920px){.grid,.reflist{grid-template-columns:1fr}.kpis,.stat4,.ref-stats,.movers{grid-template-columns:repeat(2,1fr)}}

/* ============ M5 新增：交互/编辑/Markdown ============ */
[x-cloak]{display:none!important}
.delayed-badge{font-size:9px;border:1px solid var(--accent);color:var(--accent);padding:1px 5px;margin-left:8px;letter-spacing:1px}
.empty{color:var(--dim);text-align:center;padding:28px;font-size:12px}
.loading{color:var(--dim);font-size:11px}
.market-pill{font-size:10px;padding:2px 7px;border:1px solid var(--line);color:var(--dim);margin-left:8px}
.market-pill.open{color:var(--up);border-color:var(--up)}
.market-pill.closed{color:var(--dim)}
.market-pill.premarket,.market-pill.afterhours{color:var(--accent);border-color:var(--accent)}

/* 可编辑笔记 */
.note-edit{width:100%;background:var(--inset);border:1px solid var(--line);color:var(--txt);font-family:var(--mono);font-size:12px;padding:6px 8px;resize:vertical;min-height:36px}
.note-edit:focus{outline:none;border-color:var(--blue)}
.note-add{color:var(--blue);font-size:11px;cursor:pointer;border:1px dashed var(--line);padding:3px 8px;display:inline-block;margin-top:4px}
.note-add:hover{border-color:var(--blue)}
.note-dbledit{cursor:pointer}             /* 单条笔记正文：双击进入行内编辑（title 提示） */
.note-dbledit:hover{color:var(--txt)}
.needs-reason{color:var(--accent);font-size:10px;border:1px solid var(--accent);padding:1px 6px;margin-left:6px}

/* 按钮 */
.btn{background:transparent;border:1px solid var(--line);color:var(--txt);font-family:var(--mono);font-size:12px;padding:6px 12px;cursor:pointer}
.btn:hover{border-color:var(--blue);color:var(--bright)}
.btn-accent{border-color:var(--accent);color:var(--accent)}
.btn-sm{padding:3px 9px;font-size:11px}
.row-actions{display:flex;gap:6px;align-items:center}

/* 反思详情 + Markdown 渲染 */
.reflect-detail{background:var(--panel);border:1px solid var(--line);padding:22px 26px}
.md-body{color:var(--txt);font-size:14px;line-height:1.75}
.md-body h1{font-size:20px;color:var(--bright);margin:8px 0 12px}
.md-body h2{font-size:16px;color:var(--bright);margin:18px 0 8px}
.md-body h3{font-size:14px;color:var(--bright);margin:14px 0 6px}
.md-body p{margin:8px 0}
.md-body ul,.md-body ol{margin:8px 0 8px 22px}
.md-body li{margin:3px 0}
.md-body code{background:var(--inset);padding:1px 5px;border:1px solid var(--line);font-size:12px}
.md-body pre{background:var(--inset);border:1px solid var(--line);padding:12px;overflow:auto;margin:10px 0}
.md-body pre code{border:none;padding:0}
.md-body blockquote{border-left:2px solid var(--accent);padding:4px 14px;color:var(--dim);margin:10px 0}
.md-body img{max-height:300px;width:auto;max-width:100%;object-fit:contain;border:1px solid var(--line);border-radius:2px;cursor:zoom-in;vertical-align:top}
/* 连续图片 → 缩略图墙（横向排布、自动换行）；纯文字段落保持块级 */
.md-body p:has(>img){display:inline-flex;flex-wrap:wrap;gap:8px;margin:8px 12px 8px 0;vertical-align:top}
/* 点击放大遮罩 */
.lightbox{position:fixed;inset:0;background:rgba(0,0,0,.88);display:flex;align-items:center;justify-content:center;z-index:100;cursor:zoom-out;padding:28px}
.lightbox img{max-width:96vw;max-height:94vh;object-fit:contain;box-shadow:0 10px 50px rgba(0,0,0,.6)}
.md-body a{color:var(--blue)}
.md-body table{border-collapse:collapse;margin:10px 0}
.md-body th,.md-body td{border:1px solid var(--line);padding:5px 10px;font-size:12px}

/* 编辑器 modal */
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:flex-start;justify-content:center;z-index:50;padding:40px 20px;overflow:auto}
body.light .modal-mask{background:rgba(50,40,20,.35)}
.modal{background:var(--panel);border:1px solid var(--line);width:100%;max-width:1000px}
.modal-h{display:flex;align-items:center;padding:14px 18px;border-bottom:1px solid var(--line)}
.modal-h h3{color:var(--bright);font-size:14px;letter-spacing:1px}
.modal-h .x{margin-left:auto;cursor:pointer;color:var(--dim);font-size:18px}
.modal-h .x:hover{color:var(--down)}
.modal-body{padding:16px 18px}
.form-row{display:flex;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.form-field{flex:1;min-width:140px}
.form-field label{display:block;color:var(--dim);font-size:11px;margin-bottom:4px;text-transform:uppercase;letter-spacing:1px}
.form-field input,.form-field textarea{width:100%;background:var(--inset);border:1px solid var(--line);color:var(--txt);font-family:var(--mono);font-size:13px;padding:7px 9px}
.form-field input:focus,.form-field textarea:focus{outline:none;border-color:var(--blue)}
.editor-split{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.editor-split textarea{min-height:340px;resize:vertical;line-height:1.6}
.editor-preview{background:var(--bg);border:1px solid var(--line);padding:14px 16px;overflow:auto;max-height:420px}
.modal-foot{display:flex;gap:10px;justify-content:flex-end;padding:14px 18px;border-top:1px solid var(--line)}
.editor-hint{color:var(--dim);font-size:10px;margin-top:4px}

/* toast */
.toast{position:fixed;bottom:22px;right:22px;background:var(--panel);border:1px solid var(--accent);color:var(--bright);padding:11px 16px;font-size:12px;z-index:60;max-width:340px}
.toast.err{border-color:var(--down);color:var(--down)}
.toast.ok{border-color:var(--up)}

@media(max-width:820px){.editor-split{grid-template-columns:1fr}}

/* ============ 投资计划 / INVESTMENT PLAN ============ */
/* 复用既有令牌与组件类（.btn/.btn-sm/.btn-accent/.panel/.kpi/.note-edit/.foot）。
   仅新增 plan 专用类，避免与看板的 .alloc/.alloc-row 冲突（plan 用 .alloc-plan 作用域）。 */

/* 危险按钮（既有 .btn 体系扩展） */
.btn-danger{border-color:rgba(255,77,77,.4);color:var(--down)}
.btn-danger:hover{border-color:var(--down);color:var(--down)}

/* 行内输入/下拉（plan 编辑用，区别于 modal 的 .form-field input） */
.inp{background:var(--inset);border:1px solid var(--line);color:var(--txt);font-family:var(--mono);font-size:12px;padding:5px 8px}
.inp:focus{outline:none;border-color:var(--blue)}
.inp.bad{border-color:var(--down)}
select.inp{cursor:pointer}
.err{color:var(--down);font-size:11px;margin-top:8px}
.none{color:var(--dim);font-size:11px}

/* 内联「编辑/完成」小链接 */
.ed{cursor:pointer;color:var(--blue);font-size:11px;border:1px solid var(--line);padding:2px 9px}
.ed:hover{border-color:var(--blue)}

/* 总体策略块 */
.strategy{padding:16px 18px}
.strategy .reason-txt{color:var(--txt);font-size:13px;line-height:1.8}
/* 策略框内 Markdown：贴合紧凑卡片——字号小一档、首个标题不留过大上边距 */
.strategy .md-body{font-size:13px;line-height:1.7}
.strategy .md-body>:first-child{margin-top:0}
.strategy .md-body h2{font-size:14px;margin:14px 0 6px}
.strategy .md-body h3{font-size:13px}

/* 计划页 KPI 的 s 行用 dim（与看板 .kpi .s 着色规则共存，看板的 .s 走内联色） */

/* 目标配置：plan 专用（含目标标记 .tgt） */
.alloc-plan{padding:16px 18px}
.alloc-plan .alloc-row{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.alloc-plan .alloc-row:last-child{margin-bottom:0}
.alloc-plan .alloc-row .nm{width:64px;color:var(--txt);font-size:12px}
.alloc-plan .alloc-row .track{flex:1;height:14px;background:var(--inset);border:1px solid var(--line);position:relative}
.alloc-plan .alloc-row .fill{height:100%;background:linear-gradient(90deg,var(--blue),#2a5fb0);transition:width .3s}
.alloc-plan .alloc-row .tgt{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--accent)}
.alloc-plan .alloc-row.space .fill{background:linear-gradient(90deg,var(--purp),#5a3aa0)}
.alloc-plan .alloc-row.crypto .fill{background:linear-gradient(90deg,var(--accent),#9a6a00)}
.alloc-plan .alloc-row.cash .fill{background:linear-gradient(90deg,var(--up),#0a7a55)}
.alloc-plan .alloc-row .pct{width:170px;color:var(--dim);font-size:11px;text-align:right}
.alloc-plan .alloc-row .pct b{color:var(--bright)}

/* 工具栏 / 分类 tab */
.toolbar{display:flex;align-items:center;gap:8px;margin:14px 0 10px}
.tabs{display:flex;gap:2px}
.tabs span{padding:5px 13px;border:1px solid var(--line);color:var(--dim);font-size:11px;cursor:pointer}
.tabs span.on{color:var(--bright);background:var(--panel);border-color:var(--blue)}

/* 个股计划卡片 */
.pcard{background:var(--panel);border:1px solid var(--line);margin-bottom:14px}
.pcard-h{display:flex;align-items:center;gap:12px;padding:12px 16px;cursor:pointer;border-bottom:1px solid var(--line2)}
.pcard-h:hover{background:var(--hover)}
.pcard-id{display:flex;align-items:baseline;gap:8px;min-width:140px}
.pcard-sym{color:var(--bright);font-weight:700;font-size:16px;letter-spacing:1px}
.pcard-name{color:var(--dim);font-size:11px}
.tagrow{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.t-ind{font-size:9px;border:1px solid var(--line);padding:1px 7px;color:var(--dim)}
.t-status{font-size:9px;padding:1px 7px;border:1px solid}
.s-watch{color:var(--dim);border-color:var(--line)}
.s-build{color:var(--blue);border-color:rgba(61,139,255,.45)}
.s-done{color:var(--up);border-color:rgba(0,214,143,.45)}
.s-ipo{color:var(--purp);border-color:rgba(160,107,255,.45)}
.s-over{color:var(--down);border-color:rgba(255,77,77,.45)}

/* 进度条（当前 vs 目标） */
.gapwrap{display:flex;align-items:center;gap:10px;margin-left:auto;min-width:240px}
.gaptrack{flex:1;height:9px;background:var(--inset);border:1px solid var(--line);position:relative;overflow:hidden}
.gapfill{height:100%;transition:width .3s}
.gapfill.f-watch{background:var(--dim);opacity:.5}
.gapfill.f-build{background:linear-gradient(90deg,var(--blue),#2a5fb0)}
.gapfill.f-done{background:linear-gradient(90deg,var(--up),#0a7a55)}
.gapfill.f-ipo{background:linear-gradient(90deg,var(--purp),#5a3aa0)}
.gapfill.f-over{background:linear-gradient(90deg,var(--down),#9a2a2a)}
.gaplabel{font-size:11px;color:var(--dim);white-space:nowrap}
.gaplabel b{color:var(--bright)}
.caret{color:var(--dim);font-size:12px;width:14px;text-align:center}

/* 卡片内分块 */
.pblock{padding:13px 16px;border-bottom:1px solid var(--line2)}
.pblock:last-child{border-bottom:none}
.pblock-h{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.pblock-h .lab{color:var(--bright);font-size:11px;text-transform:uppercase;letter-spacing:1px;display:flex;align-items:center;gap:6px}
.pblock-h .ed{margin-left:auto}
.pblock .reason-txt{color:var(--txt);font-size:12px;line-height:1.7;white-space:pre-wrap;overflow-wrap:break-word}

/* 触发（买/止盈/止损） */
.trig-line{display:flex;gap:10px;align-items:flex-start;margin-bottom:9px}
.trig-line:last-child{margin-bottom:0}
.trig-line .tl{width:48px;color:var(--dim);font-size:11px;padding-top:5px;flex-shrink:0;text-align:right}
.trig-line .tc{flex:1;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.trig{display:inline-flex;align-items:center;gap:6px;font-size:11px;padding:3px 9px;border:1px solid var(--line)}
.trig-entry{color:var(--blue);border-color:rgba(61,139,255,.4)}
.trig-tp{color:var(--up);border-color:rgba(0,214,143,.4)}
.trig-sl{color:var(--down);border-color:rgba(255,77,77,.4)}
.trig .x{cursor:pointer;opacity:.5;font-size:12px}
.trig .x:hover{opacity:1;color:var(--down)}
.trig-add{display:inline-flex;gap:4px;align-items:center}
.trig-add .inp{width:230px}
/* 编辑态：已有条目就地改的行内输入框（继承所属触发色边框） */
.trig-edit{width:210px;padding:2px 6px;color:inherit}
.add-mini{font-size:11px;color:var(--dim);border:1px dashed var(--line);padding:3px 9px;cursor:pointer}
.add-mini:hover{border-color:var(--blue);color:var(--blue)}

/* 添加表单网格 */
.form-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.form-grid label{display:flex;flex-direction:column;gap:4px;color:var(--dim);font-size:10px;text-transform:uppercase;letter-spacing:1px}
.form-grid label .req{color:var(--down)}
.form-grid .inp{width:100%}

/* 分类标题 */
.cat-h{color:var(--accent);font-size:11px;letter-spacing:2px;text-transform:uppercase;margin:18px 0 8px;padding-left:2px}

@media(max-width:920px){.form-grid{grid-template-columns:repeat(2,1fr)}.gapwrap{min-width:150px}}
