:root{
  --bg:#0B0F14; --surface:#12181F; --surface2:#1A222C; --border:#242E3A; --borderLight:#2E3A48;
  --accent:#C9A24B; --accentSoft:rgba(201,162,75,.14);
  --pos:#4FA87A; --posSoft:rgba(79,168,122,.14);
  --neg:#C2564B; --negSoft:rgba(194,86,75,.14);
  --text:#E8E6DF; --muted:#8A9099; --mutedDark:#5B6169;
  --info:#5B8DEF; --infoSoft:rgba(91,141,239,.16);
  --note:#1E1B13; --noteEdge:#6B5626; --noteText:#E9DFC4;
  --verify:#A387E0; --verifySoft:rgba(163,135,224,.16);
  --vnote:#19162A; --vnoteEdge:#56478A; --vnoteText:#E1D9F5;
  --tag:#3DB5A6; --tagSoft:rgba(61,181,166,.15);
  --posFaint:rgba(79,168,122,.09);
  /* 实心色块上的字：金色按钮上的深字 / 胜负色徽章上的深字 */
  --onAccent:#191307; --onSolid:#0B0F14;
  --scrim:rgba(5,7,10,.72);
  --shadowModal:0 20px 60px rgba(0,0,0,.5); --shadowPop:0 10px 30px rgba(0,0,0,.35);
  /* 字体和圆角也走变量：经典主题保持原值，其他皮肤（theme-sky.css）只改这里就能整体换气质 */
  --fontBody:'Inter',-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;
  --fontUI:'Inter',sans-serif; --fontMono:'JetBrains Mono',monospace; --fontDisplay:'Space Grotesk',sans-serif;
  --fontCode:'JetBrains Mono',monospace;
  --r6:6px; --r7:7px; --r8:8px; --r9:9px; --r10:10px; --r11:11px; --r12:12px; --r14:14px;
}
:root[data-theme="light"]{
  --bg:#F6F4EF; --surface:#FFFFFF; --surface2:#EFEBE1; --border:#E1DACB; --borderLight:#D2C9B4;
  --accent:#A87526; --accentSoft:rgba(168,117,38,.12);
  --pos:#2E8F5C; --posSoft:rgba(46,143,92,.12);
  --neg:#B23A2C; --negSoft:rgba(178,58,44,.12);
  --text:#211D16; --muted:#6C6558; --mutedDark:#9B9385;
  --info:#2C6BD6; --infoSoft:rgba(44,107,214,.14);
  --note:#FBF2D5; --noteEdge:#E0C27A; --noteText:#3A2F14;
  --verify:#7350B8; --verifySoft:rgba(115,80,184,.12);
  --vnote:#F2EDFB; --vnoteEdge:#C6B4E8; --vnoteText:#2D2346;
  --tag:#1E8A7D; --tagSoft:rgba(30,138,125,.12);
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;background:var(--bg);color:var(--text);
  font-family:var(--fontBody);min-height:100%;
  transition:background .15s ease,color .15s ease;}
::selection{background:var(--accentSoft);}
::-webkit-scrollbar{width:8px;height:8px;}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px;}
a{color:var(--accent);}
.themeToggle{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r8);width:36px;height:36px;
  display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--text);}
.modeToggle{display:flex;border:1px solid var(--border);border-radius:var(--r8);overflow:hidden;}
.modeBtn{padding:8px 14px;background:var(--surface2);border:none;color:var(--muted);cursor:pointer;font-size:13px;font-family:var(--fontUI);}
.modeBtn.active{background:var(--accent);color:var(--onAccent);font-weight:600;}
.adminTable{width:100%;border-collapse:collapse;font-size:12.5px;}
.adminTable th{text-align:left;padding:8px 10px;color:var(--mutedDark);font-family:var(--fontMono);font-weight:500;border-bottom:1px solid var(--border);}
.adminTable td{padding:8px 10px;border-bottom:1px solid var(--border);color:var(--text);}
.pill{display:inline-block;padding:2px 8px;border-radius:var(--r12);font-size:11px;}
.pill.on{background:var(--posSoft);color:var(--pos);}
.pill.off{background:var(--negSoft);color:var(--neg);}
.mono{font-family:var(--fontMono);}
.display{font-family:var(--fontDisplay);}
.wrap{max-width:2200px;margin:0 auto;padding:22px 28px 60px;}
@media(max-width:640px){.wrap{padding:16px 14px 40px;}}
.header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px;margin-bottom:22px;}
.brand{font-family:var(--fontDisplay);font-size:20px;font-weight:600;letter-spacing:.2px;}
.brand .dim{color:var(--mutedDark);} .brand .accent{color:var(--accent);}
/* 品牌标（LOGO_MARK）：颜色变量见 palettes.css，跟着配色换 */
.logoMark .lmBg{fill:var(--logoBg);stroke:var(--logoEdge);stroke-width:1.5;}
.logoMark .lmLine{stroke:var(--logoLine);stroke-width:4;}
.logoMark .lmBand{fill:var(--logoBand);}
.logoMark *{transition:fill .25s,stroke .25s;}
.subline{font-size:12px;color:var(--mutedDark);margin-top:3px;font-family:var(--fontMono);}
/* 数据范围生效时的标签（顶部那行数字后面 / 侧栏底部），点开是编辑弹窗 */
.scopePill{display:inline-flex;align-items:center;gap:4px;vertical-align:middle;margin-left:4px;padding:1px 8px;border-radius:10px;
  border:1px solid var(--accent);background:var(--accentSoft);color:var(--accent);font-size:11px;font-family:inherit;cursor:pointer;white-space:nowrap;}
.scopePill svg{width:11px;height:11px;}
.scopePill.paused{border-color:var(--borderLight);background:transparent;color:var(--mutedDark);border-style:dashed;}
.navFoot .scopePill{margin:0 0 9px;}
.scopeIntro{font-size:12.5px;line-height:1.7;color:var(--muted);margin:0 0 14px;}
.scopeStatus{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:9px 12px;margin-bottom:14px;
  border-radius:8px;background:var(--accentSoft);border:1px solid var(--accent);font-size:12.5px;}
.scopeStatus.paused{background:var(--surface2);border-color:var(--borderLight);border-style:dashed;}
.scopeHint{font-size:11.5px;color:var(--mutedDark);margin-top:12px;line-height:1.6;}
.pbTriageScopeNote{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--mutedDark);margin:-6px 0 14px;}
.pbTriageScopeNote svg{width:12px;height:12px;flex-shrink:0;}
.pbOutHead{font-size:11.5px;color:var(--mutedDark);margin:14px 2px 6px;}
.pbTradeList.isOut .pbTradeRow{opacity:.55;}
.pbTradeList.isOut .pbTradeRow:hover{opacity:.85;}
.pbRowOut{font-size:10.5px;color:var(--mutedDark);border:1px dashed var(--borderLight);border-radius:9px;padding:0 7px;flex-shrink:0;}
.headerActions{display:flex;gap:8px;position:relative;}
.btn{padding:9px 14px;border-radius:var(--r8);border:1px solid var(--border);background:var(--surface2);
  color:var(--text);font-size:13px;cursor:pointer;font-family:var(--fontUI);display:inline-flex;align-items:center;gap:6px;}
.btn:hover{border-color:var(--borderLight);}
.btn-primary{border:1px solid var(--accent);background:var(--accent);color:var(--onAccent);font-weight:600;}
.btn-danger{color:var(--neg);border-color:var(--neg);}
.icon{width:14px;height:14px;display:inline-block;vertical-align:-2px;}
.exportMenu{position:absolute;right:0;top:110%;background:var(--surface);border:1px solid var(--borderLight);
  border-radius:var(--r8);overflow:hidden;z-index:30;min-width:150px;display:none;}
.exportMenu.open{display:block;}
/* 账号菜单里的「界面风格」小节 */
.exportMenu .menuLabel{padding:8px 12px 3px;font-size:10.5px;letter-spacing:.5px;color:var(--mutedDark);font-family:var(--fontMono);}
.exportMenu .menuSep{height:1px;background:var(--border);margin:4px 0;}
.menuCheck{margin-left:auto;color:var(--accent);display:flex;}
.exportMenu .menuLabelVal{color:var(--muted);text-transform:none;letter-spacing:0;}
/* 布局二选一：一条小分段控件 */
.exportMenu .menuSeg{display:flex;gap:2px;margin:4px 10px 6px;padding:2px;border:1px solid var(--border);border-radius:var(--r8);background:var(--surface2);}
.exportMenu .menuSeg button{flex:1;justify-content:center;padding:6px 8px;border-radius:var(--r6);color:var(--muted);}
.exportMenu .menuSeg button.on{background:var(--accent);color:var(--onAccent);font-weight:600;}
/* 配色：一排小圆点，每个点永远画自己那种颜色（--a 主色 / --b 底色，见 palettes.css 的 .sw-*） */
.exportMenu .paletteRow{display:flex;flex-wrap:wrap;gap:8px;padding:6px 12px 10px;}
.exportMenu .paletteDot{width:24px;height:24px;padding:0;flex:none;border-radius:50%;cursor:pointer;
  border:2px solid var(--surface);box-shadow:0 0 0 1px var(--borderLight);
  background:linear-gradient(135deg,var(--b) 0 46%,var(--a) 54% 100%);transition:transform .12s,box-shadow .12s;}
.exportMenu .paletteDot:hover{transform:scale(1.12);background:linear-gradient(135deg,var(--b) 0 46%,var(--a) 54% 100%);}
.exportMenu .paletteDot.on{box-shadow:0 0 0 2px var(--accent);}
/* 盈亏颜色：两个小拾色器 + 恢复默认（全站的赚 / 亏都用这组颜色，见 palettes.css 的 --pnlPos） */
.exportMenu .menuPnl{display:flex;align-items:center;gap:12px;padding:4px 12px 10px;}
.exportMenu .menuPnlPick{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text);cursor:pointer;}
.exportMenu .menuPnlPick input[type="color"]{width:28px;height:22px;padding:2px;border:1px solid var(--border);border-radius:6px;background:var(--surface2);cursor:pointer;}
.exportMenu .menuPnlPick input[type="color"]::-webkit-color-swatch-wrapper{padding:0;}
.exportMenu .menuPnlPick input[type="color"]::-webkit-color-swatch{border:none;border-radius:4px;}
.exportMenu .menuPnlPick input[type="color"]::-moz-color-swatch{border:none;border-radius:4px;}
.exportMenu .menuPnl button{width:auto;margin-left:auto;padding:4px 8px;font-size:11.5px;color:var(--muted);border-radius:var(--r6);}
.authCard{background:var(--surface);border:1px solid var(--border);border-radius:var(--r12);padding:24px;}
.exportMenu button{display:flex;align-items:center;gap:8px;width:100%;padding:9px 12px;background:transparent;
  border:none;color:var(--text);font-size:12.5px;cursor:pointer;text-align:left;font-family:var(--fontUI);}
.exportMenu button:hover{background:var(--surface2);}
.exportMenu button:disabled{opacity:.4;cursor:not-allowed;}
.exportMenu button:disabled:hover{background:transparent;}
/* 多账号：左上角头像浮层、右上角账号菜单、登录页共用的账号行（07b-accounts.js） */
.acctPop{position:fixed;z-index:60;width:272px;max-width:calc(100vw - 24px);background:var(--surface);border:1px solid var(--borderLight);
  border-radius:var(--r12);box-shadow:var(--shadowPop);padding:6px;}
.acctPopLabel{padding:6px 8px 5px;font-size:10.5px;letter-spacing:.5px;color:var(--mutedDark);font-family:var(--fontMono);text-transform:uppercase;}
.acctPopSep{height:1px;background:var(--border);margin:5px 2px;}
.acctPopItem{display:flex;align-items:center;gap:10px;width:100%;padding:8px 9px;border:none;background:transparent;color:var(--text);
  font-size:12.5px;font-family:var(--fontUI);cursor:pointer;border-radius:var(--r8);text-align:left;}
.acctPopItem:hover{background:var(--surface2);}
.acctPopItem svg{width:15px;height:15px;color:var(--muted);}
.acctList{display:flex;flex-direction:column;gap:1px;}
.acctRow{display:flex;align-items:center;border-radius:var(--r8);}
.acctRow:hover{background:var(--surface2);}
.acctPick{flex:1;min-width:0;display:flex;align-items:center;gap:10px;padding:7px 8px;border:none;background:transparent;
  color:var(--text);cursor:pointer;text-align:left;font-family:var(--fontUI);}
.acctRow.isCur .acctPick{cursor:default;}
.acctText{display:flex;flex-direction:column;min-width:0;flex:1;line-height:1.3;}
.acctText b{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.acctText small{font-size:11px;color:var(--mutedDark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.acctCheck{color:var(--accent);display:flex;}
.acctForget{flex:none;display:flex;align-items:center;justify-content:center;width:26px;height:26px;margin-right:4px;padding:0;border:none;
  border-radius:var(--r6);background:transparent;color:var(--mutedDark);cursor:pointer;opacity:0;}
.acctRow:hover .acctForget,.acctForget:focus-visible{opacity:1;}
@media(hover:none){.acctForget{opacity:1;}}
.acctForget:hover{background:var(--surface);color:var(--neg);}
.acctAvatar{flex:none;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:700;color:#fff;background:hsl(var(--acctHue,210) 52% 46%);font-family:var(--fontUI);}
div.authCard.acctAuthCard{margin-bottom:14px;padding:8px;}
.exportMenu .acctList{padding:0 4px 2px;}
.exportMenu .acctPick{width:auto;padding:7px 8px;}
.exportMenu .acctForget{width:26px;padding:0;}
.nav{display:flex;gap:4px;margin-bottom:24px;border-bottom:1px solid var(--border);}
/* 页签多了之后窄屏放不下：横向滚动，别把字挤成竖排 */
@media(max-width:900px){.nav{overflow-x:auto;scrollbar-width:none;}.nav::-webkit-scrollbar{display:none;}.nav .tab{white-space:nowrap;flex-shrink:0;}}
.tab{display:flex;align-items:center;gap:6px;padding:10px 14px;background:transparent;border:none;cursor:pointer;
  border-bottom:2px solid transparent;color:var(--muted);font-size:13.5px;font-family:var(--fontUI);margin-bottom:-1px;}
.tab.active{border-bottom-color:var(--accent);color:var(--accent);}
/* 当前页签的 [ ] 是经典布局的终端味，放在 CSS 里，新版布局可以去掉 */
.tab.active .tabLabel::before{content:"[ ";}
.tab.active .tabLabel::after{content:" ]";}
/* 侧边栏品牌、分组标题、底部统计，页面大标题和问候：只有新版布局（theme-modern.css）用，经典布局不显示 */
.navBrand,.navFoot,.pageTitle,.navGroup,.pageGreeting,.pageTitleMini{display:none;}
/* 顶栏里主题 / 导出 / 账户包在 .headerTools 里（玻璃布局把它们合成一块玻璃）。其他布局里这层不存在（display:contents），
   用 order 排回原来的顺序：模式切换、主题、导出、新建交易、账户 */
.headerTools{display:contents;}
.headerTools>.acctWrap{order:2;}
.headerActions>.btn-primary{order:1;}
.sectionLabel{font-size:12px;letter-spacing:.8px;color:var(--mutedDark);font-family:var(--fontMono);
  margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border);}
.filterBar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:18px;}
.select{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r7);color:var(--text);
  font-size:12.5px;padding:6px 9px;font-family:var(--fontUI);}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:18px;}
.tableScroll{overflow-x:auto;border:1px solid var(--border);border-radius:var(--r10);}
.dataTable{border-collapse:collapse;width:100%;font-size:12.5px;white-space:nowrap;}
.dataTable th{position:sticky;top:0;background:var(--surface2);text-align:left;padding:9px 12px;
  font-family:var(--fontMono);font-weight:500;color:var(--muted);border-bottom:1px solid var(--border);}
.dataTable td{padding:8px 12px;border-bottom:1px solid var(--border);color:var(--text);}
.dataTable tr{cursor:pointer;}
.dataTable tbody tr:hover{background:var(--surface2);}
.changelogEntry{background:var(--surface);border:1px solid var(--border);border-radius:var(--r10);padding:14px 16px;margin-bottom:10px;}
.changelogDate{font-family:var(--fontMono);font-size:11px;color:var(--mutedDark);margin-bottom:6px;}
.changelogText{font-size:13px;color:var(--text);white-space:pre-wrap;line-height:1.6;}
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r12);overflow:hidden;cursor:pointer;
  transition:border-color .15s,transform .15s,box-shadow .15s;display:flex;flex-direction:column;}
.card:hover{border-color:var(--accent);transform:translateY(-2px);box-shadow:0 8px 20px rgba(0,0,0,.12);}
.cardImg{position:relative;aspect-ratio:16/10;background:var(--surface2);display:flex;align-items:center;justify-content:center;overflow:hidden;}
.cardImg img{width:100%;height:100%;object-fit:cover;display:block;}
.cardImgFallback{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;color:var(--mutedDark);font-size:11px;text-align:center;padding:8px;width:100%;height:100%;}
.resultBadge{position:absolute;top:8px;right:8px;font-size:11px;font-weight:700;font-family:var(--fontMono);
  padding:3px 8px;border-radius:var(--r6);color:var(--onSolid);}
.previewIcon{position:absolute;top:8px;left:8px;width:26px;height:26px;border-radius:var(--r6);border:none;
  background:rgba(0,0,0,.55);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transition:opacity .15s;}
.cardImg:hover .previewIcon{opacity:1;}
.cardBody{padding:10px 12px;flex:1;}
.cardTop{display:flex;justify-content:space-between;align-items:baseline;}
.cardModel{font-size:13px;color:var(--text);margin-top:3px;}
.cardFoot{display:flex;border-top:1px solid var(--border);}
.cardFoot button{flex:1;padding:7px 0;background:transparent;border:none;color:var(--mutedDark);cursor:pointer;font-size:12px;}
.cardFoot button:hover{background:var(--surface2);}

/* ============================================================
   看图模式（focus）—— 记录页第三种视图，一行一笔
   跟卡片视图的取舍正好相反：卡片是缩略图墙（aspect-ratio 定死 + object-fit:cover
   裁一刀，为的是网格整齐），这里是「看清这一张」，所以不裁、不定宽高比，
   只给高度封顶。截图宽高比人人不同（16:9 / 21:9 / 竖着截），
   裁了等于每笔丢掉的上下文都不一样，看盘最怕这个。
   ============================================================ */
.focusList{display:flex;flex-direction:column;gap:22px;}
.focusRow{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:20px;align-items:stretch;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r12);padding:14px;
  scroll-snap-align:start;scroll-margin-top:14px;transition:border-color .15s;}
.focusRow.isCurrent{border-color:var(--accent);}

/* 图靠左对齐、不居中：连着看多笔时左边缘对齐，眼睛不用每次重新找起点。
   ⚠ 容器只写 max-height 不写死 height：写死的话，被列宽卡住的宽图
   （实际没那么高）上下会留出一大片空 letterbox，侧栏也跟着被撑开 */
.focusShot{max-height:var(--focusH,78vh);min-height:240px;background:var(--surface2);border-radius:var(--r9);
  display:flex;align-items:center;justify-content:flex-start;overflow:hidden;position:relative;cursor:zoom-in;}
.focusShot img{max-width:100%;max-height:var(--focusH,78vh);object-fit:contain;display:block;}
.focusShotEmpty{width:100%;min-height:240px;display:flex;align-items:center;justify-content:center;
  color:var(--mutedDark);font-size:12px;cursor:default;}
.focusShot .focusZoomHint{position:absolute;right:10px;bottom:10px;opacity:0;transition:opacity .15s;
  background:rgba(0,0,0,.55);color:#fff;font-size:11px;padding:4px 9px;border-radius:var(--r6);pointer-events:none;
  font-family:var(--fontMono);}
.focusShot:hover .focusZoomHint{opacity:1;}

/* ⚠ 侧栏的内容装在一层 absolute 里，所以侧栏自己对行高的贡献是 0 —— 行高永远只由图片决定，
   notes 再长也撑不高这一行（长了就在里面滚）。grid 默认 stretch 让 .focusSide 拿到图片的高度，
   inset:0 的内层就跟着一样高。改成普通流式布局的话，一篇长 notes 能把整行拉到两屏高 */
.focusSide{position:relative;min-width:0;min-height:0;}
.focusSideInner{position:absolute;inset:0;overflow:auto;display:flex;flex-direction:column;padding-right:4px;}
.focusSideHead{display:flex;align-items:baseline;justify-content:space-between;gap:8px;}
.focusDate{font-family:var(--fontMono);font-size:15px;color:var(--text);}
.focusR{font-family:var(--fontMono);font-size:19px;font-weight:600;}
.focusModelRow{display:flex;align-items:center;gap:8px;margin-top:6px;flex-wrap:wrap;}
.focusModel{font-size:14px;color:var(--text);}
.focusResult{font-family:var(--fontMono);font-size:11px;font-weight:700;
  padding:2px 8px;border-radius:var(--r6);color:var(--onSolid);}
.focusSideDivider{height:1px;background:var(--border);margin:12px 0;}
.focusFields{display:flex;flex-direction:column;gap:11px;}
.focusField{min-width:0;}
.focusFieldLabel{font-size:11px;color:var(--mutedDark);font-family:var(--fontMono);
  letter-spacing:.3px;margin-bottom:3px;}
.focusFieldVal{font-size:13px;color:var(--text);line-height:1.65;word-break:break-word;white-space:pre-wrap;}
.focusField.isLong .focusFieldVal{max-height:170px;overflow:auto;padding-right:4px;}
.focusSideFoot{margin-top:auto;padding-top:14px;display:flex;gap:8px;}
.focusSideFoot .btn{padding:6px 12px;font-size:12px;}

/* 这一笔没截图：让侧栏回到普通流、由它自己撑高。
   否则行高被那个 240px 的占位框定死，字段全被挤进一个 240px 的滚动条里 */
.focusRow.noShot .focusSide{position:static;}
.focusRow.noShot .focusSideInner{position:static;overflow:visible;padding-right:0;}

/* 遮挡：只盖结果和 R，日期/模型/其余字段照常。先自己判断该不该做、能走多远，再点揭晓对答案 */
.focusMaskBox{border:1px dashed var(--borderLight);border-radius:var(--r9);padding:14px;
  display:flex;flex-direction:column;align-items:center;gap:9px;text-align:center;}
.focusMaskHint{font-size:11.5px;color:var(--mutedDark);line-height:1.6;}

.focusIndex{font-family:var(--fontMono);font-size:11px;color:var(--mutedDark);
  margin-bottom:8px;letter-spacing:.4px;}

/* 变体：字段放底部横排。
   右侧栏要吃掉 320px，宽高比大于 1.6 的图（16:9、21:9 都在内）会先被列宽卡死、
   根本顶不到设定高度；挪到底下之后图能吃满整行宽，高度封顶才真正起作用。
   代价是一笔占的高度超过一屏，字段得往下扫一眼。默认仍是右侧——一屏一笔的翻牌节奏更重要 */
.focusRow.sideBottom{grid-template-columns:1fr;}
.focusRow.sideBottom .focusSide{position:static;}
.focusRow.sideBottom .focusSideInner{position:static;overflow:visible;padding-right:0;padding-top:12px;}
.focusRow.sideBottom .focusSideTop{display:flex;align-items:baseline;gap:22px;flex-wrap:wrap;}
.focusRow.sideBottom .focusSideHead{gap:18px;}
.focusRow.sideBottom .focusModelRow{margin-top:0;}
.focusRow.sideBottom .focusSideDivider{margin:10px 0;}
.focusRow.sideBottom .focusFields{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
  gap:12px 24px;align-items:start;}
.focusRow.sideBottom .focusField.isLong{grid-column:span 2;}
.focusRow.sideBottom .focusField.isLong .focusFieldVal{max-height:120px;}
.focusRow.sideBottom .focusSideFoot{margin-top:14px;}

@media(max-width:1100px){
  .focusRow{grid-template-columns:1fr;}
  .focusSide{position:static;}
  .focusSideInner{position:static;overflow:visible;padding-right:0;padding-top:12px;}
}

.emptyState{text-align:center;padding:60px 20px;color:var(--mutedDark);}
.statRow{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:24px;}
.statBox{background:var(--surface);border:1px solid var(--border);border-radius:var(--r10);padding:14px 16px;flex:1 1 130px;}
.statLabel{font-size:11px;color:var(--mutedDark);font-family:var(--fontMono);letter-spacing:.4px;margin-bottom:6px;}
.statValue{font-size:22px;font-weight:600;font-family:var(--fontMono);}
.statSub{font-size:10.5px;color:var(--mutedDark);margin-top:4px;font-family:var(--fontMono);}

/* 近期表现：最近 3/7/30 天 + 当前范围全体，四格一行。
   最后那格是基准（前三格的差值都相对它算），所以给个 accent 左边框跟前三格区分开。
   窄屏下 grid 会自己掉成 2 列，不用写断点——minmax(150px,1fr) 已经处理了 */
.recentPanel{margin-bottom:28px;}
.recentHead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px;}
.recentRow{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;}
.recentBox{background:var(--surface);border:1px solid var(--border);border-radius:var(--r10);padding:12px 14px;}
.recentBox.recentBase{border-left:2px solid var(--accent);}
.recentBox.lowSample{opacity:.5;}
.recentLabel{font-size:11px;color:var(--mutedDark);font-family:var(--fontMono);letter-spacing:.4px;
  margin-bottom:6px;display:flex;align-items:center;gap:5px;flex-wrap:wrap;}
.recentWr{font-size:19px;font-weight:600;font-family:var(--fontMono);margin-bottom:5px;}
.recentMeta{font-size:10.5px;color:var(--mutedDark);line-height:1.6;}

/* 筛选面板外壳：分析页的「分析范围」和记录页/月度页的「筛选条件」共用同一套样式，
   三个地方长一个样，用户不用在两种筛选界面之间重新适应 */
.filterPanel{border:1px solid var(--border);border-radius:var(--r10);background:var(--surface);margin-bottom:20px;overflow:hidden;}
.filterPanel.open{border-color:var(--borderLight);}
.filterPanelHead{display:flex;align-items:center;gap:10px;width:100%;padding:12px 15px;background:transparent;
  border:none;cursor:pointer;color:var(--muted);font-family:var(--fontUI);text-align:left;flex-wrap:wrap;}
.filterPanelHead:hover{background:var(--surface2);}
.filterPanelTitle{font-size:12.5px;color:var(--text);font-weight:500;}
.filterPanelBadge{font-size:11px;color:var(--accent);background:var(--accentSoft);padding:2px 8px;border-radius:var(--r10);}
.filterPanelBadge.off{color:var(--mutedDark);background:var(--surface2);}
.filterPanelChain{font-size:11.5px;color:var(--mutedDark);display:inline-flex;align-items:center;gap:6px;}
.filterPanelChain b{color:var(--accent);font-weight:600;}
.filterPanelChain .arrow{opacity:.5;}
.filterPanelChev{margin-left:auto;color:var(--mutedDark);display:flex;}
.filterPanelBody{padding:0 15px 15px;border-top:1px solid var(--border);padding-top:14px;}
/* 折叠时那行人话摘要：一行放不下就截断，完整内容在 title 里 */
.filterPanelSummary{padding:0 15px 11px;margin-top:-4px;font-size:11.5px;color:var(--mutedDark);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.analysisComboTag{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:9px 15px;font-size:12px;
  color:var(--accent);background:var(--accentSoft);border-top:1px solid var(--border);}
.analysisComboTag svg{width:14px;height:14px;flex-shrink:0;}

/* 条件分组（嵌套的 且/或/非）。
   ⚠ 布局硬要求：没建分组时界面跟以前完全一样，所以分组也活在条件行那个 flex-wrap 容器里。
   折叠态 = 跟条件行同样宽的一张卡（flex:1 1 320px），能跟条件行并排；
   展开态才 flex-basis:100% 独占一行，把子条件竖着排开。 */
.filterGroup{border:1px solid var(--borderLight);border-radius:var(--r8);background:var(--surface2);
  flex:1 1 320px;min-width:280px;max-width:420px;align-self:flex-start;}
.filterGroup.open{flex-basis:100%;max-width:100%;}
.filterGroupHead{display:flex;align-items:center;gap:8px;padding:8px 10px;}
.filterGroupChev{background:transparent;border:none;color:var(--mutedDark);cursor:pointer;display:flex;padding:0;}
.filterGroupChev:hover{color:var(--accent);}
.filterGroupOp{font-size:10.5px;font-family:var(--fontMono);color:var(--accent);
  background:var(--accentSoft);border-radius:4px;padding:1px 6px;white-space:nowrap;flex-shrink:0;}
/* 取反的分组用警示色：这一组是"排除掉"的意思，跟旁边"保留"的条件必须一眼分得开 */
.filterGroupOp.neg{color:var(--neg);background:var(--negSoft);}
.filterGroupSummary{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
.filterGroupBody{padding:0 10px 10px;}
.filterGroupOps{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:10px;}
/* 子条件列表：跟外层同一套 flex-wrap，所以分组里也能并排放两三个条件，不会一个条件占一行 */
.filterNodeList{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start;}
.filterGroupFoot{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;}

/* 重点发现：跨字段挑出最值得先看的几条，点一条跳到对应的拆解卡。
   底下那行 findingsNote 是多重比较的提醒，字号刻意压小但不能省 —— 它是这块功能的安全带 */
.findingsBox{border:1px solid var(--borderLight);border-radius:var(--r10);background:var(--surface);
  padding:12px 14px;margin-bottom:18px;}
.findingsHead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px;}
.findingRow{display:flex;align-items:center;gap:10px;width:100%;padding:7px 8px;background:transparent;
  border:none;border-radius:var(--r6);cursor:pointer;text-align:left;color:var(--muted);
  font-family:var(--fontUI);font-size:12.5px;flex-wrap:wrap;}
.findingRow:hover{background:var(--surface2);}
.findingDir{font-size:10px;flex-shrink:0;}
.findingDir.up{color:var(--pnlPos);}
.findingDir.down{color:var(--pnlNeg);}
.findingWhat{color:var(--text);min-width:0;}
.findingWhat b{font-weight:600;}
.findingMeta{font-size:11px;color:var(--mutedDark);}
.findingDiff{font-size:11.5px;margin-left:auto;}
.findingDiff.up{color:var(--pnlPos);}
.findingDiff.down{color:var(--pnlNeg);}
.findingsNote{font-size:10.5px;color:var(--mutedDark);line-height:1.7;margin-top:8px;
  padding-top:8px;border-top:1px solid var(--border);}
/* 过了 FDR 校正的行才有这个徽章。刻意不显示 p 值 —— 用途是排序，不是下结论 */
.bdStrongTag{font-size:10px;border-radius:4px;padding:0 5px;white-space:nowrap;
  font-family:var(--fontMono);}
.bdStrongTag.up{color:var(--pnlPos);background:var(--pnlPosSoft);border:1px solid var(--pnlPos);}
.bdStrongTag.down{color:var(--pnlNeg);background:var(--pnlNegSoft);border:1px solid var(--pnlNeg);}
/* 从重点发现跳过去之后闪一下：一屏十几张卡，不闪的话用户不知道跳到哪张了 */
.breakdownCard.bdFlash{animation:bdFlash 1.2s ease-out;}
@keyframes bdFlash{0%{box-shadow:0 0 0 2px var(--accent);}100%{box-shadow:0 0 0 2px transparent;}}

/* 样本太少的拆解行：不画色条、不标 delta、整行降权，免得 n=3 的胜率长得跟 n=80 一样有说服力 */
.barRow.lowSample{opacity:.5;}
.lowSampleTag{font-size:10px;color:var(--mutedDark);border:1px solid var(--border);border-radius:4px;padding:0 4px;
  font-family:var(--fontMono);white-space:nowrap;}
.bdMultiTag{font-size:10px;color:var(--mutedDark);border:1px solid var(--border);border-radius:4px;padding:0 4px;
  font-family:var(--fontMono);white-space:nowrap;}
.barRow{margin-bottom:9px;}
.barTop{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:3px;}
.barTrack{height:5px;background:var(--surface2);border-radius:3px;overflow:hidden;}
.barFill{height:100%;border-radius:3px;}
.barMeta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:4px;font-size:11px;color:var(--mutedDark);}
.barMeta .tinyBtn{color:var(--mutedDark);opacity:.4;transition:opacity .12s;white-space:nowrap;}
.barRow:hover .barMeta .tinyBtn{opacity:1;}
.barMeta .tinyBtn:hover{color:var(--accent);}
/* 分析页大区块（组合 / 拆解）的可折叠标题 */
.anaSectionHead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px;}
.anaSectionToggle{display:flex;align-items:center;gap:8px;background:transparent;border:none;cursor:pointer;
  padding:0;color:var(--muted);font-family:var(--fontUI);text-align:left;flex-wrap:wrap;}
.anaSectionToggle:hover .sectionLabel{color:var(--accent);}
.anaSectionActions{margin-left:auto;display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
/* 卡片/列表切换 */
.viewToggle{display:flex;border:1px solid var(--border);border-radius:var(--r7);overflow:hidden;}
.viewBtn{display:flex;align-items:center;justify-content:center;width:30px;height:26px;background:var(--surface2);
  border:none;cursor:pointer;color:var(--mutedDark);}
.viewBtn.active{background:var(--accent);color:var(--onAccent);}
.viewBtn svg{width:14px;height:14px;}
/* 文字版的分段切换。.viewBtn 那个固定 30px 宽是给纯图标按钮定的，
   直接拿来放「按显著性」四个字会被裁掉一半，所以这里放开宽度 */
.viewToggle.textToggle .viewBtn{width:auto;padding:0 10px;font-size:11.5px;
  font-family:var(--fontUI);white-space:nowrap;}

/* 贴顶的紧凑统计条：拆解区很长，差值要有个一直看得见的基准才有意义。
   position:sticky 是纯 CSS 的，不用挂滚动监听，也不用同步任何 JS 状态 */
.analyticsSticky{position:sticky;top:0;z-index:20;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r8);margin-bottom:16px;box-shadow:0 2px 10px rgba(0,0,0,.10);}
.analyticsStickyInner{padding:8px 14px;display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-size:12.5px;}
.stickyLinks{margin-left:auto;display:flex;gap:4px;flex-wrap:wrap;}
.stickyLinks .tinyBtn{color:var(--mutedDark);}
.stickyLinks .tinyBtn:hover{color:var(--accent);}
.stickyTop{color:var(--mutedDark);display:flex;}
.stickyTop svg{width:15px;height:15px;}
/* 粘条是 fixed 的，锚点跳转要给它让出高度 */
#anaScope,#anaOverview,#anaCombos,#anaBreakdowns{scroll-margin-top:56px;}
@media(max-width:640px){.analyticsStickyInner{padding:8px 14px;gap:10px;}.stickyLinks{display:none;}}

.comboGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:14px;}
/* 列表模式：一行一个组合。仍然是 .comboCard，拖拽处理器靠这个类名和 data-combo-id 定位，不用改拖拽代码 */
.comboCard.listRow{grid-column:1/-1;display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:9px 14px;}
.comboCard.listRow .listDrag{color:var(--mutedDark);cursor:grab;font-size:14px;}
.comboCard.listRow .listName{font-size:13.5px;color:var(--text);font-weight:500;min-width:180px;flex:0 1 auto;}
.comboCard.listRow .listStats{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;font-size:12.5px;color:var(--muted);}
.comboCard.listRow .listActions{margin-left:auto;display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.comboCard.listRow .listActions .btn{padding:4px 8px;}
.comboCard.listRow .listActions .btn svg{width:14px;height:14px;}
.comboCard.listRow .listConfirm{flex:1 1 100%;display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  font-size:12px;color:var(--neg);padding-top:8px;}
.comboCard{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--border);border-radius:var(--r10);padding:14px 16px;}
/* 独占一整行是为了不被 340px 的列宽挤到条件行溢出卡片，但网格本身跟着 2200px 的页面拉到很宽，
   不封顶的话，编辑中的卡片是这一行唯一元素时会被 stretch 撑到接近页面全宽——加个上限，多出来的空间就留白 */
.comboCard.editing{grid-column:1/-1;max-width:920px;}
/* select 宽度是跟着最长选项撑的，卡片窄的时候会顶出边框，这里兜一下 */
.comboCard .select{max-width:100%;min-width:0;}
.chipMore{border-style:dashed !important;color:var(--mutedDark) !important;}
.comboSmallSampleBadge{display:flex;align-items:center;gap:6px;width:fit-content;padding:4px 9px;margin:2px 0 8px;border-radius:var(--r6);background:var(--accentSoft);border:1px solid var(--accent);color:var(--accent);font-size:11.5px;font-weight:600;}
.comboSmallSampleBadge svg{width:13px;height:13px;flex-shrink:0;}
.comboCard.dragOverTarget{border-color:var(--accent);box-shadow:0 0 0 2px var(--accentSoft) inset;}
/* 正在被上面那个面板分析的组合，一眼看得出是哪张卡 */
.comboCard.analyzing{border-left-color:var(--accent);background:var(--accentSoft);}
.comboGroupSection{border:1px solid var(--border);border-radius:var(--r10);padding:12px 14px;margin-bottom:16px;}
.comboGroupSection.dragOverTarget,.comboSubgroupSection.dragOverTarget,.comboUngroupedSection.dragOverTarget{border-color:var(--accent);box-shadow:0 0 0 2px var(--accentSoft) inset;}
.comboGroupHeader{display:flex;align-items:center;gap:8px;padding:4px 6px;margin-bottom:10px;border:1px solid transparent;border-radius:var(--r7);cursor:grab;flex-wrap:wrap;}
.comboGroupHeader.dragOverTarget{border-color:var(--accent);background:var(--accentSoft);}
.comboSubgroupSection{border:1px dashed var(--border);border-radius:var(--r8);padding:10px 12px;margin:12px 0 0 18px;}
.comboSubgroupSection .comboGrid{margin-top:10px;}
.comboSubgroupSection .comboGroupHeader{font-size:12.5px;margin-bottom:8px;}
.comboUngroupedSection{border:1px dashed var(--border);border-radius:var(--r10);padding:12px 14px;}
.comboUngroupedSection .comboGrid{margin-top:10px;}
.bdRow{display:flex;align-items:center;gap:8px;padding:5px 8px;border:1px solid transparent;border-radius:var(--r7);cursor:grab;}
.bdRow:hover{background:var(--surface2);}
.bdRow.dragOverTarget{border-color:var(--accent);background:var(--accentSoft);}
.breakdownCard[draggable="true"]{cursor:grab;}
.breakdownCard[draggable="true"].dragOverTarget{border-color:var(--accent);box-shadow:0 0 0 2px var(--accentSoft) inset;}
.breakdownTitle .tinyBtn{opacity:0;transition:opacity .12s;}
.breakdownCard:hover .breakdownTitle .tinyBtn{opacity:1;}
/* align-items:start 是关键：grid 默认 stretch，一行里所有卡片会被拉到最高那张的高度，
   12 行的 setup_type 旁边那些 1~2 行的卡就陪着空 900px。列宽也从 260 提到 300，
   太窄的话每行 meta 都要折成两行，反而更高 */
.breakdownGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;align-items:start;}
/* 折起来的小样本行 / 展开后收回去的那一行 */
.bdFoldRow{display:flex;align-items:center;gap:6px;width:100%;padding:5px 0 2px;background:transparent;border:none;
  cursor:pointer;color:var(--mutedDark);font-size:11.5px;font-family:var(--fontMono);text-align:left;}
.bdFoldRow:hover{color:var(--accent);}
.bdFoldRow svg{width:13px;height:13px;}
/* 当前范围内只有一个值的字段，收成一行灰字 */
.bdUniform{margin-top:14px;font-size:11.5px;color:var(--mutedDark);line-height:2;}
.bdUniformItem{display:inline-block;border:1px solid var(--border);border-radius:var(--r6);padding:2px 8px;margin:0 6px 4px 0;
  font-family:var(--fontMono);}
.breakdownCard{background:var(--surface);border:1px solid var(--border);border-radius:var(--r10);padding:14px;}
.breakdownTitle{font-size:12.5px;color:var(--accent);margin-bottom:10px;font-family:var(--fontMono);}
.notice{display:flex;gap:10px;align-items:flex-start;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r10);padding:16px;color:var(--muted);font-size:13px;}
.monthYear{font-family:var(--fontMono);font-size:13px;color:var(--accent);margin-bottom:10px;}
.coverageScope{font-size:12px;color:var(--accent);background:var(--accentSoft);border:1px solid var(--accent);
  border-radius:var(--r8);padding:8px 11px;margin-bottom:18px;line-height:1.6;}
.coverageYearMeta{margin-left:10px;color:var(--mutedDark);font-size:11.5px;}
.monthGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px;margin-bottom:22px;}
.monthCell{border:1px solid var(--border);background:var(--surface2);border-radius:var(--r9);padding:10px 8px;text-align:center;transition:border-color .12s,transform .12s;}
.monthCell:hover{border-color:var(--accent);transform:translateY(-1px);}
.monthCell.complete{border-color:var(--pos);background:var(--posFaint);}
.monthCell.partial{border-color:var(--accent);background:var(--accentSoft);}
.monthCell.selected{outline:2px solid var(--text);outline-offset:2px;}
.monthCellDate{font-family:var(--fontMono);font-size:13px;color:var(--text);}
.monthCellStatus{font-size:10.5px;margin-top:4px;color:var(--mutedDark);}
.monthCell.complete .monthCellStatus{color:var(--pos);}
.monthCell.partial .monthCellStatus{color:var(--accent);}
.monthBar{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px;margin-bottom:8px;}
.monthBarCell{border:1px solid var(--border);background:var(--surface2);border-radius:var(--r9);padding:10px 6px;text-align:center;cursor:pointer;font-family:var(--fontUI);transition:border-color .12s,transform .12s;}
.monthBarCell:hover{border-color:var(--accent);transform:translateY(-1px);}
.monthBarCell.current{outline:2px solid var(--accent);outline-offset:-1px;}
.monthBarCell.pos{border-color:var(--pnlPos);background:var(--pnlPosSoft);}
.monthBarCell.neg{border-color:var(--pnlNeg);background:var(--pnlNegSoft);}
.monthBarCell.neutral{border-color:var(--accent);background:var(--accentSoft);}
.monthBarLabel{font-family:var(--fontMono);font-size:12px;color:var(--text);}
.monthBarValue{font-size:11px;margin-top:4px;font-family:var(--fontMono);color:var(--muted);}
.monthBarCell.pos .monthBarValue{color:var(--pnlPos);}
.monthBarCell.neg .monthBarValue{color:var(--pnlNeg);}
.dayGrid{display:grid;grid-template-columns:repeat(7,1fr) 84px;gap:6px;margin-bottom:10px;}
.dayGridHead{text-align:center;font-size:11px;color:var(--mutedDark);font-family:var(--fontMono);padding-bottom:4px;}
.dayCell{border:1px solid var(--border);background:var(--surface2);border-radius:var(--r9);min-height:64px;padding:6px 8px;cursor:pointer;transition:border-color .12s,transform .12s;}
.dayCell:not(.outMonth):hover{border-color:var(--accent);transform:translateY(-1px);}
.dayCell.outMonth{opacity:.28;cursor:default;}
.dayCell.pos{border-color:var(--pnlPos);background:var(--pnlPosSoft);}
.dayCell.neg{border-color:var(--pnlNeg);background:var(--pnlNegSoft);}
.dayCell.neutral{border-color:var(--accent);background:var(--accentSoft);}
.dayCellNum{font-family:var(--fontMono);font-size:12px;color:var(--muted);text-align:right;}
.dayCellInfo{font-size:11px;margin-top:6px;color:var(--text);line-height:1.5;}
.dayCell.pos .dayCellInfo{color:var(--pnlPos);}
.dayCell.neg .dayCellInfo{color:var(--pnlNeg);}
.weekCell{border:1px solid var(--border);background:var(--surface2);border-radius:var(--r9);min-height:64px;padding:6px 4px;display:flex;align-items:center;justify-content:center;text-align:center;}
.weekCell.pos{border-color:var(--pnlPos);background:var(--pnlPosSoft);}
.weekCell.neg{border-color:var(--pnlNeg);background:var(--pnlNegSoft);}
.weekCell.neutral{border-color:var(--accent);background:var(--accentSoft);}
.weekCellInfo{font-size:12px;font-weight:600;color:var(--text);font-family:var(--fontMono);}
.weekCell.pos .weekCellInfo{color:var(--pnlPos);}
.weekCell.neg .weekCellInfo{color:var(--pnlNeg);}
.weekCellInfo.muted{color:var(--mutedDark);font-weight:400;}
.dayDetailRow{display:flex;align-items:center;gap:12px;padding:10px 6px;border-bottom:1px solid var(--border);cursor:pointer;font-size:13px;}
.calendarPanel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r12);padding:20px;}
.dayDetailThumb{width:120px;height:75px;border-radius:var(--r8);object-fit:cover;flex-shrink:0;cursor:pointer;background:var(--surface2);}
.dayDetailThumbEmpty{width:120px;height:75px;border-radius:var(--r8);flex-shrink:0;background:var(--surface2);display:flex;align-items:center;justify-content:center;color:var(--mutedDark);}
.dayDetailRow:hover{background:var(--surface2);}
/* 结果列宽度自适应：min-width 保住 "W" 这种单字母的对齐，max-width + ellipsis 兜住
   用户自定义的长选项，不让它溢出去盖在模型名上 */
.dayDetailResult{font-weight:600;min-width:28px;max-width:96px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.field{margin-bottom:14px;}
.fieldLabel{font-size:12px;color:var(--muted);margin-bottom:6px;font-family:var(--fontMono);letter-spacing:.3px;}
.input,textarea.input,select.input{width:100%;background:var(--surface2);border:1px solid var(--border);border-radius:var(--r8);
  padding:9px 11px;color:var(--text);font-size:13.5px;font-family:var(--fontUI);outline:none;}
.input:focus{border-color:var(--accent);}
textarea.input{resize:vertical;}
.chipGroup{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;}
.chip{padding:5px 11px;border-radius:var(--r7);font-size:12.5px;font-family:var(--fontUI);border:1px solid var(--border);
  background:transparent;color:var(--muted);cursor:pointer;white-space:nowrap;}
.chip.active{border-color:var(--accent);background:var(--accentSoft);color:var(--accent);}
.addOptRow{display:flex;gap:6px;}
.overlay{position:fixed;inset:0;background:var(--scrim);display:flex;align-items:center;justify-content:center;
  z-index:100;padding:16px;}
.modal{background:var(--surface);border:1px solid var(--borderLight);border-radius:var(--r14);width:100%;max-width:640px;
  max-height:88vh;display:flex;flex-direction:column;box-shadow:var(--shadowModal);}
.modalHead{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--border);}
.modalBody{padding:18px 22px;overflow-y:auto;flex:1;}
.readOnlyFields > *{pointer-events:none;}
.modalFoot{display:flex;justify-content:flex-end;gap:10px;padding:14px 22px;border-top:1px solid var(--border);}
.iconBtn{background:transparent;border:none;color:var(--muted);cursor:pointer;padding:6px;border-radius:var(--r6);display:flex;}
.thumbWrap{margin-top:8px;resize:both;overflow:hidden;width:260px;height:160px;min-width:120px;min-height:80px;max-width:100%;
  border-radius:var(--r8);border:1px solid var(--border);}
.thumbWrap img.thumb{width:100%;height:100%;object-fit:contain;display:block;background:var(--surface2);cursor:zoom-in;}
.thumbHint{font-size:10.5px;color:var(--mutedDark);margin-top:4px;}
.thumbWrap .thumbFallback{height:100%;width:100%;margin-top:0;border:none;}
.thumbFallback{height:120px;border-radius:var(--r8);border:1px solid var(--border);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:5px;color:var(--mutedDark);font-size:11px;margin-top:8px;}
.settingsRow{border:1px solid var(--border);border-radius:var(--r10);margin-bottom:8px;background:var(--surface);transition:border-color .12s,box-shadow .12s;}
.settingsRow[draggable="true"]{cursor:grab;}
.settingsRow[draggable="true"].dragOverTarget{border-color:var(--accent);box-shadow:0 0 0 2px var(--accentSoft) inset;}
.settingsRowHead{display:flex;align-items:center;gap:10px;padding:11px 14px;cursor:pointer;}
.settingsRowHead .dragHandle{color:var(--mutedDark);font-size:13px;cursor:grab;}
.tinyBtn{background:transparent;border:none;color:var(--mutedDark);cursor:pointer;padding:0;font-size:11px;}
.settingsRowBody{padding:4px 14px 16px;border-top:1px solid var(--border);display:none;}
.settingsRowBody.open{display:block;}
.fieldTypeTag{font-size:11px;color:var(--mutedDark);margin-left:10px;}
.fieldRoleTag{font-size:11px;color:var(--accent);margin-left:8px;}
/* 停用字段：设置页整行压暗，标签用中性灰——它不是错误状态，只是「不再录了」 */
.fieldHiddenTag{font-size:11px;color:var(--mutedDark);margin-left:8px;border:1px solid var(--border);border-radius:4px;padding:1px 5px;}
.settingsRow.isHidden{background:transparent;}
.fieldHiddenBox{border:1px solid var(--border);border-radius:var(--r8);padding:10px 12px;margin-bottom:12px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
.fieldHiddenText{flex:1;min-width:180px;font-size:11.5px;line-height:1.65;color:var(--mutedDark);}
/* 录入弹窗里那段「填过的停用字段」，跟在录的字段之间要有一条明确的界 */
.legacyFields{margin-top:22px;padding-top:16px;border-top:1px dashed var(--border);}
.legacyFieldsHead{font-size:12px;font-weight:600;color:var(--mutedDark);margin-bottom:4px;}
.legacyFieldsHint{font-size:11.5px;line-height:1.6;color:var(--mutedDark);margin-bottom:14px;}
.tagChip{display:inline-flex;align-items:center;padding:4px 8px;border-radius:var(--r6);background:var(--surface2);
  border:1px solid var(--border);color:var(--muted);font-size:12px;margin:0 6px 6px 0;}
.tagChip span{margin-left:5px;cursor:pointer;}
.tagChip.dragOverTarget{outline:2px solid var(--accent);outline-offset:1px;background:var(--accentSoft);}
.filterRow.dragOverTarget{border-color:var(--accent);box-shadow:0 0 0 2px var(--accentSoft) inset;}
/* 跟 .comboCard .select 同一个坑：字段下拉的宽度按最长选项撑，有人起了很长的字段名就会顶出卡片、压到隔壁那张 */
.filterRow .select{max-width:100%;min-width:0;}
.addFieldBox{border:1px dashed var(--borderLight);border-radius:var(--r10);padding:16px;margin-top:10px;}
.dashLabel{font-size:12.5px;color:var(--accent);margin-bottom:12px;font-family:var(--fontMono);}
.notice.error{border-color:var(--neg);}
.loading{padding:60px;text-align:center;color:var(--mutedDark);}
@media(max-width:520px){.statBox{flex-basis:100%;}}

/* ============================================================
   复盘（REVIEWS）
   编辑器是一层自己的全屏浮层，z-index 90 —— 故意低于 .overlay(100)，
   这样从复盘里点开一笔交易时，交易弹窗盖在编辑器上面而不是被压住。
   ============================================================ */
.reviewTop{display:flex;align-items:center;gap:12px;margin-bottom:18px;flex-wrap:wrap;}
.reviewSearchBox{position:relative;flex:1;min-width:200px;max-width:420px;display:flex;align-items:center;}
.reviewSearchBox>svg{position:absolute;left:12px;color:var(--mutedDark);pointer-events:none;}
.reviewSearchInput{padding-left:34px;}
.reviewCount{font-size:12px;color:var(--mutedDark);margin-left:auto;}

.reviewList{display:flex;flex-direction:column;gap:10px;}
.reviewCard{background:var(--surface);border:1px solid var(--border);border-radius:var(--r10);padding:14px 16px;cursor:pointer;
  transition:border-color .12s ease,background .12s ease;}
.reviewCard:hover{border-color:var(--borderLight);background:var(--surface2);}
.reviewCardHead{display:flex;align-items:center;justify-content:space-between;gap:12px;}
.reviewCardTitle{font-size:15.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.reviewCardDel{color:var(--mutedDark);flex-shrink:0;}
.reviewCardDel:hover{color:var(--neg);}
.reviewCardDelConfirm{display:flex;gap:8px;flex-shrink:0;}
.reviewCardMeta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:11px;color:var(--mutedDark);margin-top:7px;}
.reviewWeekTag{padding:2px 8px;border-radius:var(--r11);background:var(--surface2);border:1px solid var(--border);}
.reviewWeekTag.on{background:var(--accentSoft);border-color:var(--accent);color:var(--accent);}
.reviewLinkTag{display:inline-flex;align-items:center;gap:4px;color:var(--muted);}
.reviewLinkTag svg{width:11px;height:11px;}
.reviewCardExcerpt{font-size:12.5px;color:var(--muted);margin-top:9px;line-height:1.65;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}

/* ---------- 正文上色 {red|文字} ----------
   全部用主题变量，深浅色切换时跟着走；类名是渲染器白名单里出来的，
   用户写不进任意 CSS。 */
.mdC-red{color:var(--neg);}
.mdC-green{color:var(--pos);}
.mdC-yellow{color:var(--accent);}
.mdC-blue{color:var(--info);}
.mdC-gray{color:var(--mutedDark);}
/* 高亮是背景色，文字颜色不动，才能和上面几种叠着用 */
.mdC-mark{background:var(--accentSoft);box-shadow:0 0 0 2px var(--accentSoft);border-radius:2px;}

/* 看大图时的左右翻页和计数条（灯箱本体是 lightboxHtml 里的内联样式） */
.lbNav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:64px;border:none;border-radius:var(--r10);
  background:rgba(0,0,0,.5);color:#fff;font-size:34px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.lbNav:hover:not(:disabled){background:rgba(0,0,0,.75);}
.lbNav:disabled{opacity:.25;cursor:default;}
.overlay.lbHasNav{padding:30px 72px 52px;}
.lbPrev{left:16px;}
.lbNext{right:16px;}
.lbCount{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);padding:5px 12px;border-radius:var(--r14);
  background:rgba(0,0,0,.55);color:#fff;font-size:11.5px;white-space:nowrap;pointer-events:none;
  max-width:calc(100% - 32px);overflow:hidden;text-overflow:ellipsis;}
@media(max-width:640px){.overlay.lbHasNav{padding:30px 44px 52px;}.lbNav{width:34px;height:52px;font-size:26px;}.lbPrev{left:6px;}.lbNext{right:6px;}}

/* 颜色面板里的一格（格式栏和插入菜单共用） */
.colorSwatch{display:flex;align-items:center;gap:9px;width:100%;padding:6px 8px;background:transparent;
  border:none;border-radius:var(--r6);color:var(--text);font-size:12.5px;cursor:pointer;text-align:left;
  font-family:var(--fontUI);}
.colorSwatch:hover{background:var(--surface2);}
.colorSwatch.on{background:var(--accentSoft);}
.colorDot{width:20px;height:20px;border-radius:5px;flex-shrink:0;display:flex;align-items:center;
  justify-content:center;font-weight:700;font-size:12px;background:var(--surface2);
  border:1px solid var(--border);}
.colorDot svg{width:11px;height:11px;color:var(--mutedDark);}

/* ---------- 单笔交易的只读预览（复盘里点交易胶囊弹出来的） ---------- */
.tradePreviewModal{max-width:760px;display:flex;flex-direction:column;max-height:88vh;}
.tradePreviewBody{overflow-y:auto;}
.tpHead{display:flex;align-items:center;gap:11px;flex-wrap:wrap;min-width:0;}
.tpDate{font-size:16px;font-weight:600;}
.tpModel{font-size:13px;color:var(--muted);}
.tpResult{padding:2px 9px;border-radius:var(--r11);font-size:11.5px;font-weight:600;color:var(--onAccent);
  font-family:var(--fontMono);}
.tpR{font-size:13px;font-weight:600;}
/* 截图不裁剪——从复盘点进来就是为了看那张图，按高度封顶就够了 */
.tpShot{position:relative;margin-bottom:18px;border-radius:var(--r9);overflow:hidden;border:1px solid var(--border);
  background:var(--surface2);cursor:zoom-in;display:flex;justify-content:center;}
.tpShot img{max-width:100%;max-height:52vh;object-fit:contain;display:block;}
.tpZoomHint{position:absolute;right:8px;bottom:8px;padding:2px 8px;border-radius:var(--r10);font-size:11px;
  background:rgba(5,7,10,.66);color:#E8E6DF;opacity:0;transition:opacity .12s ease;}
.tpShot:hover .tpZoomHint{opacity:1;}
.tpShotEmpty{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:34px 0;
  color:var(--mutedDark);font-size:12.5px;cursor:default;}
.tpFields{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px 18px;}
.tpField.isLong{grid-column:1/-1;}
.tpFieldLabel{font-size:10.5px;letter-spacing:.5px;color:var(--mutedDark);
  font-family:var(--fontMono);margin-bottom:3px;}
.tpFieldVal{font-size:13px;line-height:1.6;color:var(--text);word-break:break-word;white-space:pre-wrap;}
.tpEmpty{font-size:12.5px;color:var(--mutedDark);}
@media(max-width:640px){ .tpShot img{max-height:38vh;} }

/* ---------- 多张截图 ----------
   只在交易预览（主图左上角的张数 + 缩略图条）和编辑表单（缩略图墙）里出现，其它地方只认封面 */
.shotCount{position:absolute;right:8px;bottom:8px;display:inline-flex;align-items:center;gap:4px;
  padding:2px 7px;border-radius:var(--r6);background:rgba(0,0,0,.6);color:#fff;font-size:11px;font-family:var(--fontMono);
  pointer-events:none;line-height:1.5;}
.shotCount svg{width:12px;height:12px;}
.tpShot .shotCount{right:auto;left:10px;top:10px;bottom:auto;}
.tpShot:has(+ .tpStrip){margin-bottom:10px;}
.tpStrip{display:flex;gap:8px;overflow-x:auto;margin-bottom:18px;padding-bottom:2px;}
.tpStripItem{flex:0 0 auto;width:96px;height:60px;padding:0;border-radius:var(--r6);overflow:hidden;cursor:pointer;
  border:2px solid var(--border);background:var(--surface2);opacity:.6;transition:opacity .12s,border-color .12s;}
.tpStripItem img{width:100%;height:100%;object-fit:cover;display:block;}
.tpStripItem:hover{opacity:1;}
.tpStripItem.on{border-color:var(--accent);opacity:1;}
.shotInput{resize:vertical;font-family:var(--fontMono);font-size:12px;line-height:1.7;white-space:pre;overflow-x:auto;}
.shotStrip{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px;margin-top:8px;}
.shotTile{position:relative;aspect-ratio:16/10;border-radius:var(--r8);overflow:hidden;border:1px solid var(--border);background:var(--surface2);}
.shotTile.isCover{border:2px solid var(--accent);}
.shotTile img{width:100%;height:100%;object-fit:cover;display:block;cursor:zoom-in;}
.shotTile .thumbFallback{height:100%;margin-top:0;border:none;font-size:10.5px;}
.shotTileNo{position:absolute;left:6px;top:6px;padding:1px 6px;border-radius:var(--r6);font-size:10.5px;
  background:rgba(0,0,0,.6);color:#fff;}
.shotTile.isCover .shotTileNo{background:var(--accent);color:var(--onSolid);}
.shotTileOps{position:absolute;right:5px;top:5px;display:flex;gap:4px;opacity:0;transition:opacity .12s;}
.shotTile:hover .shotTileOps,.shotTileOps:focus-within{opacity:1;}
.shotTileOps button{min-width:24px;height:24px;border:none;border-radius:var(--r6);background:rgba(0,0,0,.6);color:#fff;
  display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;}
.shotTileOps button:hover{background:rgba(0,0,0,.85);}
.shotTileOps svg{width:13px;height:13px;}
.shotTileOps .shotTileCover{padding:0 8px;font-size:11px;white-space:nowrap;}
@media(hover:none){ .shotTileOps{opacity:1;} }

/* ---------- 复盘分组 ---------- */
.reviewGroupSection{margin-bottom:18px;border:1px solid transparent;border-radius:var(--r10);transition:border-color .12s ease;}
.reviewGroupSection.dragOverTarget{border-color:var(--accent);background:var(--accentSoft);}
.reviewGroupHeader{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:var(--r8);cursor:pointer;
  border-bottom:1px solid var(--border);margin-bottom:10px;}
.reviewGroupHeader:hover{background:var(--surface2);}
.reviewGroupHeader.dragOverTarget{background:var(--accentSoft);outline:1px solid var(--accent);}
.reviewGroupChev{color:var(--mutedDark);display:flex;}
.reviewGroupName{font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.reviewGroupName.muted{font-weight:500;color:var(--mutedDark);}
.reviewGroupCount{font-size:11.5px;color:var(--mutedDark);}
.reviewGroupActions{margin-left:auto;display:flex;gap:8px;align-items:center;flex-shrink:0;}
.reviewGroupActions .tinyBtn{display:inline-flex;align-items:center;gap:3px;color:var(--muted);}
.reviewGroupActions .tinyBtn:hover{color:var(--text);}
.reviewGroupActions svg{width:11px;height:11px;}
.reviewGroupEmpty{font-size:11.5px;color:var(--mutedDark);padding:2px 10px 12px;}
.reviewGroupConfirm{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:0 10px 12px;
  font-size:12px;color:var(--neg);}
.reviewGroupConfirm .btn{padding:4px 10px;font-size:12px;}
.reviewCard.dragOverTarget{border-color:var(--accent);}
.reviewInGroupTag{padding:2px 8px;border-radius:var(--r11);background:var(--surface2);border:1px solid var(--border);
  color:var(--muted);}
.reviewSearchNote{font-size:11.5px;color:var(--mutedDark);margin-bottom:10px;}

/* ---------- 编辑器外壳：整页一张纸，正文一栏居中（Notion 那种） ----------
   整个浮层自己滚动，顶栏 sticky。格式栏、插入菜单这些浮层都是 position:fixed，
   坐标直接用 ProseMirror 算出来的视口坐标，滚动时由 __reviewScroll 重新定位。 */
.reviewEditorOverlay{position:fixed;inset:0;z-index:90;background:var(--bg);overflow-y:auto;overscroll-behavior:contain;}
.reviewTopBar{position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:12px;
  height:48px;padding:0 14px;background:var(--bg);border-bottom:1px solid var(--border);}
.reviewCrumbs{display:flex;align-items:center;gap:4px;min-width:0;font-size:13px;}
.reviewCrumbBtn{background:transparent;border:none;color:var(--muted);cursor:pointer;padding:5px 8px;border-radius:var(--r6);
  font-size:13px;font-family:var(--fontUI);flex-shrink:0;}
.reviewCrumbBtn:hover{background:var(--surface2);color:var(--text);}
.reviewCrumbSep{color:var(--mutedDark);}
.reviewCrumbTitle{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 4px;}
.reviewTopRight{display:flex;align-items:center;gap:10px;flex-shrink:0;}
.reviewSaveBadge{font-size:11.5px;color:var(--mutedDark);font-family:var(--fontMono);white-space:nowrap;}
.reviewSaveBadge.dirty{color:var(--accent);}
.reviewSaveBadge.ok{color:var(--pos);}
.reviewSaveBadge.err{color:var(--neg);display:inline-flex;align-items:center;gap:5px;}

.reviewPage{max-width:760px;margin:0 auto;padding:56px 24px 0;}
.reviewTitleInput{display:block;width:100%;background:transparent;border:none;outline:none;color:var(--text);
  font-size:34px;font-weight:700;line-height:1.25;padding:0;font-family:var(--fontDisplay);}
.reviewTitleInput::placeholder{color:var(--mutedDark);opacity:.7;}
.reviewTitleStatic{font-size:34px;font-weight:700;line-height:1.25;word-break:break-word;}

/* 标题下面那一行「属性」：关联到哪天 / 哪周 */
.reviewWeekRow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:16px 0 26px;padding-bottom:16px;
  border-bottom:1px solid var(--border);font-size:12px;}
.reviewWeekLabel{color:var(--mutedDark);font-family:var(--fontMono);font-size:11px;letter-spacing:.5px;margin-right:4px;}
.reviewWeekRow .tinyBtn{padding:3px 9px;border:1px solid var(--border);border-radius:var(--r11);font-size:11.5px;color:var(--muted);}
.reviewWeekRow .tinyBtn:hover:not(:disabled){border-color:var(--borderLight);color:var(--text);}
.reviewWeekRow .tinyBtn.on{background:var(--accentSoft);border-color:var(--accent);color:var(--accent);}
.reviewWeekDate{width:auto;padding:3px 8px;font-size:11.5px;}
/* 日/周/不关联 三选一，挤在一起像个分段控件，跟后面的快捷按钮区分开 */
.reviewPeriodSeg{display:inline-flex;gap:0;border:1px solid var(--border);border-radius:var(--r11);overflow:hidden;}
.reviewPeriodSeg .tinyBtn{border:none;border-radius:0;padding:3px 11px;}
.reviewPeriodSeg .tinyBtn+.tinyBtn{border-left:1px solid var(--border);}
.reviewPeriodSeg .tinyBtn.on{background:var(--accent);color:var(--onAccent);font-weight:600;}
.reviewReadOnly{color:var(--accent);font-size:11.5px;margin-left:auto;}

/* ---------- 正文 ---------- */
.reviewDoc{font-size:15.5px;line-height:1.8;outline:none;min-height:30vh;}
.reviewDocMount .reviewDoc{padding-left:2px;}
.reviewDocLoading{opacity:.55;}
.reviewLoadingNote{font-size:12px;color:var(--mutedDark);margin-top:10px;}
.reviewDocEmpty{color:var(--mutedDark);font-size:14px;}
/* 正文下面留一大块空白，点一下就跳到文末接着写 */
.reviewDocTail{height:38vh;cursor:text;}
.reviewFallbackInput{width:100%;min-height:55vh;font-family:var(--fontCode);font-size:13.5px;line-height:1.75;resize:vertical;}
.reviewHintBar{position:fixed;left:0;right:0;bottom:0;z-index:4;text-align:center;padding:7px 16px 9px;
  font-size:11px;color:var(--mutedDark);font-family:var(--fontMono);pointer-events:none;
  background:linear-gradient(to top, var(--bg) 55%, transparent);}

/* 空行上的提示文字（Tiptap 的 Placeholder 扩展给当前空块挂 is-empty + data-placeholder） */
.reviewDoc .is-empty::before{content:attr(data-placeholder);float:left;height:0;pointer-events:none;color:var(--mutedDark);opacity:.8;}
/* 选中整张图 / 整个交易胶囊时给个框，不然按 Delete 之前看不出选中了什么 */
.reviewDoc img.ProseMirror-selectednode{outline:2px solid var(--accent);outline-offset:2px;}
.reviewDoc .tradeRefHost.ProseMirror-selectednode .tradeRef{box-shadow:0 0 0 2px var(--accent);}
.reviewDoc hr.ProseMirror-selectednode{border-top-color:var(--accent);}
.reviewDoc img{cursor:default;}
/* 待办：Tiptap 输出的是 <li data-checked><label><input type=checkbox></label><div>正文</div></li> */
.reviewDoc ul[data-type="taskList"] li{display:flex;align-items:flex-start;gap:9px;list-style:none;margin-left:-20px;}
.reviewDoc ul[data-type="taskList"] li>label{flex-shrink:0;user-select:none;margin-top:3px;}
.reviewDoc ul[data-type="taskList"] li>label input{width:15px;height:15px;margin:0;cursor:pointer;accent-color:var(--accent);}
.reviewDoc ul[data-type="taskList"] li>div{flex:1;min-width:0;}
.reviewDoc ul[data-type="taskList"] li[data-checked="true"]>div>p{color:var(--mutedDark);text-decoration:line-through;}
.reviewDoc li>p{margin:0;}
/* 表格：拖选多格时 ProseMirror 给格子挂 selectedCell */
.reviewDoc .tableWrapper{overflow-x:auto;margin:0 0 14px;}
.reviewDoc table td,.reviewDoc table th{position:relative;border:1px solid var(--border);vertical-align:top;min-width:60px;}
.reviewDoc table p{margin:0;}
.reviewDoc .selectedCell::after{content:"";position:absolute;inset:0;background:var(--accentSoft);pointer-events:none;}
.reviewDoc .ProseMirror-gapcursor::after{border-top-color:var(--text);}

/* ---------- 浮层：选中文字的格式栏 / 没选区时的小弹框 / 提示条 ---------- */
.reviewBubble,.reviewPop{position:fixed;z-index:20;background:var(--surface);border:1px solid var(--borderLight);
  border-radius:var(--r9);box-shadow:var(--shadowPop);}
.reviewBubble{display:flex;align-items:center;gap:1px;padding:3px;}
.reviewBubble[hidden],.reviewPop[hidden],.reviewToast[hidden]{display:none;}
.reviewBubble.isColor,.reviewPop.isColor{flex-direction:column;align-items:stretch;min-width:140px;padding:4px;}
.bubbleBtn{display:inline-flex;align-items:center;gap:3px;background:transparent;border:none;border-radius:var(--r6);
  color:var(--muted);cursor:pointer;padding:6px 7px;font-size:12px;font-family:var(--fontUI);white-space:nowrap;}
.bubbleBtn:hover{background:var(--surface2);color:var(--text);}
.bubbleBtn.on{background:var(--accentSoft);color:var(--accent);}
.bubbleBtn svg{width:15px;height:15px;}
.bubbleBtn svg+svg{width:10px;height:10px;opacity:.6;margin-left:-2px;}
.bubbleBtn.bubbleText{padding:5px 9px;}
.bubbleBtn.danger{color:var(--neg);}
.bubbleSep{width:1px;height:16px;background:var(--border);margin:0 3px;flex-shrink:0;}
.tbLabel{font-size:11px;font-family:var(--fontMono);}
.bubbleInput{width:240px;background:var(--surface2);border:1px solid var(--border);border-radius:var(--r6);color:var(--text);
  padding:6px 9px;font-size:12.5px;outline:none;font-family:var(--fontCode);}
.bubbleInput:focus{border-color:var(--accent);}
.bubbleHref{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--info);
  padding:0 6px;font-family:var(--fontCode);}
.reviewPop{padding:10px;min-width:320px;}
.reviewPopLabel{font-size:11.5px;color:var(--mutedDark);margin-bottom:7px;}
.reviewPopRow{display:flex;gap:6px;}
.reviewPopRow .bubbleInput{flex:1;width:auto;min-width:0;}
.reviewPopErr{font-size:11.5px;color:var(--neg);margin-top:6px;}
.reviewPopErr:empty{display:none;}
.reviewToast{position:fixed;left:50%;bottom:44px;transform:translateX(-50%);z-index:30;max-width:min(520px, calc(100vw - 32px));
  padding:10px 14px;background:var(--surface);border:1px solid var(--borderLight);border-radius:var(--r9);font-size:12.5px;
  line-height:1.6;color:var(--text);box-shadow:var(--shadowPop);}

/* ---------- 斜杠插入菜单 ---------- */
.slashMenu{position:fixed;z-index:21;width:230px;max-height:300px;overflow-y:auto;background:var(--surface);
  border:1px solid var(--borderLight);border-radius:var(--r9);padding:4px;box-shadow:var(--shadowPop);}
.slashMenuHead{font-size:10.5px;letter-spacing:.6px;color:var(--mutedDark);font-family:var(--fontMono);
  padding:5px 8px 6px;border-bottom:1px solid var(--border);margin-bottom:3px;}
.slashItem{display:flex;align-items:center;gap:9px;width:100%;padding:7px 9px;background:transparent;border:none;
  border-radius:var(--r6);color:var(--text);font-size:12.5px;cursor:pointer;text-align:left;font-family:var(--fontUI);}
.slashItem svg{color:var(--mutedDark);flex-shrink:0;}
.slashItem:hover,.slashItem.active{background:var(--accentSoft);color:var(--accent);}
.slashItem:hover svg,.slashItem.active svg{color:var(--accent);}
.slashEmpty{padding:9px;font-size:12px;color:var(--mutedDark);}

/* ---------- 目录 ----------
   宽屏（≥1240px，跟 12b-review-outline.js 的 OUTLINE_WIDE_MQ 对齐）钉在正文右边；
   窄屏是顶栏按钮下面的下拉面板（.isPop）。布局由 JS 挂不挂 isPop 决定，显不显示看 hidden */
.reviewOutlineBtn[hidden]{display:none;}
.reviewOutlineBtn.on{color:var(--accent);background:var(--accentSoft);}
.reviewOutline{position:fixed;z-index:6;display:flex;flex-direction:column;min-height:0;}
.reviewOutline[hidden]{display:none;}
.reviewOutline:not(.isPop){top:96px;left:calc(50% + 404px);width:min(220px, calc(50vw - 420px));max-height:calc(100vh - 150px);}
.reviewOutline.isPop{z-index:20;top:52px;right:12px;width:min(300px, calc(100vw - 24px));max-height:min(62vh, 480px);
  background:var(--surface);border:1px solid var(--borderLight);border-radius:var(--r9);box-shadow:var(--shadowPop);padding:4px;}
.outlineHead{display:flex;align-items:center;justify-content:space-between;padding:2px 4px 6px 10px;
  font-size:10.5px;letter-spacing:.6px;color:var(--mutedDark);font-family:var(--fontMono);text-transform:uppercase;}
.outlineClose{background:transparent;border:none;color:var(--mutedDark);cursor:pointer;padding:4px;border-radius:5px;display:flex;}
.outlineClose:hover{background:var(--surface2);color:var(--text);}
.outlineClose svg{width:12px;height:12px;}
.outlineList{position:relative;overflow-y:auto;min-height:0;scrollbar-width:thin;}
.outlineItem{display:flex;align-items:center;gap:6px;width:100%;background:transparent;border:none;border-left:2px solid var(--border);
  color:var(--muted);cursor:pointer;text-align:left;font-size:12.5px;line-height:1.45;padding:4px 8px 4px 10px;
  font-family:var(--fontBody);}
.outlineItem span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.outlineItem:hover{color:var(--text);background:var(--surface2);}
.outlineItem.active{color:var(--accent);border-left-color:var(--accent);}
.outlineItem.d1{padding-left:22px;}
.outlineItem.d2{padding-left:34px;font-size:12px;}
.outlineItem.d3{padding-left:46px;font-size:12px;}
.outlineItem.isHidden{opacity:.5;}
.outlineTop{color:var(--text);font-weight:600;margin-bottom:4px;}
.outlineTop svg{width:12px;height:12px;flex-shrink:0;color:var(--mutedDark);}
.reviewOutline.isPop .outlineItem{border-left-color:transparent;border-radius:var(--r6);padding-top:6px;padding-bottom:6px;}
.reviewOutline.isPop .outlineItem.active{background:var(--accentSoft);}
/* 点目录跳过去之后，目标标题后面闪一下。另画一层而不是改标题的 class（见 12b 文件头的说明） */
.reviewPage{position:relative;}
.outlineFlash{position:absolute;left:12px;right:12px;z-index:-1;border-radius:var(--r8);background:var(--accentSoft);
  pointer-events:none;opacity:0;}
.outlineFlash.on{animation:outlineFlash 1.4s ease-out;}
@keyframes outlineFlash{0%,30%{opacity:1;}100%{opacity:0;}}
@media(prefers-reduced-motion:reduce){.outlineFlash.on{animation-duration:.6s;}}

/* ---------- 折叠章节 ----------
   箭头是标题的 ::after（::before 被 Placeholder 的空行提示占了），画在标题左边的留白里。
   被折起来的块由插件挂 foldHidden，纯显示，不进文档 */
.reviewDoc .foldHidden{display:none !important;}
.reviewDoc>.hasFold{position:relative;}
.reviewDoc>.hasFold::after{content:"";position:absolute;left:-24px;top:calc(.675em - 10px);width:20px;height:20px;cursor:pointer;
  background:var(--mutedDark);-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") center/14px 14px no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") center/14px 14px no-repeat;
  opacity:0;transition:opacity .12s ease,transform .15s ease;}
.reviewDoc>.hasFold:hover::after{opacity:.85;}
.reviewDoc>.isFolded::after{opacity:1;transform:rotate(-90deg);background:var(--accent);}
@media(hover:none){.reviewDoc>.hasFold::after{opacity:.45;}}

@media(max-width:640px){
  .reviewPage{padding:28px 16px 0;}
  .reviewTitleInput,.reviewTitleStatic{font-size:26px;}
  .reviewHintBar{display:none;}
  .reviewPop{min-width:0;width:calc(100vw - 32px);}
  .reviewDoc>.hasFold::after{left:-18px;width:16px;-webkit-mask-size:13px 13px;mask-size:13px 13px;}
  .outlineFlash{left:6px;right:6px;}
  .bubbleInput{width:170px;}
}

/* ---------- 交易选择器 ---------- */
.tradePickerModal{max-width:560px;display:flex;flex-direction:column;max-height:78vh;}
.tradePickerSearch{position:relative;display:flex;align-items:center;padding:12px 18px 10px;}
.tradePickerSearch>svg{position:absolute;left:30px;color:var(--mutedDark);pointer-events:none;}
.tradePickerSearch .input{padding-left:34px;}
.tradePickerResults{overflow-y:auto;padding:0 10px 12px;}
.tradePickerRow{display:flex;align-items:center;gap:11px;width:100%;padding:8px 10px;background:transparent;border:none;
  border-radius:var(--r8);cursor:pointer;color:var(--text);text-align:left;font-family:var(--fontUI);font-size:12.5px;}
.tradePickerRow:hover{background:var(--surface2);}
.tradePickerThumb{width:44px;height:30px;object-fit:cover;border-radius:4px;border:1px solid var(--border);flex-shrink:0;}
.tradePickerThumbEmpty{width:44px;height:30px;border-radius:4px;border:1px dashed var(--border);flex-shrink:0;
  display:flex;align-items:center;justify-content:center;color:var(--mutedDark);}
.tradePickerThumbEmpty svg{width:13px;height:13px;}
.tradePickerDate{color:var(--muted);flex-shrink:0;}
.tradePickerModel{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.tradePickerEmpty,.tradePickerMore{padding:14px 12px;font-size:12px;color:var(--mutedDark);}

/* ============================================================
   MARKDOWN 正文样式（复盘编辑器、只读视图共用）
   按元素匹配而不是按类名：renderMarkdown 输出的元素带 mdP/mdH1 这些类，
   Tiptap 编辑器里的是光秃秃的 <p> <h1>，两边都得是同一个样子。
   ============================================================ */
.mdBody{font-size:14px;line-height:1.75;color:var(--text);word-wrap:break-word;}
.mdBody>:first-child{margin-top:0;}
.mdBody h1,.mdBody h2,.mdBody h3,.mdBody h4,.mdBody h5,.mdBody h6{font-family:var(--fontDisplay);font-weight:600;
  line-height:1.35;margin:26px 0 10px;}
.mdBody h1{font-size:1.6em;padding-bottom:7px;border-bottom:1px solid var(--border);}
.mdBody h2{font-size:1.3em;}
.mdBody h3{font-size:1.12em;}
.mdBody h4,.mdBody h5,.mdBody h6{font-size:1em;color:var(--muted);}
.mdBody p{margin:0 0 12px;}
.mdBody ul,.mdBody ol{margin:0 0 12px;padding-left:22px;}
.mdBody li ul,.mdBody li ol{margin:4px 0 0;}
.mdBody li{margin:3px 0;}
.mdTaskItem{list-style:none;margin-left:-18px;display:flex;align-items:flex-start;gap:8px;}
.mdTask{width:14px;height:14px;border:1px solid var(--borderLight);border-radius:3px;flex-shrink:0;margin-top:5px;
  display:inline-flex;align-items:center;justify-content:center;}
.mdTask.done{background:var(--accent);border-color:var(--accent);}
.mdTask.done::after{content:"";width:7px;height:3.5px;border-left:1.8px solid var(--onAccent);border-bottom:1.8px solid var(--onAccent);
  transform:rotate(-45deg) translate(1px,-1px);}
.mdBody blockquote{margin:0 0 12px;padding:8px 14px;border-left:3px solid var(--accent);background:var(--accentSoft);
  color:var(--muted);border-radius:0 6px 6px 0;}
.mdBody blockquote p{margin:0;}
.mdBody pre{margin:0 0 12px;padding:12px 14px;background:var(--surface2);border:1px solid var(--border);border-radius:var(--r8);
  overflow-x:auto;}
.mdBody pre code{font-family:var(--fontCode);font-size:12.5px;line-height:1.6;color:var(--text);background:none;
  border:none;padding:0;white-space:pre;}
.mdBody code{font-family:var(--fontCode);font-size:.86em;background:var(--surface2);
  border:1px solid var(--border);border-radius:4px;padding:1px 5px;}
.mdBody hr{border:none;border-top:1px solid var(--border);margin:22px 0;}
.mdBody img{max-width:100%;border-radius:var(--r8);border:1px solid var(--border);display:block;margin:6px 0 12px;}
.mdImg[data-action]{cursor:zoom-in;}
.mdImgFallback{display:inline-block;min-width:120px;min-height:34px;border:1px dashed var(--neg);border-radius:var(--r6);}
.mdTableWrap{overflow-x:auto;margin:0 0 12px;}
.mdBody table{border-collapse:collapse;font-size:.9em;min-width:100%;}
.mdBody th{text-align:left;padding:7px 11px;color:var(--mutedDark);font-family:var(--fontMono);
  font-weight:500;border-bottom:1px solid var(--borderLight);white-space:nowrap;}
.mdBody td{padding:7px 11px;border-bottom:1px solid var(--border);}
.mdBody a{color:var(--info);text-decoration:underline;text-underline-offset:2px;}

/* ---------- 正文里的交易引用胶囊 ---------- */
.tradeRef{display:inline-flex;align-items:center;gap:6px;vertical-align:baseline;cursor:pointer;
  padding:1px 9px 2px;margin:0 1px;border-radius:var(--r12);font-size:12px;
  background:var(--accentSoft);border:1px solid var(--accent);color:var(--accent);}
.tradeRef:hover{background:var(--accent);color:var(--onAccent);}
.tradeRef:hover .tradeRefMeta{color:var(--onAccent);}
.tradeRefIcon{display:inline-flex;}
.tradeRefIcon svg{width:11px;height:11px;}
.tradeRefMeta{color:var(--accent);font-family:var(--fontMono);font-size:11.5px;}
.tradeRef.broken{background:var(--negSoft);border-color:var(--neg);color:var(--neg);cursor:default;}
.tradeRef.broken .tradeRefMeta{color:var(--neg);font-family:var(--fontUI);}
.tradeRef.broken:hover{background:var(--negSoft);color:var(--neg);}
.tradeRef.broken svg{width:12px;height:12px;}

/* ---------- 正文里的页面引用胶囊（模型库的页面 / 另一篇复盘）----------
   跟交易胶囊同一个形状，按页面类型换颜色：系统 = 金、策略 = 蓝、错题 = 红、复盘 = 灰 */
.pageRef{display:inline-flex;align-items:center;gap:6px;vertical-align:baseline;cursor:pointer;
  padding:1px 9px 2px 3px;margin:0 1px;border-radius:var(--r12);font-size:12px;font-family:var(--fontUI);
  background:var(--surface2);border:1px solid var(--borderLight);color:var(--text);--k:var(--muted);}
button.pageRef{line-height:1.5;}
.pageRef.kind-system{--k:var(--accent);}
.pageRef.kind-strategy{--k:var(--info);}
.pageRef.kind-mistake{--k:var(--neg);}
.pageRef.kind-verify{--k:var(--verify);}
.pageRef.kind-tag{--k:var(--tag);}
.pageRef:hover{border-color:var(--k);}
.pageRefKind{font-size:10px;padding:0 6px;border-radius:var(--r9);background:var(--k);color:var(--bg);font-weight:600;
  letter-spacing:.3px;line-height:16px;white-space:nowrap;}
.pageRefKind.kind-system{background:var(--accent);}
.pageRefKind.kind-strategy{background:var(--info);}
.pageRefKind.kind-mistake{background:var(--neg);}
.pageRefKind.kind-verify{background:var(--verify);}
.pageRefKind.kind-tag{background:var(--tag);}
.pageRefKind.kind-review{background:var(--muted);}
.pageRefMeta{font-size:12px;}
.pageRef.broken{background:var(--negSoft);border-color:var(--neg);color:var(--neg);cursor:default;padding-left:8px;}
.pageRef.broken svg{width:12px;height:12px;}
.reviewDoc .tradeRefHost.ProseMirror-selectednode .pageRef{box-shadow:0 0 0 2px var(--accent);}
.pagePickerRow{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;background:transparent;border:none;
  border-radius:var(--r8);cursor:pointer;color:var(--text);text-align:left;font-family:var(--fontUI);font-size:13px;}
.pagePickerRow:hover{background:var(--surface2);}
.pagePickerRow .pageRefKind{flex-shrink:0;min-width:52px;text-align:center;}
.pagePickerTitle{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pagePickerSub{flex-shrink:0;font-size:11.5px;color:var(--mutedDark);max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* ============================================================
   模型库（PLAYBOOK）
   ============================================================ */
.pbTop{display:flex;align-items:center;gap:10px;margin-bottom:22px;flex-wrap:wrap;}
.pbTop .reviewSearchBox{margin-left:auto;}
.pbTriageBtn:disabled{opacity:.45;cursor:not-allowed;}
.pbTriageBtn.hasWork{border-color:var(--accent);color:var(--accent);}
.pbBadge{margin-left:2px;padding:0 7px;border-radius:var(--r9);background:var(--accent);color:var(--onAccent);font-size:11px;font-weight:700;line-height:18px;}
.pbNotice{margin-bottom:18px;}
.pbEmptyLine{font-size:12.5px;color:var(--mutedDark);line-height:1.7;padding:2px 2px 6px;}
.pbEmptyLine .pageRef{margin-left:4px;}

.pbSectionHead{display:flex;align-items:baseline;gap:10px;margin:0 0 12px;flex-wrap:wrap;}
.pbSectionTitle{font-family:var(--fontDisplay);font-size:15px;font-weight:600;color:var(--text);}
.pbSectionCount{font-size:11.5px;color:var(--mutedDark);}
.pbSectionHint{font-size:11.5px;color:var(--mutedDark);}
.pbSectionRight{margin-left:auto;display:flex;align-items:center;gap:10px;}
.pbAddBtn{display:inline-flex;align-items:center;gap:4px;color:var(--muted);font-size:12px;padding:3px 9px;
  border:1px dashed var(--borderLight);border-radius:var(--r11);}
.pbAddBtn:hover{color:var(--accent);border-color:var(--accent);}
.pbAddBtn svg{width:11px;height:11px;}

.pbKindBadge{display:inline-flex;align-items:center;padding:1px 8px;border-radius:var(--r10);font-size:10.5px;font-weight:600;
  letter-spacing:.4px;white-space:nowrap;border:1px solid currentColor;}
.pbKindBadge.kind-system{color:var(--accent);background:var(--accentSoft);}
.pbKindBadge.kind-strategy{color:var(--info);background:var(--infoSoft);}
.pbKindBadge.kind-mistake{color:var(--neg);background:var(--negSoft);}
.pbKindBadge.kind-verify{color:var(--verify);background:var(--verifySoft);}
.pbKindBadge.kind-tag{color:var(--tag);background:var(--tagSoft);}

/* 一行成绩：笔数 · 胜率 · 平均 R · 总 R */
.pbStatsRow{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;font-size:12px;color:var(--mutedDark);}
.pbStatsRow.small{font-size:11.5px;gap:3px 10px;}
.pbStat b{color:var(--text);font-weight:600;font-size:13px;}
.pbStatsRow.small .pbStat b{font-size:12px;}
.pbStat b.pos{color:var(--pnlPos);} .pbStat b.neg{color:var(--pnlNeg);}
.pbStat.muted{color:var(--mutedDark);font-size:11px;}
.pbStatsEmpty{font-size:11.5px;color:var(--mutedDark);}

/* ---------- 页签首页：系统卡片 ---------- */
.pbSysGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:16px;margin-bottom:34px;align-items:start;}
@media(max-width:480px){.pbSysGrid{grid-template-columns:1fr;}}
.pbSysCard{background:var(--surface);border:1px solid var(--border);border-radius:var(--r12);padding:16px 18px 12px;cursor:pointer;
  display:flex;flex-direction:column;gap:10px;transition:border-color .15s,box-shadow .15s;position:relative;overflow:hidden;}
.pbSysCard::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent);opacity:.7;}
.pbSysCard:hover{border-color:var(--accent);box-shadow:0 8px 22px rgba(0,0,0,.12);}
.pbSysHead{display:flex;align-items:center;justify-content:space-between;gap:10px;}
.pbSysTitle{font-size:21px;font-weight:700;letter-spacing:.2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pbSysExcerpt{font-size:12.5px;color:var(--muted);line-height:1.65;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.pbStratList{border-top:1px solid var(--border);padding-top:8px;display:flex;flex-direction:column;gap:2px;}
.pbStratListHead{font-size:10.5px;color:var(--mutedDark);font-family:var(--fontMono);letter-spacing:.5px;margin-bottom:2px;}
.pbStratRow{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:7px 9px;margin:0 -9px;
  width:calc(100% + 18px);background:transparent;border:none;border-radius:var(--r7);cursor:pointer;color:var(--text);
  font-family:var(--fontUI);text-align:left;}
.pbStratRow:hover{background:var(--surface2);}
.pbStratRow.hit{background:var(--accentSoft);}
.pbStratName{font-size:13.5px;font-weight:500;display:flex;align-items:center;gap:7px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pbStratName::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--info);flex-shrink:0;}
.pbStratStats{display:flex;gap:10px;font-size:11px;color:var(--mutedDark);flex-shrink:0;}
.pbStratStats .pbStat b{font-size:11.5px;}
.pbStratEmpty{font-size:12px;color:var(--mutedDark);padding:4px 0;}
.pbStratList .pbAddBtn{align-self:flex-start;margin-top:6px;}
.pbSysFoot{display:flex;gap:14px;align-items:center;font-size:11px;color:var(--mutedDark);border-top:1px solid var(--border);padding-top:9px;}
.pbSysFoot span{display:inline-flex;align-items:center;gap:4px;}
.pbSysFoot svg{width:11px;height:11px;}

/* ---------- 第一次进来：三步说明 ---------- */
.pbIntro{max-width:780px;border:1px solid var(--border);border-radius:var(--r14);padding:28px 30px;background:var(--surface);}
.pbIntroTitle{font-size:21px;font-weight:600;margin-bottom:20px;}
.pbIntroSteps{display:grid;gap:16px;margin-bottom:24px;}
.pbIntroStep{display:flex;gap:14px;align-items:flex-start;}
.pbIntroStep b{font-size:14px;}
.pbIntroStep p{margin:4px 0 0;font-size:12.5px;color:var(--muted);line-height:1.7;}
.pbIntroNo{width:26px;height:26px;border-radius:50%;border:1px solid var(--accent);color:var(--accent);
  display:flex;align-items:center;justify-content:center;font-size:12px;flex-shrink:0;}

/* ---------- 错题便利贴 ---------- */
.pbLibMistakes{margin-top:8px;}
.pbLibTags+.pbLibMistakes{margin-top:28px;}
.pbFilterChips{margin-bottom:14px;}
.pbChipN{font-size:10.5px;opacity:.7;margin-left:2px;}
.pbStickyGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;align-items:start;}
.pbSticky{position:relative;background:var(--note);color:var(--noteText);border:1px solid var(--noteEdge);border-top-width:4px;
  border-radius:4px 4px 10px 10px;padding:12px 14px 10px;cursor:pointer;display:flex;flex-direction:column;gap:6px;min-height:132px;
  box-shadow:0 1px 0 rgba(0,0,0,.04),0 6px 14px -8px rgba(0,0,0,.35);transition:transform .15s,box-shadow .15s;}
.pbSticky:hover{transform:translateY(-2px) rotate(-.4deg);box-shadow:0 1px 0 rgba(0,0,0,.04),0 12px 22px -10px rgba(0,0,0,.45);}
.pbStickyOwner{font-size:10.5px;letter-spacing:.3px;opacity:.7;font-family:var(--fontMono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pbStickyTitle{font-size:14.5px;font-weight:700;line-height:1.4;}
.pbStickyGist{font-size:12.5px;line-height:1.6;opacity:.9;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;}
.pbStickyGist.muted{opacity:.5;font-style:italic;}
.pbStickyFoot{margin-top:auto;font-size:10.5px;opacity:.65;padding-top:4px;}
.pbStickyTop{display:flex;align-items:center;gap:8px;min-width:0;}
.pbStickyTop .pbStickyOwner{flex:1;min-width:0;}

/* ---------- 交易区：关联 / 收藏 / 行内动作 ---------- */
.pbEvBadge{display:inline-flex;align-items:center;font-size:10.5px;font-weight:600;line-height:1.6;padding:0 7px;border-radius:9px;white-space:nowrap;flex-shrink:0;}
.pbEvBadge.ev-pro{color:var(--pos);background:var(--posSoft);}
.pbEvBadge.ev-con{color:var(--neg);background:var(--negSoft);}
.pbEvBadge.ev-key{color:var(--verify);background:var(--verifySoft);}
.pbTileBadge{position:absolute;left:6px;bottom:6px;display:flex;}
.pbTileBadge .pbEvBadge{box-shadow:0 1px 4px rgba(0,0,0,.35);}
.pbEvSummary{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px;}
.pbEvSummary .pbEvBadge{font-size:11.5px;padding:1px 9px;}
/* 关联交易的分组：一排小标签，正在看的那组高亮 */
.pbEvgTabs{display:flex;flex-wrap:wrap;gap:6px;margin:-4px 0 12px;}
.pbEvgTab{display:inline-flex;align-items:center;border:1px solid var(--borderLight);border-radius:var(--r11);background:transparent;}
.pbEvgTab.on{border-color:var(--accent);background:var(--accentSoft);}
.pbEvgPick{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;font-size:12px;color:var(--muted);background:none;border:0;cursor:pointer;font-family:inherit;}
.pbEvgTab.on .pbEvgPick{color:var(--accent);font-weight:600;}
.pbEvgPick:hover{color:var(--text);}
.pbEvgCount{font-size:11px;color:var(--mutedDark);}
.pbEvgEdit{display:inline-flex;align-items:center;padding:3px 8px 3px 0;background:none;border:0;cursor:pointer;color:var(--accent);opacity:.7;}
.pbEvgEdit:hover{opacity:1;}
.pbEvgEdit svg{width:11px;height:11px;}
.pbFavStats{margin-bottom:12px;}
.pbEvBtn{display:inline-flex;align-items:center;gap:3px;flex-shrink:0;align-self:center;padding:2px 9px;border-radius:11px;font-size:11.5px;
  border:1px dashed var(--borderLight);background:transparent;color:var(--mutedDark);cursor:pointer;font-family:inherit;white-space:nowrap;}
.pbEvBtn svg{width:10px;height:10px;}
.pbEvBtn:hover:not(:disabled){border-color:var(--verify);color:var(--verify);}
.pbEvBtn.ev-pro{border:1px solid var(--pos);color:var(--pos);background:var(--posSoft);font-weight:600;}
.pbEvBtn.ev-con{border:1px solid var(--neg);color:var(--neg);background:var(--negSoft);font-weight:600;}
.pbEvBtn.ev-key{border:1px solid var(--verify);color:var(--verify);background:var(--verifySoft);font-weight:600;}
.pbTradeRow.ev-pro{box-shadow:inset 3px 0 0 var(--pos);}
.pbTradeRow.ev-con{box-shadow:inset 3px 0 0 var(--neg);}
.pbTradeRow.ev-key{box-shadow:inset 3px 0 0 var(--verify);}
.pbRowIcon{flex-shrink:0;align-self:center;width:26px;height:26px;border-radius:6px;border:none;background:transparent;color:var(--mutedDark);
  cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.55;}
.pbRowIcon svg{width:13px;height:13px;}
.pbTradeRow:hover .pbRowIcon{opacity:1;}
.pbRowIcon:hover{background:var(--surface2);color:var(--text);}
.pbRowIcon.danger:hover{color:var(--neg);}
@media(hover:none){.pbRowIcon{opacity:1;}}
.pbRowNote.editable{cursor:text;}
.pbRowNote.editable:hover{text-decoration:underline;text-decoration-style:dotted;text-underline-offset:3px;}
.pbRowNote.sub{opacity:.6;font-size:11.5px;}
.pbRowNoteEdit{flex-basis:100%;padding:0 14px 9px 98px;}
@media(max-width:640px){.pbRowNoteEdit{padding-left:40px;}}
.pbRowNoteEdit .input{font-size:12.5px;padding:6px 9px;}
.pbExecRow.isMark .pbExecName{display:inline-flex;align-items:center;gap:6px;}
.pbExecRow.isMark .pbExecName svg{width:12px;height:12px;color:var(--accent);}
.pbExecRow.isSub .pbExecName{padding-left:16px;}
.pbExecSep{height:1px;background:var(--border);margin:2px 0;}
.pbSmallSample{font-size:10px;font-weight:500;color:var(--mutedDark);border:1px solid var(--border);border-radius:8px;padding:0 6px;}
.pbVerdict{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 14px;margin-bottom:18px;border-radius:9px;
  border:1px solid var(--borderLight);background:var(--surface2);font-size:13px;}
.pbVerdict svg{width:15px;height:15px;flex-shrink:0;}
.pbVerdict>span{flex:1;min-width:200px;}
.pbVerdict.is-works{border-color:var(--pos);background:var(--posSoft);}
.pbVerdict.is-works svg{color:var(--pos);}
.pbVerdict.is-rejected{border-color:var(--neg);background:var(--negSoft);}
.pbVerdict.is-rejected svg{color:var(--neg);}
.pbStickyEv{display:block;margin-top:3px;font-weight:600;opacity:1;}
.tradePickerRow.isIn{opacity:.6;}
.tradePickerIn{margin-left:auto;color:var(--pos);display:flex;}
.tradePickerIn svg{width:14px;height:14px;}

/* 磁贴右上角的「移出」：鼠标移上去才出现（触屏常显） */
.pbTileRemove{position:absolute;top:6px;left:6px;width:24px;height:24px;border-radius:var(--r6);border:none;cursor:pointer;
  display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.55);color:#fff;opacity:0;transition:opacity .12s,background .12s;}
.pbTileRemove svg{width:12px;height:12px;}
.pbTile:hover .pbTileRemove,.pbTileRemove:focus-visible{opacity:1;}
.pbTileRemove:hover{background:var(--neg);}
@media(hover:none){.pbTileRemove{opacity:.85;}}

/* ---------- 标签：有它 vs 没它 ---------- */
.pbLibTags{margin-top:28px;}
.pbTagGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;align-items:start;}
.pbTagCard{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--tag);border-radius:var(--r8);padding:11px 14px 10px;
  cursor:pointer;display:flex;flex-direction:column;gap:5px;transition:border-color .15s,transform .15s;}
.pbTagCard:hover{border-color:var(--borderLight);border-left-color:var(--tag);transform:translateY(-1px);}
.pbTagHead{display:flex;align-items:center;gap:8px;min-width:0;margin-bottom:2px;}
.pbTagName{display:inline-flex;align-items:center;gap:6px;font-weight:700;font-size:14px;color:var(--text);min-width:0;}
.pbTagName svg{color:var(--tag);flex-shrink:0;}
.pbTagOwner{margin-left:auto;font-size:10.5px;color:var(--mutedDark);font-family:var(--fontMono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pbTagLine{display:flex;align-items:baseline;gap:8px;font-size:11.5px;color:var(--muted);}
.pbTagLine.on{color:var(--text);}
.pbTagSide{flex-shrink:0;min-width:34px;font-size:10.5px;font-weight:600;padding:0 6px;border-radius:var(--r8);text-align:center;
  color:var(--mutedDark);background:var(--surface2);}
.pbTagLine.on .pbTagSide,.pbTagCompareRow.on .pbTagSide{color:var(--tag);background:var(--tagSoft);}
.pbTagDelta{font-size:11.5px;color:var(--muted);padding-top:5px;margin-top:2px;border-top:1px dashed var(--border);}
.pbTagCompare{display:flex;flex-direction:column;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r9);padding:12px 14px;}
.pbTagCompareRow{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
.pbTagCompareRow .pbTagSide{min-width:44px;font-size:11.5px;padding:1px 8px;}
.pbTagChip{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--r12);border:1px solid var(--border);background:transparent;
  color:var(--muted);font-size:12px;cursor:pointer;font-family:inherit;white-space:nowrap;}
.pbTagChip svg{width:11px;height:11px;}
.pbTagChip:hover:not(:disabled){border-color:var(--tag);color:var(--text);}
.pbTagChip.on{border-color:var(--tag);background:var(--tagSoft);color:var(--tag);font-weight:600;}
.pbTagChip:disabled{cursor:default;}
.pbTagChip.small{padding:0 7px;font-size:10.5px;border-color:transparent;background:var(--tagSoft);color:var(--tag);cursor:inherit;flex-shrink:0;}
.pbFormTags,.pbTriageTags{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:10px;}
.pbFormTagsLabel,.pbTriageTagsLabel{font-size:11px;color:var(--mutedDark);margin-right:2px;}
.pbTriageTags{margin-top:12px;}

/* ---------- 待验证：紫色便利贴，状态决定顶边颜色 ---------- */
.pbLibVerify{margin-top:28px;}
.pbSticky.isVerify{background:var(--vnote);color:var(--vnoteText);border-color:var(--vnoteEdge);}
.pbSticky.isVerify .pbStickyFoot{opacity:.8;}
.pbSticky.isVerify.status-works{border-top-color:var(--pos);}
.pbSticky.isVerify.status-rejected{opacity:.6;border-top-color:var(--mutedDark);}
.pbSticky.isVerify.status-rejected .pbStickyTitle{text-decoration:line-through;text-decoration-thickness:1px;}
.pbStatusPill{flex-shrink:0;margin-left:auto;font-size:10.5px;font-weight:600;line-height:1.6;padding:0 8px;border-radius:var(--r9);white-space:nowrap;
  font-family:var(--fontBody);}
.pbStatusPill.status-watching{color:var(--verify);background:var(--verifySoft);}
.pbStatusPill.status-works{color:var(--pos);background:var(--posSoft);}
.pbStatusPill.status-rejected{color:var(--muted);background:var(--surface2);}
.pbRowVerify{font-size:10.5px;color:var(--verify);background:var(--verifySoft);border-radius:var(--r9);padding:1px 7px;flex-shrink:0;}
.pbStatusSeg .tinyBtn.on.status-watching{background:var(--verify);color:#fff;}
.pbStatusSeg .tinyBtn.on.status-works{background:var(--pos);color:#fff;}
.pbStatusSeg .tinyBtn.on.status-rejected{background:var(--mutedDark);color:#fff;}
.reviewWeekRow .pbPromoteBtn{display:inline-flex;align-items:center;gap:4px;border-color:var(--pos);color:var(--pos);margin-right:8px;}
.reviewWeekRow .pbPromoteBtn:hover{background:var(--posSoft);}
.pbPromoteBtn svg{width:12px;height:12px;}

/* ---------- 编辑器里：属性行 ---------- */
.reviewEditorOverlay.isPb .reviewWeekRow{gap:10px 12px;}
.pbMetaField{display:inline-flex;align-items:center;gap:6px;color:var(--mutedDark);font-size:11.5px;}
.pbMetaField .select{padding:3px 8px;font-size:12px;border-radius:var(--r7);max-width:240px;}
.pbMetaStats{display:inline-flex;flex-wrap:wrap;gap:4px 12px;align-items:baseline;font-size:12px;color:var(--mutedDark);}
.pbMetaRight{margin-left:auto;display:inline-flex;align-items:center;}
.reviewWeekRow .tinyBtn.pbMetaDel{border:none;color:var(--mutedDark);padding:4px;}
.reviewWeekRow .tinyBtn.pbMetaDel:hover{color:var(--neg);}
.pbMetaDel svg{width:13px;height:13px;}
.pbDelConfirm{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--neg);
  background:var(--negSoft);border:1px solid var(--neg);border-radius:var(--r8);padding:5px 10px;}
.pbDelConfirm .btn{padding:3px 10px;font-size:12px;}
.reviewCrumbBack{font-size:15px;line-height:1;padding:4px 9px;}

/* ---------- 编辑器里：正文下面那几栏 ---------- */
.reviewDocTail.short{height:14vh;}
.pbPanels{padding-bottom:22vh;}
.pbPanel{border-top:1px solid var(--border);padding:22px 0 8px;}
.pbPanel+.pbPanel{margin-top:6px;}
.pbStratGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;}
.pbStratCard{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--info);border-radius:var(--r10);
  padding:12px 14px;cursor:pointer;display:flex;flex-direction:column;gap:7px;}
.pbStratCard:hover{border-color:var(--info);}
.pbStratCardTitle{font-size:14.5px;font-weight:600;}
.pbStratCardEx{font-size:12px;color:var(--muted);line-height:1.6;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.pbStratCardFoot{font-size:10.5px;color:var(--mutedDark);display:flex;align-items:center;gap:4px;}
.pbStratCardFoot svg{width:10px;height:10px;}

/* 截图墙：关注的交易 / 错题涉及的交易 */
.pbTileGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:12px;}
.pbTile{background:var(--surface);border:1px solid var(--border);border-radius:var(--r9);overflow:hidden;cursor:pointer;
  display:flex;flex-direction:column;transition:border-color .15s;}
.pbTile:hover{border-color:var(--accent);}
.pbTileImg{position:relative;aspect-ratio:16/10;background:var(--surface2);}
.pbTileShot{width:100%;height:100%;object-fit:cover;display:block;}
.pbTileShotEmpty{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--mutedDark);}
.pbTileStar{position:absolute;top:6px;right:6px;color:var(--accent);filter:drop-shadow(0 1px 2px rgba(0,0,0,.6));}
.pbTileStar svg{width:15px;height:15px;}
.pbTileMeta{display:flex;align-items:center;gap:8px;padding:7px 9px 0;font-size:11.5px;color:var(--muted);}
.pbTileMeta .pbRes{font-size:11.5px;font-weight:600;}
.pbTileMeta .pbRes:first-of-type{margin-left:auto;}
.pbTileSub{padding:2px 9px 0;font-size:11px;color:var(--mutedDark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pbTileNote{margin:7px 9px 0;padding:6px 8px;font-size:12px;line-height:1.55;color:var(--noteText);background:var(--note);
  border-left:2px solid var(--noteEdge);border-radius:3px;}
.pbTile>:last-child{margin-bottom:9px;}

/* 全部交易：紧凑的一行一笔 */
.pbTradeList{display:flex;flex-direction:column;border:1px solid var(--border);border-radius:var(--r10);overflow:hidden;}
.pbTradeRow{display:flex;align-items:center;flex-wrap:wrap;border-bottom:1px solid var(--border);background:var(--surface);}
/* 归类记录：挂在那一行底下，跟缩略图左边对齐 */
.pbRowNote{flex-basis:100%;margin:-2px 0 0;padding:0 14px 9px 98px;font-size:12.5px;line-height:1.6;color:var(--muted);
  white-space:pre-wrap;word-break:break-word;cursor:pointer;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}
.pbRowNote::before{content:"✎ ";color:var(--mutedDark);}
.pbNotedBtn.on{color:var(--accent);border-color:var(--accent);border-style:solid;background:var(--accentSoft);}
@media(max-width:640px){.pbRowNote{padding-left:40px;}}
.pbTradeRow:last-child{border-bottom:none;}
.pbStarBtn{background:transparent;border:none;cursor:pointer;color:var(--mutedDark);padding:0 4px 0 12px;align-self:stretch;display:flex;align-items:center;}
.pbStarBtn:hover:not(:disabled){color:var(--accent);}
.pbStarBtn.on{color:var(--accent);}
.pbStarBtn svg{width:15px;height:15px;}
.pbStarBtn:disabled{cursor:default;}
.pbTradeRowMain{flex:1;min-width:0;display:flex;align-items:center;gap:11px;padding:7px 14px 7px 8px;cursor:pointer;font-size:12.5px;}
.pbTradeRowMain:hover{background:var(--surface2);}
.pbRowShot{width:48px;height:30px;object-fit:cover;border-radius:4px;border:1px solid var(--border);flex-shrink:0;}
.pbRowShotEmpty{width:48px;height:30px;border-radius:4px;border:1px dashed var(--border);flex-shrink:0;
  display:flex;align-items:center;justify-content:center;color:var(--mutedDark);}
.pbRowShotEmpty svg{width:13px;height:13px;}
.pbRowDate{color:var(--muted);flex-shrink:0;}
.pbRowLabel{font-size:12px;color:var(--info);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px;}
.pbRowTag{font-size:11.5px;color:var(--mutedDark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:140px;}
.pbRowFaded{font-size:10.5px;color:var(--mutedDark);border:1px solid var(--border);border-radius:var(--r9);padding:0 6px;flex-shrink:0;}
.pbRowSpacer{flex:1;}
.pbRowMistake{font-size:10.5px;color:var(--neg);background:var(--negSoft);border-radius:var(--r9);padding:1px 7px;flex-shrink:0;}
.pbRes{font-weight:600;flex-shrink:0;}
.pbShowAll{margin-top:10px;width:100%;justify-content:center;}
.pbMentioned{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:14px;font-size:12px;color:var(--mutedDark);}
.pbModalHint{font-size:12px;color:var(--mutedDark);line-height:1.7;}
@media(max-width:640px){
  .pbRowTag,.pbRowLabel{display:none;}
  .pbStratStats .pbStat:nth-child(n+3){display:none;}
}

/* ---------- 交易表单顶上的「模型库」一栏 ---------- */
.pbFormBlock{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r10);padding:12px 14px 10px;}
.pbFormRow{display:flex;gap:8px;align-items:center;}
.pbFormRow select.input{flex:1;min-width:0;}
.pbFormStar{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;flex-shrink:0;}
.pbFormStar:disabled{opacity:.45;cursor:not-allowed;}
.pbFormStar svg{width:13px;height:13px;}
.pbFormSuggest{margin-top:8px;color:var(--accent);font-size:12px;}
.pbFormSuggest:hover{text-decoration:underline;}
.pbReminders{margin-top:10px;background:var(--note);border:1px solid var(--noteEdge);border-radius:var(--r8);padding:9px 12px;color:var(--noteText);}
.pbRemindersHead{display:flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;margin-bottom:6px;opacity:.85;}
.pbReminder{font-size:12.5px;line-height:1.6;padding:3px 0;border-top:1px dashed var(--noteEdge);}
.pbReminder:first-of-type{border-top:none;}
.pbReminder b{margin-right:8px;}
.pbReminder span{opacity:.85;}
/* 表单里的笔记是可以勾的：勾上 = 这笔也算进这条，点保存时写进去 */
.pbReminders.isVerify{background:var(--vnote);border-color:var(--vnoteEdge);color:var(--vnoteText);}
.pbRemindersHint{margin-left:auto;font-weight:400;font-size:10.5px;opacity:.7;white-space:nowrap;}
.pbFormNote{display:flex;align-items:flex-start;gap:9px;width:100%;background:transparent;border:none;border-top:1px dashed var(--noteEdge);
  color:inherit;text-align:left;cursor:pointer;font:inherit;font-size:12.5px;padding:5px 2px;}
.pbReminders.isVerify .pbFormNote{border-top-color:var(--vnoteEdge);}
.pbFormNote:disabled{cursor:default;}
.pbFormNote .pbMpBox{margin-top:3px;border-color:currentColor;opacity:.55;}
.pbFormNote span.pbMpBox,.pbFormNote .pbStatusPill{opacity:1;}
.pbFormNote:not(.on) span.pbMpBox{opacity:.5;}
.pbFormNote.on .pbMpBox{background:var(--neg);border-color:var(--neg);color:#fff;}
.pbReminders.isVerify .pbFormNote.on .pbMpBox{background:var(--verify);border-color:var(--verify);}
.pbFormNoteText{flex:1;min-width:0;line-height:1.6;}
.pbFormNote:hover:not(:disabled) .pbFormNoteText b{text-decoration:underline;text-underline-offset:2px;}
.pbFormMore{margin-top:4px;font-size:11.5px;color:inherit;opacity:.8;}
.pbFormMore:hover{opacity:1;text-decoration:underline;}
.pbFormNoteInput{display:block;margin:0 0 6px 27px;width:calc(100% - 27px);font-size:12.5px;padding-top:5px;padding-bottom:5px;}
.pbFormNoteAddText{display:flex;width:fit-content;align-items:center;gap:4px;margin:-2px 0 5px 27px;font-size:11.5px;color:inherit;opacity:.65;}
.pbFormNoteAddText:hover{opacity:1;}
.pbFormNoteAddText svg{width:11px;height:11px;flex:none;}
.pbFormNoteAddText.hasText{opacity:.85;max-width:calc(100% - 27px);text-align:left;}
.pbFormNoteAddText span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pbFormNewBtns{display:flex;gap:12px;margin-top:9px;}
.pbFormNewBtns .tinyBtn{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--muted);}
.pbFormNewBtns .tinyBtn:hover{color:var(--text);}
.pbFormNewBtns .tinyBtn svg{width:11px;height:11px;}
.pbFormNew{margin-top:8px;padding-top:0;border-top:none;align-items:center;}

/* ---------- 交易预览里的归属 ---------- */
.tpPb{display:flex;flex-direction:column;gap:7px;margin-bottom:14px;}
.tpPbRow{display:flex;align-items:center;flex-wrap:wrap;gap:6px;}
.tpPbLabel{font-size:10.5px;letter-spacing:.5px;color:var(--mutedDark);font-family:var(--fontMono);min-width:52px;}
.tpPbStar{color:var(--accent);display:inline-flex;}
.tpPbStar svg{width:14px;height:14px;}
.tpPbNote{font-size:13px;line-height:1.6;color:var(--text);white-space:pre-wrap;word-break:break-word;flex:1;min-width:0;}
.tpPbBar{display:flex;align-items:center;flex-wrap:wrap;gap:6px;padding:8px 10px;margin-bottom:12px;border:1px solid var(--border);border-radius:10px;background:var(--bg);}
.tpPbBar.isOut{border-style:dashed;}
.tpPbWhere{font-size:12px;color:var(--mutedDark);margin-right:2px;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.tpPbSpacer{flex:1;}
.tpPbBtn{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;height:24px;border-radius:12px;font-size:11.5px;cursor:pointer;
  border:1px solid var(--border);background:var(--surface);color:var(--text);font-family:inherit;}
.tpPbBtn svg{width:12px;height:12px;}
.tpPbBtn:hover{border-color:var(--accent);color:var(--accent);}
.tpPbBtn.on{border-color:var(--accent);color:var(--accent);font-weight:600;}
.tpPbBtn.danger:hover{border-color:var(--neg);color:var(--neg);}
/* 写成 select.select.pbRowMove 是为了压过现代版式的 [data-layout="modern"] .select{padding:6px 10px}——
   那个上下 6px 塞进 26px 高的框，字只剩一半露在外面 */
select.select.pbRowMove{padding:0 24px 0 8px;line-height:24px;}
.tpPbBar .pbRowMove{max-width:180px;}
.pbFormNoteWrap{margin-top:10px;}
.pbFormNoteWrap .pbFormTagsLabel{display:block;margin-bottom:5px;}
.pbFormNoteArea{font-size:12.5px;line-height:1.6;resize:vertical;min-height:52px;}

/* ============================================================
   归类模式：一屏一笔
   ============================================================ */
.pbTriageBar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:16px;}
.pbTriageTitle{font-size:18px;font-weight:600;}
.pbTriageProgress{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--muted);}
.pbTriageProgress .muted{color:var(--mutedDark);}
.pbProgress{width:160px;height:5px;border-radius:3px;background:var(--surface2);overflow:hidden;display:inline-block;}
.pbProgress i{display:block;height:100%;background:var(--accent);transition:width .2s;}
.pbTriageBar .reviewPeriodSeg{margin-left:auto;}
.pbTriageFilter{display:inline-flex;align-items:center;gap:6px;margin-left:auto;color:var(--muted);}
.pbTriageFilter svg{width:13px;height:13px;flex-shrink:0;}
.pbTriageFilter select.input{width:auto;max-width:240px;padding:4px 8px;font-size:12px;}
.pbTriageFilter.on{color:var(--accent);}
.pbTriageFilter.on select.input{border-color:var(--accent);color:var(--text);font-weight:600;}
.pbTriageFilter + .reviewPeriodSeg{margin-left:0;}
.pbTriageBar .reviewPeriodSeg .tinyBtn{padding:4px 12px;font-size:12px;color:var(--muted);background:transparent;}
.pbTriageMain{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:20px;align-items:start;}
.pbTriageShot{position:sticky;top:12px;background:var(--surface2);border-radius:var(--r10);border:1px solid var(--border);
  display:flex;align-items:center;justify-content:center;overflow:hidden;cursor:zoom-in;min-height:300px;}
.pbTriageShot img{max-width:100%;max-height:calc(100vh - 150px);object-fit:contain;display:block;}
.pbTriageSide{display:flex;flex-direction:column;gap:12px;min-width:0;}
.pbTriageTrade{background:var(--surface);border:1px solid var(--border);border-radius:var(--r10);padding:14px 16px;}
.pbTriageTrade .focusModelRow .tinyBtn{margin-left:auto;display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--muted);}
.pbTriageTrade .focusModelRow .tinyBtn svg{width:11px;height:11px;}
.pbTriageFields{margin-top:12px;}
.pbTriageFields:empty{display:none;}
.pbTriageBlock{background:var(--surface);border:1px solid var(--border);border-radius:var(--r10);padding:12px;}
.pbTriageLabel{display:flex;align-items:baseline;gap:8px;font-size:12.5px;font-weight:600;margin:0 2px 9px;}
.pbKbdHint{font-size:11px;font-weight:400;color:var(--mutedDark);}
.pbOptList{display:flex;flex-direction:column;gap:3px;}
.pbOpt{display:flex;align-items:center;gap:10px;width:100%;padding:7px 9px;border-radius:var(--r8);background:transparent;
  border:1px solid transparent;cursor:pointer;color:var(--text);font-family:var(--fontUI);font-size:13.5px;text-align:left;}
.pbOpt:hover{background:var(--surface2);}
.pbOpt.depth1 .pbOptName{padding-left:4px;color:var(--text);}
.pbOpt.depth0 .pbOptName{font-weight:600;}
.pbOpt.suggest{border-color:var(--borderLight);border-style:dashed;}
.pbOpt.on{background:var(--accentSoft);border-color:var(--accent);border-style:solid;}
.pbOpt.none{margin-top:4px;color:var(--muted);font-size:12.5px;}
.pbOpt.none.on{background:var(--surface2);border-color:var(--borderLight);color:var(--text);}
.pbOptName{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:6px;}
.pbOptTree{color:var(--mutedDark);font-weight:400;}
.pbSuggest{font-size:10.5px;color:var(--accent);border:1px solid var(--accent);border-radius:var(--r9);padding:0 6px;}
.pbOptCheck{color:var(--accent);display:flex;}
.pbOptCheck svg{width:14px;height:14px;}
.pbTriageSide kbd,.pbTriageNav kbd{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 5px;
  border-radius:5px;border:1px solid var(--borderLight);border-bottom-width:2px;background:var(--surface2);color:var(--muted);
  font-family:var(--fontMono);font-size:10.5px;flex-shrink:0;}
.pbTriageSide kbd.blank{visibility:hidden;}
.pbOpt.on kbd{border-color:var(--accent);color:var(--accent);}
/* 关注 / 错题 / 待验证：360px 的侧栏里三个并排会把字挤成两行，改成一行一个（跟上面的选项列表一个节奏） */
.pbToggleRow{display:flex;flex-direction:column;gap:6px;}
.pbToggle span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
.pbToggle{flex:1;display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:var(--r8);border:1px solid var(--border);text-align:left;
  background:var(--surface2);color:var(--text);cursor:pointer;font-size:12.5px;font-family:var(--fontUI);}
.pbToggle svg{width:14px;height:14px;}
.pbToggle:hover:not(:disabled){border-color:var(--borderLight);}
.pbToggle:disabled{opacity:.45;cursor:not-allowed;}
.pbToggle.on{border-color:var(--accent);color:var(--accent);background:var(--accentSoft);}
.pbToggle.open{border-color:var(--borderLight);box-shadow:inset 0 0 0 1px var(--borderLight);}
.pbToggle.isVerify.on{border-color:var(--verify);color:var(--verify);background:var(--verifySoft);}
.pbMpRow.isVerify.on .pbMpBox{background:var(--verify);border-color:var(--verify);}
.pbMpRow .pbStatusPill{margin-left:0;}
.pbMp{margin-top:10px;display:flex;flex-direction:column;gap:3px;}
.pbMp>.input{margin-bottom:6px;font-size:12.5px;}
.pbMpGroup{font-size:10.5px;color:var(--mutedDark);font-family:var(--fontMono);letter-spacing:.4px;margin:8px 2px 2px;}
.pbMpRow{display:flex;align-items:center;gap:9px;width:100%;padding:6px 8px;border-radius:var(--r7);background:transparent;border:none;
  cursor:pointer;color:var(--text);font-family:var(--fontUI);font-size:13px;text-align:left;}
.pbMpRow:hover{background:var(--surface2);}
.pbMpBox{width:16px;height:16px;border-radius:4px;border:1px solid var(--borderLight);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.pbMpRow.on .pbMpBox{background:var(--neg);border-color:var(--neg);color:#fff;}
.pbMpBox svg{width:11px;height:11px;}
.pbMpTitle{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pbMpN{font-size:11px;color:var(--mutedDark);}
.pbMpNew{display:flex;gap:6px;margin-top:8px;padding-top:10px;border-top:1px dashed var(--border);}
.pbMpNew .input{flex:1;min-width:0;font-size:12.5px;}
.pbMpNew .btn{padding:6px 10px;font-size:12px;white-space:nowrap;}
/* 这笔的记录 */
.pbNoteBlock .pbTriageLabel{align-items:baseline;}
.pbNoteStatus{margin-left:auto;font-size:11px;font-weight:400;color:var(--accent);font-family:var(--fontMono);}
.pbNoteStatus.ok{color:var(--pos);}
.pbNoteStatus.err{color:var(--neg);}
.pbNoteInput{font-size:13px;line-height:1.65;resize:vertical;min-height:72px;}
.pbNoteActions{display:flex;align-items:center;gap:8px;margin-top:8px;min-height:20px;}
.pbNoteToPage{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--muted);}
.pbNoteToPage:hover:not(:disabled){color:var(--accent);}
.pbNoteToPage:disabled{opacity:.4;cursor:not-allowed;}
.pbNoteToPage svg,.pbNoteSent svg{width:12px;height:12px;}
.pbNoteSent{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--pos);}
.pbTriageNav{display:flex;gap:8px;}
.pbTriageNav .btn{flex:1;justify-content:center;}
.pbTriageNav .btn:disabled{opacity:.45;cursor:not-allowed;}
.pbTriageNav .btn-primary kbd{background:rgba(0,0,0,.12);border-color:rgba(0,0,0,.2);color:var(--onAccent);}
.pbTriageDone{max-width:520px;margin:60px auto;text-align:center;display:flex;flex-direction:column;align-items:center;gap:12px;}
.pbTriageDone p{color:var(--muted);font-size:13px;margin:0;}
.pbTriageDoneMark{width:52px;height:52px;border-radius:50%;background:var(--posSoft);color:var(--pos);display:flex;align-items:center;justify-content:center;}
.pbTriageDoneMark svg{width:24px;height:24px;}
.pbTriageDoneTitle{font-size:20px;font-weight:600;}
.pbTriageDoneBtns{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:6px;}
.pbTriageProgress>span{white-space:nowrap;}
@media(max-width:1000px){
  .pbTriageMain{grid-template-columns:1fr;}
  .pbTriageShot{position:static;}
  .pbTriageBar .reviewPeriodSeg,.pbTriageFilter{margin-left:0;}
}
@media(max-width:640px){
  .pbTriageProgress{width:100%;}
  .pbProgress{flex:1;width:auto;min-width:60px;}
}

/* ============================================================
   导出中心：一整页，盖在复盘编辑器（90）之上、弹窗（100）之下
   ============================================================ */
.exOverlay{position:fixed;inset:0;z-index:95;background:var(--bg);overflow-y:auto;overscroll-behavior:contain;}
.exPage{max-width:860px;margin:0 auto;padding:40px 24px 120px;}
.exH1{font-size:30px;font-weight:700;margin:0 0 8px;}
.exLead{font-size:13.5px;color:var(--muted);line-height:1.7;margin:0 0 26px;}
.exBlock{background:var(--surface);border:1px solid var(--border);border-radius:var(--r12);padding:18px 20px;margin-bottom:16px;}
.exBlockTitle{font-family:var(--fontDisplay);font-size:15px;font-weight:600;margin-bottom:14px;}
.exRow{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:10px;}
.exRow .chipGroup{margin-bottom:0;}
.exRow .chip:disabled{opacity:.45;cursor:not-allowed;}
.exRowLabel{font-size:12px;color:var(--mutedDark);font-family:var(--fontMono);min-width:92px;}
.exNow{font-size:10.5px;opacity:.7;margin-left:2px;}
.exHint{font-size:12px;color:var(--mutedDark);line-height:1.7;margin-top:4px;}
.exFmts{display:flex;flex-direction:column;gap:8px;}
.exFmt{display:flex;align-items:flex-start;gap:12px;width:100%;padding:12px 14px;border-radius:var(--r10);border:1px solid var(--border);
  background:var(--surface2);color:var(--text);cursor:pointer;text-align:left;font-family:var(--fontUI);transition:border-color .12s;}
.exFmt:hover{border-color:var(--borderLight);}
.exFmt.on{border-color:var(--accent);background:var(--accentSoft);}
.exCheck{width:18px;height:18px;border-radius:5px;border:1px solid var(--borderLight);flex-shrink:0;margin-top:1px;
  display:flex;align-items:center;justify-content:center;background:var(--surface);}
.exFmt.on .exCheck{background:var(--accent);border-color:var(--accent);color:var(--onAccent);}
.exCheck svg{width:12px;height:12px;}
.exFmtMain{display:flex;flex-direction:column;gap:4px;min-width:0;}
.exFmtTitle{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.exFmtBadge{font-size:10.5px;font-weight:500;color:var(--muted);border:1px solid var(--border);border-radius:var(--r9);padding:0 7px;}
.exFmt.on .exFmtBadge{color:var(--accent);border-color:var(--accent);}
.exFmtDesc{font-size:12.5px;color:var(--muted);line-height:1.65;}
.exCsvCols{margin-top:12px;padding:12px 14px;border:1px dashed var(--border);border-radius:var(--r10);display:flex;flex-direction:column;gap:6px;}
.exSubLabel{font-size:11.5px;color:var(--mutedDark);}
.exFoot{position:sticky;bottom:0;display:flex;align-items:center;gap:14px;padding:14px 0;margin-top:10px;
  background:linear-gradient(to top, var(--bg) 70%, transparent);}
.exFootText{flex:1;min-width:0;font-size:12.5px;color:var(--mutedDark);line-height:1.6;}
.exFootText svg{width:13px;height:13px;vertical-align:-2px;}
.exErr{color:var(--neg);}
.exDone{color:var(--pos);}
.exBusy{color:var(--accent);}
.exGo{padding:10px 22px;font-size:14px;}
.exGo:disabled{opacity:.5;cursor:not-allowed;}
@media(max-width:640px){.exPage{padding:24px 16px 100px;}.exH1{font-size:24px;}.exFoot{flex-direction:column;align-items:stretch;}.exGo{justify-content:center;}}

/* 模型库的「成绩口径」面板：外壳复用 .filterPanel */
.pbScopePanel{margin-bottom:22px;}
.pbScopeHint{font-size:12px;color:var(--mutedDark);line-height:1.7;margin-bottom:10px;}
.pbScopeFixed{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);background:var(--surface2);
  border:1px solid var(--border);border-radius:var(--r8);padding:4px 10px;margin-bottom:12px;}
.pbScopeFixed svg{width:12px;height:12px;color:var(--pos);}
.pbScopeMark{border:1px dashed var(--borderLight);border-radius:var(--r9);padding:0 7px;cursor:help;}

/* 交易的「做了还是避免」值：Taken 绿，其余灰 */
.pbRowTaken{font-size:10.5px;color:var(--mutedDark);border:1px solid var(--border);border-radius:var(--r9);padding:0 7px;flex-shrink:0;white-space:nowrap;font-family:var(--fontMono);}
.pbRowTaken.isTaken{color:var(--pos);border-color:var(--pos);background:var(--posSoft);}
/* 页面里的「执行情况」小表：一行一类，点一行筛下面的交易列表 */
.pbExecTable{display:flex;flex-direction:column;border:1px solid var(--border);border-radius:var(--r10);overflow:hidden;margin-bottom:12px;}
.pbExecRow{display:grid;grid-template-columns:minmax(0,1.6fr) repeat(4,minmax(0,1fr));gap:10px;align-items:center;padding:7px 14px;
  background:var(--surface);border:none;border-bottom:1px solid var(--border);color:var(--text);font-size:12.5px;text-align:left;cursor:pointer;font-family:var(--fontUI);}
.pbExecRow:last-child{border-bottom:none;}
.pbExecRow:hover:not(.head){background:var(--surface2);}
.pbExecRow.head{cursor:default;background:var(--surface2);font-size:11px;color:var(--mutedDark);font-family:var(--fontMono);}
.pbExecRow.isAll .pbExecName{font-weight:600;}
.pbExecRow.on{background:var(--accentSoft);box-shadow:inset 3px 0 0 var(--accent);}
.pbExecRow .pos{color:var(--pnlPos);} .pbExecRow .neg{color:var(--pnlNeg);}
.pbExecNow{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--accent);margin:0 2px 10px;}
.pbExecNow .tinyBtn{color:var(--muted);text-decoration:underline;font-size:12px;}
.pbScopePresets{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px;}
/* 交易预览：顶上的「3 / 8」和上一笔 / 下一笔；关掉后背后页面里标出最后看的那一笔 */
.tpHeadRight{display:flex;align-items:center;gap:6px;flex-shrink:0;}
.tpNav{display:inline-flex;align-items:center;gap:2px;font-size:12px;color:var(--muted);margin-right:6px;}
.tpNav .iconBtn{font-size:18px;line-height:1;padding:2px 9px;}
.tpNav .iconBtn:disabled{opacity:.3;cursor:default;}
.pbTradeRow.isPicked{box-shadow:inset 3px 0 0 var(--accent);background:var(--accentSoft);}
.pbTile.isPicked{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent);}
.tradeRef.isPicked{box-shadow:0 0 0 2px var(--accent);}

/* 错题 ⇄ 待验证 */
.reviewWeekRow .tinyBtn.pbConvertBtn{border-style:dashed;}
.reviewWeekRow .tinyBtn.pbConvertBtn.strong{border-style:solid;border-color:var(--neg);color:var(--neg);background:var(--negSoft);}
.pbConvertHint{font-size:11.5px;color:var(--neg);margin-right:6px;}
.pbConvertConfirm{flex-basis:100%;display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;font-size:12.5px;color:var(--text);
  background:var(--surface);border:1px solid var(--accent);border-radius:var(--r9);padding:10px 12px;margin-top:4px;}
.pbConvertSwap{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);cursor:pointer;}
.pbConvertSwap input{width:14px;height:14px;accent-color:var(--accent);}
.pbConvertBtns{display:flex;align-items:center;gap:10px;margin-left:auto;}
.pbConvertBtns .btn{padding:4px 14px;font-size:12px;}

/* ---------- 模型库：笔记的分支 + 拖拽 ---------- */
/* 问题卡片里的分支行：一行一个分支，点了进那个分支 */
.pbBranchList{display:flex;flex-direction:column;margin:2px -6px 0;border-top:1px dashed var(--noteEdge);padding-top:4px;}
.pbSticky.isVerify .pbBranchList{border-top-color:var(--vnoteEdge);}
.pbBranchRow{display:flex;align-items:center;gap:8px;width:100%;padding:4px 6px;border:none;border-radius:6px;background:transparent;color:inherit;
  font:inherit;font-size:12.5px;text-align:left;cursor:pointer;line-height:1.45;}
.pbBranchRow:hover{background:rgba(0,0,0,.06);}
.pbBranchRow.hit{background:var(--accentSoft);}
.pbBranchRow::before{content:"";flex:none;width:7px;height:7px;border-radius:50%;background:currentColor;opacity:.35;}
.pbBranchRow.status-works::before{background:var(--pos);opacity:1;}
.pbBranchRow.status-rejected{opacity:.55;}
.pbBranchRow.status-rejected .pbBranchName{text-decoration:line-through;text-decoration-thickness:1px;}
.pbBranchRow.unsplit{cursor:default;opacity:.7;font-style:italic;}
.pbBranchRow.unsplit::before{background:transparent;border:1px dashed currentColor;}
.pbBranchRow.unsplit:hover{background:transparent;}
.pbBranchName{flex:1;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pbBranchRow .pbStatusPill{margin-left:0;font-size:10px;padding:0 6px;}
.pbBranchStat{flex:none;font-size:10.5px;opacity:.75;}
.pbStatusPill.isBranches{color:var(--verify);background:transparent;border:1px solid var(--verifySoft);}
.pbSticky.hasBranches{border-top-style:double;border-top-width:5px;}
/* 拖拽：被拖的那张变淡；落点在左 / 右（上 / 下）边出一条线，正中间（放进去当分支）整张描虚线并写明 */
.pbDragging{opacity:.4;}
[data-pb-drag]{position:relative;}
[data-pb-drop="before"]::after,[data-pb-drop="after"]::after{content:"";position:absolute;pointer-events:none;background:var(--accent);border-radius:2px;z-index:3;}
.pbSticky[data-pb-drop="before"]::after,.pbTagCard[data-pb-drop="before"]::after{left:-9px;top:4px;bottom:4px;width:3px;}
.pbSticky[data-pb-drop="after"]::after,.pbTagCard[data-pb-drop="after"]::after{right:-9px;top:4px;bottom:4px;width:3px;}
/* 系统卡片 overflow:hidden，画在外面的线会被裁掉：改用卡片外侧的阴影当那条线，卡片整体也描一圈 */
.pbSysCard[data-pb-drop]{transition:none;}
.pbSysCard[data-pb-drop]::after{content:none;}
.pbSysCard[data-pb-drop="before"]{box-shadow:-8px 0 0 -3px var(--accent),0 0 0 1px var(--accent) !important;}
.pbSysCard[data-pb-drop="after"]{box-shadow:8px 0 0 -3px var(--accent),0 0 0 1px var(--accent) !important;}
.pbBranchRow[data-pb-drop="before"]::after,.pbStratRow[data-pb-drop="before"]::after{left:4px;right:4px;top:-2px;height:3px;}
.pbBranchRow[data-pb-drop="after"]::after,.pbStratRow[data-pb-drop="after"]::after{left:4px;right:4px;bottom:-2px;height:3px;}
.pbSticky[data-pb-drop="into"]{outline:2px dashed var(--accent);outline-offset:3px;transform:none;}
.pbSticky[data-pb-drop="into"]::after{content:attr(data-pb-drop-label);position:absolute;left:8px;right:8px;bottom:8px;z-index:3;pointer-events:none;
  background:var(--accent);color:#fff;font-size:11.5px;font-weight:600;text-align:center;padding:5px 8px;border-radius:6px;}
/* 交易表单 / 归类面板：分支缩进排在问题下面 */
.pbFormNote.isBranch{padding-left:24px;}
.pbFormNote.isBranch + .pbFormNoteAddText,.pbFormNote.isBranch + .pbFormNoteInput{margin-left:51px;width:calc(100% - 51px);}
.pbFormNote.isBranch + .pbFormNoteAddText{width:fit-content;max-width:calc(100% - 51px);}
.pbFormNote.isBranch{border-top-style:dotted;}
.pbMpRow.isBranch{padding-left:30px;}
/* 问题页：分支对比表、每一行的「移到分支」 */
.pbBranchTable .pbExecName{display:flex;align-items:center;gap:6px;min-width:0;}
.pbBranchTable .pbExecName .pbStatusPill{margin-left:0;}
.pbBranchTable .pbExecRow:disabled{cursor:default;}
.pbBranchTable .muted{color:var(--muted);font-style:italic;}
.pbRowMove{flex-shrink:0;align-self:center;width:auto;max-width:140px;font-size:11.5px;padding:3px 24px 3px 8px;height:26px;}
.pbRowInBranch{flex-shrink:0;align-self:center;font-size:10.5px;color:var(--muted);}

/* ============================================================
   Prop 账户（src/11e-prop-view.js）
   ============================================================ */
.propTop{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px;flex-wrap:wrap;}
.propSeg{display:inline-flex;}
.propFilters{margin-bottom:14px;}
.propFilters .chipGroup:last-child{margin-bottom:0;}
.propStats .statValue.pos,.propTable .pos,.propAccNums .pos,.propMonthHead .pos{color:var(--pnlPos);}
.propStats .statValue.neg,.propTable .neg,.propAccNums .neg,.propMonthHead .neg{color:var(--pnlNeg);}
.propMuted{color:var(--mutedDark);font-size:12.5px;}
.propStatOf{font-size:14px;color:var(--mutedDark);font-weight:500;}
.propHint{font-size:11.5px;color:var(--mutedDark);margin-top:5px;line-height:1.5;}
.propPanel{margin-bottom:18px;}
.propPanelHead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;}
.propLabel{margin:0;padding:0;border:none;}
.propYearNav{display:flex;align-items:center;gap:14px;}
.propYearNav .tinyBtn{font-size:20px;line-height:1;}
.propYearNav .monthYear{margin-bottom:0;}
.propEmptyState{display:flex;flex-direction:column;align-items:center;gap:14px;max-width:460px;margin:0 auto;line-height:1.6;}
.propEmptyState .icon{width:30px;height:30px;opacity:.6;}
.propLink{background:none;border:none;padding:0;color:var(--text);cursor:pointer;font:inherit;text-align:left;}
.propLink:hover{color:var(--accent);text-decoration:underline;}
.propTable td.num,.propTable th.num{text-align:right;font-family:var(--fontMono);font-variant-numeric:tabular-nums;white-space:nowrap;}
.propTable td{vertical-align:middle;}
.propNoteCell{color:var(--muted);max-width:220px;}
.propRowActs{white-space:nowrap;text-align:right;}
.propAct{padding:2px 5px;color:var(--muted);}
.propAct:hover{color:var(--accent);}
.propAct.neg{color:var(--neg);}
.propAct .icon{width:13px;height:13px;}
/* 状态标签 */
.propSt{display:inline-block;padding:2px 8px;border-radius:var(--r12);font-size:11px;white-space:nowrap;font-weight:500;vertical-align:middle;}
.propSt-eval{background:var(--infoSoft);color:var(--info);}
.propSt-passed{background:var(--accentSoft);color:var(--accent);}
.propSt-funded{background:var(--posSoft);color:var(--pos);}
.propSt-failed,.propSt-blown{background:var(--negSoft);color:var(--neg);}
.propSt-closed{background:var(--surface2);color:var(--muted);}
.propPendingTag,.propRenewTag{display:inline-block;padding:1px 7px;border-radius:var(--r12);font-size:10.5px;background:var(--accentSoft);color:var(--accent);white-space:nowrap;}
.propRenewTag{background:var(--infoSoft);color:var(--info);}
/* 漏斗 */
.propFunnel{display:flex;align-items:stretch;gap:8px;}
.propStep{flex:1;background:var(--surface2);border:1px solid var(--border);border-radius:var(--r10);padding:12px;text-align:center;display:flex;flex-direction:column;gap:3px;}
.propStep b{font-size:22px;font-family:var(--fontMono);font-weight:600;}
.propStep span{font-size:12px;color:var(--muted);}
.propStep small{font-size:11px;color:var(--accent);font-family:var(--fontMono);}
.propStepArrow{align-self:center;color:var(--mutedDark);font-size:18px;}
.propFunnelFoot{display:flex;gap:24px;flex-wrap:wrap;margin-top:14px;padding-top:12px;border-top:1px solid var(--border);}
.propFunnelFoot>div{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}
.propFunnelFoot span{font-size:12px;color:var(--muted);}
.propFunnelFoot b{font-size:16px;font-family:var(--fontMono);}
.propFunnelFoot small{font-size:11px;color:var(--mutedDark);}
/* 月度明细 */
.propMonthDetail{margin-top:18px;padding-top:14px;border-top:1px solid var(--border);}
.propMonthHead{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;margin-bottom:10px;font-size:12.5px;color:var(--muted);}
.propMonthHead>b{font-size:14px;color:var(--text);}
.propMonthHead span b{font-family:var(--fontMono);color:var(--text);}
/* 账号卡片 */
.propCard{background:var(--surface);border:1px solid var(--border);border-radius:var(--r12);padding:14px 16px;}
.propAccGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:14px;}
.propAcc{cursor:pointer;display:flex;flex-direction:column;gap:8px;transition:border-color .12s,transform .12s;}
.propAcc:hover{border-color:var(--accent);transform:translateY(-1px);}
.propAccHead{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;}
.propAccTitle{font-weight:600;font-size:14.5px;line-height:1.35;}
.propAccSub{font-size:12px;color:var(--muted);}
.propAccNums{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;background:var(--surface2);border-radius:var(--r9);padding:9px 10px;}
.propAccNums>div{display:flex;flex-direction:column;gap:2px;min-width:0;}
.propAccNums span{font-size:10.5px;color:var(--mutedDark);}
.propAccNums b{font-size:13px;font-family:var(--fontMono);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.propDetailNums{grid-template-columns:repeat(5,1fr);margin-bottom:14px;}
.propAccFoot{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;font-size:11.5px;color:var(--mutedDark);}
.propActions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;}
.propMiniLabel{font-size:11px;color:var(--mutedDark);font-family:var(--fontMono);letter-spacing:.4px;margin:4px 0 8px;}
.propTimeline{display:flex;flex-wrap:wrap;gap:8px 14px;margin-bottom:14px;}
.propTimeline>div{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);font-family:var(--fontMono);}
.propNotes{font-size:12.5px;color:var(--muted);white-space:pre-wrap;line-height:1.55;margin:8px 0;}
.propEditToggle{margin-top:6px;}
.propEditBox{margin-top:10px;padding-top:14px;border-top:1px solid var(--border);}
.propEditFoot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
/* 表单 */
.propModal .field{margin-bottom:12px;}
.propRow{display:grid;grid-template-columns:1fr 1fr;gap:0 12px;}
.propCheck{display:flex;align-items:center;gap:7px;font-size:13px;cursor:pointer;color:var(--text);}
.propCheckField{display:flex;flex-direction:column;justify-content:flex-end;padding-bottom:4px;}
.btn-sm{padding:4px 10px;font-size:12px;}
.btn-sm .icon{width:13px;height:13px;}
/* 公司计划 */
.propCatHead{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px;}
.propCatAdmin{display:flex;gap:8px;}
.propFirmHead{display:flex;align-items:center;gap:12px;margin-bottom:12px;}
.propLogo{width:38px;height:38px;border-radius:var(--r10);background:var(--surface2);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;color:var(--accent);overflow:hidden;flex-shrink:0;}
.propLogo img{width:100%;height:100%;object-fit:contain;}
.propFirmName{display:flex;flex-direction:column;gap:2px;}
.propFirmName b{font-size:16px;}
.propFirmName>span{font-size:12px;color:var(--mutedDark);}
.propFirmName a,.propFaq a,.propSources a{color:var(--accent);}
.propSeries{margin-top:14px;}
.propSeriesName{font-size:14px;font-weight:700;color:var(--text);margin:6px 0 12px;}
.propFirmNotes{margin:6px 0 4px;}
.propPlanGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;}
.propPlan{display:flex;flex-direction:column;gap:10px;background:var(--surface2);}
.propPlan.picked{border-color:var(--accent);}
.propPlanHead{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.propPlanSize{font-size:18px;font-weight:700;font-family:var(--fontDisplay);}
.propPrice{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}
.propPrice b{font-size:20px;font-family:var(--fontMono);color:var(--accent);}
.propPrice span{font-size:12px;color:var(--muted);}
.propPrice .propPriceAct{color:var(--mutedDark);}
.propPrice s{font-size:12px;color:var(--mutedDark);font-family:var(--fontMono);}
.propPrice .propPromo{flex-basis:100%;font-size:11px;color:var(--accent);}
.propPlanTags{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end;}
.propLong{display:flex;flex-direction:column;gap:6px;margin-top:10px;font-size:12px;line-height:1.55;color:var(--muted);}
.propLong b{display:block;font-size:10.5px;font-weight:500;color:var(--mutedDark);margin-bottom:1px;}
.propReview{margin-left:auto;font-size:11.5px;padding:3px 9px;border-radius:var(--r12);background:var(--accentSoft);color:var(--accent);}
.propRules{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;margin:0;}
.propRules>div{min-width:0;}
.propRules dt{font-size:10.5px;color:var(--mutedDark);margin-bottom:2px;}
.propRules dd{margin:0;font-size:13px;font-family:var(--fontMono);font-weight:500;display:flex;flex-direction:column;}
.propRules dd small{font-family:var(--fontUI);font-size:10.5px;color:var(--muted);font-weight:400;}
.propNone{color:var(--muted);}
.propUnknown{color:var(--mutedDark);font-style:italic;font-family:var(--fontUI);font-size:12px;}
.propMore summary,.propFaq summary{cursor:pointer;font-size:12px;color:var(--muted);user-select:none;}
.propMore summary:hover,.propFaq summary:hover{color:var(--accent);}
.propMore[open] summary{margin-bottom:10px;}
.propOpts{font-size:12.5px;margin-top:10px;display:flex;flex-direction:column;gap:3px;}
.propSources{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;margin-top:8px;}
.propPlanFoot{display:flex;flex-direction:column;gap:8px;margin-top:auto;font-size:11px;}
.propPlanFoot>div{display:flex;gap:6px;}
.propPlanFoot .btn{flex:1;justify-content:center;white-space:nowrap;}
.propPlanFoot .btn.active{border-color:var(--accent);color:var(--accent);background:var(--accentSoft);}
.propSnapshot{margin:4px 0 12px;padding:12px;border:1px solid var(--border);border-radius:var(--r10);}
.propFaq{margin-top:16px;padding-top:12px;border-top:1px solid var(--border);}
.propFaqItem{font-size:12.5px;line-height:1.55;padding:8px 0;border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:3px;}
.propFaqItem:last-child{border-bottom:none;}
.propFaqTopic{font-weight:600;}
/* 排行 */
.propBoard{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;}
.propBoardCard{display:flex;flex-direction:column;gap:10px;text-align:left;font:inherit;color:var(--text);cursor:pointer;background:var(--surface2);transition:border-color .12s,transform .12s;}
.propBoardCard:hover{border-color:var(--accent);transform:translateY(-1px);}
.propBoardCard.dim,.propPriceRow.dim{opacity:.6;}
.propBoardHead{display:flex;align-items:center;gap:10px;min-width:0;}
.propBoardName{display:flex;flex-direction:column;align-items:flex-start;gap:3px;min-width:0;}
.propBoardName b{font-size:14.5px;line-height:1.25;}
.propRank{min-width:24px;height:24px;padding:0 4px;border-radius:var(--r12);display:inline-flex;align-items:center;justify-content:center;font-family:var(--fontMono);font-size:12px;font-weight:700;
  background:var(--surface);border:1px solid var(--border);color:var(--muted);flex-shrink:0;}
.propRank.top{background:var(--accent);border-color:var(--accent);color:var(--onAccent);}
.propRankSm{font-family:var(--fontMono);font-size:11px;color:var(--mutedDark);min-width:16px;text-align:right;}
.propTier{display:inline-block;padding:1px 7px;border-radius:var(--r12);font-size:10.5px;font-weight:500;white-space:nowrap;vertical-align:middle;}
.propTier-good{background:var(--posSoft);color:var(--pos);}
.propTier-fair{background:var(--infoSoft);color:var(--info);}
.propTier-meh{background:var(--surface);color:var(--muted);border:1px solid var(--border);}
.propTier-avoid{background:var(--negSoft);color:var(--neg);}
.propBoardPromo{display:flex;flex-direction:column;gap:2px;font-size:12px;line-height:1.45;color:var(--muted);}
.propBoardPromo b{color:var(--accent);font-size:12.5px;}
.propFirmPromo{flex-direction:row;flex-wrap:wrap;gap:4px 10px;align-items:baseline;margin-bottom:8px;padding:8px 10px;border-radius:var(--r10);background:var(--accentSoft);}
.propBoardReview{font-size:12px;line-height:1.45;color:var(--muted);}
.propBoardFoot{display:flex;align-items:baseline;gap:6px;margin-top:auto;padding-top:8px;border-top:1px solid var(--border);font-size:11.5px;color:var(--mutedDark);}
.propBoardFoot b{font-family:var(--fontMono);font-size:16px;color:var(--text);}
.propBoardFoot em{margin-left:auto;font-style:normal;}
.propBoardMore{margin-top:12px;}
.propLogoSm{width:24px;height:24px;font-size:10px;border-radius:var(--r6);}
/* 价格对比表 */
.propTableFilters{display:flex;flex-direction:column;gap:8px;}
.propTableFilters .chipGroup{margin-bottom:0;}
.propFilterLine{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;}
.propPriceTable td,.propPriceTable th{white-space:nowrap;}
.propPriceTable td.num small{display:block;font-family:var(--fontUI);font-size:10.5px;color:var(--mutedDark);}
.propPriceRow{cursor:pointer;}
.propPriceRow:hover td{background:var(--surface2);}
.propPriceRow.picked td{background:var(--accentSoft);}
.propPriceCell b{color:var(--accent);font-size:14px;}
.propPriceCell s{display:block;font-size:11px;color:var(--mutedDark);}
.propFirmCell{display:flex;align-items:center;gap:7px;}
.propFirmCellName{font-weight:600;}
.propSeriesCell{min-width:170px;max-width:240px;white-space:normal;line-height:1.4;}
.propPriceTable tr.groupStart td{border-top:2px solid var(--border);}
.propGroupMore td{padding:4px 10px 8px;border-bottom:none;}
.propGroupMore .tinyBtn{color:var(--accent);font-size:12px;}
.propStickyCol{position:sticky;left:0;z-index:1;background:var(--surface);}
.propFirmNav{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
.propFirmNav .chipGroup{margin-bottom:0;}
/* 价格对比：卡片墙。颜色跟规模走（25K 灰 / 50K 蓝 / 100K 青 / 150K+ 紫），渐变和弧线都从 --pcTint 来，日夜主题都能用 */
.propCmpHeadRight{display:flex;align-items:center;gap:12px;}
.propLayoutToggle .modeBtn{padding:6px 12px;font-size:12px;}
.propPcFilters{display:flex;flex-direction:column;gap:10px;margin-bottom:18px;}
.propPcFilters .chipGroup{margin-bottom:0;}
.propPcSizes{display:flex;flex-wrap:wrap;align-items:center;gap:8px;}
.propPcSizeBtn{min-width:76px;padding:9px 16px;border-radius:999px;border:1px solid var(--border);background:var(--surface2);color:var(--text);
  font:inherit;font-family:var(--fontDisplay);font-size:15px;font-weight:700;cursor:pointer;transition:all .15s;}
.propPcSizeBtn:hover{border-color:var(--accent);}
.propPcSizeBtn.on{background:var(--accent);border-color:var(--accent);color:var(--onAccent);box-shadow:0 6px 18px -8px var(--accent);}
select.propPcMore{width:auto;max-width:150px;padding:8px 12px;border-radius:999px;font-size:13px;}
select.propPcMore.on{border-color:var(--accent);color:var(--accent);}
.propPcEmpty{padding:30px 0;text-align:center;}
.propPcGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:16px;margin-bottom:12px;}
.propPc{--pcTint:#8C97A8;position:relative;overflow:hidden;display:flex;flex-direction:column;padding:20px 20px 14px;border-radius:20px;
  border:1px solid color-mix(in srgb,var(--pcTint) 28%,var(--border));
  background:radial-gradient(120% 70% at 85% 0%,color-mix(in srgb,var(--pcTint) 30%,transparent) 0%,transparent 60%),
    linear-gradient(170deg,color-mix(in srgb,var(--pcTint) 14%,var(--surface)) 0%,var(--surface) 55%);
  box-shadow:0 18px 40px -28px color-mix(in srgb,var(--pcTint) 70%,transparent);transition:transform .18s,box-shadow .18s,border-color .18s;}
.propPc:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--pcTint) 55%,var(--border));box-shadow:0 26px 50px -28px color-mix(in srgb,var(--pcTint) 85%,transparent);}
.propPc.picked{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),0 20px 44px -28px var(--accent);}
.propPc.dim{opacity:.72;}
.propPcTier1{--pcTint:#4C8DFF;}
.propPcTier2{--pcTint:#25C2B5;}
.propPcTier3{--pcTint:#A08CFF;}
.propPcArc{position:absolute;top:44px;right:-96px;width:230px;height:230px;border-radius:50%;pointer-events:none;
  border:2px solid transparent;border-top-color:var(--pcTint);border-left-color:color-mix(in srgb,var(--pcTint) 35%,transparent);
  transform:rotate(-18deg);opacity:.85;filter:drop-shadow(0 0 6px color-mix(in srgb,var(--pcTint) 60%,transparent));}
.propPcArc::after{content:"";position:absolute;top:8px;left:58px;width:9px;height:9px;border-radius:50%;background:var(--pcTint);box-shadow:0 0 12px var(--pcTint);}
.propPcTop{position:relative;display:flex;align-items:flex-start;justify-content:space-between;gap:10px;}
.propPcPrice{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 7px;}
.propPcPrice b{font-family:var(--fontDisplay);font-size:30px;font-weight:700;line-height:1;letter-spacing:-.5px;}
.propPcPrice span{font-family:var(--fontMono);font-size:11px;letter-spacing:.12em;color:var(--muted);}
.propPcPrice s{flex-basis:100%;order:-1;font-size:12px;color:var(--mutedDark);font-family:var(--fontMono);}
.propPcFirm{background:none;border:none;padding:0;cursor:pointer;}
.propPcFirm .propLogo{width:42px;height:42px;border-radius:12px;background:color-mix(in srgb,var(--pcTint) 16%,var(--surface2));border-color:color-mix(in srgb,var(--pcTint) 35%,var(--border));color:var(--pcTint);}
.propPcBests{position:relative;display:flex;flex-wrap:wrap;gap:5px;min-height:20px;margin:10px 0 18px;}
.propPcBest{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--surface2);color:var(--text);}
.propPcBest-cheapest{background:var(--posSoft);color:var(--pos);}
.propPcBest-widest{background:var(--infoSoft);color:var(--info);}
.propPcBest-easiest{background:var(--accentSoft);color:var(--accent);}
.propPcBest-value{background:color-mix(in srgb,#A08CFF 18%,transparent);color:#9A86F5;}
.propPcSize{position:relative;font-family:var(--fontDisplay);font-size:36px;font-weight:800;line-height:1;letter-spacing:-1px;
  background:linear-gradient(95deg,var(--text) 30%,color-mix(in srgb,var(--pcTint) 75%,var(--text)));-webkit-background-clip:text;background-clip:text;color:transparent;}
.propPcSub{position:relative;margin-top:8px;font-family:var(--fontMono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.propPcSub span{color:var(--pcTint);margin-right:6px;}
.propPcAttrs{display:flex;flex-wrap:wrap;gap:5px;margin-top:10px;}
.propPcAttrs span{font-size:10.5px;padding:2px 7px;border-radius:6px;border:1px solid color-mix(in srgb,var(--pcTint) 30%,var(--border));color:var(--muted);}
.propPcRows{margin-top:16px;display:flex;flex-direction:column;}
.propPcRow{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid color-mix(in srgb,var(--border) 70%,transparent);}
.propPcRow>span{font-size:13px;color:var(--muted);}
.propPcRow>b{display:flex;flex-direction:column;align-items:flex-end;font-family:var(--fontMono);font-size:14px;font-weight:600;text-align:right;}
.propPcRow>b small{font-family:var(--fontUI);font-size:10.5px;font-weight:400;color:var(--mutedDark);margin-top:1px;}
.propPcGood{color:var(--pos);}
.propPcDiff{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;margin-top:12px;font-size:11px;}
.propPcDiff span{font-weight:600;}
.propPcDiff em{font-style:normal;color:var(--mutedDark);font-family:var(--fontMono);font-size:10.5px;}
.propPcDiff i{position:relative;height:5px;border-radius:99px;background:var(--surface2);overflow:hidden;}
.propPcDiff i::after{content:"";position:absolute;inset:0 auto 0 0;width:var(--w);border-radius:99px;background:currentColor;}
.propPcDiff-easy{color:var(--pos);}
.propPcDiff-mid{color:var(--accent);}
.propPcDiff-hard{color:var(--neg);}
.propPcOpts{display:flex;flex-direction:column;gap:7px;margin-top:14px;}
.propPcOpt{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.propPcOpt>span{font-size:11.5px;color:var(--mutedDark);white-space:nowrap;}
.propPcOpt>div{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:2px;padding:2px;border-radius:999px;background:var(--surface2);}
.propPcOpt button{border:none;background:none;color:var(--muted);font:inherit;font-size:11.5px;padding:4px 10px;border-radius:999px;cursor:pointer;}
.propPcOpt button.on{background:var(--pcTint);color:#0B0F14;font-weight:600;}
.propPcOpt button:disabled{opacity:.35;cursor:not-allowed;}
.propPcMore{margin-top:12px;}
.propPcMore summary{cursor:pointer;font-size:12.5px;color:var(--muted);text-align:center;list-style:none;padding:4px 0;}
.propPcMore summary::-webkit-details-marker{display:none;}
.propPcMore summary::before{content:"⌄ ";}
.propPcMore[open] summary::before{content:"⌃ ";}
.propPcMore summary:hover{color:var(--text);}
.propPcMore[open] summary{margin-bottom:10px;}
.propPcFirmLink{margin-top:10px;color:var(--accent);}
.propPcActs{display:flex;gap:8px;margin-top:auto;padding-top:14px;}
.propPc .btn.propPcCta{flex:1;justify-content:center;padding:11px 14px;border-radius:999px;border:none;font-weight:700;color:var(--onAccent);
  background:linear-gradient(100deg,var(--accent),color-mix(in srgb,var(--accent) 70%,#fff));box-shadow:0 10px 24px -12px var(--accent);}
.propPc .btn.propPcCta:hover{filter:brightness(1.08);}
.propPc .btn.propPcCmp{border-radius:999px;padding:9px 12px;gap:5px;}
.propPc .btn.propPcCmp.active{border-color:var(--accent);color:var(--accent);background:var(--accentSoft);}
.propPcFoot{margin-top:10px;text-align:center;font-size:11px;color:var(--mutedDark);}
.propCmpDiff th,.propCmpDiff td{background:var(--accentSoft);}
.propCmpDiff th{color:var(--accent);}
/* 每月收支：柱状图 + 全年汇总 / 回本进度 */
.propMo{display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:16px;align-items:stretch;}
.propMoChart{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:4px;padding:6px;border-radius:var(--r12);background:var(--surface2);}
.propMoCol{display:flex;flex-direction:column;align-items:center;gap:4px;padding:6px 2px;border:1px solid transparent;border-radius:var(--r10);background:none;color:var(--text);font:inherit;cursor:pointer;min-width:0;}
.propMoCol:hover{background:var(--surface);}
.propMoCol.on{background:var(--surface);border-color:var(--accent);box-shadow:0 6px 16px -10px var(--accent);}
.propMoNet{height:15px;font-family:var(--fontMono);font-size:10.5px;font-weight:600;white-space:nowrap;}
.propMoNet.pos{color:var(--pnlPos);} .propMoNet.neg{color:var(--pnlNeg);}
.propMoBars{display:grid;grid-template-rows:1fr 1fr;width:100%;height:120px;}
.propMoBars>span{display:flex;justify-content:center;}
.propMoBars .up{align-items:flex-end;border-bottom:1px solid var(--borderLight);}
.propMoBars .down{align-items:flex-start;}
.propMoBars i{display:block;width:min(18px,70%);min-height:0;border-radius:5px;}
.propMoBars .up i{background:linear-gradient(180deg,var(--pnlPos),color-mix(in srgb,var(--pnlPos) 55%,transparent));border-radius:5px 5px 2px 2px;}
.propMoBars .down i{background:linear-gradient(0deg,var(--pnlNeg),color-mix(in srgb,var(--pnlNeg) 55%,transparent));border-radius:2px 2px 5px 5px;}
.propMoCol.empty .propMoLabel{color:var(--mutedDark);}
.propMoLabel{font-size:11px;color:var(--muted);}
.propMoCol.on .propMoLabel{color:var(--accent);font-weight:600;}
.propMoSum{display:flex;flex-direction:column;gap:6px;padding:14px;border-radius:var(--r12);border:1px solid var(--border);background:linear-gradient(160deg,var(--accentSoft),var(--surface) 70%);}
.propMoSum .propMiniLabel{margin:0 0 2px;}
.propMoSumRow{display:flex;justify-content:space-between;align-items:baseline;font-size:12.5px;color:var(--muted);}
.propMoSumRow b{font-family:var(--fontMono);color:var(--text);}
.propMoSumRow.big b{font-size:18px;}
.propMoSumRow b.pos{color:var(--pnlPos);} .propMoSumRow b.neg{color:var(--pnlNeg);}
.propMoBack{margin-top:auto;padding-top:10px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:6px;}
.propMoBackHead{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:12px;color:var(--muted);}
.propMoBackHead b{font-size:13px;color:var(--text);} .propMoBackHead b.pos{color:var(--pnlPos);}
.propMoBackBar{height:8px;border-radius:99px;background:var(--surface2);overflow:hidden;}
.propMoBackBar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--accent),var(--pnlPos));}
.propMoBack small{font-size:10.5px;color:var(--mutedDark);}
/* 当月流水：按天分组的卡片 */
.propLedDay{display:grid;grid-template-columns:44px minmax(0,1fr);gap:10px;padding:10px 0;border-top:1px solid var(--border);}
.propLedDay:first-of-type{border-top:none;}
.propLedDate{display:flex;flex-direction:column;align-items:center;padding-top:4px;}
.propLedDate b{font-family:var(--fontDisplay);font-size:20px;line-height:1;}
.propLedDate span{font-size:10.5px;color:var(--mutedDark);}
.propLedItems{display:flex;flex-direction:column;gap:6px;}
.propLedRow{display:block;width:100%;text-align:left;border:1px solid var(--border);border-radius:var(--r10);background:var(--surface2);color:var(--text);font:inherit;cursor:pointer;}
button.propLedRow,.propLedRow>summary{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:10px;padding:8px 12px;}
.propLedRow>summary{list-style:none;cursor:pointer;}
.propLedRow>summary::-webkit-details-marker{display:none;}
.propLedRow:hover{border-color:var(--accent);}
.propLedName{display:flex;align-items:baseline;gap:6px;min-width:0;}
.propLedName b{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.propLedName em{font-style:normal;font-size:11px;font-weight:700;color:var(--accent);background:var(--accentSoft);padding:0 6px;border-radius:99px;}
.propLedKind{font-size:11.5px;color:var(--muted);white-space:nowrap;}
.propLedKind-payout,.propLedKind-refund{color:var(--pnlPos);}
.propLedAmt{font-family:var(--fontMono);font-weight:600;font-size:13.5px;white-space:nowrap;text-align:right;}
.propLedAmt.pos{color:var(--pnlPos);} .propLedAmt.neg{color:var(--pnlNeg);}
.propLedSub{display:flex;flex-direction:column;padding:0 8px 8px 46px;}
.propLedSub button{display:flex;align-items:center;gap:8px;padding:5px 6px;border:none;background:none;color:var(--text);font:inherit;font-size:12.5px;cursor:pointer;border-radius:var(--r8);text-align:left;}
.propLedSub button:hover{background:var(--surface);}
.propLedSub button>span:first-child{flex:1;}
/* 账号卡片：按状态上色 */
.propAcc{--stTint:var(--info);position:relative;overflow:hidden;gap:10px;border-radius:16px;
  border-color:color-mix(in srgb,var(--stTint) 26%,var(--border));
  background:radial-gradient(120% 60% at 100% 0%,color-mix(in srgb,var(--stTint) 16%,transparent),transparent 60%),var(--surface);}
.propAcc:hover{border-color:color-mix(in srgb,var(--stTint) 60%,var(--border));}
.propAccSt-passed{--stTint:var(--accent);}
.propAccSt-funded{--stTint:var(--pos);}
.propAccSt-failed,.propAccSt-blown{--stTint:var(--neg);}
.propAccSt-closed{--stTint:var(--mutedDark);}
.propAccSt-failed,.propAccSt-blown,.propAccSt-closed{opacity:.86;}
.propAccTitleWrap{flex:1;min-width:0;}
.propAccTitleWrap .propAccTitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.propAccTitleWrap .propAccSub{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px;}
.propStepper{display:flex;align-items:center;gap:4px;font-size:10.5px;color:var(--mutedDark);}
.propStepper>span{padding:2px 7px;border-radius:99px;border:1px solid var(--border);white-space:nowrap;}
.propStepper>span.done{color:var(--text);border-color:color-mix(in srgb,var(--stTint) 40%,var(--border));background:color-mix(in srgb,var(--stTint) 10%,transparent);}
.propStepper>span.cur{color:#fff;background:var(--stTint);border-color:var(--stTint);font-weight:600;}
.propStepper>i{flex:1;height:1px;min-width:6px;background:var(--border);}
.propStepper .endSt{color:var(--neg);border-color:var(--neg);background:var(--negSoft);font-weight:600;}
.propStepper .endSt-closed{color:var(--muted);border-color:var(--border);background:var(--surface2);}
.propAccMain{display:flex;align-items:center;justify-content:space-between;gap:12px;}
.propAccNet{display:flex;flex-direction:column;gap:1px;min-width:0;}
.propAccNet>span{font-size:11px;color:var(--mutedDark);}
.propAccNet b{font-family:var(--fontDisplay);font-size:26px;font-weight:700;line-height:1.1;letter-spacing:-.5px;}
.propAccNet b.pos{color:var(--pnlPos);} .propAccNet b.neg{color:var(--pnlNeg);}
.propAccNet small{font-size:11px;color:var(--muted);font-family:var(--fontMono);}
.propRing{--deg:0deg;flex-shrink:0;width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(closest-side,var(--surface) 76%,transparent 78%),conic-gradient(var(--ringC,var(--pnlPos)) var(--deg),var(--surface2) 0);}
.propRing.neg{--ringC:var(--pnlNeg);}
.propRing.empty{background:radial-gradient(closest-side,var(--surface) 76%,transparent 78%),conic-gradient(var(--surface2) 360deg,var(--surface2) 0);}
.propRing em{font-style:normal;font-family:var(--fontMono);font-size:10.5px;font-weight:600;text-align:center;line-height:1.1;}
.propRing.pos em{color:var(--pnlPos);} .propRing.neg em{color:var(--pnlNeg);}
.propRing.empty em{color:var(--muted);font-family:var(--fontUI);}
.propAccRules{font-size:11px;color:var(--muted);padding:6px 9px;border-radius:var(--r8);background:var(--surface2);}
.propBalAdd{align-self:flex-start;border:1px dashed var(--borderLight);background:none;color:var(--muted);font:inherit;font-size:11.5px;padding:4px 10px;border-radius:99px;cursor:pointer;}
.propBalAdd:hover{color:var(--accent);border-color:var(--accent);}
.propBal{display:flex;flex-direction:column;gap:5px;padding:9px 11px;border-radius:var(--r10);border:1px solid color-mix(in srgb,var(--stTint) 30%,var(--border));background:color-mix(in srgb,var(--stTint) 6%,var(--surface));cursor:pointer;}
.propBal.danger{border-color:var(--neg);background:var(--negSoft);}
.propBalTop{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);}
.propBalTop b{color:var(--text);font-family:var(--fontMono);}
.propBalTop .pos{color:var(--pnlPos);font-family:var(--fontMono);} .propBalTop .neg{color:var(--pnlNeg);font-family:var(--fontMono);}
.propBalBar{height:6px;border-radius:99px;background:var(--surface2);overflow:hidden;}
.propBalBar i{display:block;height:100%;border-radius:99px;background:var(--stTint);}
.propBalRow{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);}
.propBalRow b{font-family:var(--fontMono);color:var(--text);}
.propBalRow.neg,.propBalRow.neg b{color:var(--neg);}
.propStackFold{margin-left:auto;border:none;background:var(--surface2);color:var(--muted);font:inherit;font-size:10.5px;padding:2px 8px;border-radius:99px;cursor:pointer;}
/* 一摞：同一批买的号 */
.propStack{cursor:default;box-shadow:6px 6px 0 -1px var(--surface),6px 6px 0 0 color-mix(in srgb,var(--stTint) 30%,var(--border)),12px 12px 0 -1px var(--surface),12px 12px 0 0 color-mix(in srgb,var(--stTint) 18%,var(--border));margin:0 12px 12px 0;overflow:visible;}
.propStack:hover{transform:none;}
.propStackN{font-family:var(--fontDisplay);font-weight:800;font-size:16px;color:var(--stTint);padding:2px 10px;border-radius:99px;background:color-mix(in srgb,var(--stTint) 14%,transparent);}
.propStackSt{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;font-size:12px;}
.propStackSt b{font-family:var(--fontMono);margin-left:-4px;}
.propStackList{display:flex;flex-direction:column;border-top:1px solid var(--border);padding-top:6px;}
.propStackList button{display:flex;align-items:center;gap:8px;padding:6px 4px;border:none;background:none;color:var(--text);font:inherit;font-size:12.5px;cursor:pointer;border-radius:var(--r8);text-align:left;}
.propStackList button:hover{background:var(--surface2);}
.propStackName{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.propStackList .pos{color:var(--pnlPos);font-family:var(--fontMono);} .propStackList .neg{color:var(--pnlNeg);font-family:var(--fontMono);}
.propStackProg{width:48px;height:5px;border-radius:99px;background:var(--surface2);overflow:hidden;flex-shrink:0;}
.propStackProg i{display:block;height:100%;background:var(--stTint);}
.propStackOpen{align-self:flex-start;}
@media(max-width:860px){.propMo{grid-template-columns:1fr;}}
@media(max-width:640px){
  .propMoBars{height:84px;}.propMoChart{gap:0;padding:4px;}
  .propMoNet{visibility:hidden;font-size:9px;}.propMoCol.on .propMoNet{visibility:visible;overflow:visible;}
  .propMoLabel{font-size:9.5px;white-space:nowrap;}
  button.propLedRow,.propLedRow>summary{grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"logo name amt" "logo kind amt";row-gap:2px;}
  .propLedRow .propLogo{grid-area:logo;}.propLedName{grid-area:name;}.propLedKind{grid-area:kind;}.propLedRow>.propLedAmt,.propLedRow>summary>.propLedAmt{grid-area:amt;}
  .propLedSub{padding-left:10px;}
}
/* 账号详情：右侧抽屉 */
.propDrawerOverlay{justify-content:flex-end;align-items:stretch;padding:0;}
.propDrawer{height:100vh;max-height:100vh;border-radius:18px 0 0 18px;border-right:none;}
.propDrawer.anim{animation:propDrawerIn .22s ease-out;}
@keyframes propDrawerIn{from{transform:translateX(40px);opacity:0;}to{transform:none;opacity:1;}}
.propDrawerSub{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:12px;font-size:12px;color:var(--muted);}
.propDelBtn{color:var(--muted);}
.propDelBtn:hover{color:var(--neg);border-color:var(--neg);}
.propDelConfirm{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--neg);}
.propTimelineEdit{align-items:center;gap:8px;}
.propTimelineEdit>div{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r10);padding:4px 6px 4px 4px;}
.propEvDate{width:auto;padding:3px 6px;font-size:12px;font-family:var(--fontMono);border-color:transparent;background:transparent;cursor:pointer;}
.propEvDate:hover,.propEvDate:focus{border-color:var(--accent);}
.propEvArrow{color:var(--mutedDark);}
.propDrawer .propTable th,.propDrawer .propTable td{white-space:nowrap;}
.propInfoBox{margin:4px 0 14px;padding:14px;border:1px solid var(--border);border-radius:var(--r12);background:var(--surface2);}
.propInfoBox .propMiniLabel{margin-top:0;}
/* 账号卡片：「⋯」菜单、多选 */
.propAccFilters{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;}
.propAccFilters .chipGroup{margin-bottom:0;}
.propAccFilters .btn.active{border-color:var(--accent);color:var(--accent);background:var(--accentSoft);}
.propCardMenuWrap{position:relative;margin-left:2px;}
.propCardMenuBtn{width:26px;height:24px;border-radius:var(--r8);border:1px solid transparent;background:none;color:var(--muted);cursor:pointer;font-size:16px;line-height:1;}
.propCardMenuBtn:hover{border-color:var(--border);background:var(--surface2);color:var(--text);}
.propMenu{position:absolute;right:0;top:28px;z-index:20;min-width:170px;padding:5px;border-radius:var(--r10);border:1px solid var(--borderLight);
  background:var(--surface);box-shadow:var(--shadowPop);display:flex;flex-direction:column;}
.propMenu button{display:flex;align-items:center;gap:8px;padding:8px 10px;border:none;background:none;border-radius:var(--r8);color:var(--text);font:inherit;font-size:13px;cursor:pointer;text-align:left;}
.propMenu button:hover{background:var(--surface2);}
.propMenu button.neg{color:var(--neg);}
.propMenu .icon{width:14px;height:14px;}
.propAcc.batch:hover{transform:none;}
.propAcc.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--surface));}
.propPickBox{width:18px;height:18px;flex-shrink:0;border-radius:5px;border:1.5px solid var(--borderLight);display:inline-flex;align-items:center;justify-content:center;color:var(--onAccent);}
.propAcc.selected .propPickBox{background:var(--accent);border-color:var(--accent);}
.propPickBox .icon{width:12px;height:12px;}
.propAccHead{align-items:center;}
.propBatchBar{justify-content:flex-start;}
/* 底部提示条（删除后可撤销） */
.propToast{position:fixed;left:50%;bottom:22px;z-index:300;display:flex;align-items:center;gap:12px;padding:10px 12px 10px 16px;border-radius:12px;
  background:var(--text);color:var(--surface);font-size:13px;box-shadow:var(--shadowPop);transform:translate(-50%,30px);opacity:0;pointer-events:none;transition:all .2s;}
.propToast.show{transform:translate(-50%,0);opacity:1;pointer-events:auto;}
.propToast .btn{background:transparent;color:var(--surface);border-color:color-mix(in srgb,var(--surface) 40%,transparent);}
/* 补录老账号：要不要补记月费 */
.propBackfill{display:flex;flex-direction:column;gap:8px;margin:-2px 0 12px;padding:10px 12px;border-radius:var(--r10);background:var(--accentSoft);border:1px solid color-mix(in srgb,var(--accent) 30%,transparent);}
.propBackfill b{font-size:12.5px;}
.propBackfill .propOptBtns{grid-template-columns:1fr 1fr;}
/* 记录购买：左预览、右表单 */
.propAddGrid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:18px;align-items:start;}
.propAddPreview{position:sticky;top:0;}
.propAddForm{display:flex;flex-direction:column;gap:12px;}
.propAddStep{display:flex;flex-direction:column;}
.propAddStepHead{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;}
.propAddStepHead b{font-size:14px;}
.propAddStepHead span{font-family:var(--fontMono);font-size:11px;color:var(--mutedDark);background:var(--surface2);border-radius:var(--r8);padding:3px 7px;}
.propLabelRow{display:flex;justify-content:space-between;gap:8px;}
.propLabelRow span{font-size:10.5px;color:var(--mutedDark);font-weight:400;}
.propOptBtns{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:8px;}
.propOptBtn{display:flex;flex-direction:column;align-items:center;gap:1px;padding:9px 8px;border-radius:var(--r10);border:1px solid var(--border);background:var(--surface2);
  color:var(--text);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:border-color .12s,background .12s;}
.propOptBtn small{font-size:10.5px;font-weight:400;color:var(--mutedDark);font-family:var(--fontMono);}
.propOptBtn:hover:not(:disabled){border-color:var(--accent);}
.propOptBtn.on{border-color:var(--accent);background:var(--accentSoft);color:var(--accent);}
.propOptBtn.on::after{content:"✓";font-size:10px;line-height:1;}
.propOptBtn:disabled{opacity:.4;cursor:not-allowed;}
.propPreview{display:flex;flex-direction:column;gap:14px;padding:18px;}
.propPvHead{display:flex;align-items:center;gap:12px;}
.propPvQty{margin-left:auto;font-family:var(--fontMono);font-weight:700;color:var(--accent);background:var(--accentSoft);padding:3px 9px;border-radius:var(--r12);}
.propPvMain{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:end;}
.propPvMain .propMiniLabel{margin:0 0 2px;}
.propPvSize{font-size:42px;font-weight:800;line-height:1.05;font-family:var(--fontDisplay);}
.propPvPrice{display:flex;flex-direction:column;gap:3px;}
.propPvPrice>div:first-child{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;}
.propPvPrice b{font-size:26px;font-family:var(--fontMono);color:var(--accent);line-height:1.1;}
.propPvPrice span{font-size:12px;color:var(--muted);}
.propPvTotal{font-size:12px;color:var(--text);font-family:var(--fontMono);}
.propPvConfig{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;background:var(--surface2);border-radius:var(--r10);padding:9px 12px;font-size:12.5px;}
.propPvConfig span{color:var(--mutedDark);font-size:11.5px;}
.propPvGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px 12px;padding-top:12px;border-top:1px solid var(--border);}
.propPvCell{display:flex;flex-direction:column;gap:2px;min-width:0;padding:4px 6px;margin:-4px -6px;border-radius:var(--r8);}
.propPvCell span{font-size:11px;color:var(--mutedDark);display:flex;gap:6px;align-items:center;}
.propPvCell b{font-size:16px;font-family:var(--fontMono);}
.propPvCell small{font-size:10.5px;color:var(--muted);}
.propPvCell.edited{background:var(--accentSoft);}
.propEdited{font-style:normal;font-size:10px;color:var(--accent);background:var(--accentSoft);padding:0 6px;border-radius:var(--r12);font-weight:500;}
.propPvFunded{font-size:12px;color:var(--muted);line-height:1.6;}
.propPvFunded b{font-family:var(--fontMono);color:var(--text);font-weight:500;}
.propPvFoot{display:flex;justify-content:space-between;gap:10px;font-size:11px;color:var(--mutedDark);padding-top:10px;border-top:1px solid var(--border);}
.propAddRules{margin-top:4px;padding-top:12px;border-top:1px solid var(--border);}
.propAddRules summary{cursor:pointer;font-size:13px;font-weight:600;user-select:none;}
.propAddRules[open] summary{margin-bottom:8px;}
.propRuleGrid{display:grid;grid-template-columns:1fr 1fr;gap:0 12px;}
.propRuleEdited .input{border-color:var(--accent);}
.propRuleEdited .fieldLabel{color:var(--accent);}
.propCompareBar{position:sticky;bottom:16px;z-index:5;display:flex;align-items:center;gap:10px;justify-content:flex-end;flex-wrap:wrap;margin-top:16px;
  background:var(--surface);border:1px solid var(--accent);border-radius:var(--r12);padding:10px 14px;box-shadow:var(--shadowPop);}
.propCompareBar span{flex:1;font-size:13px;}
.propCmp th{white-space:nowrap;width:1%;}
.propCmp td{min-width:140px;font-family:var(--fontMono);}
.propImportPick{display:flex;align-items:center;gap:10px;margin-bottom:10px;}
.propImportPick label{cursor:pointer;}
.propImportText{width:100%;font-size:12px;resize:vertical;}
.propImportMsgs{margin-top:12px;align-items:flex-start;}
.propImportMsgs ul{margin:6px 0 0;padding-left:18px;font-size:12px;max-height:220px;overflow:auto;}
@media(max-width:640px){
  .propRow{grid-template-columns:1fr;}
  .propAccNums,.propDetailNums{grid-template-columns:repeat(2,1fr);}
  .propFunnel{flex-wrap:wrap;}
  .propStep{flex:1 1 40%;}
  .propStepArrow{display:none;}
  .propAccGrid,.propPlanGrid{grid-template-columns:1fr;}
  .propAddGrid{grid-template-columns:1fr;}
  .propAddPreview{position:static;}
  .propPvGrid{grid-template-columns:repeat(2,1fr);}
  .propPvSize{font-size:34px;}
  /* 手机上排行横着滑，别把对比表挤到很下面 */
  .propBoard{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:78%;overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:4px;}
  .propBoardCard{scroll-snap-align:start;}
  .propPanelHead{flex-wrap:wrap;}
}
/* 管理员：编辑目录 */
.propAdmNotice{margin-bottom:14px;}
.propAdmFirms{display:flex;flex-direction:column;gap:6px;}
.propAdmFirm{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto auto;align-items:center;gap:12px;padding:8px 12px;border:1px solid var(--border);border-radius:var(--r12);background:var(--surface2);}
.propAdmFirm.hidden{opacity:.55;}
.propAdmFirmName{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;min-width:0;}
.propAdmFirmName b{font-size:14px;}
.propAdmFirmName small{flex-basis:100%;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.propAdmBtns{display:flex;align-items:center;gap:6px;}
.propAdmBtns .tinyBtn{font-size:15px;padding:2px 8px;}
.propAdmBtns .tinyBtn:disabled{opacity:.3;}
.propAdmFirmActs{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 10px;}
.propSeriesName{display:flex;align-items:center;gap:10px;}
.propAdmPreview{pointer-events:none;}
.propAdmChanged{color:var(--accent);font-weight:700;}
.propPc .btn.propAdmEditBtn{border-color:var(--accent);color:var(--accent);}
@media(max-width:640px){.propAdmFirm{grid-template-columns:auto auto minmax(0,1fr);}.propAdmFirm>.propMuted{display:none;}.propAdmBtns{grid-column:1/-1;flex-wrap:wrap;}}
.propPcTop .propPcAdmEdit{margin-left:auto;margin-right:6px;width:32px;height:32px;border-radius:10px;border:1px solid var(--accent);background:var(--accentSoft);color:var(--accent);
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;position:relative;z-index:1;}
.propPcTop .propPcAdmEdit:hover{background:var(--accent);color:var(--onAccent);}
.propPcTop .propPcAdmEdit .icon{width:15px;height:15px;}

/* 推荐语轻量排版与编辑器：仅作用于新组件，经典排行仍使用原来的纯文本布局。 */
.propRichText{font:13px/1.75 var(--fontBody);color:var(--text);overflow-wrap:anywhere;white-space:normal;min-width:0;}
.propRichText p,.propRichText ul{margin:0 0 .7em;}
.propRichText>:last-child{margin-bottom:0;}
.propRichText ul{padding-left:1.35em;}
.propRichText li+li{margin-top:.2em;}
.propRichText li::marker{color:var(--muted);}
.propRichText strong{font-weight:700;}
.propRichText mark{background:color-mix(in srgb,#f2c45c 35%,var(--surface));color:var(--text);padding:1px 3px;border-radius:3px;box-decoration-break:clone;-webkit-box-decoration-break:clone;}
.propReviewEmpty{color:var(--muted);}
.propReviewEditor{border:1px solid var(--border);border-radius:var(--r10);padding:14px;background:var(--surface);}
.propReviewEditorHead{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px;}
.propReviewEditorHead .fieldLabel,.propReviewEditorHead .propHint{margin:0;}
.propReviewEditor .propHint{color:var(--muted);}
.propReviewToolbar{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;}
.propReviewInput{display:block;width:100%;min-height:150px;resize:vertical;line-height:1.7;}
.propReviewPreview{margin-top:14px;padding:14px;border:1px solid var(--border);border-radius:var(--r8);background:var(--surface2);}
.propReviewPreviewLabel{font-size:11px;font-weight:600;color:var(--muted);margin-bottom:8px;}
.propReviewPreview .propRichText{max-height:240px;overflow:auto;}
.propFirmRecommendation{padding:16px 18px;margin:12px 0 18px;border:1px solid var(--border);border-radius:var(--r10);background:var(--surface2);}
.propFirmRecommendation>.propRecommendLabel{display:block;margin-bottom:8px;}

/* 公司专属更新：紧凑摘要与完整时间线共用，不影响网站 changelog。 */
.propFirmUpdates{min-width:0;}
.propFirmUpdatesHead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;}
.propFirmUpdatesHead h3{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin:0;font-size:13px;font-weight:600;line-height:1.5;}
.propUpdateCount{font-size:10.5px;font-weight:500;color:var(--muted);background:var(--surface2);border:1px solid var(--border);border-radius:6px;padding:1px 6px;white-space:nowrap;}
.propUpdatesLink{display:inline-flex;align-items:center;gap:6px;flex:none;min-height:28px;padding:3px 0;border:0;background:none;color:var(--accent);font:500 11.5px var(--fontUI);cursor:pointer;}
.propUpdatesLink:hover{text-decoration:underline;text-underline-offset:3px;}
.propFirmUpdatesEmpty{padding:8px 0;color:var(--muted);font-size:12px;line-height:1.7;}
.propFirmUpdateList{list-style:none;padding:0;margin:0;}
.propFirmUpdate{position:relative;padding:0 0 15px 17px;}
.propFirmUpdate::before{content:"";position:absolute;left:0;top:6px;width:7px;height:7px;border-radius:50%;background:var(--borderLight);}
.propFirmUpdate:first-child::before{background:var(--accent);box-shadow:0 0 0 3px var(--accentSoft);}
.propFirmUpdate::after{content:"";position:absolute;left:3px;top:18px;bottom:5px;width:1px;background:var(--border);}
.propFirmUpdate:last-child{padding-bottom:0;}
.propFirmUpdate:last-child::after{display:none;}
.propFirmUpdateMeta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-height:20px;}
.propFirmUpdateMeta time{font:500 11px var(--fontMono);font-variant-numeric:tabular-nums;color:var(--muted);}
.propFirmUpdateType{border:1px solid var(--border);border-radius:4px;padding:0 6px;font-size:10px;line-height:1.7;color:var(--muted);background:var(--surface);}
.propFirmUpdateText{margin-top:6px;}
.propFirmUpdatesFull{scroll-margin-top:84px;padding:18px 20px;margin:18px 0 24px;border:1px solid var(--border);border-radius:12px;background:var(--surface);}
.propFirmUpdatesFull .propFirmUpdatesHead{margin-bottom:18px;}
.propFirmUpdatesFull .propFirmUpdatesHead h3{font-size:15px;}
.propFirmUpdatesFull .propFirmUpdate{padding-left:24px;padding-bottom:18px;}
.propFirmUpdatesFull .propFirmUpdate:last-child{padding-bottom:0;}
.propFirmUpdatesFull .propFirmUpdateText{padding:11px 14px;border:1px solid var(--border);border-radius:8px;background:var(--surface2);}
.propFirmUpdatesFull .propFirmUpdateMeta time{font-size:12px;}
.propUpdatesEditor{border:1px solid var(--border);border-radius:var(--r10);margin:0 0 14px;scroll-margin-top:12px;}
.propUpdatesEditor>summary{padding:13px 14px;cursor:pointer;font-size:13px;font-weight:600;}
.propUpdatesEditor>summary .propUpdateCount{margin-left:9px;}
.propUpdatesEditor[open]>summary{border-bottom:1px solid var(--border);}
.propUpdatesEditorInner{padding:14px;}
.propUpdatesEditor .propHint{margin:0 0 12px;color:var(--muted);}
.propUpdateEditRow{padding:12px;margin-bottom:12px;border:1px solid var(--border);border-radius:8px;background:var(--surface2);}
.propUpdateEditRow label{display:block;margin-bottom:6px;font-size:11.5px;font-weight:500;color:var(--muted);}
.propUpdateEditTop{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;gap:10px;align-items:end;margin-bottom:10px;}
.propUpdateEditRow .input{min-width:0;width:100%;}
.propUpdateEditRow textarea{display:block;resize:vertical;min-height:84px;line-height:1.65;}
.propUpdateRemove{min-height:34px;padding:6px;border:0;border-radius:6px;background:transparent;color:color-mix(in srgb,var(--neg) 65%,var(--text));font:500 11.5px var(--fontUI);cursor:pointer;}
.propUpdateRemove:hover{background:var(--negSoft);}
@media(max-width:520px){.propUpdateEditTop{grid-template-columns:minmax(0,1fr);}.propUpdateRemove{justify-self:end;}.propFirmUpdatesFull{padding:16px;}}

/* 公司目录多选：复选框保留键盘操作，自定义值只在保存公司时落库。 */
.propFirmChoicesGrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;margin:0 0 14px;align-items:start;}
.propFirmChoiceField{min-width:0;margin:0;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r8);}
.propFirmChoiceField legend{padding:0 5px;font-size:12px;font-weight:600;color:var(--text);}
.propChoicePicker>summary{display:flex;align-items:center;justify-content:space-between;gap:8px;cursor:pointer;padding:4px 0;color:var(--text);font-size:12px;list-style:none;}
.propChoicePicker>summary::-webkit-details-marker{display:none;}
.propChoicePicker>summary::after{content:"⌄";flex:none;color:var(--muted);}
.propChoicePicker[open]>summary::after{content:"⌃";}
.propChoiceSummary{min-width:0;overflow-wrap:anywhere;line-height:1.6;}
.propChoiceCount{flex:none;font-size:10px;color:var(--muted);white-space:nowrap;}
.propChoiceOptions{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:6px;margin-top:10px;}
:where(.propChoiceOption){display:flex;align-items:flex-start;gap:7px;min-width:0;padding:7px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--text);font-size:11.5px;line-height:1.5;cursor:pointer;overflow-wrap:anywhere;}
:where(.propChoiceOption):hover{border-color:var(--borderLight);background:var(--surface2);}
.propChoiceOption:has(input:checked){border-color:var(--accent);background:var(--accentSoft);}
.propChoiceOption input{flex:none;width:14px;height:14px;margin:2px 0 0;accent-color:var(--accent);}
.propChoiceOption:focus-within{outline:2px solid var(--accent);outline-offset:2px;}
.propChoiceCustom{margin-top:12px;padding-top:10px;border-top:1px solid var(--border);}
.propChoiceCustomLabel{display:block;color:var(--muted);font-size:11px;margin-bottom:6px;}
.propChoiceCustom>div{display:flex;gap:7px;}
.propChoiceCustom input{min-width:0;flex:1;}
.propFirmChoiceField .propHint{margin:7px 0 0;color:var(--muted);font-size:10.5px;}
/* 选项标签统一随当前配色变化，不按选项分配独立颜色。 */
.propChoiceTag{display:inline-block;max-width:100%;padding:3px 7px;border:1px solid color-mix(in srgb,var(--accent) 25%,var(--border));border-radius:6px;
  color:color-mix(in srgb,var(--accent) 65%,var(--text));background:var(--accentSoft);font-size:11.5px;font-weight:600;line-height:1.5;overflow-wrap:anywhere;}
@media(max-width:600px){.propFirmChoicesGrid{grid-template-columns:minmax(0,1fr);}}

/* 共享图标只装饰标签，品牌图像不变色、不变形；失效时文字继续可读。 */
.propOptionIcon{display:inline-flex;vertical-align:-3px;align-items:center;justify-content:center;width:16px;height:16px;flex:0 0 16px;margin-right:5px;line-height:1;}
.propOptionIcon svg,.propOptionIcon img{display:block;width:100%;height:100%;object-fit:contain;filter:none;}
.propOptionIcon[hidden]{display:none;}
.propOptionImage{width:20px;flex-basis:20px;padding:1px;box-sizing:border-box;background:#f7f7f7;border-radius:3px;}

/* 独立公司编辑页。只由modern入口打开；不改变classic的原有目录与弹窗。 */
.propFirmEditorPage{max-width:1580px;margin:0 auto 40px;color:var(--text);}
.propEditorTop{position:sticky;top:0;z-index:20;display:flex;justify-content:space-between;align-items:center;gap:20px;padding:18px 22px;margin-bottom:16px;background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:0 6px 24px #0000000a;}
.propEditorBack{padding:0;border:0;background:none;color:var(--muted);font:500 12px var(--fontUI);cursor:pointer;}
.propEditorBack:hover{color:var(--text);}
.propEditorTop h2{margin:10px 0 0;font:700 23px/1.35 var(--fontUI);letter-spacing:-.5px;}
.propEditorTop h2 span{font-size:15px;font-weight:500;color:var(--muted);margin-left:14px;overflow-wrap:anywhere;}
.propEditorSave{display:flex;align-items:center;gap:14px;flex-wrap:wrap;justify-content:flex-end;}
.propEditorSave>span{font-size:11px;color:var(--muted);}
.propEditorTabs{display:flex;gap:7px;margin-bottom:22px;overflow-x:auto;padding:3px 2px 8px;}
:where(.propEditorTabs .btn){white-space:nowrap;border-color:transparent;background:transparent;color:var(--muted);}
.propEditorTabs .btn.active{background:var(--accentSoft);border-color:color-mix(in srgb,var(--accent) 40%,var(--border));color:var(--text);}
.propEditorLayout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:24px;align-items:start;}
.propEditorControls{margin:0;padding:26px;border:1px solid var(--border);border-radius:14px;min-width:0;background:var(--surface);}
.propEditorSection[hidden]{display:none;}
.propEditorSection h3{font:700 17px/1.4 var(--fontUI);margin:0 0 22px;}
.propEditorSection .field{display:block;min-width:0;margin-bottom:20px;}
.propEditorSection .fieldLabel{display:block;font-size:13px;font-weight:650;color:var(--text);margin-bottom:9px;}
.propEditorSection .input{width:100%;box-sizing:border-box;}
.propEditorSection textarea{resize:vertical;line-height:1.8;}
.propEditorSection .propHint{display:block;font-size:11px;line-height:1.7;}
.propEditorVisibility{padding-top:18px;border-top:1px solid var(--border);}
.propEditorSectionHead{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.propEditorSectionHead h3,.propEditorSectionHead h4{margin:0;}
.propEditorSectionHead{margin-bottom:16px;}
.propEditorScope{display:flex;gap:9px;align-items:flex-start;padding:12px 14px;border-radius:9px;background:var(--accentSoft);font-size:12px;line-height:1.7;}
.propEditorScope svg{width:17px;height:17px;flex:none;margin-top:2px;}
.propEditorControls .propFirmChoicesGrid{gap:20px;margin-top:22px;}
.propEditorControls .propFirmChoiceField{padding:14px;}
.propEditorControls .propFirmChoiceField legend{font-size:14px;font-weight:700;}
.propEditorControls .propChoiceOptions{grid-template-columns:minmax(0,1fr);max-height:300px;overflow:auto;padding:3px;}
.propChoiceSearch{margin-top:12px;}
.propChoiceRow{display:flex;gap:5px;min-width:0;align-items:stretch;}
.propChoiceRow[hidden]{display:none;}
.propChoiceRow>.propChoiceOption{flex:1;align-items:center;min-height:42px;}
.propChoiceRow .propChoiceTag{background:none;border:0;padding:0;}
.propChoiceIconEdit{flex:none;align-self:center;width:30px;height:32px;border:1px solid var(--border);border-radius:7px;background:transparent;color:var(--muted);cursor:pointer;display:grid;place-items:center;}
.propChoiceIconEdit:hover{color:var(--text);background:var(--surface2);}
.propChoiceIconEdit svg{width:14px;height:14px;}
.propIconManager{padding:18px;margin:18px 0;border:1px solid color-mix(in srgb,var(--accent) 40%,var(--border));border-radius:12px;background:var(--surface2);}
.propIconManager h4{font-size:14px;overflow-wrap:anywhere;}
.propIconLibrary{display:grid;grid-template-columns:repeat(auto-fill,minmax(76px,1fr));gap:8px;margin:16px 0;}
:where(.propIconPick){display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:72px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--muted);font:11px var(--fontUI);cursor:pointer;}
:where(.propIconPick):hover{color:var(--text);border-color:var(--borderLight);}
.propIconPick.active{color:var(--text);background:var(--accentSoft);border-color:var(--accent);}
.propIconPick svg{width:23px;height:23px;}
.propEditorPreview{position:sticky;top:115px;padding:20px;border:1px solid var(--border);border-radius:14px;background:color-mix(in srgb,var(--surface) 85%,transparent);min-width:0;}
.propEditorPreview summary{cursor:pointer;font-size:13px;font-weight:700;}
.propEditorPreview .propHint{margin:12px 0;font-size:11px;line-height:1.7;}
.propEditorPreviewBody{min-width:0;}
.propEditorPreview #propEditorPreviewBody{max-height:calc(100vh - 280px);overflow:auto;scrollbar-gutter:stable;padding-right:6px;}
.propEditorPreviewIdentity{display:flex;align-items:center;gap:12px;margin:16px 0;}
.propEditorPreviewIdentity b{overflow-wrap:anywhere;font-size:17px;}
.propEditorPreviewReview{font-size:12px;border-bottom:1px solid var(--border);padding-bottom:16px;}
.propEditorPreview .propFirmFactsGrid{grid-template-columns:minmax(0,1fr);}
.propEditorPreview .propFirmInfoFull{padding:0;border:0;background:none;}
.propEditorPreview .propFirmInfoFull>h3{display:none;}
.propEditorPreview .propFirmFact{padding:12px 0;border-bottom:1px solid var(--border);}
.propEditorPreview .propFirmFact dt{font-size:12px;font-weight:700;}
.propEditorPreviewUpdate{padding:10px 0;border-top:1px solid var(--border);font-size:12px;}
.propEditorPreviewUpdate small{color:var(--muted);}
.propEditorPreview h3{font-size:13px;margin:20px 0 10px;}
.propEditorConfirm{padding:20px;margin-bottom:18px;background:var(--surface);border:1px solid var(--accent);border-radius:12px;}
.propEditorConfirm h3{font-size:15px;margin:0 0 8px;}
.propEditorConfirm p{font-size:12px;color:var(--muted);}
.propEditorConfirm>div{display:flex;gap:10px;flex-wrap:wrap;}
.propFirmEditorPage #propEditorAlert:not(:empty){padding:14px 18px;margin-bottom:16px;color:var(--neg);background:var(--negSoft);border:1px solid color-mix(in srgb,var(--neg) 30%,var(--border));border-radius:10px;font-size:12px;line-height:1.7;}
.propEditorControls:disabled{opacity:.7;}
.propFirmEditorPage :where(button,input,select,textarea,summary):focus-visible{outline:2px solid var(--accent);outline-offset:3px;}
.propEditorSection .propUpdatesEditor{border:0;margin:0;}
.propEditorSection .propUpdatesEditorInner{padding:12px 0;}
.propEditorSection .propUpdateEditRow{padding:18px;}
.propEditorSection .propUpdateEditRow label{color:var(--text);font-weight:600;}
.propEditorSection .propReviewPreview{margin-bottom:24px;}
.propEditorSection .propReviewToolbar{flex-wrap:wrap;}
.propEditorSection .propReviewPreview .propRichText{max-height:280px;overflow:auto;}
.propEditorSection .propReviewInput{min-height:220px;}
.propEditorSection .propHint:empty{display:none;}
.propEditorTop button:disabled,.propChoiceIconEdit:disabled{cursor:wait;}
.propEditorSection .propChoiceCustom>div{flex-wrap:wrap;}
.propEditorSection .propChoiceCustom input{flex-basis:120px;}
.propEditorTop,.propIconPick,.propChoiceRow{transform:none;filter:none;}
.propEditorSection .propChoicePicker>summary{align-items:flex-start;}
.propEditorSection .propChoiceSummary{font-size:11px;}
.propEditorSection .propChoiceCount{padding-top:3px;}
.propEditorControls .propRow{gap:20px;}
.propEditorControls .propRow>.field{min-width:0;}
.propEditorSection .propReviewPreviewLabel{color:var(--muted);}
.propEditorSection .propReviewEditorHead .fieldLabel{margin-bottom:0;}
.propEditorTop .btn{white-space:nowrap;}
.propEditorConfirm [data-action="prop-editor-discard"]{color:var(--neg);}
.propEditorSection .propIconManager .field{margin-bottom:14px;}
.propEditorSection .propIconManager .propHint{margin-top:8px;}
.propEditorSection .propChoiceOption input{margin-top:0;}
.propEditorPreview .propRichText{overflow-wrap:anywhere;}
.propEditorPreview .propRecommendTags{gap:5px;}
.propEditorPreview .propFirmFact dd{margin:7px 0 0;}
.propEditorSection .propUpdateCount{white-space:nowrap;}
.propEditorSection .propChoiceIconEdit:focus-visible{outline-offset:1px;}
.propEditorSection .propChoicePicker .input{font-size:12px;}
.propEditorSection .propChoiceTag{line-height:1.5;}
.propEditorTop .propEditorSave{max-width:52%;}
.propEditorTop .propEditorSave>span{overflow-wrap:anywhere;}
.propEditorSection .propIconLibrary button{padding:8px 4px;}
.propEditorSection .propIconLibrary span{text-align:center;line-height:1.4;}
.propEditorSection .propChoiceCustomLabel{font-weight:600;}
.propEditorSection .propEditorScope+.propHint{color:var(--muted);}
.propEditorPreview .propLogo{flex:none;}
[data-layout="modern"] .propEditorPreview .propFirmInfoFull{padding:0;margin:0;border:0;background:none;}
[data-layout="modern"] .propEditorPreview .propFirmFactsGrid{grid-template-columns:minmax(0,1fr);gap:4px;}
[data-layout="modern"] .propEditorPreview .propFirmFact dt{font-size:12px;}
.propEditorControls :is(input,button,textarea,select,summary),.propIconManager,.propChoiceRow{scroll-margin-top:calc(var(--preview-bar-height,0px) + 150px);scroll-margin-bottom:20px;}
.propEditorFactsPreview.choicesOnly [data-prop-info-field="notes"],.propEditorFactsPreview.notesOnly [data-prop-info-field]:not([data-prop-info-field="notes"]){display:none;}
.propFirmEditorPage [hidden]{display:none!important;}
@media(max-width:1180px){.propEditorLayout{grid-template-columns:minmax(0,1fr) 280px;gap:16px;}.propEditorControls{padding:20px;}.propEditorControls .propFirmChoicesGrid{grid-template-columns:minmax(0,1fr);}.propEditorPreview{padding:16px;}}
@media(max-width:900px){.propEditorLayout{grid-template-columns:minmax(0,1fr);}.propEditorPreview{position:static;grid-row:1;}.propEditorPreview #propEditorPreviewBody{max-height:250px;}.propEditorControls .propFirmChoicesGrid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);}.propEditorTop{gap:12px;padding:14px;}.propEditorTop h2{font-size:20px;}.propEditorTop h2 span{display:block;margin:4px 0 0;font-size:13px;}}
@media(max-width:580px){.propEditorControls .propFirmChoicesGrid{grid-template-columns:minmax(0,1fr);}.propEditorControls{padding:16px;}.propEditorTop{align-items:flex-start;}.propEditorTop .propEditorSave{gap:8px;max-width:48%;}.propEditorControls .propRow{flex-direction:column;gap:0;}.propEditorSectionHead{align-items:flex-start;}.propEditorTabs{gap:3px;}.propEditorTabs .btn{font-size:11px;padding:8px 10px;}.propIconLibrary{grid-template-columns:repeat(4,minmax(0,1fr));}.propEditorScope{font-size:11px;}}

/* 富文本配置控件；均位于公司编辑器，不改变其他表单。 */
.propInlineIcon{display:inline-flex;width:1.15em;height:1.15em;vertical-align:-.18em;align-items:center;justify-content:center;}
.propInlineIcon>svg{display:block;width:100%;height:100%;}
.propContentToolbar{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:12px 0 9px;}
.propContentToolbar>label{display:flex!important;align-items:center;gap:6px;margin:0!important;font-size:11px;}
.propContentToolbar select{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:6px;max-width:140px;}
.propContentToolbar .btn{min-height:31px;}
.propDesignSection{border-top:1px solid var(--border);padding-top:24px;margin-top:24px;}
.propRatingsEditor{border-top:1px solid var(--border);padding-top:20px;margin-top:20px;}
.propRatingsEditor>h3{margin:0 0 6px;}
.propRatingDate{display:flex;align-items:flex-end;gap:8px;margin-bottom:20px;}
.propRatingDate>.field{flex:1;min-width:0;margin-bottom:0;}
.propRatingDate>.btn{min-height:40px;}
.propRatingStale{color:var(--neg);}
.propDesignColors{min-width:0;margin:16px 0;padding:14px;border:1px solid var(--border);border-radius:10px;}
.propDesignColors legend{font-size:12px;font-weight:650;padding:0 6px;}
.propDesignPreset{display:grid!important;grid-template-columns:auto minmax(120px,1fr);align-items:center;gap:12px;font-size:12px;}
.propDesignSwatches{display:grid;grid-template-columns:repeat(auto-fit,minmax(125px,1fr));gap:12px;margin:14px 0;}
.propDesignSwatches label{display:grid!important;grid-template-columns:36px 1fr;gap:2px 8px;align-items:center;margin:0!important;font-size:12px;min-width:0;}
.propDesignSwatches input[type="color"]{grid-row:span 2;width:36px;height:34px;padding:2px;border:1px solid var(--border);border-radius:6px;cursor:pointer;background:var(--surface);}
.propDesignSwatches output{font:10px var(--fontMono);color:var(--muted);}
.propDesignColors>.propHint{font-size:11px;line-height:1.6;}
.propUpdateDesign{margin-top:16px;}
.propCalloutEditors>h4{font-size:13px;margin:20px 0 8px;}
.propCalloutEditor{border:1px solid var(--border);border-radius:10px;margin:12px 0;background:var(--surface);}
.propCalloutEditor>summary{padding:12px;cursor:pointer;font-size:12px;font-weight:650;}
.propCalloutEditorBody{padding:0 14px 14px;}
.propCalloutEditorBody code{overflow-wrap:anywhere;font-size:10px;}
.propCalloutEditorBody .propDesignColors{background:var(--surface2);}
.propCalloutEditorBody [data-action="prop-content-remove-callout"]{color:var(--neg);}
.propUpdateDesign .propDesignColors{margin-bottom:14px;}
.propContentToolbar :is(button,select):focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.propEditorPreview .propKeySentence,.propEditorPreview .propCallout{max-width:100%;}
.propEditorPreviewReview[data-prop-copy-protected]{margin-bottom:18px;}
.propCalloutEditor textarea,.propDesignSection textarea{white-space:pre-wrap;}
.propUpdateDesign .fieldLabel{margin-top:10px;}
.propDesignSection>.propCheck{margin-bottom:12px;}
.propDesignColors .input{margin:0;}
.propCalloutEditorBody .propContentToolbar{margin-top:16px;}
.propContentToolbar[hidden]{display:none;}
.propDesignSection:empty{display:none;}
.propDesignSwatches span{font-weight:500;}
.propDesignColors .btn{margin-top:4px;}
@media(max-width:580px){.propDesignPreset{grid-template-columns:minmax(0,1fr);gap:5px;}.propDesignSwatches{grid-template-columns:1fr 1fr;}.propContentToolbar{gap:6px;}.propContentToolbar .btn{font-size:11px;}.propDesignColors{padding:10px;}.propCalloutEditorBody{padding:0 10px 10px;}}
.propUpdatesPreviewControl{padding:14px;margin:0 0 18px;border:1px solid var(--border);border-radius:10px;background:var(--surface2);}
.propUpdatesPreviewControl>label{display:block;font-size:12px;font-weight:650;margin-bottom:8px;color:var(--text);}
.propUpdatesPreviewControl select{max-width:240px;}
.propUpdatesPreviewControl .propHint{margin:8px 0 0;}

/* Private profile avatar / Attachment-inspired single-image control. */
.acctAvatar[data-avatar-owner]{position:relative;overflow:hidden;}
.appSidebarAvatar[data-avatar-owner]{color:var(--text);}
.acctAvatar.profileHeaderAvatar{width:24px;height:24px;font-size:11px;border:0;}
.acctAvatar [data-avatar-fallback][hidden]{display:none;}
.acctAvatar img[data-profile-avatar]{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;border-radius:inherit;}
.profileAvatarAttachment{position:relative;isolation:isolate;display:grid;grid-template-columns:64px minmax(0,1fr) 36px;gap:12px;align-items:center;min-height:96px;padding:12px;border:1px dashed var(--borderLight);border-radius:14px;background:var(--surface2);overflow:hidden;}
:where(.profileAvatarAttachment):hover,:where(.profileAvatarAttachment).dragOver{border-color:var(--accent);background:var(--accentSoft);}
.profileAvatarAttachment[data-state="error"]{border-color:var(--neg);}
.profileAvatarMedia{display:flex;align-items:center;justify-content:center;overflow:hidden;width:64px;height:64px;border:1px solid var(--border);border-radius:15px;background:var(--surface);color:var(--muted);font:600 26px var(--fontUI);pointer-events:none;}
.profileAvatarMedia img{display:block;width:100%;height:100%;object-fit:cover;}
.profileAvatarContent{display:flex;flex-direction:column;gap:6px;min-width:0;pointer-events:none;}
.profileAvatarTitle{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;color:var(--text);}
.profileAvatarDescription{font-size:11.5px;color:var(--muted);line-height:1.6;overflow-wrap:anywhere;}
.profileAvatarAttachment[data-state="error"] .profileAvatarDescription{color:var(--neg);}
.profileAvatarTrigger{position:absolute;inset:0;z-index:1;border:0;border-radius:inherit;background:transparent;cursor:pointer;}
.profileAvatarTrigger:focus-visible{outline:2px solid var(--accent);outline-offset:-3px;}
.profileAvatarTrigger:disabled{cursor:default;}
.profileAvatarActions{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;gap:4px;}
.profileAvatarActions .iconBtn{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:10px;background:var(--surface);}
.profileAvatarActions .iconBtn svg{width:16px;height:16px;}
.profileAvatarActions .iconBtn:disabled{opacity:.4;cursor:default;}
.profileAvatarBelow{display:flex;align-items:baseline;gap:6px 12px;flex-wrap:wrap;margin-top:8px;font-size:11px;line-height:1.6;color:var(--muted);}
.profileAvatarBelow>span{flex:1 1 180px;}
.profileAvatarBelow button{position:relative;border:0;background:none;color:var(--accent);font:inherit;text-decoration:underline;text-underline-offset:3px;padding:3px 0;cursor:pointer;}
.profileAvatarBelow button:disabled{opacity:.4;cursor:default;}
.profileAvatarWarning{font-size:11px;line-height:1.6;color:var(--muted);margin:8px 0 0;}
.profileAvatarSpinner{position:absolute;z-index:2;left:8px;top:8px;width:14px;height:14px;border-radius:50%;border:2px solid var(--border);border-top-color:var(--accent);background:var(--surface);animation:avatarSpin .85s linear infinite;pointer-events:none;}
.profileAvatarAttachment[aria-busy="true"]::after{content:"";position:absolute;bottom:0;left:0;width:40%;height:2px;background:var(--accent);animation:avatarProgress 1.3s ease-in-out infinite;pointer-events:none;}
.profileStatusError,.profileStatusSuccess{font-size:12.5px;margin-bottom:10px;line-height:1.6;}
.profileStatusError{color:var(--neg);}.profileStatusSuccess{color:var(--pos);}
.profileAvatarHint{font-size:12px;color:var(--muted);}
.profileAvatarAttachment .iconBtn:active{transform:none;}
@keyframes avatarSpin{to{transform:rotate(360deg);}}
@keyframes avatarProgress{from{transform:translateX(-110%);}to{transform:translateX(360%);}}
@media(max-width:480px){.profileAvatarAttachment{grid-template-columns:56px minmax(0,1fr) 36px;gap:9px;padding:10px;}.profileAvatarMedia{width:56px;height:56px;}.profileAvatarDescription{font-size:11px;}}
@media(pointer:coarse){.profileAvatarAttachment{grid-template-columns:56px minmax(0,1fr) 44px;}.profileAvatarActions .iconBtn{width:44px;height:44px;}}
@media(prefers-reduced-motion:reduce){.profileAvatarSpinner,.profileAvatarAttachment[aria-busy="true"]::after{animation:none;}}

/* Catalog visibility controls: additive, using the existing layout/theme tokens. */
.propLayerModalFields{border:0;padding:0;margin:0;min-width:0;}
 .propLayerToolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;padding:14px 16px;margin:0 0 18px;border:1px solid var(--border);border-radius:var(--r12);background:var(--surface);}
 .propLayerToolbar>div:first-child{display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-width:0;}.propLayerToolbar strong{font-size:12px;}.propLayerToolbar p{flex-basis:100%;margin:0;color:var(--muted);font-size:12px;line-height:1.6;}
 .propLayerTools,.propLayerActions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}.propLayerActions{margin:10px 0;}.propLayerActions>.btn{margin-left:auto;}
 .propLayerBadge{display:inline-flex;align-items:center;flex-shrink:0;border:1px solid var(--border);border-radius:99px;padding:3px 8px;font:600 11px/1.45 var(--fontUI);color:var(--muted);background:var(--surface2);}.propLayerBadge-private{color:var(--accent);background:var(--accentSoft);}.propLayerBadge-admins{color:var(--info);background:var(--infoSoft);}
 .propLayerChoices{display:grid;gap:12px;}.propLayerChoice{display:flex;align-items:flex-start;gap:12px;padding:16px;text-align:left;border:1px solid var(--border);border-radius:var(--r10);color:var(--text);background:var(--surface2);font:inherit;cursor:pointer;}.propLayerChoice>span:last-child{font-size:12px;line-height:1.6;}.propLayerChoice:where(:hover,:focus-visible){border-color:var(--accent);}.propLayerChoice:disabled{opacity:.5;cursor:default;}
 .propLayerEditorScope{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:12px 0;font-size:12px;line-height:1.6;color:var(--muted);}
 .propLayerOverrides{margin:12px 0 18px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r8);font-size:12px;}.propLayerOverrides summary{cursor:pointer;color:var(--muted);}.propLayerOverrides>div{display:flex;justify-content:space-between;align-items:center;gap:10px;padding-top:8px;}.propLayerOverrides code{min-width:0;overflow-wrap:anywhere;}.propLayerOverrides .btn{flex-shrink:0;}
.propLayerField{display:flex;flex-direction:column;gap:3px;min-width:0;}.propLayerField code{font-size:11px;color:var(--muted);}
.propLayerList{display:grid;gap:10px;}.propLayerList article{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px;border:1px solid var(--border);border-radius:var(--r8);}.propLayerList strong{flex:1;min-width:140px;overflow-wrap:anywhere;}.propLayerList article>span:not(.propLayerBadge){color:var(--muted);font-size:12px;min-width:0;overflow-wrap:anywhere;}
 .propLayerLeavePrompt{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px;}.propLayerLeavePrompt p{flex-basis:100%;margin:0;}
@media(max-width:600px){.propLayerToolbar,.propLayerChoice{padding:12px;}.propLayerChoice{flex-direction:column;gap:8px;}.propLayerTools{width:100%;}.propLayerList article>span:not(.propLayerBadge){flex-basis:100%;}.propLayerOverrides>div{flex-wrap:wrap;}.propLayerActions .btn,.propLayerTools .btn{min-height:36px;}}

/* Standalone owner catalog; never part of the public recommendation grid. */
.propPersonalSection{margin-top:28px;}.propPersonalSection .propPanelHead{flex-wrap:wrap;gap:12px;}.propPersonalGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:16px;margin-top:16px;}.propPersonalCard{border:1px solid var(--border);border-radius:var(--r12);padding:16px;min-width:0;background:var(--surface);}.propPersonalCard strong{min-width:0;overflow-wrap:anywhere;}.propPersonalCard .propFirmHead{flex-wrap:wrap;gap:10px;}.propPersonalDetail>.propLayerTools{margin:12px 0;}.propPersonalSection .propHint{margin:0;}
@media(max-width:600px){.propPersonalSection .propLayerTools .btn,.propPersonalCard .btn{min-height:44px;}.propPersonalCard{padding:12px;}}
