/* ============================================================
   律衡 LexFlow · 后台设计系统
   ⚠ 本文件只服务后台（layouts/app.blade.php、auth/* 登录页）。
   官网前台请改 public/css/site.css —— 前台不加载本文件。
   前后台都会渲染的组件（表单控件、验证码框、徽标、页签、面包屑）在 shared.css。
   历史上两边共用一份皮肤，造成过「新文件只覆盖一半属性、旧深色规则静默接管」
   的事故（封面胶囊深蓝字压深蓝半透明底 ≈2:1）。2026-11 按归属彻底分开。
   ============================================================ */
:root{
  --ink:#12202e; --ink-2:#1c2f42; --ink-3:#28405a;
  --gold:#b08d57; --gold-soft:#f3ecdf;
  --gold-deep:#9c7a45; --gold-22:rgba(176,141,87,.22); --gold-06:rgba(176,141,87,.06);
  /* 实心块与文字色：由 themeConfig() 按对比度派生，这里只做未注入时的兜底 */
  --gold-solid:#b08d57; --on-gold:#14181f;
  --gold-hover:#a07f4c; --on-gold-hover:#14181f;
  --gold-text:#8a6a3c; --gold-text-2:#9c7a45;
  --ring:rgba(40,64,90,.08); --ink-06:rgba(18,32,46,.06);
  --bg:#f5f6f8; --card:#ffffff;
  --line:#e5e8ee; --line-2:#eef1f5;
  --text:#1c2733; --muted:#6b7787; --faint:#7f8894;  /* faint 对白 3.6:1，够内部工具用；对外文案用 --muted */
  /* 前台灰阶同名变量（app.css 单独加载时也要可用），值与 site.css 一致 */
  --s-meta:#67717f;
  --blue:#2f6fed; --blue-soft:#eaf1ff;
  --green:#0f9d58; --green-soft:#e7f6ee;
  --amber:#b7791f; --amber-soft:#fdf4e3;
  --red:#d93025; --red-soft:#fdecea;
  --purple:#6b46c1; --purple-soft:#f1ecfb;
  --teal:#0f8b8d; --teal-soft:#e5f5f5;
  --indigo:#4338ca; --indigo-soft:#ecebfb;
  /* 兼容别名。页面里长期写着 --red-bg / --amber-bg / --line-soft / --gold-text-deep / --ink2，
     但 app.css 从没定义过这几个名字 —— 引用处一律静默变透明（第 77 条踩过）。
     与其逐页去改，不如在这里一次性补齐。 */
  --red-bg:var(--red-soft); --green-bg:var(--green-soft);
  --amber-bg:var(--amber-soft); --blue-bg:var(--blue-soft);
  --purple-bg:var(--purple-soft); --teal-bg:var(--teal-soft);
  --line-soft:var(--line-2);
  --gold-text-deep:#7a5c33;
  --ink2:var(--ink-2);
  --radius:10px; --radius-sm:6px;
  --shadow:0 1px 2px rgba(18,32,46,.06),0 8px 24px -12px rgba(18,32,46,.12);
  --shadow-sm:0 1px 2px rgba(18,32,46,.05);
  --sidebar:236px;
  /* 面板底色：此前只有 var(--panel,#fff) 这种带兜底的写法，变量本身从没定义过。
     自定义组件（人员选择器、权限矩阵）直接 var(--surface,#fff) 就变成透明，字叠在表格上。 */
  --panel:#ffffff; --surface:#ffffff;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:var(--bg); color:var(--text); font-size:14px; line-height:1.62;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
img{max-width:100%}
h1,h2,h3,h4{margin:0 0 .5em;font-weight:600;line-height:1.35}
h1{font-size:24px} h2{font-size:19px} h3{font-size:16px}
p{margin:0 0 1em}
.serif{font-family:"Noto Serif SC","Songti SC","SimSun",serif}
.muted{color:var(--muted)} .faint{color:var(--faint)}
.small{font-size:12px} .tiny{font-size:11px}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.92em}
.nowrap{white-space:nowrap}
.text-right{text-align:right} .text-center{text-align:center}
.mt0{margin-top:0}.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt24{margin-top:24px}
.mb0{margin-bottom:0}.mb8{margin-bottom:8px}.mb16{margin-bottom:16px}.mb24{margin-bottom:24px}
.flex{display:flex} .between{display:flex;justify-content:space-between;align-items:center}
.items-center{align-items:center} .items-start{align-items:flex-start} .items-end{align-items:flex-end}
.gap4{gap:4px}.gap8{gap:8px}.gap12{gap:12px}.gap16{gap:16px}.gap24{gap:24px}
/* 小间距：卡片头里「标题 + 说明」这类贴得很近的场合用得最多，缺了就会粘在一起 */
.gap2{gap:2px}.gap6{gap:6px}.gap10{gap:10px}
.wrap{flex-wrap:wrap} .grow{flex:1;min-width:0}
.grid{display:grid;gap:16px}
.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}
.grid-2-1{grid-template-columns:2fr 1fr}
.grid-1-2{grid-template-columns:1fr 2fr}
@media(max-width:1100px){.grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3,.grid-2-1,.grid-1-2{grid-template-columns:1fr}}
@media(max-width:720px){.grid-2,.grid-4{grid-template-columns:1fr}}

/* ---------------- 侧边栏 / 顶栏 ---------------- */
.shell{display:flex;min-height:calc(100vh / var(--z,1))}
.sidebar{
  width:var(--sidebar);flex:0 0 var(--sidebar);background:var(--ink);color:#cfd8e3;
  display:flex;flex-direction:column;position:sticky;top:0;height:calc(100vh / var(--z,1));z-index:40;
}
.sidebar .brand{padding:20px 20px 16px;border-bottom:1px solid rgba(255,255,255,.07)}
.sidebar .brand b{display:block;color:#fff;font-size:17px;letter-spacing:.06em}
.sidebar .brand span{font-size:11px;color:#8fa1b5;letter-spacing:.14em;text-transform:uppercase}
.nav{flex:1;overflow-y:auto;padding:10px 10px 24px}
.nav::-webkit-scrollbar{width:0}
.nav-group{margin-top:12px}
.nav-group>p{font-size:11px;color:#6f8199;letter-spacing:.12em;margin:8px 10px 4px;text-transform:uppercase}
.nav a{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:7px;color:#c3cede;font-size:13.5px;transition:.15s}
.nav a:hover{background:rgba(255,255,255,.06);color:#fff}
.nav a.on{background:linear-gradient(90deg,var(--gold-22),var(--gold-06));color:#fff;box-shadow:inset 2px 0 0 var(--gold)}
.nav a .ico{width:16px;height:16px;flex:0 0 16px;opacity:.85}
.nav a .count{margin-left:auto;background:var(--red);color:#fff;font-size:10px;border-radius:9px;padding:0 6px;line-height:16px}
.sidebar .side-foot{padding:12px 16px;border-top:1px solid rgba(255,255,255,.07);font-size:11px;color:#7f90a6}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{
  height:60px;background:rgba(255,255,255,.9);backdrop-filter:saturate(1.4) blur(8px);
  border-bottom:1px solid var(--line);display:flex;align-items:center;gap:14px;padding:0 24px;position:sticky;top:0;z-index:30;
}
.topbar .search{flex:1;max-width:420px;position:relative}
.topbar .search input{width:100%;padding:8px 12px 8px 32px;border:1px solid var(--line);border-radius:8px;background:#f8f9fb;font-size:13px}
.topbar .search svg{position:absolute;left:10px;top:9px;color:var(--faint)}
.topbar .spacer{flex:1}
.icon-btn{position:relative;width:34px;height:34px;border-radius:8px;display:grid;place-items:center;color:var(--muted);border:1px solid transparent}
.icon-btn:hover{background:#f2f4f7;color:var(--text)}
.icon-btn .num{position:absolute;top:-3px;right:-4px;min-width:17px;height:17px;padding:0 4px;background:var(--red);color:#fff;font-size:10px;font-weight:700;line-height:17px;text-align:center;border-radius:999px;border:1.5px solid #fff;box-sizing:content-box}
.notif-row.unread{background:#fcfdff}
.notif-link:hover{color:var(--blue)!important;text-decoration:underline}
.user-chip{display:flex;align-items:center;gap:9px;padding:4px 8px 4px 4px;border-radius:24px;border:1px solid var(--line)}
.user-chip:hover{background:#f8f9fb}
.avatar{width:30px;height:30px;border-radius:50%;background:var(--ink-2);color:#fff;display:grid;place-items:center;font-size:12px;flex:0 0 30px}
.avatar.lg{width:52px;height:52px;font-size:18px}
.avatar.sm{width:24px;height:24px;font-size:11px;flex:0 0 24px}
.content{padding:22px 24px 48px;flex:1}

/* ---------------- 卡片 ---------------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm)}
.card-hd{padding:14px 18px;border-bottom:1px solid var(--line-2);display:flex;align-items:center;justify-content:space-between;gap:12px}
.card-hd h2,.card-hd h3{margin:0;font-size:15px}
.card-bd{padding:18px}
.card-bd.tight{padding:0}
.card-ft{padding:12px 18px;border-top:1px solid var(--line-2);background:#fafbfc;border-radius:0 0 var(--radius) var(--radius)}
.section-title{display:flex;align-items:center;gap:8px;margin:0 0 12px;font-size:13px;color:var(--muted);letter-spacing:.04em}
.section-title:before{content:"";width:3px;height:12px;background:var(--gold);border-radius:2px}

/* ---------------- 页头 ---------------- */
.page-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:18px;flex-wrap:wrap}
.page-hd h1{font-size:22px;margin:0 0 4px}
.page-hd .sub{color:var(--muted);font-size:13px}
.page-actions{display:flex;gap:8px;flex-wrap:wrap}

/* ---------------- 按钮 ---------------- */
.btn{
  display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;border:1px solid var(--line);
  background:#fff;color:var(--text);font-size:13px;font-weight:500;cursor:pointer;transition:.15s;white-space:nowrap;
  font-family:inherit;line-height:1.4;
}
.btn:hover{border-color:#cfd6e0;background:#fafbfc}
.btn-primary{background:var(--ink);border-color:var(--ink);color:#fff}
.btn-primary:hover{background:var(--ink-3);border-color:var(--ink-3)}
.btn-gold{background:var(--gold-solid);border-color:var(--gold-solid);color:var(--on-gold)}
.btn-gold:hover{background:var(--gold-hover);border-color:var(--gold-hover);color:var(--on-gold-hover)}
.btn-ghost{background:transparent;border-color:transparent;color:var(--muted)}
.btn-ghost:hover{background:#f2f4f7;color:var(--text)}
.btn-danger{color:var(--red);border-color:#f3c9c4;background:#fff}
.btn-danger:hover{background:var(--red-soft)}
.btn-sm{padding:4px 10px;font-size:12px;border-radius:6px}
.btn-xs{padding:2px 7px;font-size:11px;border-radius:5px}
.btn-block{width:100%;justify-content:center}
/* 次要但必须被看见的动作：用主题色描边 + 极浅底色。
   比灰边按钮重、比实心主按钮轻 —— 一页里出现两个实心按钮就没有主次了 */
.btn-accent{border-color:var(--gold);color:var(--gold-text-deep);background:var(--gold-06)}
.btn-accent:hover{background:var(--gold-soft);border-color:var(--gold);color:var(--gold-text-deep)}
.btn[disabled]{opacity:.55;cursor:not-allowed}

/* ---------------- 统计卡 ---------------- */
.stat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;position:relative;overflow:hidden}
.stat .label{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:6px}
.stat .value{font-size:26px;font-weight:600;letter-spacing:-.02em;margin:6px 0 2px;font-variant-numeric:tabular-nums}
.stat .value small{font-size:13px;font-weight:400;color:var(--muted);margin-left:3px}
.stat .foot{font-size:12px;color:var(--faint)}
.stat .mark{position:absolute;right:14px;top:14px;width:34px;height:34px;border-radius:9px;display:grid;place-items:center;background:var(--blue-soft);color:var(--blue)}
.stat.gold .mark{background:var(--gold-soft);color:var(--gold)}
.stat.green .mark{background:var(--green-soft);color:var(--green)}
.stat.amber .mark{background:var(--amber-soft);color:var(--amber)}
.stat.red .mark{background:var(--red-soft);color:var(--red)}
.stat.teal .mark{background:var(--teal-soft);color:var(--teal)}
.dot-tag{display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor}

/* ---------------- 表格 ---------------- */
.table-wrap{overflow-x:auto}
table.table{width:100%;border-collapse:collapse;font-size:13.5px}
/* 放大字号后内容区变窄，auto 布局会把「成员」「客户」这类列压到一个字宽、竖着排。
   只在放大状态（html[data-zlg]，由 js/zoom.js 打）给内容自然宽度做下限：
   装不下就让 .table-wrap 横向滚，别把列挤成竖排。100% 时行为一点不变。 */
html[data-zlg] table.table{min-width:max-content}
.table th{
  text-align:left;font-weight:500;color:var(--muted);font-size:12px;letter-spacing:.02em;
  padding:10px 14px;border-bottom:1px solid var(--line);background:#fafbfc;white-space:nowrap;
}
.table td{padding:11px 14px;border-bottom:1px solid var(--line-2);vertical-align:middle}
.table tbody tr:hover{background:#fafbfd}
.table tbody tr:last-child td{border-bottom:0}
.table .main-cell{font-weight:500;color:var(--text)}
.table .main-cell a:hover{color:var(--blue)}
.table .sub{font-size:12px;color:var(--faint);margin-top:1px}
.table .num{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.table.compact td{padding:7px 10px}
.table.compact th{padding:7px 10px}

/* ---------------- 进度 ---------------- */
.progress{height:6px;border-radius:6px;background:#eef1f5;overflow:hidden}
.progress>i{display:block;height:100%;background:linear-gradient(90deg,var(--ink-3),var(--gold));border-radius:6px}
.progress.sm{height:4px}

/* ---------------- 时间线 ---------------- */
.timeline{position:relative;padding-left:22px}
.timeline:before{content:"";position:absolute;left:6px;top:6px;bottom:6px;width:1px;background:var(--line)}
.tl-item{position:relative;padding:0 0 18px}
.tl-item:before{content:"";position:absolute;left:-20px;top:5px;width:9px;height:9px;border-radius:50%;background:#fff;border:2px solid var(--gold)}
.tl-item.done:before{background:var(--green);border-color:var(--green)}
.tl-item .tl-time{font-size:11.5px;color:var(--faint)}
.tl-item .tl-body{margin-top:2px}

/* ---------------- 流程节点 ---------------- */
.phase{margin-bottom:22px}
.phase-hd{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.phase-hd .idx{width:22px;height:22px;border-radius:6px;background:var(--ink);color:#fff;font-size:11px;display:grid;place-items:center}
.phase-hd h3{margin:0;font-size:14.5px}
.phase-hd .count{font-size:12px;color:var(--faint)}
.steps{display:flex;flex-direction:column;gap:1px;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.step{display:flex;gap:12px;padding:11px 14px;background:#fff;border-bottom:1px solid var(--line-2);align-items:flex-start}
.step:last-child{border-bottom:0}
.step:hover{background:#fbfcfd}
.step .tick{
  width:18px;height:18px;border-radius:50%;border:1.5px solid #cfd6e0;flex:0 0 18px;margin-top:2px;
  display:grid;place-items:center;color:#fff;font-size:11px;background:#fff;
}
.step.done .tick{background:var(--green);border-color:var(--green)}
.step.done .name{color:var(--muted);text-decoration:none}
.step .name{font-size:13.5px;font-weight:500}
.step .meta{font-size:11.5px;color:var(--faint);margin-top:2px;display:flex;gap:10px;flex-wrap:wrap}
.step .ops{margin-left:auto;display:flex;gap:6px;align-items:center}
.step.reserved{background:#fdfcf9}
.step.reserved .name:after{content:"预留";font-size:10px;color:var(--amber);background:var(--amber-soft);padding:1px 5px;border-radius:4px;margin-left:6px;font-weight:400}

/* ---------------- 键值 ---------------- */
.kv{display:grid;grid-template-columns:96px 1fr;gap:9px 12px;font-size:13.5px}
.kv dt{color:var(--muted);font-size:12.5px}
.kv dd{margin:0;word-break:break-word}
.kv.two{grid-template-columns:96px 1fr 96px 1fr}

/* ---------------- 提示 ---------------- */
.alert{padding:11px 14px;border-radius:8px;font-size:13px;margin-bottom:16px;border:1px solid}
.alert-ok{background:var(--green-soft);border-color:#c9ead8;color:#0b6e3f}
.alert-err{background:var(--red-soft);border-color:#f5cfca;color:#a3231b}
.alert-info{background:var(--blue-soft);border-color:#d3e2ff;color:#1f4fa8}
.alert-warn{background:var(--amber-soft);border-color:#f3e0bb;color:#8a5c14}

/* ---------------- 模态 ---------------- */
dialog.modal{border:0;border-radius:12px;padding:0;box-shadow:0 24px 64px -16px rgba(18,32,46,.4);width:min(560px, calc(92vw / var(--z,1)))}
dialog.modal::backdrop{background:rgba(18,32,46,.42);backdrop-filter:blur(2px)}
dialog.modal .m-hd{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}
dialog.modal .m-bd{padding:18px 20px;max-height:calc(70vh / var(--z,1));overflow:auto}
dialog.modal .m-ft{padding:12px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px;background:#fafbfc}

/* ---------------- 图表 ---------------- */
.bars{display:flex;align-items:flex-end;gap:10px;height:140px;padding-top:8px}
.bars .bar{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:6px;height:100%}
.bars .bar .col{width:100%;max-width:34px;background:linear-gradient(180deg,var(--ink-3),var(--ink));border-radius:4px 4px 0 0;min-height:3px;position:relative}
.bars .bar .col.gold{background:linear-gradient(180deg,color-mix(in srgb,var(--gold) 55%,#fff),var(--gold))}
.bars .bar .cap{font-size:10.5px;color:var(--faint);white-space:nowrap}
.donut{width:120px;height:120px;border-radius:50%;flex:0 0 120px}
.legend{display:flex;flex-direction:column;gap:6px;font-size:12.5px}
.legend i{width:8px;height:8px;border-radius:2px;display:inline-block;margin-right:6px}

/* ---------------- 打印 ---------------- */
.print-toolbar{
  position:sticky;top:0;z-index:20;background:var(--ink);color:#fff;padding:10px 20px;
  display:flex;align-items:center;gap:12px;
}
.print-toolbar a,.print-toolbar button{color:#fff;border-color:rgba(255,255,255,.25);background:transparent}
.print-toolbar .btn:hover{background:rgba(255,255,255,.1)}
.paper{
  width:210mm;min-height:297mm;margin:18px auto;background:#fff;padding:25mm 20mm 20mm 25mm;
  box-shadow:0 2px 18px rgba(0,0,0,.12);color:#000;font-family:"SimSun","Songti SC",serif;
}
.paper .doc-title{font-family:"SimHei","Heiti SC",sans-serif;font-size:22pt;text-align:center;letter-spacing:4px;margin:0 0 6mm}
.paper .doc-sub{text-align:center;font-size:11pt;margin-bottom:10mm;color:#333}
.paper table{width:100%;border-collapse:collapse;font-size:10.5pt}
.paper table th,.paper table td{border:1px solid #000;padding:2.2mm 2.5mm;line-height:1.7;vertical-align:top}
.paper table th{background:#f2f2f2;font-weight:normal;text-align:center}
.paper .sig{display:flex;justify-content:flex-end;gap:16mm;margin-top:14mm;font-size:11pt}
.screen-bg{background:#e9ecf1}
.paper .cover-line{border-bottom:1px solid #000;display:inline-block;min-width:60mm}
.paper .pg-break{page-break-after:always}
.paper .catalog-no{width:12mm;text-align:center}
.paper .catalog-pg{width:18mm;text-align:center}
@media print{
  @page{size:A4;margin:0}
  body{background:#fff}
  /* backbar 是每页顶部的「返回上一页 / 回到 XX」，只在屏幕上指路；
     打 OA 信息表这类整页表时它会被打进第一张纸的顶上，一起印出两个按钮 */
  .sidebar,.topbar,.print-toolbar,.backbar,.no-print{display:none!important}
  .content{padding:0}
  .paper{box-shadow:none;margin:0;width:auto;min-height:auto;padding:25mm 20mm 20mm 25mm}
  /* 一张纸一页：封面、审批表、目录各起一页。
     写在 .paper 上而不是只靠 .pg-break —— 元素高度恰好顶到页底时，
     Chrome 会把那张纸的 break-after 吃掉，两张纸挤在同一页（封面底下接着
     立案审批表的抬头）。最后一张不分页，否则 PDF 末尾多一张空白纸。 */
  .paper{break-after:page;page-break-after:always}
  .paper:last-of-type{break-after:auto;page-break-after:auto}
  a{color:#000;text-decoration:none}}

/* ============================================================
   官网内容管理（CMS 列表页）
   ============================================================ */
.cms-subnav{display:inline-flex;gap:2px;background:#eaeef4;padding:3px;border-radius:10px;margin-bottom:16px;max-width:100%;overflow-x:auto}
.cms-subnav a{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:8px;font-size:13px;color:var(--muted);white-space:nowrap;transition:.15s}
.cms-subnav a:hover{color:var(--text)}
.cms-subnav a.on{background:#fff;color:var(--ink);font-weight:600;box-shadow:0 1px 3px rgba(18,32,46,.1)}
.cms-subnav .n{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums;background:rgba(18,32,46,.05);border-radius:20px;padding:0 6px;line-height:16px}
.cms-subnav a.on .n{background:var(--gold-soft);color:var(--gold-deep)}
.cms-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
.cms-stat{position:relative;background:#fff;border:1px solid var(--line);border-radius:12px;padding:15px 18px 14px;overflow:hidden;box-shadow:var(--shadow-sm)}
.cms-stat:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--line)}
.cms-stat .k{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:6px}
.cms-stat .v{font-size:27px;font-weight:600;letter-spacing:-.02em;margin-top:7px;font-variant-numeric:tabular-nums;line-height:1.1}
.cms-stat .v small{font-size:12px;font-weight:400;color:var(--faint);margin-left:4px;letter-spacing:0}
.cms-stat .h{font-size:11.5px;color:var(--faint);margin-top:7px}
.cms-stat .ico{position:absolute;right:15px;top:15px;width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:#f4f6f9;color:var(--faint)}
.cms-stat.accent:before{background:var(--gold)}.cms-stat.accent .ico{background:var(--gold-soft);color:var(--gold-deep)}
.cms-stat.ok:before{background:var(--green)}.cms-stat.ok .ico{background:var(--green-soft);color:var(--green)}
.cms-stat.warn:before{background:var(--amber)}.cms-stat.warn .ico{background:var(--amber-soft);color:var(--amber)}
.cms-stat.info:before{background:var(--blue)}.cms-stat.info .ico{background:var(--blue-soft);color:var(--blue)}

.cms-panel{background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-sm);overflow:hidden}
.cms-bar{display:flex;align-items:center;gap:14px;padding:0 16px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.cms-tabs{display:flex;gap:0;flex:1 1 520px;min-width:0;overflow-x:auto;scrollbar-width:none}
.cms-tabs::-webkit-scrollbar{display:none}
.cms-tabs a{position:relative;padding:13px 12px 12px;font-size:13.5px;color:var(--muted);white-space:nowrap;display:inline-flex;align-items:center;gap:6px;transition:color .15s}
.cms-tabs a:hover{color:var(--text)}
.cms-tabs a.on{color:var(--ink);font-weight:600}
.cms-tabs a.on:after{content:"";position:absolute;left:10px;right:10px;bottom:-1px;height:2px;background:var(--gold);border-radius:2px}
.cms-tabs .c{font-size:11px;background:#f0f2f5;color:var(--muted);border-radius:20px;padding:0 6px;line-height:16px;font-variant-numeric:tabular-nums;font-weight:400}
.cms-tabs a.on .c{background:var(--gold-soft);color:var(--gold-deep)}
.cms-tools{display:flex;align-items:center;gap:8px;padding:9px 0;flex:0 1 auto}
.cms-search{position:relative}
.cms-search input{width:200px;padding-left:30px;background:#f8f9fb;font-size:13px}
.cms-search input:focus{background:#fff}
.cms-search svg{position:absolute;left:9px;top:8px;color:var(--faint);pointer-events:none}
.cms-tools select{width:auto;min-width:104px;font-size:12.5px;padding:7px 28px 7px 10px;background-color:#fff}
.cms-tools .btn{padding:7px 12px;font-size:12.5px}

.cms-bulk{display:none;align-items:center;gap:9px;padding:9px 16px;background:var(--gold-06);border-bottom:1px solid var(--gold-22);font-size:12.5px;color:var(--muted);flex-wrap:wrap}
.cms-bulk.on{display:flex}
.cms-bulk b{color:var(--gold-deep);font-variant-numeric:tabular-nums}
.cms-bulk .sep{width:1px;height:14px;background:var(--gold-22)}
.cms-bulk .btn{padding:4px 10px;font-size:12px;border-radius:6px;background:#fff}

table.cms-table{width:100%;min-width:920px;border-collapse:collapse;table-layout:fixed}
.cms-table th{font-size:11.5px;font-weight:500;color:var(--faint);text-align:left;padding:10px 14px;background:#fbfcfd;border-bottom:1px solid var(--line);letter-spacing:.04em;white-space:nowrap}
.cms-table td{padding:12px 14px;border-bottom:1px solid var(--line-2);vertical-align:middle;overflow:hidden}
.cms-table tbody tr{transition:background .12s}
.cms-table tbody tr:hover{background:#fafbfd}
.cms-table tbody tr.sel{background:var(--gold-06)}
.cms-table tbody tr:last-child td{border-bottom:0}
.cms-ck{width:16px;height:16px;accent-color:var(--ink);cursor:pointer;vertical-align:middle;margin:0}
.cms-thumb{width:86px;height:54px;border-radius:7px;object-fit:cover;background:#eef1f5;display:block;border:1px solid var(--line-2)}
.cms-thumb.ph{display:grid;place-items:center;color:#b3bdc9;background:#f5f7fa;border-style:solid}
.cms-t{font-size:14px;font-weight:500;color:var(--text);line-height:1.5;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cms-t:hover{color:var(--blue)}
.cms-d{font-size:12px;color:var(--faint);margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cms-num{font-variant-numeric:tabular-nums;font-size:13px;color:var(--text);text-align:right;white-space:nowrap}
.cms-num small{display:block;font-size:10.5px;color:var(--faint);font-weight:400;text-align:right}
.cms-time{font-size:12px;color:var(--muted);white-space:nowrap;line-height:1.6}
.cms-time small{display:block;color:var(--faint);font-size:11px}
.cms-ops{display:flex;align-items:center;gap:4px;justify-content:flex-end}

.st-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:20px;font-size:11.5px;border:1px solid transparent;cursor:pointer;background:none;font-family:inherit;transition:.15s;white-space:nowrap}
.st-pill i{width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}
.st-pill.on{background:var(--green-soft);color:#0b6e3f}
.st-pill.on:hover{background:#d5eee1}
.st-pill.off{background:#f0f2f5;color:#5c6878}
.st-pill.off:hover{background:#e7eaef}
.flag{width:26px;height:26px;border-radius:7px;border:1px solid var(--line-2);background:#fff;color:var(--muted);display:inline-grid;place-items:center;font-size:11px;cursor:pointer;transition:.15s;font-family:inherit;padding:0}
.flag:hover{border-color:var(--gold);color:var(--gold-deep);background:var(--gold-soft)}
.flag.on{background:var(--gold-solid);border-color:var(--gold-solid);color:var(--on-gold)}
.flag.on:hover{background:var(--gold-hover);border-color:var(--gold-hover);color:var(--on-gold-hover)}

.cms-ft{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 16px;border-top:1px solid var(--line);background:#fbfcfd;font-size:12.5px;color:var(--muted);flex-wrap:wrap}
.cms-ft .per{display:flex;align-items:center;gap:6px}
.cms-ft .per select{width:auto;padding:3px 24px 3px 8px;font-size:12px;border-radius:6px}
.cms-empty{padding:60px 20px;text-align:center}
.cms-empty .ic{width:56px;height:56px;border-radius:16px;background:#f4f6f9;color:#aab5c3;display:grid;place-items:center;margin:0 auto 14px}
.cms-empty .t{font-size:14px;color:var(--text);font-weight:500}
.cms-empty .d{font-size:12.5px;color:var(--faint);margin:5px 0 16px}
@media(max-width:1100px){.cms-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:720px){.cms-stats{grid-template-columns:1fr}.cms-search input{width:100%}.cms-tools{width:100%;flex-wrap:wrap}.cms-tools .cms-search{flex:1}}

/* ============================================================
   官网管理控制台：左边一列树 + 右边一块内容（2026-11）
   ------------------------------------------------------------
   原来官网这七八页都是「页头 → 横排页签 → 指标条 → 卡片 1 → 卡片 2」，
   四五条横带叠着，正文被顶到折叠线以下，一屏看不到内容。
   现在分区常驻左侧（点一下换页，不用退回上一级），标题与按钮并进右侧面板头，
   页面本身只剩一块白底；面板里原有的 .card / .cms-panel 一律去掉边框，
   变成「一格一格的段落」，不再是一堆各自带框的卡片。
   ============================================================ */
.cms-console{display:grid;grid-template-columns:226px minmax(0,1fr);gap:16px;align-items:start}
.cms-console.is-solo{grid-template-columns:minmax(0,1fr)}
.cms-tree{
    position:sticky;top:76px;background:#fff;border:1px solid var(--line);border-radius:12px;
    padding:8px;box-shadow:var(--shadow-sm);max-height:calc(calc(100vh / var(--z,1)) - 100px);overflow-y:auto;
    scrollbar-width:thin;
}
.cms-tree-hd{padding:9px 10px 8px;font-size:11.5px;letter-spacing:.14em;color:var(--faint)}
.cms-tree-grp{padding:11px 10px 4px;font-size:10.5px;letter-spacing:.12em;color:#a7b0bb}
.cms-tree-hd + .cms-tree-grp{padding-top:2px}
.cms-tree-it{
    position:relative;display:flex;align-items:center;gap:8px;
    padding:8px 10px;border-radius:8px;font-size:13px;color:var(--text);
    transition:background .14s,color .14s;
}
.cms-tree-it svg{flex:none;color:#a9b3c0}
.cms-tree-it .t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cms-tree-it .n{
    flex:none;font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums;
    background:#f2f4f7;border-radius:20px;padding:0 6px;line-height:16px;
}
.cms-tree-it .st{
    flex:none;font-size:10px;color:#a9762e;background:#fdf3e6;border-radius:4px;
    padding:1px 5px;line-height:1.4;white-space:nowrap;
}
.cms-tree-it:hover{background:#f6f8fa;color:var(--ink)}
/* 任务完成勾选：任务中心与案件「任务」tab 共用一套（跨页类名只许在 app.css） */
.task-tick{width:24px;height:24px;border-radius:7px;border:1px solid var(--line);background:#fff;
    display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:var(--faint);
    padding:0;font-family:inherit}
.task-tick:hover{border-color:var(--gold-22);color:var(--gold-text);background:var(--gold-06)}
.task-tick.is-done{background:#eef6f0;border-color:transparent;color:#3b8b5a;cursor:default}
.task-tick.is-done:hover{background:#eef6f0;color:#3b8b5a}

.cms-tree-it.on{background:var(--gold-06);color:var(--gold-deep);font-weight:600}
.cms-tree-it.on svg{color:var(--gold-deep)}
.cms-tree-it.on .n{background:#fff;color:var(--gold-deep)}
/* 叠在视图上的筛选（今天要办 / 只看我的 / 即将到期）：
   实底只留给「你在这里」那一行 —— 筛选不给底色，只用主题色 + 右侧一个勾。
   两行同样实底时，人会以为选了两个入口，反而更不知道自己在哪。 */
.cms-tree-it.on.is-filter{background:transparent;box-shadow:none;font-weight:600}
.cms-tree-it.on.is-filter:after{content:"✓";margin-left:auto;font-size:11px;line-height:1;color:var(--gold-deep)}
.cms-tree-it.on.is-filter:hover{background:#f6f8fa}
.cms-tree-it.is-sub{padding-left:27px;font-size:12.5px}
.cms-tree-it.is-sub:before{content:"";position:absolute;left:17px;top:50%;width:5px;height:1px;background:#cfd6de}
.cms-tree-it.is-warn{color:#a9762e}
.cms-tree-it.is-warn svg{color:#c08a3e}

.cms-pane{min-width:0;background:#fff;border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-sm);overflow:hidden}
.cms-pane.is-bare{background:none;border:0;border-radius:0;box-shadow:none;overflow:visible}
.cms-pane-hd{display:flex;align-items:flex-start;gap:18px;justify-content:space-between;padding:18px 20px 16px;border-bottom:1px solid var(--line)}
.cms-pane-hd .tt{min-width:0}
.cms-pane-hd h1{
    margin:0;font-family:"Noto Serif SC",serif;font-size:20px;font-weight:600;
    letter-spacing:.03em;line-height:1.4;color:var(--ink);
}
.cms-pane-hd p{margin:5px 0 0;font-size:12.5px;line-height:1.75;color:var(--muted);max-width:74ch}
.cms-pane-hd .acts{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end;flex:none}

/* 面板里的旧结构：去掉各自的边框，变成同一张纸上的段落 */
.cms-pane .cms-panel{border:0;border-radius:0;box-shadow:none;overflow:visible}
.cms-pane .cms-panel + .cms-panel{border-top:1px solid var(--line)}
.cms-pane .card{border:0;border-radius:0;box-shadow:none;margin:0}
.cms-pane .card + .card{border-top:1px solid var(--line)}
.cms-pane .card-hd{padding:13px 20px;background:#fbfcfd}
.cms-pane .card-bd{padding:16px 20px}
.cms-pane .card-ft{padding:13px 20px}
/* 指标条：拆成一条连续的读数带，不再是四张各自带框的小卡 */
.cms-pane .cms-stats{
    display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;
    padding:15px 20px;margin:0;background:#fbfcfd;border-bottom:1px solid var(--line);
}
.cms-pane .cms-stat{background:none;border:0;border-radius:0;box-shadow:none;padding:0 0 0 16px}
.cms-pane .cms-stat:before{display:none}
.cms-pane .cms-stat .ico{display:none}
.cms-pane .cms-stat + .cms-stat{border-left:1px solid var(--line)}
.cms-pane .cms-stat .v{font-size:24px;margin-top:5px}
.cms-pane .cms-stat .h{margin-top:5px}

@media(max-width:1180px){
    .cms-console{grid-template-columns:1fr;gap:12px}
    /* 窄屏：树收成可换行的胶囊条（横滑会把后几项藏起来，换行至少都在眼前） */
    .cms-tree{
        position:static;display:flex;align-items:center;gap:6px;padding:7px 8px;
        flex-wrap:wrap;max-height:none;overflow:visible;
    }
    .cms-tree-hd,.cms-tree-grp{display:none}
    .cms-tree-it{flex:none;border:1px solid var(--line);border-radius:20px;padding:5px 12px}
    .cms-tree-it.is-sub{padding-left:12px}
    .cms-tree-it.is-sub:before{display:none}
    .cms-pane .cms-stats{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:12px}
    .cms-pane .cms-stat:nth-child(3){border-left:0;padding-left:0}
    .cms-pane-hd{flex-direction:column;gap:12px}
    .cms-pane-hd .acts{justify-content:flex-start}
}

/* ---- 面板里的「段」：标题 + 内容，段与段之间一根线 ----
   原来是四五张各自带框的 .card，一屏里框套框；现在同一张纸上分段，
   只有最外层一层边框。 */
.cms-sec{border-top:1px solid var(--line)}
.cms-sec:first-of-type{border-top:0}
.cms-sec-hd{
    display:flex;align-items:baseline;gap:10px;padding:15px 20px 0;
    font-size:12.5px;font-weight:600;color:var(--ink);letter-spacing:.02em;
}
.cms-sec-hd .hint{font-weight:400;font-size:11.5px;color:var(--faint);letter-spacing:0}
.cms-sec-bd{padding:13px 20px 18px}
.cms-sec-bd .form-grid{gap:14px 18px}
.cms-sec-ft{
    display:flex;align-items:center;gap:10px;padding:13px 20px;
    border-top:1px solid var(--line);background:#fbfcfd;
}
.cms-sec-ft .spacer{flex:1}
.cms-sec-ft .chn-del{color:var(--red)}

/* 会员/内容列表页的页签条（members 用的 .cms-head 一直没定义，顺手补上） */
.cms-head{display:flex;align-items:center;gap:14px;padding:0 16px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.cms-head .cms-tabs{flex:1 1 420px}
.cms-head .cms-tools{padding:8px 0}
.cms-tab{position:relative;padding:13px 12px 12px;font-size:13.5px;color:var(--muted);white-space:nowrap;display:inline-flex;align-items:center;gap:6px}
.cms-tab b{font-weight:400;font-size:11px;background:#f0f2f5;color:var(--muted);border-radius:20px;padding:0 6px;line-height:16px}
.cms-tab.on{color:var(--ink);font-weight:600}
.cms-tab.on:after{content:"";position:absolute;left:10px;right:10px;bottom:-1px;height:2px;background:var(--gold);border-radius:2px}
.cms-tab.on b{background:var(--gold-soft);color:var(--gold-deep)}

/* 栏目管理：右侧的概览条（几条读数）+ 二级栏目说明 */
.chn-sum{
    display:flex;align-items:stretch;flex-wrap:wrap;padding:15px 20px;
    background:#fbfcfd;border-bottom:1px solid var(--line);
}
.chn-sum-i{padding:0 20px;border-left:1px solid var(--line)}
.chn-sum-i:first-child{padding-left:0;border-left:0}
.chn-sum-i b{display:block;font-size:19px;font-weight:600;color:var(--ink);line-height:1.25;font-variant-numeric:tabular-nums}
.chn-sum-i span{display:block;font-size:11.5px;color:var(--faint);margin-top:2px}
.chn-sum-i.is-warn b{color:var(--amber)}
.chn-sum-ops{margin-left:auto;display:flex;align-items:center;gap:8px}
.chn-note{margin:0;padding:0 20px 20px;font-size:12px;line-height:1.9;color:var(--faint)}
.cms-pane .chn-orphan{margin:16px 20px}

/* ============================================================
   客户留言详情
   ------------------------------------------------------------
   这一页原来是一整块白底里平铺若干 section（.cms-pane 会把 card 的
   描边、圆角、留白全部抹平），于是「谁、说了什么、跟到哪、交给谁」
   四件事看上去一样重，读的人得逐行找。现在改成三段：
     ① 名片：身份、状态、联系方式、能做什么，一眼看完；
     ② 工作区（左）：客户原话 + 跟进；
     ③ 动作栏（右）：转给律师 / 客户档案，滚动时吸顶。
   页面用 bare 渲染 —— 卡片回到白纸 + 描边，才有「一块一块」的层次。
   ============================================================ */
.msg-page{padding-top:10px}

/* bare 状态下 .cms-pane .card 仍是去边框的，这里恢复成真正的卡片 */
.msg-page .card{
    background:var(--card);border:1px solid var(--line);border-radius:12px;
    box-shadow:var(--shadow-sm);
}
.msg-page .card-hd{padding:13px 18px;background:#fff;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.msg-page .card-hd h2{font-size:14.5px;font-weight:600;color:var(--ink);white-space:nowrap}
.msg-page .card-bd{padding:16px 18px}
/* 客户原话是这一页的正文，比其它说明文字大半档 */
.msg-page .msg-quote{font-size:14px;padding:15px 17px}

/* ① 名片卡：左侧一道色标表示状态（琥珀＝有事要办，青＝已交给律师，灰＝办完） */
.msg-hero{
    position:relative;display:flex;align-items:flex-start;justify-content:space-between;
    gap:20px;flex-wrap:wrap;overflow:hidden;
    background:var(--card);border:1px solid var(--line);border-radius:12px;
    box-shadow:var(--shadow-sm);padding:18px 20px 16px;
}
.msg-hero:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--tone,#ccd4de)}
.msg-hero-av{
    flex:none;width:46px;height:46px;border-radius:13px;display:grid;place-items:center;
    background:var(--gold-06);color:var(--gold-text-deep);
    font-size:19px;font-weight:600;line-height:1;
}
.msg-hero-main{min-width:0;flex:1 1 320px}
.msg-hero-hd{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.msg-hero-hd h1{margin:0;font-size:21px;line-height:1.3;color:var(--ink);letter-spacing:-.01em}
.msg-hero-tel{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:9px}
.msg-hero-tel .num{
    font-size:17px;font-weight:600;color:var(--ink);letter-spacing:.01em;
    font-variant-numeric:tabular-nums;text-decoration:none;
}
.msg-hero-tel .num:hover{color:var(--gold-text)}
.msg-hero-tel .divider{width:1px;height:13px;background:var(--line);flex:none}
.msg-hero-meta{display:flex;gap:5px 16px;flex-wrap:wrap;margin-top:8px;font-size:12px;color:var(--faint)}
.msg-hero-acts{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:none}

/* 客户原话：这一页唯一不能改写的字，给它自己的边界。
   左侧一道金线既是装饰，也是在提示「这是客户说的，不是你写的」 */
.msg-quote{
    background:#fcfcfd;border:1px solid var(--line);border-left:3px solid var(--gold);
    border-radius:8px;padding:14px 16px;font-size:13.5px;line-height:2;color:var(--text);
    white-space:pre-wrap;word-break:break-word;
}

/* ② 两栏：左边是活，右边是身份与去处。滚动时右侧动作栏吸顶 */
.msg-grid{
    display:grid;grid-template-columns:minmax(0,1.62fr) minmax(0,1fr);
    gap:16px;align-items:start;margin-top:16px;
}
.msg-col{display:flex;flex-direction:column;gap:16px;min-width:0}
.msg-rail{display:flex;flex-direction:column;gap:16px;min-width:0;position:sticky;top:14px}

/* 跟进三格：次数 / 最近 / 下次。数字先给结论，细节在下面那条提醒里 */
.msg-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.msg-stat{background:#f8f9fb;border-radius:9px;padding:9px 12px;min-width:0}
.msg-stat b{
    display:block;font-size:16px;font-weight:600;color:var(--ink);line-height:1.45;
    font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.msg-stat span{display:block;margin-top:1px;font-size:11px;color:var(--faint);letter-spacing:.02em}
.msg-stat.is-warn{background:var(--red-soft)}
.msg-stat.is-warn b{color:var(--red)}

/* 提示条：接手提醒、紧急提示共用一套，左缘一道色条 */
.msg-note{
    display:flex;gap:9px;align-items:flex-start;margin-top:12px;padding:10px 13px;
    border-radius:9px;font-size:12.5px;line-height:1.85;
}
.msg-note .ico{flex:none;margin-top:2px}
.msg-note.is-amber{background:var(--amber-soft);color:#7d5514}
.msg-note.is-red{background:var(--red-soft);color:#8a3b33}

/* 客户档案：贴着「这是谁」的资料行，不用表格（表格的框线会把几行字切成一份表单） */
.msg-kv{display:flex;flex-direction:column;margin:0}
.msg-kv > div{display:flex;gap:10px;align-items:baseline;padding:8px 0;border-bottom:1px dashed var(--line-2)}
.msg-kv > div:last-child{border-bottom:0;padding-bottom:0}
.msg-kv > div:first-child{padding-top:0}
.msg-kv dt{flex:none;width:62px;font-size:12px;color:var(--muted)}
.msg-kv dd{margin:0;min-width:0;font-size:13px;line-height:1.6;word-break:break-word}

/* 已转交：一行状态 + 一个入口，不必再占一张卡片 */
.msg-assigned{
    display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap;
    background:var(--teal-soft);border-radius:8px;padding:9px 12px;margin-bottom:14px;
    font-size:12.5px;line-height:1.8;
}

/* 接手 / 交回：和「记录跟进」不是同一个动作，单独一块浅灰，别跟表单混成一片 */
.msg-handoff{
    margin-top:16px;padding:12px 14px;border:1px solid var(--line-2);
    border-radius:10px;background:#f8f9fb;
}

/* 跟进历史的小标题：历史直接接在表单下面时，读的人会以为是表单的一部分 */
.msg-hist-hd{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;
    margin:2px 0 10px;padding-top:12px;border-top:1px dashed var(--line-2)}
.msg-hist-hd b{font-size:12.5px;color:var(--ink)}
.msg-hist-hd .tiny{min-width:0}

/* 已经转出去、正在被人跟的留言：改派表单收起成一行 */
.msg-reassign{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line-2)}
.msg-reassign>summary{cursor:pointer;font-size:12.5px;color:var(--gold-text-deep);list-style:none;padding:2px 0}
.msg-reassign>summary::-webkit-details-marker{display:none}
.msg-reassign>summary:before{content:'▸ ';display:inline-block;width:1em}
.msg-reassign[open]>summary:before{content:'▾ '}
.msg-reassign[open]>summary{margin-bottom:10px}

/* 字号放大后两栏各剩 300 出头，跟进流水读不了：转单栏，动作栏不再吸顶 */
html[data-zlg] .msg-grid{grid-template-columns:1fr}
html[data-zlg] .msg-rail{position:static}
@media(max-width:1080px){
    .msg-grid{grid-template-columns:1fr}
    .msg-rail{position:static}
}

/* 面板里的其它旧块：不再各自带边框 */
.cms-pane .alert{margin:16px 20px}
.cms-pane .cm-meta{padding:12px 20px;margin:0;border-bottom:1px solid var(--line);background:#fbfcfd}
.cms-pane .grid-2-1 > .card + .card{border-left:1px solid var(--line)}
.cms-pane .table-wrap{border:0}

/* ============================================================
   官网（前台）· 深墨 + 香槟金 · 与后台主题色联动
   命名空间 .sf-*，与后台组件互不干扰
   ============================================================ */
.site-body{
  background:#fbfaf7;color:#1d2733;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  font-size:14px;line-height:1.7;-webkit-font-smoothing:antialiased;
}
.site-body ::selection{background:var(--gold-22)}
.container{max-width:1180px;margin:0 auto;padding:0 24px}

/* 下拉菜单 */
.nav-drop{position:relative}
.nav-drop>.nav-drop-menu{position:absolute;top:calc(100% + 1px);left:50%;transform:translateX(-50%) translateY(6px);background:#fff;border:1px solid rgba(18,32,46,.1);box-shadow:0 18px 44px -18px rgba(10,18,26,.4);padding:8px;min-width:180px;display:none;flex-direction:column;gap:1px;z-index:70;opacity:0;transition:.2s}
.nav-drop:hover>.nav-drop-menu{display:flex;opacity:1;transform:translateX(-50%)}
.nav-drop-menu a{padding:9px 13px;font-size:13px;color:#3d4a5a;display:block;transition:.15s;border-left:2px solid transparent}
.nav-drop-menu a:hover{background:#faf8f4;color:var(--ink);border-left-color:var(--gold)}
.nav-drop-menu a.on{color:var(--gold-deep);font-weight:500}
.nav-drop .caret{font-size:8px;opacity:.5;margin-left:3px}

/* ---------------- 动效 ---------------- */
[data-rv]{opacity:0;transform:translateY(20px);transition:opacity .75s cubic-bezier(.2,.7,.2,1),transform .75s cubic-bezier(.2,.7,.2,1)}
[data-rv].in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){[data-rv]{opacity:1;transform:none;transition:none}}

/* ---------------- 登录 ---------------- */
.auth-wrap{min-height:calc(100vh / var(--z,1));display:grid;grid-template-columns:1.1fr .9fr}
.auth-side{background:linear-gradient(150deg,var(--ink),var(--ink-3));color:#fff;padding:56px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}
.auth-side:after{content:"";position:absolute;right:-20%;bottom:-20%;width:80%;height:80%;background:radial-gradient(circle,var(--gold-22),transparent 60%)}
.auth-side h1{font-family:"Noto Serif SC",serif;font-size:34px;letter-spacing:.08em;line-height:1.5}
.auth-side p{color:#a9b9c9;font-size:14px;line-height:1.9;max-width:420px}
.auth-side .brand{display:flex;align-items:center;gap:12px}
.auth-side .brand .seal{width:42px;height:42px;background:var(--gold-solid);color:var(--on-gold);display:grid;place-items:center;border-radius:8px;font-family:"Songti SC",serif;font-size:20px}
.auth-main{display:grid;place-items:center;padding:40px}
.auth-form{width:100%;max-width:360px}
.auth-form h2{font-size:22px;margin-bottom:6px}
.auth-form .sub{color:var(--muted);font-size:13px;margin-bottom:26px}
@media(max-width:900px){.auth-wrap{grid-template-columns:1fr}.auth-side{display:none}}

/* 滚动条 */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#d5dbe4;border-radius:6px}
::-webkit-scrollbar-thumb:hover{background:#c2cad6}
::-webkit-scrollbar-track{background:transparent}

/* ============================================================
   通用下拉菜单（details.dd）：固定定位 + 高层级，绝不被侧栏/卡片遮挡
   ============================================================ */
details.dd{position:relative;display:inline-block}
details.dd>summary{list-style:none;cursor:pointer;user-select:none}
details.dd>summary::-webkit-details-marker{display:none}
.dd-panel{
  position:fixed;z-index:9999;min-width:220px;max-width:320px;
  background:#fff;border:1px solid var(--line);border-radius:10px;
  box-shadow:0 12px 32px -8px rgba(18,32,46,.25);padding:12px;
  font-size:13px;color:var(--text);
  /* 关键：面板常出现在 .nowrap / flex 工具栏里，white-space 会被继承，
     导致内部 inline-block 输入框不换行、横向溢出面板 —— 必须显式恢复 normal */
  white-space:normal;
  /* 高面板兜底：超出视口时面板内部滚动，底部不越界 */
  max-height:calc(calc(100vh / var(--z,1)) - 32px);overflow:auto;
}
/* 面板内的表单控件一律占满面板宽度，杜绝横向溢出 */
.dd-panel input[type=text],.dd-panel input[type=email],.dd-panel input[type=password],
.dd-panel input[type=number],.dd-panel input[type=tel],.dd-panel input[type=search],
.dd-panel input[type=date],.dd-panel select,.dd-panel textarea{width:100%;box-sizing:border-box}
.dd-panel form{margin:0}
.dd-panel input[type=file]{max-width:100%;font-size:12px}
/* 面板内每个输入框都配自己的小标签，避免一个标题对多个控件分辨不清 */
.dd-panel .dd-field{margin-bottom:9px}
.dd-panel .dd-field>label{display:block;font-size:11px;line-height:1.5;color:var(--faint);margin-bottom:3px}
.dd-panel .dd-field:last-child{margin-bottom:0}
/* 节点下的文书 / 归档材料：竖排列表（参考标准文书库样式） */
.node-list{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.node-list .nrow{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid var(--line);border-radius:8px;padding:6px 10px;background:#fff;min-width:0}
.node-list .nrow:hover{border-color:var(--gold)}
.node-list .nrow .nname{display:flex;align-items:center;gap:7px;font-size:12.5px;min-width:0;overflow:hidden}
.node-list .nrow .nname>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.badge-arch{background:var(--gold-soft);color:var(--gold-deep);border:1px solid var(--gold)}
.dd-panel a{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:7px;color:var(--text)}
.dd-panel a:hover{background:var(--line-2)}
.dd-panel hr{border:0;border-top:1px solid var(--line-2);margin:8px 0}
.dd-panel .dd-title{font-size:11px;color:var(--faint);margin-bottom:6px}

/* ============================================================
   通用上传组件（点击/拖拽两用）
   ============================================================ */
.uploader{
  position:relative;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  border:1.5px dashed var(--line);border-radius:12px;background:var(--line-2);
  padding:26px 16px;cursor:pointer;text-align:center;transition:.15s;
}
.uploader:hover,.uploader.drag{border-color:var(--gold);background:var(--gold-soft)}
.uploader input[type=file]{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.uploader .up-icon{color:var(--muted)}
.uploader .up-t1{font-size:13px;color:var(--text);font-weight:500}
.uploader .up-t2{font-size:11px;color:var(--faint)}
.uploader.inline{flex-direction:row;gap:12px;padding:12px 16px;text-align:left}
.uploader.inline .up-t1{font-size:12.5px}

/* ============================================================
   案件办理 · 引导式时间线（手风琴节点）
   ============================================================ */
.howto{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;background:var(--gold-soft);border:1px solid var(--gold);border-radius:10px;padding:10px 16px;margin-bottom:14px;font-size:12.5px;color:var(--text)}
.howto b.howto-t{color:var(--gold);flex:none}
.howto-s{display:inline-flex;align-items:center;gap:7px}
.howto-s i{font-style:normal;width:19px;height:19px;border-radius:50%;background:var(--gold-solid);color:var(--on-gold);font-size:11px;display:grid;place-items:center;font-weight:700;flex:none}
.howto .arr{color:var(--gold);font-weight:700}
.wf-top{display:flex;align-items:center;gap:10px 18px;flex-wrap:wrap;margin-bottom:16px;padding:12px 16px;background:#f8fafc;border:1px solid var(--line);border-radius:10px}
.wf-bar{display:flex;align-items:center;gap:10px;flex:1;min-width:220px}
.wf-bar .progress{flex:1;height:8px}
.wf-bar .pct{font-size:13px;font-weight:700;color:var(--ink);min-width:44px;text-align:right}
.wf-chips{display:flex;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.wf-chips .wchip{background:#fff;border:1px solid var(--line);border-radius:999px;padding:4px 12px;display:inline-flex;align-items:center;gap:6px}
.wf-chips .wchip.gold{border-color:var(--gold);color:var(--gold);background:var(--gold-soft);font-weight:600}
.wf-chips .wchip b{color:var(--text);font-weight:600}
.wsteps{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--radius);overflow:visible;background:#fff}
.wstep{position:relative;border-bottom:1px solid var(--line-2);border-radius:0}
.wstep:last-child{border-bottom:0}
.wstep-hd{display:flex;align-items:center;gap:12px;padding:10px 14px 10px 4px;cursor:pointer;transition:background .15s;border-radius:8px}
.wstep-hd:hover{background:#f8fafc}
.wstep.open{background:#fbfcfe}
.wstep.open .wstep-hd{border-bottom:1px dashed var(--line)}
.wstep .rail{display:flex;flex-direction:column;align-items:center;width:30px;flex:none;align-self:stretch}
.wstep .dot{width:25px;height:25px;border-radius:50%;border:2px solid var(--line);background:#fff;color:var(--faint);font-size:11px;font-weight:700;display:grid;place-items:center;flex:none;z-index:1}
.wstep.done .dot{background:var(--green);border-color:var(--green);color:#fff}
.wstep.skip .dot{background:#c3ccd6;border-color:#c3ccd6;color:#fff}
.wstep.current .dot{border-color:var(--gold);color:var(--gold);box-shadow:0 0 0 4px var(--gold-soft)}
.wstep .rail::after{content:'';flex:1;width:2px;background:var(--line-2);margin-top:5px}
.wstep:last-child .rail::after{display:none}
.wstep.done .rail::after{background:var(--green-soft)}
.winfo{min-width:0;flex:1}
.wname{font-size:13.5px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.wstep.done .wname{color:var(--muted);font-weight:500}
.wname .badge-current{background:var(--gold-solid);color:var(--on-gold);font-size:10.5px;padding:1px 9px;border-radius:999px;font-weight:600;letter-spacing:.02em}
.wmeta{font-size:11.5px;color:var(--faint);margin-top:2px;display:flex;gap:10px;flex-wrap:wrap}
.wmeta .ok{color:var(--blue);font-weight:500}
.wstep .chev{color:var(--faint);transition:transform .18s;flex:none;font-size:12px;width:14px;text-align:center}
.wstep.open .chev{transform:rotate(180deg)}
.wstep-bd{display:none;padding:2px 16px 16px 46px}
.wstep.open .wstep-bd{display:block}
.wguide{background:#f8fafc;border:1px solid var(--line-2);border-radius:8px;padding:10px 14px;font-size:12.5px;color:var(--muted);line-height:1.85;margin-bottom:12px}
.wguide p{margin:0 0 .5em}
.wguide p:last-child{margin-bottom:0}
.warchhint{display:flex;align-items:flex-start;gap:8px;background:var(--gold-soft);border:1px dashed var(--gold);border-radius:8px;padding:8px 13px;font-size:12px;color:var(--amber);margin-bottom:12px;line-height:1.7}
.wsec-t{font-size:11px;font-weight:700;color:var(--faint);letter-spacing:.06em;margin:10px 0 6px}
.wstep-bd .node-list{margin-bottom:6px}
.wempty{font-size:12px;color:var(--faint);border:1px dashed var(--line);border-radius:8px;padding:10px 14px;text-align:center;margin-bottom:6px}
.wstep-bd .wfoot{display:flex;justify-content:center;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line-2)}

/* ============================================================
   案件办理 · 左右两栏（左：办案引导 | 右：归档目录）
   ============================================================ */
/* 与「案件概览」页一致：左 2 / 右 1。同一件案子翻到办理页，两栏宽度突然变了，
   会让人以为换了页面。右栏窄了不要紧 —— 归档目录条目最多两行，本来就是竖排清单。 */
.proc-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:16px;align-items:start}
.proc-left{min-width:0}
.proc-aside{position:sticky;top:12px;min-width:0}
.proc-aside .aside-card{display:flex;flex-direction:column;max-height:calc(calc(100vh / var(--z,1)) - 24px)}
.proc-aside .card-hd h2{font-size:15.5px}
.aside-sub{font-size:11.5px;color:var(--faint);line-height:1.7;padding:8px 14px 10px;border-bottom:1px solid var(--line-2)}
.aside-sub b{color:var(--text)}
.arch-scroll{overflow-y:auto;flex:1;min-height:0}
.arch-item{border-bottom:1px solid var(--line-2);padding:9px 14px}
.arch-item:last-child{border-bottom:0}
.arch-item.has{background:linear-gradient(90deg,var(--gold-soft),transparent 70%)}
.arch-item-hd{display:flex;align-items:center;gap:9px;min-width:0}
.arch-idx{width:24px;height:24px;border-radius:7px;background:var(--ink);color:#fff;font-size:11px;font-weight:700;display:grid;place-items:center;flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.arch-item.has .arch-idx{background:var(--gold)}
.arch-mid{flex:1;min-width:0}
.arch-name{font-size:12.5px;font-weight:600;color:var(--text);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.arch-mid .tiny{margin-top:1px}
.arch-cnt{font-size:11px;color:var(--faint);flex:none}
.arch-cnt.ok{color:var(--green);font-weight:600}
.arch-docs{margin-top:6px;display:flex;flex-direction:column;gap:4px;padding-left:33px}
.arch-doc{display:flex;align-items:center;gap:7px;font-size:12px;background:#fff;border:1px solid var(--line);border-radius:7px;padding:4px 8px;min-width:0}
.arch-doc .ad-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
/* 文件名可点：hover 才加下划线，平时当成普通文字，免得整页都是蓝链 */
a.ad-name:hover{color:var(--blue);text-decoration:underline}

/* 案件材料（证据 / 委托手续 / 扫描件）：不进归档目录的那些文件。
   一行一份，文件名可点，右侧给出「查看 / 下载」两个有字的按钮 ——
   原来这些文件在案件里没有任何入口，律师传了扫描件自己也找不到。 */
.mat-list{display:flex;flex-direction:column;gap:4px}
/* 放不下就整组按钮换到第二行，而不是把文件名压成 0 宽度（放大字号时踩过） */
.mat-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0;
  border:1px solid var(--line);border-radius:8px;padding:6px 9px;font-size:12.5px;background:#fff}
.mat-row:hover{background:#fbfcfd;border-color:#dfe4ec}
.mat-main{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:8px}
.mat-row .mat-cat{flex:none;font-size:11px;color:var(--muted);background:#f0f2f5;
  border-radius:5px;padding:1px 7px;white-space:nowrap}
.mat-row .mat-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.mat-ops{flex:none;display:flex;gap:6px;align-items:center;margin-left:auto}
a.mat-name:hover{color:var(--blue);text-decoration:underline}
.arch-doc form{display:inline;margin:0}
.arch-add{display:flex;gap:8px;padding:10px 14px 4px;border-top:1px solid var(--line-2)}
.arch-add input{flex:1;min-width:0}
@media(max-width:1200px){
  .proc-grid{grid-template-columns:1fr}
  .proc-aside{position:static}
  .proc-aside .aside-card{max-height:none}
  .arch-scroll{max-height:420px}}

/* 结案页风控审核卡里的核对表：不再套一层卡片（卡片套卡片两层白边很难看），
   只留一条上分隔线，标题用小号 */
.sc-flat{border-top:1px solid var(--line);margin-top:14px}
.sc-flat-hd{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 0 0}
.sc-flat-hd h2{font-size:15px;font-weight:600;margin:0}
.sc-flat .table{margin-top:6px}
.sc-flat-ft{font-size:12px;color:var(--faint);line-height:1.7;border-top:1px dashed var(--line-2);padding:8px 0 0;margin-top:6px}

/* ============================================================
   系统设置 · 主题与外观（预设色板 + 即时预览）
   ============================================================ */
/* 色板一行铺满：一组 8 色正好一行，四组四行对齐。
   原先固定 4 列、又被设置页的 520 限宽卡住，四个色球组全挤在左半边。 */
.sw-group{margin-bottom:14px}
.sw-group:last-child{margin-bottom:0}
.sw-gl{display:flex;align-items:center;gap:10px;font-size:11px;color:var(--faint);letter-spacing:.04em;margin:0 0 7px}
.sw-gl:after{content:"";flex:1;height:1px;background:var(--line)}
.theme-swatches{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:8px}
.swatch{display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 4px 8px;border:1px solid var(--line);border-radius:9px;background:#fff;cursor:pointer;transition:.15s}
.swatch:hover{border-color:var(--gold);transform:translateY(-1px)}
.swatch.on{border-color:var(--gold);background:var(--gold-soft);box-shadow:0 0 0 2px var(--gold-22)}
.swatch .sw-c{width:28px;height:28px;border-radius:50%;box-shadow:inset 0 0 0 2px rgba(255,255,255,.35),0 2px 6px -2px rgba(18,32,46,.4)}
.swatch .sw-n{font-size:11px;color:var(--muted)}
.swatch.on .sw-n{color:var(--text);font-weight:600}
.theme-preview{display:flex;border:1px solid var(--line);border-radius:10px;overflow:hidden}
.tpv-side{width:150px;flex:none;background:var(--ink);padding:12px;display:flex;flex-direction:column;gap:10px}
.tpv-brand{display:flex;align-items:center;gap:8px;color:#fff;font-size:12px}
.tpv-seal{width:24px;height:24px;border-radius:6px;background:var(--gold-solid);color:var(--on-gold);display:grid;place-items:center;font-size:12px;flex:none;font-family:"Songti SC",serif}
.tpv-nav{display:flex;flex-direction:column;gap:4px}
.tpv-item{color:#c3cede;font-size:11.5px;padding:5px 8px;border-radius:6px}
.tpv-item.on{color:#fff;font-weight:600}
.tpv-main{flex:1;padding:14px;display:flex;flex-direction:column;gap:4px;justify-content:center;background:#fff}
.tpv-btn{background:var(--gold-solid);color:var(--on-gold);padding:7px 16px;border-radius:7px;font-size:12.5px;border:1px solid transparent}
.tpv-txt{font-weight:600;font-size:12.5px}
.tpv-chip{font-size:11px;padding:3px 10px;border-radius:999px;border:1px solid var(--line);background:var(--gold-soft);color:var(--text)}
/* 派生色卡：点击预设后即时展示全站联动结果 */
.tpv-palette{display:flex;gap:8px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.tpv-pal{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px}
.tpv-pal .pc{width:100%;height:26px;border-radius:7px;border:1px solid var(--line)}
.tpv-pal .pn{font-size:10.5px;color:var(--faint)}
.tpv-pal .pv{font-size:10px;color:var(--faint);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}

/* 主题色体检：把「这个色能不能用」变成看得见的数字，而不是靠眼力 */
.tpv-check{
  margin-top:10px;padding-top:10px;border-top:1px dashed var(--line);
  display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;
}
.tpv-ck{display:flex;align-items:center;gap:6px;font-size:11px;min-width:0}
.tpv-ck .k{color:var(--faint);white-space:nowrap}
.tpv-ck .v{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--text);font-size:11px}
.tpv-ck .s{
  margin-left:auto;flex:none;font-size:10px;padding:1px 6px;border-radius:9px;line-height:1.6;
}
.tpv-ck .s.ok{background:#e8f5ec;color:#1c6b3f}
.tpv-ck .s.warn{background:#fdf1e3;color:#8a5a12}
.tpv-ck .s.bad{background:#fdecea;color:#a4372e}
.tpv-note{grid-column:1/-1;font-size:10.5px;color:var(--faint);line-height:1.7}                  
.tpv-note b{color:var(--text);font-weight:600}
@media(max-width:640px){.theme-swatches{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:520px){.theme-preview{flex-direction:column}.tpv-side{width:100%}}

/* ============================================================
   OA 信息表（仿律所 OA 案件导出样式，系统内生成）
   ============================================================ */
.oa-sheet{background:#fff;border:1px solid var(--line);border-radius:10px;padding:20px 22px 26px;box-shadow:var(--shadow-sm)}
.oa-sheet-hd{display:flex;justify-content:space-between;align-items:baseline;border-bottom:2px solid var(--ink);padding-bottom:10px;margin-bottom:16px}
.oa-sheet-hd h2{margin:0;font-size:18px;font-family:"Noto Serif SC","Songti SC",serif;letter-spacing:.04em}
.oa-sec{font-size:14.5px;font-weight:700;color:var(--ink);margin:18px 0 0;padding:8px 12px;background:var(--ink-06);border-left:3px solid var(--gold);border-radius:4px}
.oa-sec-tag{font-size:11px;font-weight:400;color:var(--gold-deep);background:var(--gold-soft);border:1px solid var(--gold-22);border-radius:999px;padding:2px 10px;margin-left:8px;vertical-align:1px}
.oa-tbl{border:1px solid var(--line);border-top:0;margin-top:8px}
.oa-row{display:grid;grid-template-columns:150px 1fr 150px 1fr;border-bottom:1px solid var(--line)}
.oa-row:last-child{border-bottom:0}
.oa-row:has(.grow2){grid-template-columns:150px 1fr}
.oa-k{background:#f3f6fb;color:#3a5a8c;font-size:12.5px;padding:9px 12px;border-right:1px solid var(--line);display:flex;align-items:center;line-height:1.5}
.oa-v{padding:5px 10px;display:flex;align-items:center;border-right:1px solid var(--line);min-width:0}
.oa-row .oa-v:last-child{border-right:0}
.oa-v.grow2{grid-column:2}
.oa-v input,.oa-v textarea,.oa-v select{
  width:100%;border:1px solid transparent;background:transparent;border-radius:5px;
  font-size:13px;color:var(--text);padding:4px 8px;font-family:inherit;outline:none;resize:vertical
}
.oa-v input.ro,.oa-v textarea.ro{cursor:default;color:var(--text)}
.oa-v input:focus,.oa-v textarea:focus,.oa-v select:focus{border-color:var(--gold);background:var(--gold-06)}
.oa-v input.ro:focus,.oa-v textarea.ro:focus{border-color:transparent;background:transparent}
.oa-bc{display:flex;flex-direction:column;align-items:center;gap:2px;margin-top:22px}
.oa-bc svg{display:block}
.oa-bc-no{font-size:12px;color:var(--text);letter-spacing:.2em}
@media(max-width:760px){
  .oa-row{grid-template-columns:130px 1fr!important}
  .oa-row .oa-v{grid-column:2;border-right:0}}
/* 打印：仅输出 OA 表主体 */
@media print{
  .sidebar,.topbar,.page-hd,.alert,.tabs,.side-foot{display:none!important}
  .shell{display:block}
  .main{width:100%!important;margin-left:0!important}
  .content{padding:0!important}
  .oa-sheet{border:0;box-shadow:none;padding:0;border-radius:0}
  .oa-v input,.oa-v textarea,.oa-v select{border-color:transparent!important}
  .oa-sec{background:#f2f2f2!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .oa-k{background:#f2f2f2!important;color:#000;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  body{background:#fff}}

/* ============================================================
   官网内容编辑页：来源 tab / 拖拽上传 / 封面框 / 进度条
   ============================================================ */
.src-tabs{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}
.src-tab{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);font-size:13px;cursor:pointer;transition:all .15s}
.src-tab:hover{border-color:var(--gold);color:var(--gold-deep)}
.src-tab.on{background:var(--gold-solid);border-color:var(--gold-solid);color:var(--on-gold);font-weight:600}
.dropzone{border:2px dashed var(--line);border-radius:10px;background:#fafbfc;padding:34px 20px;text-align:center;cursor:pointer;transition:all .15s;outline:none}
.dropzone:hover,.dropzone:focus,.dropzone.drag{border-color:var(--gold);background:var(--gold-06)}
.dz-icon{font-size:30px;line-height:1;margin-bottom:8px;color:var(--gold)}
.dz-t{font-size:14px;color:var(--text)}
.dz-s{font-size:12px;color:#8a97a6;margin-top:5px}
.dz-bar{display:block;height:6px;border-radius:999px;background:#e6eaf0;overflow:hidden;margin:10px auto 0;max-width:320px}
.dz-bar span{display:block;height:100%;width:0;border-radius:999px;background:linear-gradient(90deg,var(--gold),var(--gold-deep));transition:width .2s}
.pv-hd{display:flex;align-items:center;gap:8px}
.emb-box iframe{width:100%;aspect-ratio:16/9;border:0;border-radius:8px;background:#000}
.cover-box{position:relative;border:2px dashed var(--line);border-radius:10px;background:#fafbfc;overflow:hidden;cursor:pointer;transition:border-color .15s;min-height:120px;display:grid;place-items:center;outline:none}
.cover-box:hover,.cover-box:focus,.cover-box.drag{border-color:var(--gold)}
.cover-box img{width:100%;display:block;object-fit:cover}
.cover-169{aspect-ratio:16/9}
.cover-169 img{height:100%}
.cover-ph{display:flex;flex-direction:column;align-items:center;gap:6px;padding:18px 12px;text-align:center}
.cover-busy{position:absolute;inset:0;background:rgba(255,255,255,.85);display:flex;align-items:center;justify-content:center}
.cover-busy .dz-bar{width:70%}

/* ============================================================
   内容编辑页（对标成熟 CMS：顶部操作条 + 大地画布 + 设置侧栏）
   ============================================================ */
.ed{max-width:1360px}
.ed-bar{position:sticky;top:60px;z-index:25;display:flex;align-items:center;gap:10px;
  padding:10px 0 12px;background:linear-gradient(to bottom,var(--bg) 72%,rgba(245,246,248,0))}
.ed-crumb{font-size:12.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:44%}
.ed-crumb b{color:var(--text);font-weight:600}
.ed-bar .grow{flex:1}
.ed-main{display:grid;grid-template-columns:minmax(0,1fr) 348px;gap:20px;align-items:start}
@media(max-width:1180px){.ed-main{grid-template-columns:1fr}.ed-side{position:static!important}}

.ed-canvas{background:var(--card);border:1px solid var(--line);border-radius:14px;
  box-shadow:0 1px 2px rgba(18,32,46,.04);padding:30px 38px 40px}
.ed-title{width:100%;border:0;outline:none;background:transparent;padding:2px 0 4px;
  font-family:"Noto Serif SC","Songti SC",serif;font-size:27px;font-weight:700;color:var(--ink);letter-spacing:.01em}
.ed-title::placeholder{color:#c2cad4;font-weight:600}
.ed-sub{width:100%;border:0;outline:none;resize:none;background:transparent;margin-top:8px;
  font-size:14px;line-height:1.85;color:#5b6673;min-height:46px;font-family:inherit}
.ed-sub::placeholder{color:var(--s-meta)}
.ed-div{height:1px;background:var(--line-2);margin:20px 0 18px}
.ed-empty{border:1.5px dashed var(--line);border-radius:12px;padding:40px 24px;text-align:center;background:#fbfcfd}
.ed-empty b{font-size:14px;color:var(--text)}
.ed-empty p{font-size:12.5px;color:var(--muted);margin:8px 0 0;line-height:1.9}

.word-hd{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.word-hd b{font-size:13px;color:var(--text)}
.word-frame{width:100%;height:calc(74vh / var(--z,1));min-height:560px;border:1px solid var(--line);border-radius:12px;background:#f2f3f5;display:block}

.ed-side{position:sticky;top:112px;display:flex;flex-direction:column;gap:14px}
.ed-side .card{margin:0}
.ed-side .card-hd{padding:12px 16px}
.ed-side .card-bd{padding:14px 16px}
.ed-side .field{margin-bottom:12px}
.ed-side .field:last-child{margin-bottom:0}
.ed-side .field label{font-size:12px;color:var(--muted)}
.ed-side .btn-block{margin-top:2px}

/* 来源切换（视频） */
.src-tabs{display:flex;gap:6px;padding:4px;background:#f2f4f7;border-radius:9px;margin-bottom:14px;width:fit-content}
.src-tab{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border:0;border-radius:7px;background:transparent;
  color:var(--muted);font-size:12.5px;cursor:pointer;transition:.15s}
.src-tab:hover{color:var(--text)}
.src-tab.on{background:#fff;color:var(--ink);font-weight:600;box-shadow:0 1px 3px rgba(18,32,46,.10)}
.src-pane{animation:edFade .18s ease}
@keyframes edFade{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}
.emb-box iframe{width:100%;aspect-ratio:16/9;border:0;border-radius:10px;background:#000}

/* ============================================================
   内容工作台 · 网校 CMS 风格编辑页（.edx-*）
   ============================================================ */
.edx{max-width:1420px}
.edx-top{position:sticky;top:56px;z-index:26;display:flex;align-items:center;gap:12px;
  background:rgba(255,255,255,.94);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  border:1px solid var(--line);border-radius:14px;padding:9px 12px 9px 10px;margin-bottom:16px;
  box-shadow:0 10px 30px -26px rgba(18,32,46,.75)}
.edx-back{width:34px;height:34px;display:grid;place-items:center;border-radius:9px;color:var(--muted);
  border:1px solid var(--line);background:#fff;flex:none;transition:.15s;font-size:15px}
.edx-back:hover{color:var(--ink);border-color:var(--gold);background:var(--gold-06)}
.edx-ttl{min-width:0;flex:1}
.edx-ttl .k{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--faint);letter-spacing:.06em}
.edx-ttl .k b{color:var(--gold-deep);font-weight:600;letter-spacing:.02em}
.edx-ttl .v{font-size:14px;font-weight:600;color:var(--ink);margin-top:1px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;max-width:520px}
.edx-top .sp{flex:1}
.edx-acts{display:flex;align-items:center;gap:7px;flex:none}
.edx-acts .btn{white-space:nowrap}

/* 状态徽标 */
.edx-state{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;padding:4px 10px;border-radius:20px;
  background:#f3f5f8;color:var(--muted);font-weight:500;white-space:nowrap}
.edx-state i{width:6px;height:6px;border-radius:50%;background:currentColor;display:block}
.edx-state.on{background:var(--green-soft);color:#0b7a45}
.edx-state.off{background:#f4f6f9;color:var(--muted)}
.edx-state.draft{background:var(--amber-soft);color:var(--amber)}

/* 主体两栏 */
.edx-body{display:grid;grid-template-columns:minmax(0,1fr) 336px;gap:18px;align-items:start}
.edx-body.focus{grid-template-columns:minmax(0,1fr)}
.edx-body.focus .edx-side{display:none}
.edx-body.focus .edx-word iframe{height:auto;min-height:calc(calc(100vh / var(--z,1)) - 250px)}
.edx-main{min-width:0;display:flex;flex-direction:column;gap:16px}

/* 卡片 */
.edx-card{background:var(--card);border:1px solid var(--line);border-radius:16px;overflow:hidden;
  box-shadow:0 1px 2px rgba(18,32,46,.03)}
.edx-card-hd{display:flex;align-items:flex-start;gap:11px;padding:16px 20px;
  border-bottom:1px solid var(--line-2);background:linear-gradient(180deg,#fcfdfe,#fff)}
.edx-no{flex:none;width:27px;height:27px;border-radius:9px;display:grid;place-items:center;
  font-size:11.5px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:.02em;
  background:var(--gold-06);color:var(--gold-deep);border:1px solid var(--gold-22)}
.edx-card-hd h2{font-size:14px;font-weight:650;color:var(--ink);margin:0;line-height:1.5;letter-spacing:.01em}
.edx-card-hd p{font-size:11.5px;color:var(--faint);margin:2px 0 0;line-height:1.7}
.edx-card-hd .rt{margin-left:auto;flex:none;display:flex;align-items:center;gap:8px;padding-top:2px}
.edx-card-bd{padding:20px}

/* 大标题输入 */
.edx-title{width:100%;border:0;border-bottom:1px solid transparent;outline:none;background:transparent;
  font-family:"Noto Serif SC","Songti SC",serif;font-size:25px;font-weight:600;color:var(--ink);
  padding:4px 0 10px;line-height:1.35;letter-spacing:.01em;transition:border-color .18s}
.edx-title:focus{border-bottom-color:var(--gold-22)}
.edx-title::placeholder{color:#c8d0da;font-weight:500}
.edx-sub{width:100%;border:0;outline:none;resize:none;background:transparent;margin-top:6px;
  font-size:13.5px;line-height:1.85;color:var(--muted);min-height:48px;font-family:inherit}
.edx-sub::placeholder{color:#b9c2cd}

/* 字段网格 */
.edx-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}
.edx-grid .field{margin-bottom:14px}
.edx-grid .field.full{grid-column:1/-1}

/* 媒体区 */
.edx-media{position:relative;border-radius:13px;overflow:hidden;background:#0d1a26;
  border:1px solid rgba(18,32,46,.16)}
.edx-media video,.edx-media iframe{display:block;width:100%;border:0;background:#000}
.edx-media video{max-height:430px}
.edx-media.audio{padding:30px 24px;display:flex;flex-direction:column;align-items:center;gap:16px;
  background:linear-gradient(155deg,#1b2d3f,#0c1722)}
.edx-media .cover{width:88px;height:88px;border-radius:50%;object-fit:cover;border:1px solid rgba(176,141,87,.32)}
.edx-media .cover.ph{display:grid;place-items:center;font-family:"Noto Serif SC",serif;font-size:30px;
  color:var(--gold);background:rgba(255,255,255,.04)}
.edx-media audio{width:100%}
.edx-media .tag{position:absolute;left:12px;top:12px;font-size:11px;padding:3px 9px;border-radius:6px;
  background:rgba(12,23,34,.72);color:#f0dcc0;letter-spacing:.05em;backdrop-filter:blur(4px)}
.edx-meta{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:12px}
.edx-meta span{font-size:11.5px;color:var(--faint);display:inline-flex;align-items:center;gap:5px}
.edx-meta b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}

/* 右栏 */
.edx-side{display:flex;flex-direction:column;gap:14px;align-self:start}
.edx-block{background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.edx-block-hd{display:flex;align-items:center;gap:8px;padding:11px 15px;background:#fbfcfd;
  border-bottom:1px solid var(--line-2)}
.edx-block-hd h3{font-size:12px;font-weight:650;color:var(--ink);margin:0;letter-spacing:.06em}
.edx-block-hd .d{width:4px;height:12px;border-radius:2px;background:var(--gold);flex:none}
.edx-block-hd .rt{margin-left:auto;font-size:11px;color:var(--faint)}
.edx-block-bd{padding:13px 15px}
.edx-block-bd .field{margin-bottom:12px}
.edx-block-bd .field:last-child{margin-bottom:0}
.edx-block-bd .field>label{font-size:11.5px;color:var(--muted);font-weight:500;margin-bottom:5px;display:block}
.edx-block-bd input[type=text],.edx-block-bd input[type=number],.edx-block-bd input[type=datetime-local],
.edx-block-bd select,.edx-block-bd textarea{font-size:12.5px}

/* 前台地址（只读，可复制/打开） */
.edx-addr{display:flex;align-items:stretch;gap:6px}
.edx-addr code{flex:1;min-width:0;display:block;padding:7px 10px;border-radius:8px;
  border:1px solid var(--line-2);background:#f6f8fa;font-size:11.5px;line-height:1.5;
  color:var(--ink-3);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.edx-addr code.is-new{color:var(--faint);font-family:inherit;font-size:12px;letter-spacing:.02em}
.edx-addr-b{flex:none;display:inline-flex;align-items:center;padding:0 10px;border-radius:8px;
  border:1px solid var(--line-2);background:#fff;font-size:11.5px;color:var(--muted);
  cursor:pointer;transition:.15s;text-decoration:none;white-space:nowrap}
.edx-addr-b:hover{border-color:var(--gold-22);background:var(--gold-06);color:var(--ink)}

/* 开关 */
.edx-sw-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px dashed var(--line-2)}
.edx-sw-row:first-child{padding-top:0}
.edx-sw-row:last-child{border-bottom:0;padding-bottom:0}
.edx-sw-row .lb{flex:1;min-width:0;font-size:12.5px;color:var(--text);line-height:1.45}
.edx-sw-row .lb small{display:block;font-size:11px;color:var(--faint);margin-top:1px}
.edx-sw{position:relative;width:34px;height:19px;flex:none}
.edx-sw input{position:absolute;inset:0;opacity:0;margin:0;cursor:pointer;z-index:2;width:100%;height:100%}
.edx-sw i{position:absolute;inset:0;background:#d6dde6;border-radius:20px;transition:.18s;pointer-events:none}
.edx-sw i:after{content:"";position:absolute;left:2px;top:2px;width:15px;height:15px;background:#fff;
  border-radius:50%;transition:.18s;box-shadow:0 1px 3px rgba(18,32,46,.25)}
.edx-sw input:checked+i{background:var(--gold-deep)}
.edx-sw input:checked+i:after{transform:translateX(15px)}
.edx-sw input:focus-visible+i{box-shadow:0 0 0 3px var(--ring)}

/* 封面预览 */
.edx-cover{position:relative;border-radius:10px;overflow:hidden;background:#0e1a26;aspect-ratio:16/9}
.edx-cover img{width:100%;height:100%;object-fit:cover;display:block}
.edx-cover .ph{position:absolute;inset:0;display:grid;place-items:center;color:rgba(255,255,255,.4);
  font-size:11.5px;letter-spacing:.08em;
  background:repeating-linear-gradient(45deg,#111f2c,#111f2c 8px,#16283a 8px,#16283a 16px)}

/* 课程目录（编辑页内的课时导航） */
.edx-lessons{display:flex;flex-direction:column;gap:6px}
.edx-lesson{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:9px;
  border:1px solid var(--line-2);background:#fff;font-size:12.5px;color:var(--text);transition:.15s}
.edx-lesson:hover{border-color:var(--gold-22);background:var(--gold-06)}
.edx-lesson.on{background:var(--gold-06);border-color:var(--gold-22);font-weight:600;color:var(--ink)}
.edx-lesson .n{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums;flex:none;width:18px}
.edx-lesson.on .n{color:var(--gold-deep)}
.edx-lesson .t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.edx-lesson .d{font-size:10.5px;color:var(--faint);font-variant-numeric:tabular-nums;flex:none}
.edx-lesson.add{border-style:dashed;color:var(--muted);justify-content:center}

/* 底部固定提交条 */
.edx-foot{position:sticky;bottom:0;z-index:20;display:flex;align-items:center;gap:10px;
  margin-top:16px;padding:12px 16px;border-radius:13px;border:1px solid var(--line);
  background:rgba(255,255,255,.96);backdrop-filter:blur(12px);
  box-shadow:0 -6px 24px -20px rgba(18,32,46,.8)}
.edx-foot .tip{font-size:11.5px;color:var(--faint);flex:1}
.edx-foot .btn{white-space:nowrap}

/* 提示条 */
.edx-hint{display:flex;gap:9px;padding:10px 12px;border-radius:9px;background:#f8fafc;
  border:1px solid var(--line-2);font-size:11.5px;color:var(--muted);line-height:1.75}
.edx-hint b{color:var(--ink)}
.edx-hint.gold{background:var(--gold-06);border-color:var(--gold-22);color:#7a6440}

/* 空态 */
.edx-empty{border:1.5px dashed var(--line);border-radius:13px;padding:44px 24px;text-align:center;background:#fbfcfd}
.edx-empty .ic{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;margin:0 auto 14px;
  background:var(--gold-06);color:var(--gold-deep);border:1px solid var(--gold-22)}
.edx-empty b{font-size:14px;color:var(--ink);display:block}
.edx-empty p{font-size:12.5px;color:var(--muted);margin:8px 0 0;line-height:1.9}

/* Word 编辑器外框 */
.edx-word{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#f2f3f5}
.edx-word iframe{display:block;width:100%;height:calc(76vh / var(--z,1));min-height:580px;border:0}
/* 课程/专栏页：正文编辑器不占满一屏，便于向下管理课时与章节 */
.edx-word.compact iframe{height:calc(58vh / var(--z,1));min-height:440px}
.edx-word-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin:0 0 8px}
.edx-word-head>label{font-size:12px;color:var(--muted)}
.edx-word-head .rt{display:flex;align-items:center;gap:6px}
.word-hd{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.word-hd b{font-size:13px;color:var(--text)}
.word-frame{width:100%;height:calc(74vh / var(--z,1));min-height:560px;border:1px solid var(--line);border-radius:12px;background:#f2f3f5;display:block}

/* 1366 及以下（笔记本、缩放后的宽屏）：右栏收到 300，多留一点给正文 ——
   336 在 1280 上会把编辑区压到 400px，写长句要不停换行 */
@media(max-width:1366px){
  .edx-body{grid-template-columns:minmax(0,1fr) 300px}}
@media(max-width:1000px){
  .edx-body{grid-template-columns:1fr}
  .edx-side{display:grid;grid-template-columns:1fr 1fr;align-items:start}
  .edx-top{top:52px}
  .edx-ttl .v{max-width:240px}}
@media(max-width:720px){
  .edx-side{grid-template-columns:1fr}
  .edx-grid{grid-template-columns:1fr}
  .edx-title{font-size:21px}
  .edx-card-bd{padding:16px}
  .edx-top{flex-wrap:wrap;padding:8px 10px}
  .edx-acts{width:100%;justify-content:flex-end;border-top:1px solid var(--line-2);padding-top:8px;margin-top:2px}
  .edx-word iframe{height:calc(62vh / var(--z,1));min-height:420px}}

/* 课程编辑 · 课时列表 */
.crs-list{display:flex;flex-direction:column}
.crs-row{display:flex;align-items:center;gap:12px;padding:13px 0;border-bottom:1px solid var(--line-2)}
.crs-row:last-child{border-bottom:0}
.crs-no{width:26px;flex:none;font-size:12px;color:var(--faint);font-variant-numeric:tabular-nums;
  font-weight:600;letter-spacing:.02em}
.crs-thumb{width:76px;height:46px;border-radius:7px;overflow:hidden;background:#eef1f5;flex:none;
  display:grid;place-items:center;color:#b9c2cd;position:relative}
.crs-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.crs-tt{flex:1;min-width:0}
.crs-tt .t{font-size:13.5px;font-weight:500;color:var(--text);display:block;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.crs-tt .t:hover{color:var(--gold-deep)}
.crs-tt .m{font-size:11.5px;color:var(--faint);margin-top:3px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.crs-tt .m .dot{width:2px;height:2px;background:#c9d0da;border-radius:50%}
.crs-ops{display:flex;align-items:center;gap:4px;flex:none}
.crs-ops .mv-group{display:flex;align-items:center;gap:4px;margin-right:7px;padding-right:9px;
  border-right:1px solid var(--line-2)}
.crs-ops form{margin:0;display:flex}
.crs-ops .mv{width:24px;height:24px;display:grid;place-items:center;border:1px solid var(--line);
  border-radius:6px;background:#fff;color:var(--muted);font-size:11px;cursor:pointer}
.crs-ops .mv:hover{border-color:var(--gold);color:var(--gold-deep)}
.crs-ops .mv:disabled{opacity:.35;cursor:not-allowed}
.crs-add{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px;
  border:1px dashed var(--line);border-radius:10px;color:var(--muted);font-size:13px;background:#fbfcfd;
  transition:.16s;margin-top:14px}
/* 课程编辑 · 封面行（窄屏自动换行，避免上传提示被裁切） */
.edx-cover-row{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}
.edx-cover-row .edx-cover{width:220px;flex:none}
.edx-cover-row .edx-cover-up{flex:1;min-width:240px}

.crs-add:hover{border-color:var(--gold);color:var(--gold-deep);background:var(--gold-06)}

/* 课时编辑 · 所属课程卡 / 侧栏课时目录 */
.crs-owner{display:flex;align-items:center;gap:10px;padding:10px;border:1px solid var(--line-2);
  border-radius:10px;background:#fbfcfd;transition:.16s}
.crs-owner:hover{border-color:var(--gold);background:var(--gold-06)}
.crs-owner .cr-th{width:44px;height:30px;border-radius:6px;overflow:hidden;background:#eef1f5;flex:none;
  display:grid;place-items:center;color:#b9c2cd}
.crs-owner .cr-th img{width:100%;height:100%;object-fit:cover;display:block}
.crs-owner .cr-tt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.crs-owner .cr-tt b{font-size:12.5px;color:var(--text);font-weight:600;line-height:1.35;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.crs-owner .cr-tt small{font-size:11px;color:var(--faint)}
.crs-owner .cr-go{font-size:11.5px;color:var(--gold-deep);flex:none}
.crs-mini{display:flex;flex-direction:column;gap:1px;max-height:238px;overflow:auto;
  margin:-4px -4px 0;padding:4px}
.crs-mini-row{display:flex;align-items:center;gap:9px;padding:7px 8px;border-radius:7px;
  font-size:12.5px;color:var(--muted);transition:.14s}
.crs-mini-row:hover{background:#f2f5f8;color:var(--text)}
.crs-mini-row.on{background:var(--gold-06);color:var(--gold-deep);font-weight:600}
.crs-mini-row i{font-style:normal;font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums;flex:none;width:18px}
.crs-mini-row.on i{color:var(--gold-deep)}
.crs-mini-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ============================================================
   网校会员（后台）
   ============================================================ */
.cms-hint{font-size:12px;line-height:1.7;color:var(--muted);background:var(--line-2);border-radius:8px;padding:9px 12px}
.inline-check{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--text);cursor:pointer}
.inline-check input{width:15px;height:15px;accent-color:var(--gold-deep)}

.mbr-av{width:34px;height:34px;border-radius:50%;flex:none;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--gold-solid),var(--gold-hover));color:var(--on-gold);font-size:13px;font-weight:600}
.mbr-type{display:inline-block;font-size:11.5px;padding:2px 8px;border-radius:999px;border:1px solid var(--line);color:var(--muted);background:#fff}
.mbr-type.client{color:var(--gold-deep);border-color:var(--gold-25,#e6d9b8);background:var(--gold-06,#fbf6e8)}
.mbr-type.lawyer{color:#1e3a5f;border-color:#c9d8e8;background:#eef4fa}
.mbr-level{display:inline-block;font-size:11.5px;padding:2px 8px;border-radius:999px;background:var(--line-2);color:var(--muted)}
.mbr-level.gold{color:#8a6d1f;background:#faf3df}
.mbr-level.navy{color:#1e3a5f;background:#eaf1f8}

/* ============================================================
   网校：会员入口 / 权限墙 / 富文本
   ============================================================ */
.mbr-link{font-size:13px;color:var(--ink);padding:8px 2px;border-bottom:1px solid transparent;letter-spacing:.02em}
.mbr-link:hover{color:var(--gold-deep);border-bottom-color:var(--gold-22)}

/* ---------- 图文专栏 ---------- */
.srs-hero{background:var(--ink);padding:44px 0 54px;color:#fff}
.srs-hero .crumb{font-size:11.5px;color:rgba(255,255,255,.44);margin-bottom:26px}
.srs-hero .crumb a{color:rgba(255,255,255,.6)}
.srs-hero .crumb i{font-style:normal;margin:0 8px;opacity:.4}
.srs-hd{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:48px;align-items:center}
.srs-hd.no-cover{grid-template-columns:1fr}
.srs-hd .kicker{font-size:10.5px;letter-spacing:.32em;color:var(--gold-text);text-transform:uppercase;margin-bottom:16px}
.srs-hd h1{margin:0 0 16px;font-family:'Noto Serif SC',serif;font-size:40px;line-height:1.32;font-weight:600}
.srs-hd .lead{font-size:14.5px;line-height:2;color:rgba(255,255,255,.62);margin:0 0 22px;max-width:620px}
.srs-hd .meta{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:rgba(255,255,255,.5);align-items:center}
.srs-hd .meta b{color:rgba(255,255,255,.86);font-weight:600}
.srs-hd .meta .acc{color:var(--gold-text);border:1px solid rgba(176,141,87,.42);padding:2px 10px;border-radius:999px;font-size:11px}
.srs-hd .acts{margin-top:26px;display:flex;gap:12px}
.srs-hd .r img{width:100%;aspect-ratio:16/10;object-fit:cover;display:block;border:1px solid rgba(255,255,255,.12)}

.srs-body{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:56px;align-items:start}
.srs-h2{font-family:'Noto Serif SC',serif;font-size:22px;color:var(--ink);font-weight:600;margin:0 0 22px;
  padding-bottom:14px;border-bottom:1px solid rgba(18,32,46,.08)}
.srs-tags{display:flex;gap:8px;flex-wrap:wrap;margin-top:30px}

.srs-toc{border:1px solid rgba(18,32,46,.1);background:#fff}
.srs-toc .hd{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid rgba(18,32,46,.08)}
.srs-toc .hd b{font-size:13.5px;color:var(--ink);font-weight:600}
.srs-toc .hd span{font-size:11.5px;color:var(--s-meta)}
.srs-toc .list{max-height:520px;overflow:auto}
.srs-toc .list a{display:flex;align-items:center;gap:12px;padding:12px 18px;border-bottom:1px solid rgba(18,32,46,.06);font-size:13px;color:#3f4a57}
.srs-toc .list a:hover{background:#fafbfc;color:var(--gold-deep)}
.srs-toc .list a.locked{color:#9aa5b1}
.srs-toc .list .n{flex:none;font-size:11.5px;color:#c3cad4;font-variant-numeric:tabular-nums}
.srs-toc .list .t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.srs-toc .list .d{flex:none;font-size:11px;color:#b6bfca}
.srs-toc .ft{padding:14px 18px;font-size:11.5px;line-height:1.85;color:var(--s-meta);border-top:1px solid rgba(18,32,46,.08)}

.srs-rel{display:flex;flex-direction:column;gap:2px}
.srs-rel a{display:flex;justify-content:space-between;gap:16px;padding:15px 0;border-bottom:1px solid rgba(18,32,46,.08)}
.srs-rel a b{font-family:'Noto Serif SC',serif;font-size:15px;color:var(--ink);font-weight:500}
.srs-rel a span{font-size:11.5px;color:var(--s-meta);flex:none}

.srs-ch-hd{padding:42px 0 34px;border-bottom:1px solid rgba(18,32,46,.08);background:#fff}
.srs-ch-hd .crumb{font-size:11.5px;color:var(--s-meta);margin-bottom:20px}
.srs-ch-hd .crumb a{color:var(--s-meta)}
.srs-ch-hd .crumb i{font-style:normal;margin:0 8px;opacity:.5}
.srs-ch-ttl .kicker{font-size:11px;letter-spacing:.16em;color:var(--gold-deep);margin-bottom:12px}
.srs-ch-ttl h1{margin:0 0 16px;font-family:'Noto Serif SC',serif;font-size:32px;line-height:1.45;color:var(--ink);font-weight:600}
.srs-ch-ttl .meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--s-meta)}
.srs-ch-ttl .dot{width:3px;height:3px;border-radius:50%;background:#c3cad4;display:inline-block}

.srs-read{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:56px;align-items:start}
.srs-nav{display:flex;gap:16px;margin-top:56px;padding-top:26px;border-top:1px solid rgba(18,32,46,.1)}
.srs-nav a{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;padding:16px 18px;border:1px solid rgba(18,32,46,.1);transition:.15s}
.srs-nav a:hover{border-color:var(--gold);background:#fdfbf6}
.srs-nav a span{font-size:11px;color:var(--s-meta);letter-spacing:.08em}
.srs-nav a b{font-family:'Noto Serif SC',serif;font-size:14px;color:var(--ink);font-weight:500;line-height:1.6}
.srs-nav a.next{text-align:right;align-items:flex-end}
.srs-note{margin-top:34px;padding-top:18px;border-top:1px solid rgba(18,32,46,.09);
  font-size:12px;line-height:1.9;color:#7f8b99}
.srs-note a{color:var(--gold-deep);border-bottom:1px solid var(--gold-22)}
.srs-side{position:sticky;top:96px;padding:20px 20px 22px;background:#fff;border-radius:3px;
  border:1px solid rgba(18,32,46,.075);
  box-shadow:0 1px 2px rgba(18,32,46,.03),0 22px 48px -32px rgba(18,32,46,.32)}
.srs-side .hd{display:flex;flex-direction:column;gap:4px;padding-bottom:14px;margin-bottom:8px;border-bottom:1px solid rgba(18,32,46,.08)}
.srs-side .hd a{font-family:'Noto Serif SC',serif;font-size:15px;color:var(--ink);font-weight:600}
.srs-side .hd span{font-size:11.5px;color:var(--s-meta)}
.srs-side .list{max-height:calc(60vh / var(--z,1));overflow:auto}
.srs-side .list a{display:flex;gap:10px;padding:9px 0;font-size:12.5px;color:#5d6875;line-height:1.6}
.srs-side .list a:hover{color:var(--gold-deep)}
.srs-side .list a.on{color:var(--gold-deep);font-weight:600}
.srs-side .list .n{flex:none;color:#c3cad4;font-variant-numeric:tabular-nums;font-size:11.5px}@media (max-width:1024px){
  .srs-hd,.srs-body,.srs-read{grid-template-columns:1fr;gap:32px}
  .srs-hd .r{display:none}
  .srs-side{position:static}}@media (max-width:640px){
  .srs-hd h1{font-size:28px}
  .srs-ch-ttl h1{font-size:23px}
  .srs-nav{grid-template-columns:1fr}}

/* ============================================================
   后台 · 网站图片设置
   ============================================================ */
.simg-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.simg-grid.wide{grid-template-columns:repeat(2,minmax(0,1fr))}
.simg-item{display:flex;flex-direction:column;gap:10px;padding:14px;border:1px solid var(--line);border-radius:12px;background:#fff}
.simg-hd{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.simg-hd b{font-size:13.5px;font-weight:600;color:var(--text)}
.simg-hd span{font-size:11px;color:var(--faint);font-family:ui-monospace,Menlo,monospace;flex:none}
.simg-prev{position:relative;width:100%;height:150px;border:1px dashed var(--line);border-radius:8px;overflow:hidden;display:grid;place-items:center;
  background:repeating-conic-gradient(#f6f8fa 0% 25%,#fff 0% 50%) 50%/18px 18px}
.simg-prev.tall{height:150px}
.simg-item.span2{grid-column:1/-1}
.simg-item.span2 .simg-prev{height:170px}
.simg-prev.has{border-style:solid;background:#0f1a25}
.simg-prev img{width:100%;height:100%;object-fit:contain;padding:6px;display:block}
.simg-prev.has.wide img{object-fit:cover;padding:0}
.simg-empty{font-size:11.5px;color:var(--faint);letter-spacing:.02em;background:rgba(255,255,255,.9);padding:4px 10px;border-radius:999px}
.simg-hint{font-size:11.5px;color:var(--faint);line-height:1.65;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.simg-item .uptr-ic{display:none}
.simg-item .uptr-row{padding:5px 6px 5px 10px}
.simg-item .uptr-sub{display:none}
.simg-actions{position:sticky;bottom:0;z-index:6;display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:12px 16px;background:rgba(245,246,248,.92);backdrop-filter:blur(8px);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow)}
@media (max-width:960px){.simg-grid,.simg-grid.wide{grid-template-columns:1fr}}

/* 编辑页里已有大预览，上传行只保留状态与按钮，避免重复缩略图 */
.edx .uptr-ic{display:none}
.edx .uptr-row{padding:7px 8px 7px 11px}
.edx-cover-row .edx-cover-up{flex:1;min-width:240px;align-self:center}

/* 侧栏独立入口（无分组标题，如「官网管理」） */
.nav-group.flat{margin-top:14px;padding-top:12px;border-top:1px solid rgba(255,255,255,.07)}

/* hidden 属性对 flex 按钮不生效，需显式覆盖 */
.uptr-del[hidden],.uptr-ic[hidden]{display:none!important}
.upm-prog[hidden],.upm-done[hidden]{display:none!important}

/* ============================================================
   统一上传组件（x-uploader）· 行内触发器 + 全站唯一弹窗
   ============================================================ */
.uptr{display:block}
.uptr-row{display:flex;align-items:center;gap:10px;padding:7px 8px 7px 10px;border:1px solid var(--line);border-radius:9px;background:#fff}
.uptr-row:hover{border-color:#d6dbe3}
.uptr-ic{width:34px;height:34px;flex:none;border-radius:7px;background:#f2f4f7;display:grid;place-items:center;color:#93a0af;overflow:hidden}
.uptr-ic img,.uptr-ic video{width:100%;height:100%;object-fit:cover;display:block}
.uptr-ic[data-kind="image"]{color:var(--gold-deep);background:var(--gold-soft)}
.uptr-meta{min-width:0;flex:1;display:flex;flex-direction:column;gap:1px}
.uptr-name{font-size:12.5px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.uptr-sub{font-size:11px;color:var(--faint);line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.uptr-trigger{flex:none;gap:4px;padding:0 12px;height:30px}
.uptr-del{flex:none;height:30px;padding:0 8px;color:var(--faint)}
.uptr.is-busy .uptr-row{border-color:var(--gold-22);background:var(--gold-06)}
.uptr.is-busy .uptr-trigger{pointer-events:none;opacity:.6}

/* —— 统一上传弹窗 —— */
.upm{width:520px;max-width:calc(calc(100vw / var(--z,1)) - 32px)}
.upm .m-bd{padding:18px 20px}
label.upm-drop,.upm-drop{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-height:168px;
  border:1.5px dashed #d8dee7;border-radius:12px;background:#fafbfc;cursor:pointer;text-align:center;padding:18px;transition:.18s}
.upm-drop:hover,.upm-drop.drag{border-color:var(--gold);background:var(--gold-06)}
.upm-file{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}
.upm-ico{width:46px;height:46px;border-radius:50%;background:#fff;border:1px solid var(--line);display:grid;place-items:center;color:var(--gold-deep)}
.upm-t1{font-size:13.5px;font-weight:500;color:var(--text)}
.upm-t2{font-size:11.5px;color:var(--faint);line-height:1.6;max-width:340px}
.upm-prog{margin-top:14px;display:flex;align-items:center;gap:10px}
.upm-prog .bar{flex:1;height:6px;border-radius:999px;background:#e8ebf0;overflow:hidden}
.upm-prog .bar span{display:block;height:100%;width:0;border-radius:999px;background:linear-gradient(90deg,var(--gold),var(--gold-deep));transition:width .16s}
.upm-prog em{font-style:normal;font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums;min-width:34px;text-align:right}
/* 分片上传：进度下面一行「已传 / 总量 · 速度 · 剩余」，以及暂停按钮 */
.upm-sub{margin-top:8px;font-size:11.5px;color:var(--muted);line-height:1.75;font-variant-numeric:tabular-nums}
.upm-sub[hidden]{display:none!important}
.upm-sub.is-bad{color:var(--bad)}
.upm-acts{margin-top:10px;display:flex;gap:8px}
.upm-acts[hidden]{display:none!important}
.upm-done{margin-top:14px;display:flex;align-items:center;gap:11px;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:#fff}
.upm-thumb{width:52px;height:40px;flex:none;border-radius:6px;background:#f2f4f7;overflow:hidden;display:grid;place-items:center;color:var(--faint)}
.upm-thumb img,.upm-thumb video{width:100%;height:100%;object-fit:cover;display:block}
.upm-info{min-width:0;flex:1}
.upm-info b{display:block;font-size:12.5px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.upm-info small{font-size:11px;color:var(--faint)}
.upm-tip{margin-top:12px;font-size:11.5px;color:var(--faint);line-height:1.75}
.upm-tip b{color:var(--muted);font-weight:500}

/* ============================================================
   官网管理 · 以页面为中心
   ============================================================ */
/* 顶部导航：页面组 + 站点设置组 */
.cms-subnav .sep{flex:none;width:1px;height:18px;background:rgba(18,32,46,.14);margin:0 6px;align-self:center}
.cms-subnav a.util{color:var(--muted);font-size:12.5px;padding:6px 10px}
.cms-subnav a.util svg{opacity:.7}
.cms-subnav a.util.on{color:var(--ink);font-weight:600}

/* 页面卡片网格 */
.spg-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.spg-card{position:relative;display:flex;flex-direction:column;gap:10px;padding:17px 18px 15px;
  background:var(--card);border:1px solid var(--line);border-radius:14px;text-decoration:none;
  transition:.18s;overflow:hidden}
.spg-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:transparent;transition:.18s}
.spg-card:hover{border-color:rgba(176,141,87,.45);box-shadow:0 10px 26px -18px rgba(18,32,46,.5);transform:translateY(-1px)}
.spg-card:hover:before{background:var(--gold)}
.spg-card.is-off{background:#fafbfc;border-style:dashed}
.spg-top{display:flex;align-items:center;gap:11px}
.spg-ico{width:34px;height:34px;flex:none;border-radius:10px;display:grid;place-items:center;
  background:var(--gold-soft);color:var(--gold-deep)}
.spg-name{min-width:0;flex:1}
.spg-name b{display:block;font-size:14.5px;font-weight:600;color:var(--ink);letter-spacing:.01em}
.spg-name small{display:block;font-size:11px;color:var(--faint);font-family:ui-monospace,Menlo,monospace;margin-top:1px}
.spg-tag{flex:none;font-size:10.5px;color:var(--faint);border:1px solid var(--line);border-radius:20px;padding:1px 7px}
.spg-desc{margin:0;font-size:12.5px;color:var(--muted);line-height:1.72;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:42px}
.spg-meta{display:flex;align-items:center;gap:16px;padding-top:10px;border-top:1px dashed var(--line-2);margin-top:auto}
.spg-meta .m{display:inline-flex;align-items:baseline;gap:5px}
.spg-meta .m i{font-style:normal;font-size:11px;color:var(--faint)}
.spg-meta .m b{font-size:14px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.spg-go{margin-left:auto;font-size:12.5px;color:var(--gold-deep);font-weight:500;display:inline-flex;gap:4px}
.spg-go span{transition:.18s}
.spg-card:hover .spg-go span{transform:translateX(3px)}

/* 站点设置 */
.spg-sec{margin-top:26px}
.spg-sec-hd{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.spg-sec-hd b{font-size:14px;color:var(--ink)}
.spg-sec-hd span{font-size:12px;color:var(--faint)}
.spg-utils{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.spg-util{display:flex;align-items:flex-start;gap:11px;padding:14px 15px;background:var(--card);
  border:1px solid var(--line);border-radius:12px;text-decoration:none;transition:.18s}
.spg-util:hover{border-color:rgba(176,141,87,.45);background:#fffdf9}
.spg-util b{display:block;font-size:13px;color:var(--ink);margin-bottom:2px}
.spg-util small{display:block;font-size:11.5px;color:var(--faint);line-height:1.6}

/* 页面编辑：双栏 */
.spp-layout{display:grid;grid-template-columns:minmax(0,1fr) 296px;gap:16px;align-items:start}
.spp-main{display:flex;flex-direction:column;gap:14px;min-width:0}
.spp-side{display:flex;flex-direction:column;gap:14px;position:sticky;top:76px}
.spp-card{background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.spp-hd{display:flex;align-items:center;gap:11px;padding:15px 18px;background:#fbfcfd;border-bottom:1px solid var(--line-2);cursor:pointer}
details.spp-card>.spp-hd{list-style:none}
details.spp-card>.spp-hd::-webkit-details-marker{display:none}
.spp-hd .no{flex:none;width:24px;height:24px;border-radius:7px;display:grid;place-items:center;
  font-size:11px;font-weight:600;color:var(--gold-deep);background:var(--gold-soft);font-variant-numeric:tabular-nums}
.spp-hd-t{flex:1;min-width:0}
.spp-hd b{font-size:13.5px;font-weight:600;color:var(--ink)}
.spp-hd small{display:block;font-size:11.5px;color:var(--faint);margin-top:2px;line-height:1.6}
.spp-hd.sm{padding:12px 16px;border-bottom:1px solid var(--line-2);background:#fbfcfd}
.spp-caret{flex:none;color:var(--faint);font-size:12px;transition:.2s}
.spp-card[open] .spp-caret{transform:rotate(180deg)}
.spp-switch{flex:none;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--muted);cursor:pointer;user-select:none}
.spp-switch input{appearance:none;width:32px;height:18px;border-radius:20px;background:#dde2ea;position:relative;transition:.18s;cursor:pointer;margin:0}
.spp-switch input:before{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:.18s;box-shadow:0 1px 2px rgba(0,0,0,.2)}
.spp-switch input:checked{background:var(--gold)}
.spp-switch input:checked:before{left:16px}

.spp-body{padding:16px 18px 18px;display:flex;flex-direction:column;gap:14px}
.spp-body .field{gap:6px}
.spp-body .field>label{display:flex;align-items:baseline;gap:8px;font-size:12px;color:var(--muted);font-weight:500}
.spp-tip{font-size:11px;color:var(--faint);font-weight:400}
.spp-hint{font-size:11px;color:var(--faint);line-height:1.6;margin-top:-4px}
.spp-rich{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;line-height:1.7}
.spp-half{max-width:50%}

/* 列表型板块 */
.spp-list{display:flex;flex-direction:column;gap:10px}
.spp-row{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px 10px;padding:12px 40px 12px 10px;
  border:1px solid var(--line-2);border-radius:10px;background:#fcfdfe;position:relative}
.spp-row:hover{border-color:#dfe4ec;background:#fff}
.spp-drag{flex:none;width:12px;color:#c9d1db;font-size:11px;line-height:30px;letter-spacing:-2px;user-select:none}
.spp-f{display:flex;flex-direction:column;gap:4px;flex:1 1 200px;min-width:0}
.spp-f.half{flex:1 1 120px}
.spp-f.full{flex:1 1 100%}
.spp-f label{font-size:11px;color:var(--faint)}
.spp-f input,.spp-f textarea{font-size:12.5px;padding:6px 9px}
.spp-del{position:absolute;top:8px;right:8px;width:24px;height:24px;border:0;border-radius:6px;
  background:transparent;color:#b9c2ce;cursor:pointer;display:grid;place-items:center;transition:.15s}
.spp-del:hover{background:#fdf1f0;color:var(--red)}
.spp-add{width:100%;justify-content:center;border-style:dashed;color:var(--muted)}
.spp-add:hover{border-color:var(--gold);color:var(--gold-deep);background:var(--gold-06)}
.spp-num{display:flex;align-items:baseline;gap:8px}
.spp-num b{font-size:26px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.spp-num span{font-size:11.5px;color:var(--faint)}
.spp-note{margin:0;font-size:11.5px;color:var(--faint);line-height:1.75}
.spp-note code{font-size:11px;background:#f2f4f7;padding:1px 5px;border-radius:4px;color:var(--muted)}
.spp-empty{text-align:center;padding:34px 20px}
.spp-empty b{font-size:14px;color:var(--ink)}
.spp-empty p{margin:8px 0 0;font-size:12.5px;color:var(--faint);line-height:1.8}

/* 底部保存条 */
.spp-foot{position:sticky;bottom:0;z-index:20;display:flex;align-items:center;gap:10px;margin-top:16px;
  padding:11px 16px;background:rgba(245,246,248,.94);backdrop-filter:blur(10px);
  border:1px solid var(--line);border-radius:12px;box-shadow:0 -6px 24px -20px rgba(18,32,46,.6)}
.spp-foot .tip{flex:1;font-size:11.5px;color:var(--faint)}
.spp-flash{margin-bottom:14px;padding:11px 15px;border-radius:10px;background:#eef7f1;border-left:2px solid #0f9d58;color:#0b6e3f;font-size:13px}

@media (max-width:1180px){
  .spg-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .spg-utils{grid-template-columns:repeat(2,minmax(0,1fr))}
  .spp-layout{grid-template-columns:1fr}
  .spp-side{position:static;flex-direction:row;flex-wrap:wrap}
  .spp-side>.spp-card{flex:1 1 260px}}
@media (max-width:760px){
  .spg-grid{grid-template-columns:1fr}
  .spg-utils{grid-template-columns:1fr}}
.spp-lock{flex:none;font-size:10.5px;color:var(--faint);border:1px solid var(--line);border-radius:20px;padding:1px 8px;letter-spacing:.02em}
@keyframes vplspin{to{transform:rotate(360deg)}}
@keyframes vpleq{0%,100%{transform:scaleY(.4)}50%{transform:scaleY(1)}}

/* 官网管理副导航：只在「所属分区」内切换（内容 / 会员 / 页面 / 站点），
   跨分区回总览——不同分区由不同岗位维护，不混在一条导航里。 */
.cms-subnav{display:flex;align-items:center;gap:2px;overflow-x:auto;overflow-y:hidden;
  max-width:100%;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.cms-subnav::-webkit-scrollbar{display:none}
.csn-tag{flex:none;font-size:11px;letter-spacing:.04em;color:#9aa6b6;padding:0 8px;white-space:nowrap}
.csn-back{display:inline-flex;align-items:center;gap:5px;flex:none;padding:6px 10px;border-radius:8px;
  font-size:12.5px;color:var(--muted);white-space:nowrap;text-decoration:none}
.csn-back:hover{background:rgba(255,255,255,.72);color:var(--ink)}
.csn-back svg{opacity:.7}
.csn-sep{flex:none;width:1px;height:16px;background:rgba(18,32,46,.12);margin:0 4px}

/* 页面编辑：板块拖拽排序 */
.spp-hd:not(summary){cursor:default}
.spp-order{display:flex;flex-direction:column;gap:8px}
.spp-order-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);
  border-radius:10px;background:#fff;transition:border-color .15s,box-shadow .15s}
.spp-order-item:hover{border-color:var(--gold)}
.spp-order-item.is-drag{opacity:.45;border-style:dashed}
.spp-order-item.is-over{box-shadow:inset 0 2px 0 var(--gold)}
.spp-order-grip{flex:none;width:20px;height:26px;display:grid;place-items:center;color:#b9c0cb;
  cursor:grab;font-size:13px;letter-spacing:-2px;user-select:none}
.spp-order-grip:active{cursor:grabbing}
.spp-order-no{flex:none;width:22px;height:22px;border-radius:6px;background:var(--gold-soft);
  color:var(--gold-deep);display:grid;place-items:center;font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}
.spp-order-t{flex:1;min-width:0}
.spp-order-t b{display:block;font-size:13px;color:var(--ink);font-weight:600}
.spp-order-t small{display:block;font-size:11.5px;color:var(--faint);margin-top:2px;line-height:1.5}
.spp-order-tag{flex:none;font-size:10.5px;color:var(--muted);border:1px solid var(--line);
  border-radius:20px;padding:2px 8px;white-space:nowrap}
.spp-order-move{flex:none;display:inline-flex;gap:4px}
.spp-order-move button{width:24px;height:24px;border:1px solid var(--line);background:#fff;
  border-radius:6px;color:var(--muted);font-size:11px;line-height:1;cursor:pointer;padding:0}
.spp-order-move button:hover{border-color:var(--gold);color:var(--gold-deep)}
.spp-order-state{flex:none;font-size:11px;color:var(--faint);padding:3px 9px;border-radius:20px;background:#f2f4f7}
.spp-order-state.is-busy{color:var(--muted)}
.spp-order-state.is-ok{color:#1a7f4b;background:#e9f7ef}
.spp-order-state.is-err{color:#b02a2a;background:#fdecec}
@media(max-width:640px){.spp-order-tag{display:none}}

/* 富文本字段：Word 编辑入口 */
.spp-rich-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:7px}
.spp-rich-tag{font-size:10.5px;color:var(--gold-deep);background:var(--gold-soft);border-radius:20px;padding:2px 8px}
.spp-word-btn{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--ink);
  border:1px solid var(--line);border-radius:7px;padding:4px 10px;background:#fff;text-decoration:none;transition:.15s}
.spp-word-btn:hover{border-color:var(--gold);color:var(--gold-deep);background:#fffdf8}
.spp-rich-note{font-size:11px;color:var(--faint);line-height:1.5}
.spp-word-frame{margin-top:2px;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#f7f8fa}
.spp-word-frame iframe{display:block;width:100%;height:520px;border:0;background:#fff}
.spp-word-idle{padding:26px 16px;text-align:center;font-size:12px;color:var(--faint);line-height:1.7}
@media(max-width:760px){.spp-word-frame iframe{height:420px}}

/* 官网总览：自定义页面 */
.spg-sec-hd{flex-wrap:wrap;align-items:center}
.spg-sec-acts{margin-left:auto;display:flex;gap:8px;align-items:center}
.spg-cust{display:flex;flex-direction:column;gap:8px}
.spg-cust-row{display:flex;align-items:center;gap:10px;padding:11px 14px;background:var(--card);
  border:1px solid var(--line);border-radius:11px}
.spg-cust-row .t{flex:1;min-width:0}
.spg-cust-row .t b{display:block;font-size:13.5px;color:var(--ink);font-weight:600}
.spg-cust-row .t small{display:block;font-size:11.5px;color:var(--faint);margin-top:2px;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.spg-cust-row .acts{flex:none;display:flex;gap:6px;align-items:center}
.spg-cust-row .acts form{display:contents}
.spg-cust-empty{padding:24px 18px;background:var(--card);border:1px dashed var(--line);
  border-radius:12px;text-align:center;font-size:12.5px;color:var(--faint);line-height:1.9}
.spg-tag.is-ok{color:#1a7f4b;background:#e9f7ef;border-color:#cdebd9}
@media(max-width:760px){
  .spg-cust-row{flex-wrap:wrap}
  .spg-cust-row .acts{width:100%;justify-content:flex-end}}

/* ============================================================
   内容列表（文章 / 案例）：指标条 + 网格行
   目标：把 8 列压到 6 列，分类与推荐位下沉到标题块，
        让标题和摘要拿到宽度，操作列不再挤成一团。
   ============================================================ */
.cm-meta{display:flex;align-items:center;gap:13px;flex-wrap:wrap;margin:-2px 0 15px;
  font-size:12.5px;color:var(--faint)}
.cm-meta b{color:var(--ink);font-size:15px;font-weight:600;font-variant-numeric:tabular-nums;margin-right:1px}
.cm-meta i{width:1px;height:11px;background:var(--line);display:inline-block}

.cm-list{display:flex;flex-direction:column}
.cm-row{display:grid;align-items:center;gap:14px;padding:15px 18px;
  grid-template-columns:24px 56px minmax(0,1fr) 92px 70px 100px 168px;
  border-top:1px solid var(--line-2);transition:background .12s}
.cm-row:first-child{border-top:0}
.cm-row:hover{background:#fbfcfe}
.cm-ck{display:grid;place-items:center}
.cm-thumb{width:56px;height:56px;border-radius:10px;overflow:hidden;background:#f1f4f8;
  display:grid;place-items:center;color:#9dabbd;text-decoration:none;flex:none}
.cm-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.cm-main{min-width:0}
.cm-title{display:flex;align-items:center;gap:6px;min-width:0}
.cm-title a{text-decoration:none;min-width:0;flex:0 1 auto;overflow:hidden}
.cm-title a span{font-size:14px;font-weight:600;color:var(--ink);display:block;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.5}
.cm-title a:hover span{color:var(--gold-deep)}
.cm-tag{flex:none;font-size:10px;padding:1px 6px;border-radius:4px;line-height:1.7;font-weight:500}
.cm-tag.top{background:#eef2f8;color:#4a6280}
.cm-tag.hl{background:#fdf3e6;color:#a9762e}
.cm-tag.rec{background:var(--gold-soft);color:var(--gold-deep)}
.cm-excerpt{font-size:12.5px;color:var(--muted);margin-top:3px;line-height:1.65;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cm-sub{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-top:5px;font-size:11.5px;color:var(--faint)}
.cm-chip{background:#f2f5f9;color:#61708a;border-radius:5px;padding:1px 7px;font-size:11px}
.cm-slug{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;opacity:.7}
.cm-state{justify-self:start}
.cm-num{text-align:right}
.cm-num b{display:block;font-size:14px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.4}
.cm-num small{font-size:10.5px;color:var(--faint)}
.cm-time{text-align:right}
.cm-time b{display:block;font-size:12.5px;color:var(--ink-3);font-weight:500;line-height:1.5}
.cm-time small{font-size:10.5px;color:var(--faint)}
.cm-ops{display:flex;gap:6px;justify-content:flex-end;align-items:center}
.cm-ops form{display:contents}
.cm-empty{padding:58px 20px;text-align:center}
.cm-empty .ic{width:54px;height:54px;border-radius:15px;background:var(--gold-soft);
  color:var(--gold-deep);display:grid;place-items:center;margin:0 auto 14px}
.cm-empty .t{font-size:15px;font-weight:600;color:var(--ink)}
.cm-empty .d{font-size:12.5px;color:var(--faint);line-height:1.85;max-width:430px;margin:7px auto 17px}
@media(max-width:1180px){
  .cm-row{grid-template-columns:24px 52px minmax(0,1fr) 88px 152px;gap:12px}
  .cm-num,.cm-time{display:none}}
@media(max-width:820px){
  .cm-row{grid-template-columns:22px minmax(0,1fr);gap:11px;padding:14px 15px}
  .cm-thumb,.cm-state,.cm-ops{display:none}
  .cm-num,.cm-time{display:none}}

/* 副导航：分区名用金色小标，当前项用墨色实底（一眼看出「在哪个分区的哪一页」） */
.cms-subnav .csn-tag{color:var(--gold-deep);font-weight:600}
.cms-subnav a.on{background:var(--ink);color:#fff;box-shadow:none}
.cms-subnav a.on:hover{color:#fff}

/* ============================================================
   官网内容总览：内容发布（重） / 页面内容（中） / 站点设置（轻）
   ============================================================ */
.ov-sec{margin-bottom:26px}
.ov-sec-last{margin-bottom:0}
.ov-hd{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:11px}
.ov-hd h2{font-size:13.5px;font-weight:600;color:var(--ink);margin:0;letter-spacing:.02em}
.ov-hd .tip{font-size:11.5px;color:var(--faint)}
.ov-hd-act{margin-left:auto;font-size:12px;color:var(--gold-deep);text-decoration:none}
.ov-hd-act:hover{text-decoration:underline}

.ov-pub{display:grid;grid-template-columns:repeat(auto-fill,minmax(252px,1fr));gap:12px}
.ov-pub-card{position:relative;display:flex;flex-direction:column;padding:16px 17px 14px;
  background:var(--card);border:1px solid var(--line);border-radius:14px;text-decoration:none;transition:.18s}
.ov-pub-card:hover{border-color:rgba(176,141,87,.5);box-shadow:0 14px 30px -22px rgba(18,32,46,.65);transform:translateY(-2px)}
.ov-pub-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.ov-ico{width:34px;height:34px;border-radius:10px;background:var(--gold-soft);color:var(--gold-deep);
  display:grid;place-items:center}
.ov-pub-badge{font-size:10.5px;color:#a9762e;background:#fdf3e6;border-radius:20px;padding:2px 8px;white-space:nowrap}
.ov-pub-t{font-size:14px;color:var(--ink);font-weight:600}
.ov-pub-n{display:flex;align-items:baseline;gap:3px;margin-top:2px}
.ov-pub-n b{font-size:27px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;
  line-height:1.25;letter-spacing:-.02em}
.ov-pub-n i{font-style:normal;font-size:11px;color:var(--faint)}
.ov-pub-d{font-size:11.5px;color:var(--faint);line-height:1.6;margin-top:4px;min-height:32px}
.ov-pub-go{margin-top:10px;font-size:12px;color:var(--gold-deep);font-weight:500;
  display:inline-flex;gap:4px;align-items:center}
.ov-pub-go span{transition:.18s}
.ov-pub-card:hover .ov-pub-go span{transform:translateX(3px)}

.ov-pages{background:var(--card);border:1px solid var(--line);border-radius:13px;overflow:hidden}
.ov-page{display:grid;align-items:center;gap:10px;padding:12px 16px;
  grid-template-columns:30px 128px minmax(0,1fr) auto 58px;
  border-top:1px solid var(--line-2);text-decoration:none;transition:background .12s}
.ov-page:first-child{border-top:0}
.ov-page:hover{background:#fbfcfe}
.ov-page-ico{width:30px;height:30px;border-radius:8px;background:#f4f6fa;color:#7c8a9c;
  display:grid;place-items:center}
.ov-page b{font-size:13.5px;color:var(--ink);font-weight:600;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.ov-page code{font-size:11.5px;color:var(--faint);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ov-page-meta{font-size:11.5px;color:var(--faint);display:flex;gap:8px;justify-content:flex-end;
  align-items:center;white-space:nowrap}
.ov-page-go{font-size:12px;color:var(--gold-deep);text-align:right;white-space:nowrap}
.ov-page:hover .ov-page-go{text-decoration:underline}
.ov-page.is-custom .ov-page-ico{background:var(--gold-soft);color:var(--gold-deep)}
.ov-page.is-custom code{color:#ccd4de}
.ov-tag{font-size:10px;color:var(--faint);border:1px solid var(--line);border-radius:20px;padding:0 6px}

.ov-sets{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.ov-set{display:flex;align-items:center;gap:10px;padding:12px 14px;background:#fafbfc;
  border:1px solid var(--line-2);border-radius:11px;text-decoration:none;transition:.16s}
.ov-set:hover{border-color:rgba(176,141,87,.4);background:#fffdf9}
.ov-set-ico{width:28px;height:28px;border-radius:8px;background:#fff;border:1px solid var(--line);
  color:var(--muted);display:grid;place-items:center;flex:none}
.ov-set b{display:block;font-size:12.5px;color:var(--ink-3);font-weight:600}
.ov-set small{display:block;font-size:11px;color:var(--faint);margin-top:1px}

@media(max-width:1180px){
  .ov-pub{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ov-sets{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){
  .ov-pub,.ov-sets{grid-template-columns:1fr}
  .ov-page{grid-template-columns:28px minmax(0,1fr) 52px;gap:8px;padding:12px 13px}
  .ov-page code,.ov-page-meta{display:none}
  .ov-pub-d{min-height:0}}

/* 页面编辑：分区提示（区分「页面结构」与「日常发布」）
   注意：类名不能叫 .spp-note —— 侧栏说明文字已占用该类 */
.spp-guard{display:flex;align-items:flex-start;gap:9px;padding:11px 14px;margin-bottom:14px;
  background:#fbf8f1;border:1px solid rgba(176,141,87,.22);border-radius:10px;
  font-size:12.5px;color:#7a6a52;line-height:1.75}
.spp-guard svg{flex:none;margin-top:2px;color:var(--gold-deep)}
.spp-guard b{color:#5f5039;font-weight:600}

/* 课程列表：无复选框，列顺序 封面 / 主内容 / 课时 / 时长 / 状态 / 操作 */
.cm-row.cm-course{grid-template-columns:56px minmax(0,1fr) 62px 92px 86px 178px}
@media(max-width:1180px){
  .cm-row.cm-course{grid-template-columns:52px minmax(0,1fr) 84px 168px}
  .cm-row.cm-course .cm-num,.cm-row.cm-course .cm-time{display:none}}
@media(max-width:820px){
  .cm-row.cm-course{grid-template-columns:minmax(0,1fr);gap:8px}
  .cm-row.cm-course .cm-thumb,.cm-row.cm-course .cm-state,.cm-row.cm-course .cm-ops{display:none}}

/* 副导航窄屏：.content 是 flex:1 项，默认 min-width:auto 会被导航内容顶开，
   导致整页横向溢出。这里让它可收缩到容器宽度，溢出交给行内滚动吸收。 */
.content{min-width:0}
/* 表格/面板类容器同样需要可收缩，避免内部内容把页面撑宽 */
.cms-panel,.cm-list,.cm-row{min-width:0;max-width:100%}
/* 通用：网格列与表格容器可收缩到容器宽度（否则窄屏下 1fr 列会按内容最小宽撑破整页） */
.grid,.grid-2,.grid-3,.grid-4,.grid-2-1,.grid-1-2{min-width:0}
.grid>*{min-width:0}
.table-wrap{max-width:100%;overflow-x:auto}
/* 后台无移动版（侧栏固定 236px），窄屏至少不能让页面横向拖动 */
@media(max-width:900px){
  .topbar .search{min-width:0}
  .topbar .search input{min-width:0}
  .topbar>.btn-ghost{display:none}          /* 「官网预览」：窄屏收起，侧栏已有入口 */
  .topbar .user-chip>span+span{display:none} /* 只留头像，姓名与角色收起 */
  .topbar .user-chip>span:last-child{display:none}
  .topbar .user-chip{gap:0;padding-right:0}}

/* 官网管理总览：四分区（内容 / 会员 / 页面 / 站点） */
.ov-pub.two{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(max-width:900px){.ov-pub.two{grid-template-columns:1fr}}
.ov-note{margin:14px 0 0;font-size:12.5px;color:var(--faint);line-height:1.9}
.ov-note a{color:var(--gold-deep);text-decoration:none;border-bottom:1px solid var(--gold-22)}
.ov-note a:hover{color:var(--ink)}

/* ============================================================
   栏目容器（页面管理 → 栏目）
   一个栏目声明装什么内容，建完自动生成导航与发布入口。
   ============================================================ */
.chn-tip{display:flex;gap:10px;align-items:flex-start;padding:12px 16px;margin-bottom:18px;
  background:var(--gold-06);border:1px solid var(--gold-22);border-radius:10px;
  font-size:12.5px;line-height:1.85;color:var(--ink-3)}
.chn-tip svg{flex:none;margin-top:4px;color:var(--gold-deep)}
.chn-tip b{color:var(--ink)}

.chn-hd{display:flex;align-items:baseline;gap:10px;margin:24px 0 10px}
.chn-hd:first-of-type{margin-top:0}
.chn-hd h2{font-size:14px;font-weight:600;color:var(--ink);margin:0}
.chn-hd span{font-size:12px;color:var(--faint)}

.chn-list{background:var(--card);border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--shadow-sm);overflow:hidden;margin-bottom:6px}
.chn-row{display:grid;grid-template-columns:34px minmax(0,1fr) 82px 128px 250px;
  align-items:center;gap:14px;padding:14px 18px;border-top:1px solid var(--line-2)}
.chn-row:first-child{border-top:0}
.chn-row:hover{background:#fbfcfe}
.chn-row.is-off{opacity:.6}
.chn-ic{width:32px;height:32px;border-radius:9px;background:var(--gold-soft);color:var(--gold-deep);
  display:flex;align-items:center;justify-content:center;flex:none}
.chn-main{min-width:0}
.chn-name{display:flex;align-items:center;gap:7px;font-size:14px;font-weight:600;color:var(--ink);
  line-height:1.4;flex-wrap:wrap}
.chn-chip{font-size:10.5px;font-weight:500;padding:1px 6px;border-radius:4px;
  background:rgba(176,141,87,.14);color:var(--gold-deep);white-space:nowrap}
.chn-chip.gray{background:#f0f2f5;color:#8d99a8}
.chn-sub{display:flex;align-items:center;gap:8px;margin-top:3px;font-size:11.5px;
  color:var(--faint);min-width:0;white-space:nowrap}
.chn-sub code{background:#f4f6f9;padding:1px 5px;border-radius:4px;color:#7c8899;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}
.chn-sub i{width:3px;height:3px;border-radius:50%;background:#ccd4de;flex:none}
.chn-intro{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:360px}
.chn-num b{font-size:16px;color:var(--ink);line-height:1.2}
.chn-num span{display:block;font-size:11px;color:var(--faint)}
.chn-state{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-3);white-space:nowrap}
.chn-dot{width:5px;height:5px;border-radius:50%;background:#ccd4de;flex:none}
.chn-dot.on{background:var(--green)}
.chn-state i{width:1px;height:10px;background:var(--line);flex:none}
.chn-draft{color:var(--amber)}
.chn-ops{display:flex;align-items:center;gap:8px;justify-content:flex-end}
.chn-link{width:28px;height:28px;border-radius:7px;display:flex;align-items:center;justify-content:center;
  color:#8d99a8;flex:none}
.chn-link:hover{background:#f1f4f8;color:var(--ink)}

.chn-orphan{display:flex;gap:10px;align-items:flex-start;margin-top:18px;padding:13px 16px;
  background:var(--amber-soft);border:1px solid rgba(183,121,31,.22);border-radius:10px;
  font-size:12.5px;color:#8a5d12;line-height:1.8}
.chn-orphan svg{flex:none;margin-top:3px}
.chn-orphan b{color:#7a520f}
.chn-orphan-sub a{color:#8a5d12;text-decoration:underline;font-weight:600;margin-right:4px}

/* 栏目表单 */
.chn-form .card{margin-bottom:16px}
.chn-kinds{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.chn-kind{cursor:pointer;display:flex;position:relative;min-width:0}
.chn-kind input{position:absolute;opacity:0;pointer-events:none}
.chn-kind-bd{display:flex;flex-direction:column;gap:4px;padding:14px;border:1px solid var(--line);
  border-radius:10px;background:#fff;flex:1;transition:.15s}
.chn-kind-bd svg{color:var(--faint);margin-bottom:2px}
.chn-kind-bd b{font-size:13px;color:var(--ink)}
.chn-kind-bd i{font-style:normal;font-size:11.5px;color:var(--faint);line-height:1.65}
.chn-kind.on .chn-kind-bd{border-color:var(--gold);background:var(--gold-06);box-shadow:0 0 0 2px var(--gold-22)}
.chn-kind.on .chn-kind-bd svg{color:var(--gold-deep)}
.chn-kind input:disabled~.chn-kind-bd{opacity:.55;cursor:not-allowed}
.chn-form-ft{display:flex;align-items:center;gap:10px;padding:4px 0 32px;flex-wrap:wrap}
.chn-form-ft .chn-del{margin-left:auto;color:var(--red)}
.chn-form-ft .chn-del:hover{background:var(--red-soft);border-color:rgba(217,48,37,.3)}

@media(max-width:1180px){
  .chn-row{grid-template-columns:34px minmax(0,1fr) 78px 210px;grid-template-areas:"ic main num ops" "ic main state ops"}
  .chn-row>.chn-ic{grid-area:ic}
  .chn-row>.chn-main{grid-area:main}
  .chn-row>.chn-num{grid-area:num}
  .chn-row>.chn-state{grid-area:state}
  .chn-row>.chn-ops{grid-area:ops}
  .chn-kinds{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:900px){
  .chn-row{grid-template-columns:30px minmax(0,1fr);grid-template-areas:"ic main" "num state";gap:8px 10px}
  .chn-row>.chn-ops{grid-column:1/-1;justify-content:flex-start}
  .chn-intro{max-width:180px}
  .chn-kinds{grid-template-columns:1fr}}

/* 总览：新建栏目卡片（虚线、弱化，与真实栏目区分） */
.ov-pub-add{border-style:dashed;background:transparent;box-shadow:none}
.ov-pub-add .ov-ico{background:#f2f4f8;color:#8d99a8}
.ov-pub-add .ov-pub-t{color:var(--muted)}
.ov-pub-add .ov-pub-n b{color:#c3ccd8;font-size:23px}
.ov-pub-add .ov-pub-go{color:var(--muted)}
.ov-pub-add:hover{border-style:dashed;border-color:var(--gold-22);background:#fcfdff}

/* ==========================================================================
   文章阅读页（期刊式版式）
   标题白底、整幅封面、正文单栏 + 右侧目录；不用卡片、不用投影、不用色块
   ========================================================================== */
.rd{background:#fcfbf8}

/* ==========================================================================
   客户查看控制台（案件 → 客户查看）
   ========================================================================== */
.pgt-link{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.pgt-link input{
  flex:1;min-width:0;height:36px;padding:0 12px;border:1px solid var(--line-2);
  border-radius:7px;background:#f8fafc;font-size:12px;color:var(--text);
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
}
.pgt-hr{height:1px;background:var(--line-2);margin:16px 0}
.pgt-opt{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 0}
.pgt-opt + .pgt-opt,.pgt-hr + .pgt-opt{border-top:1px solid var(--line-2)}
.pgt-opt b{font-size:13px;color:var(--text);display:block;font-weight:600}
.pgt-opt .tiny{margin-top:2px;line-height:1.7}
.pgt-sw{
  flex:none;width:38px;height:22px;border-radius:22px;border:0;padding:0;cursor:pointer;
  background:#dfe4ea;position:relative;transition:background .18s;
}
.pgt-sw span{
  position:absolute;left:2px;top:2px;width:18px;height:18px;border-radius:50%;
  background:#fff;box-shadow:0 1px 3px rgba(18,32,46,.28);transition:left .18s;
}
.pgt-sw.on{background:var(--green)}
.pgt-sw.on span{left:18px}
.pgt-sw[disabled]{opacity:.45;cursor:not-allowed}
.pgt-steps{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.pgt-steps>div{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--muted)}
.pgt-steps i{
  width:19px;height:19px;border-radius:50%;background:var(--gold-soft);color:var(--gold-deep);
  display:grid;place-items:center;font-size:10.5px;font-style:normal;flex:none;font-weight:600;
}
.pgt-share{
  width:100%;border:1px solid var(--line-2);border-radius:8px;padding:12px 14px;
  font-size:12.5px;line-height:1.9;color:#3b4654;background:#fbfcfd;resize:vertical;
  font-family:inherit;
}
.pgt-list{margin:0 -4px}
.pgt-item{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:8px 4px;border-bottom:1px solid var(--line-2);
}
.pgt-item:last-child{border-bottom:0}
.pgt-item-main{min-width:0;flex:1}
.pgt-item-main b{display:block;font-size:12.5px;font-weight:500;color:var(--text);line-height:1.6;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pgt-item-main s{display:block;text-decoration:none;font-size:11px;color:var(--faint);margin-top:1px}
@media (max-width:760px){
  .pgt-opt{align-items:flex-start}}

/* ============================================================================
   2026-11 · 后台浅色化
   原来侧栏是深墨色、主按钮是近黑，整块屏幕偏暗。这里统一改成「白底 + 细线 +
   主题色点睛」，与官网前台同一套语言；深色只保留在真正需要的地方（视频舞台）。
   ========================================================================== */
.sidebar{
  background:#fff;color:var(--text);border-right:1px solid var(--line);
}
.sidebar .brand{padding:20px 20px 16px;border-bottom:1px solid var(--line)}
.sidebar .brand b{color:var(--ink);font-size:17px;letter-spacing:.05em}
.sidebar .brand span{color:var(--faint);font-size:11px;letter-spacing:.14em}
.nav{padding:10px 10px 24px}
.nav-group>p{color:#a7b1be;font-size:10.5px;letter-spacing:.14em;margin:10px 10px 4px}
.nav a{color:#4b5766;font-size:13.5px}
.nav a:hover{background:#f4f6f9;color:var(--ink)}
.nav a.on{
  background:var(--gold-soft);color:var(--gold-deep);font-weight:600;
  box-shadow:inset 2px 0 0 var(--gold);
}
.nav a.on .ico{opacity:1}
.nav a .count{background:var(--red);color:#fff}
.sidebar .side-foot{color:var(--faint);border-top:1px solid var(--line);background:#fcfcfd}

/* 主按钮：改主题色，不再用近黑 */
.btn-primary{background:var(--gold-solid);border-color:var(--gold-solid);color:var(--on-gold)}
.btn-primary:hover{background:var(--gold-hover);border-color:var(--gold-hover);color:var(--on-gold-hover)}
.progress>i{background:linear-gradient(90deg,color-mix(in srgb,var(--gold) 40%,#fff),var(--gold))}
.bars .bar .col{background:linear-gradient(180deg,color-mix(in srgb,var(--gold) 42%,#fff),var(--gold))}
.avatar{background:var(--avatar-bg,var(--gold-soft));color:var(--avatar-fg,var(--gold-deep));font-weight:600}

/* 登录页：左侧深色块改纸面 */
.auth-side{
  background:var(--gold-soft);color:var(--text);
  border-right:1px solid var(--line);
}
.auth-side:after{opacity:.5;background:radial-gradient(circle,rgba(255,255,255,.7),transparent 62%)}
.auth-side h1{color:var(--ink)}
.auth-side p{color:var(--muted)}
.auth-side .brand b{color:var(--ink)!important}
.auth-side .brand .seal{background:var(--gold-solid);color:var(--on-gold)}

/* 主题预览：侧栏改为白底，选中项用主题色，与真实后台一致 */
.tpv-side{background:#fff;border-right:1px solid var(--line)}
.tpv-brand{color:var(--ink)}
.tpv-item{color:#4b5766}
.tpv-item.on{color:var(--gold-deep);font-weight:600}

/* ============================================================================
   客户查看控制台 v2（2026-11）
   新增：访问码生成行、可信设备列表、家人入口列表。整体沿用后台纸白 + 发丝线，
   只给「撤销 / 失效」留红色，给「有效」留绿点。
   ========================================================================== */
.pgt-code{display:flex;gap:8px;align-items:center}
.pgt-code input{flex:1;min-width:0}

/* 开关：请求中半透明，给一点即时反馈（Ajax 提交，页面不跳） */
.pgt-sw.is-busy{opacity:.55;pointer-events:none}

/* --- 可信设备 --- */
.pgt-devices{background:#fbfaf7;border:1px solid var(--line-2);border-radius:4px;padding:12px 13px}
.pgt-dev-hd{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin-bottom:8px}
.pgt-dev-hd b{font-size:12.5px;color:var(--text)}
.pgt-dev-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.pgt-dev-list li{display:flex;align-items:baseline;gap:10px;font-size:12px;min-width:0}
.pgt-dev-list b{font-weight:600;color:var(--text);flex:none}
.pgt-dev-list s{text-decoration:none;color:var(--faint);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* --- 家人 / 共享入口 --- */
.pgt-shares{display:grid;gap:0;border:1px solid var(--line-2);border-radius:4px;overflow:hidden}
.pgt-share-row{display:flex;gap:12px;align-items:flex-start;justify-content:space-between;
  padding:11px 12px;border-bottom:1px solid var(--line-2);background:#fff;flex-wrap:wrap}
.pgt-share-row:last-child{border-bottom:0}
.pgt-share-row.off{background:#fbfaf8}
.pgt-share-row.off .pgt-share-main b{color:var(--faint)}
.pgt-share-main{min-width:0;flex:1 1 220px}
.pgt-share-main b{font-size:13px;color:var(--text);margin-right:6px}
.pgt-share-main em{font-style:normal;font-size:11px;color:var(--faint);margin-left:2px}
.pgt-share-act{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.pgt-share-act form{display:inline}
.pgt-share-act .btn{white-space:nowrap}

.pgt-share-new{border-top:1px dashed var(--line);padding-top:14px}
.pgt-share-new-hd{font-size:12.5px;font-weight:600;color:var(--text);margin-bottom:10px}
.pgt-share-main .mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.06em;color:var(--ink)}
@media(max-width:640px){
  .pgt-share-act{width:100%}
  .pgt-code{flex-wrap:wrap}}

/* 未开放提示条：让「还有 N 份没开放」这件事一眼看见，一键处理 */
.pgt-nudge{
  display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  background:var(--gold-soft);border:1px solid color-mix(in srgb,var(--gold) 30%,#fff);
  border-radius:4px;padding:8px 10px;margin-bottom:8px;font-size:12px;color:var(--gold-deep);
}
.pgt-nudge b{font-weight:700}
.pgt-nudge .btn{flex:none}

/* 家人入口一行里的次要按钮：给发丝边，避免和纯文字混在一起看不出可点 */
.pgt-share-act .btn-ghost{border:1px solid var(--line);background:#fff}
.pgt-share-act .btn-ghost:hover{border-color:var(--line-2);background:#fbfaf8}
.pgt-share-act .btn{height:26px;padding:0 9px;font-size:11.5px}

/* 新建入口表单：输入框与下拉同宽，避免占位文字被截断 */
.pgt-share-new .field input,
.pgt-share-new .field select{width:100%}

/* --- 发客户的两条消息：链接一条、访问码一条，各自复制 --- */
.pgt-msg{border:1px solid var(--line-2);border-radius:6px;padding:10px 12px 12px;background:#fcfcfd}
.pgt-msg + .pgt-msg{margin-top:12px}
.pgt-msg-hd{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin-bottom:8px}
.pgt-msg-hd b{font-size:12.5px;color:var(--ink)}
.pgt-msg-hd span{font-size:11px;color:var(--faint)}
.pgt-msg .pgt-share{background:#fff}

/* --- 材料开放：开关管「客户能不能看」，分段管「定稿 / 已签」 --- */
.pgt-doc{padding:9px 4px;border-bottom:1px solid var(--line-2)}
.pgt-doc:last-child{border-bottom:0}
.pgt-doc-hd{display:flex;align-items:center;gap:6px;min-width:0}
.pgt-doc-hd b{flex:1;min-width:0;font-size:12.5px;font-weight:500;color:var(--text);line-height:1.6;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pgt-doc-ft{display:flex;align-items:center;gap:8px;margin-top:4px}
.pgt-doc-ft s{flex:1;min-width:0;text-decoration:none;font-size:11px;color:var(--faint);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pgt-doc-mute{color:var(--faint)}
.pgt-doc-ctl{flex:none;display:flex;align-items:center;gap:8px}
.pgt-seg{display:inline-flex;align-items:center;border:1px solid var(--line-2);border-radius:6px;
  background:#fff;overflow:hidden}
.pgt-seg[hidden]{display:none}
.pgt-seg button{
  appearance:none;border:0;background:transparent;cursor:pointer;padding:0 8px;height:24px;
  font:inherit;font-size:11.5px;line-height:24px;color:var(--muted);transition:background .15s,color .15s;
}
.pgt-seg button + button{border-left:1px solid var(--line-2)}
.pgt-seg button:hover{background:#f5f7fa;color:var(--text)}
.pgt-seg button.is-on[data-stage="final"]{background:#e8f0fe;color:#2f5fbf;font-weight:600}
.pgt-seg button.is-on[data-stage="signed"]{background:#e9f5ee;color:#2c7a52;font-weight:600}
.pgt-seg button[disabled]{opacity:.5;cursor:not-allowed}
.pgt-doc.is-draft .pgt-doc-hd b{color:var(--muted)}
@media(max-width:640px){
  .pgt-doc-ft{flex-wrap:wrap}
  .pgt-doc-ctl{margin-left:auto}}

/* =====================================================================
   商业化：套餐选择 / 支付摘要 / 二维码
   （后台浅色皮肤，与 --gold / --line 令牌一致）
   ===================================================================== */
.plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(155px,1fr));gap:10px}
.plan-pick{position:relative;display:block;cursor:pointer}
.plan-pick input{position:absolute;opacity:0;width:0;height:0}
.plan-pick .pp-body{
    border:1px solid var(--line);border-radius:10px;padding:12px 14px;background:#fff;
    transition:border-color .15s, box-shadow .15s, background .15s;height:100%;
}
.plan-pick:hover .pp-body{border-color:var(--gold)}
.plan-pick input:checked + .pp-body{
    border-color:var(--gold);background:var(--gold-soft);
    box-shadow:0 0 0 3px rgba(180,140,60,.10);
}
.plan-pick .pp-name{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:6px}
.plan-pick .pp-price{font-size:20px;font-weight:600;letter-spacing:-.02em;margin-top:4px}
.plan-pick .pp-price small{font-size:11px;font-weight:400;color:var(--muted);margin-left:2px}
.plan-pick .pp-desc{font-size:11.5px;color:var(--muted);line-height:1.7;margin-top:6px;min-height:38px}
.plan-pick .pp-meta{font-size:11px;color:var(--muted);margin-top:4px}

.pay-summary{border-top:1px solid var(--line);margin-top:6px;padding-top:12px}
.pay-summary .ps-line{display:flex;justify-content:space-between;font-size:12.5px;color:var(--muted);padding:4px 0}
.pay-summary .ps-line b{color:var(--ink);font-weight:500}
.pay-summary .ps-total{display:flex;justify-content:space-between;align-items:baseline;margin-top:8px;padding-top:10px;border-top:1px dashed var(--line)}
.pay-summary .ps-total span{font-size:13px;color:var(--ink)}
.pay-summary .ps-total b{font-size:22px;letter-spacing:-.02em;color:var(--ink)}

.radio-line{display:inline-flex;align-items:center;gap:6px;font-size:13px;cursor:pointer}

#qr canvas,#qr img{display:block;width:190px;height:190px}
@media (max-width:640px){
    .plan-grid{grid-template-columns:1fr}}

/* 商业化补充：6 列状态卡 / 行内文字按钮 */
.cms-stats.cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}
@media(max-width:1280px){.cms-stats.cols-6{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:1100px){.cms-stats.cols-6{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:720px){.cms-stats.cols-6{grid-template-columns:1fr}}
.lnk{background:none;border:0;padding:0;margin:0;color:var(--muted);font-size:11.5px;line-height:1.6;cursor:pointer;text-decoration:underline;text-underline-offset:2px;text-decoration-color:var(--line)}
.lnk:hover{color:var(--ink);text-decoration-color:var(--ink)}

/* 两栏（可配比例）+ 窄屏自动单列：用 CSS 变量避免 inline 网格覆盖响应式 */
.pf-split{display:grid;grid-template-columns:var(--cols,1fr 1fr);gap:16px;align-items:start}
/* 放大字号后两栏各只剩 300 出头，跟进流水、明细表都被压得没法读；
   媒体查询量不到 zoom（视口还是 1400），所以用 zoom.js 打的 data-zlg 切单栏。
   和下面 1080px 的处理一致：宁可上下排，不要左右挤。 */
html[data-zlg] .pf-split{grid-template-columns:1fr}
@media(max-width:1080px){.pf-split{grid-template-columns:1fr !important}}@media(max-width:720px){
    .content{overflow-x:hidden}
    .pf-split,.cms-stats,.cms-panel,.card,.grid,.form-grid{min-width:0}
    .pf-split > *,.cms-stats > *,.grid > *{min-width:0}
    .page-hd h1{word-break:break-all}}
.auth-tabs{display:flex;gap:24px;border-bottom:1px solid var(--line);margin:2px 0 20px}
.auth-tabs button{padding:0 0 11px;border:0;border-bottom:2px solid transparent;margin-bottom:-1px;
  background:none;font-size:13.5px;color:var(--s-meta);cursor:pointer;font-family:inherit}
.auth-tabs button.on{color:var(--ink);border-bottom-color:var(--gold)}

/* 平台配置里的新卡片：两列网格里输入框撑满列宽（默认 input 只有 153px 宽，看着半空） */
.form-grid-fill .field input,
.form-grid-fill .field select{width:100%}

/* ---------------- 平台运营提示条 ----------------
   之前 .pf-bar 没有任何样式，只是一行贴着顶边的裸文字，视觉上像被裁掉了一截。 */
.pf-bar{display:flex;align-items:center;gap:10px;padding:9px 24px;background:var(--ink);color:#cfd8e3;
  font-size:12px;line-height:1.7;flex-wrap:wrap}
.pf-bar .dot{width:6px;height:6px;flex:none;border-radius:50%;background:#4ec07a;
  box-shadow:0 0 0 3px rgba(78,192,122,.18)}
.pf-bar b{color:#fff;font-weight:600;letter-spacing:.06em}
.pf-bar .tx{color:#9fb0c4}
.pf-bar .tx b{color:#eaf0f6}
.pf-bar.view{background:#3a2f16;color:#e8d9bb}
.pf-bar.view .dot{background:#e0b25a;box-shadow:0 0 0 3px rgba(224,178,90,.18)}
.pf-bar.view .tx{color:#d9c9a6}
.pf-bar.view form{margin:0 0 0 auto}
.pf-bar.view .btn{height:26px;padding:0 10px;font-size:11.5px;border-color:rgba(255,255,255,.24);color:#fff}
.pf-bar.view .btn:hover{background:rgba(255,255,255,.08);color:#fff}

/* ============================================================
   收费（缴费单）：台账 / 详情 / 发给客户
   钱相关的界面一律「数字大、说明小、动作少」，避免误操作。
   ============================================================ */
.text-green{color:var(--green)}

.chg-grid{
    display:grid;
    grid-template-columns:minmax(0,1.55fr) minmax(0,.85fr);
    gap:16px;
    align-items:start;
}
@media (max-width:1080px){ .chg-grid{grid-template-columns:minmax(0,1fr)}}

.chg-amt{
    font-family:var(--font-num, ui-serif, Georgia, serif);
    font-size:34px;
    line-height:1.15;
    font-weight:600;
    font-variant-numeric:tabular-nums;
    color:var(--ink);
    padding-bottom:14px;
    border-bottom:1px solid var(--line);
    margin-bottom:14px;
}
.chg-amt .cur{font-size:20px;opacity:.55;margin-right:3px;font-weight:500}
.chg-amt-note{
    display:inline-block;font-family:inherit;font-size:12px;font-weight:400;
    color:var(--muted);margin-left:12px;vertical-align:middle;
}
@media (max-width:640px){ .chg-amt{font-size:27px}}

/* 信息网格：标签在上、值在下，扫读比左对齐表格快 */
.chg-meta{
    display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
    gap:12px 20px;margin-bottom:6px;
}
.chg-meta > div{min-width:0}
.chg-meta span{display:block;font-size:11.5px;color:var(--faint);margin-bottom:2px}
.chg-meta b{display:block;font-size:13px;font-weight:500;word-break:break-all}
@media (max-width:520px){ .chg-meta{grid-template-columns:minmax(0,1fr)}}

.chg-quote{
    margin-top:14px;padding:11px 14px;
    background:var(--gold-soft,#fdfaf3);
    border-left:2px solid var(--gold,#c8a96a);
    font-size:12.5px;color:#6b5c3f;line-height:1.8;
}

/* 二维码卡 */
.chg-qr{
    width:196px;height:196px;margin:0 auto;
    padding:8px;background:#fff;border:1px solid var(--line);
    border-radius:4px;display:grid;place-items:center;
}
.chg-qr canvas{display:block;width:180px;height:180px}

.chg-link{
    font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
    font-size:11.5px;line-height:1.7;
    color:var(--muted);
    background:#f7f8fa;border:1px solid var(--line);
    border-radius:4px;padding:9px 11px;
    word-break:break-all;
    max-height:76px;overflow:auto;
}

.chg-bank{margin:0;padding:0}
.chg-bank > div{
    display:flex;justify-content:space-between;gap:12px;
    padding:8px 0;border-bottom:1px solid var(--line);font-size:12.5px;
}
.chg-bank > div:last-child{border-bottom:0}
.chg-bank dt{color:var(--muted);flex:none}
.chg-bank dd{margin:0;text-align:right;word-break:break-all}

details.card > summary{list-style:none}
details.card > summary::-webkit-details-marker{display:none}
details.card > summary h2{display:inline-block}

/* 折叠卡片的展开指示（支付尝试记录等） */
details.card > summary{position:relative;padding-right:52px}
details.card > summary::after{
    content:"▾";position:absolute;right:18px;top:50%;transform:translateY(-50%);
    font-size:11px;color:var(--faint);transition:transform .15s;
}
details.card[open] > summary::after{transform:translateY(-50%) rotate(180deg)}

/* ============================================================
   咨询接待
   列表：「咨询人 / 事项」合成一行（张三 / 离婚纠纷）
   详情：跟进横幅 + 只追加的跟进流水
   ============================================================ */
/* 详情页标题里的分隔符 */
h1 .cn-sep{margin:0 8px;font-weight:300;color:#c2cad4}
.table .cn-line{display:inline;max-width:420px}
.table .cn-name{font-weight:600;color:var(--text)}
.table .cn-sep{color:#c2cad4;font-weight:400;margin:0 5px}
.table .cn-subj{color:var(--muted);font-weight:400}
.table .cn-line:hover .cn-name,
.table .cn-line:hover .cn-subj{color:var(--blue)}
.table .cn-next{
    display:flex;align-items:center;gap:4px;margin-top:3px;
    font-size:11.5px;line-height:1.6;color:var(--gold-text);
}
.table .cn-next.is-over{color:var(--red)}
.cn-due{color:var(--red);font-weight:500}

/* ---- 跟进看板三张牌：咨询接待 / 客户管理共用（fk = follow kanban） ----
   两页的口径一致（今日 / 待跟进 / 逾期，互斥、点击即筛列表），卡片长相也必须一致，
   所以放公共层；页面私有的表格列样式仍留在各视图里。 */
.fk-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:16px}
.fk-stat{display:block;padding:14px 16px;border:1px solid var(--line);border-radius:12px;
    background:var(--card);box-shadow:var(--shadow-sm);transition:border-color .12s,box-shadow .12s}
.fk-stat:hover{border-color:var(--gold);box-shadow:var(--shadow)}
.fk-stat:focus{outline:none}
.fk-stat:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.fk-stat.on{border-color:var(--gold);background:var(--gold-06)}
.fk-stat-n{display:block;font-size:24px;font-weight:600;line-height:1.2;color:var(--ink);
    font-variant-numeric:tabular-nums}
.fk-stat-l{display:block;margin-top:3px;font-size:13px;font-weight:600;color:var(--ink-2)}
.fk-stat-h{display:block;margin-top:2px;font-size:11.5px;color:var(--faint)}
.fk-stat.is-today .fk-stat-n{color:var(--gold-text-deep)}
.fk-stat.is-over .fk-stat-n,.fk-stat.is-over .fk-stat-l{color:var(--red)}
.fk-stat.is-zero .fk-stat-n{color:var(--faint);font-weight:500}
/* 正在看某一档时，列表上方留一句说明，别让人以为数据库少了记录 */
.fk-filter{display:flex;align-items:center;gap:10px;margin-bottom:10px;font-size:12.5px;color:var(--muted)}
.fk-filter b{color:var(--ink-2)}
.fk-filter a{color:var(--gold-text-deep);text-decoration:none}
.fk-filter a:hover{text-decoration:underline}

/* 下次跟进横幅 */
.cn-banner{
    display:flex;align-items:flex-start;gap:10px;
    margin:0 0 16px;padding:13px 16px;
    background:var(--gold-06);border:1px solid var(--gold-22);border-radius:var(--radius);
    color:var(--gold-text-deep);
}
.cn-banner b{display:block;font-size:13.5px}
.cn-banner span{display:block;margin-top:2px;font-size:12.5px;color:var(--muted);line-height:1.7}
.cn-banner.is-over{background:var(--red-soft);border-color:rgba(217,48,37,.22);color:var(--red)}
.cn-banner.is-over span{color:#8a4a44}

/* 跟进流水：左竖线 + 圆点，最后一条不留尾巴 */
.cf-item{position:relative;display:flex;gap:12px;padding:0 0 18px}
.cf-item:last-child{padding-bottom:0}
.cf-item:not(:last-child):before{
    content:"";position:absolute;left:4px;top:14px;bottom:0;
    width:1px;background:var(--line);
}
.cf-dot{
    flex:none;width:9px;height:9px;margin-top:6px;border-radius:50%;
    background:#fff;border:2px solid var(--gold);
}
.cf-item:first-child .cf-dot{background:var(--gold)}
.cf-main{flex:1;min-width:0}
.cf-hd{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;color:var(--faint)}
.cf-hd b{color:var(--text);font-size:13px}
.cf-note{
    margin-top:4px;font-size:13px;line-height:1.85;color:var(--text);
    white-space:pre-wrap;overflow-wrap:anywhere;
}
.cf-next{
    margin-top:6px;font-size:12px;line-height:1.7;
    color:var(--gold-text);background:var(--gold-06);
    border-radius:5px;padding:4px 8px;display:inline-block;
}

/* ============================================================
   归档管理
   待归档按「结案后 3 个月」倒数，逾期行轻红底 + 期限徽章
   ============================================================ */
.table tr.ar-over td{background:rgba(217,48,37,.04)}
.table tr.ar-over td:first-child{box-shadow:inset 2px 0 0 var(--red)}
.ar-late{color:var(--red);font-weight:500}
.ar-due{
    display:flex;align-items:flex-start;gap:10px;
    padding:12px 15px;border-radius:var(--radius);
    background:var(--gold-06);border:1px solid var(--gold-22);
    color:var(--gold-text-deep);font-size:12.5px;line-height:1.8;
}
.ar-due b{color:var(--ink)}
.ar-due.is-over{background:var(--red-soft);border-color:rgba(217,48,37,.22);color:#8a3a33}
.ar-due.is-over b{color:var(--red)}
.ar-due .n{font-variant-numeric:tabular-nums;font-weight:600}
.ar-act{display:flex;align-items:center;gap:4px;justify-content:flex-end;flex-wrap:nowrap}
.ar-act form{display:inline-flex;margin:0}

/* ============================================================
   合同台账
   分类标签 / 金额收付色 / 合同链时间轴 / 要素键值 / 办理流水
   ============================================================ */
.ct-cat{
    display:inline-block;padding:0 6px;margin-right:6px;border-radius:4px;
    background:#eef1f5;color:#4a5666;font-size:11px;line-height:18px;
    vertical-align:1px;font-weight:500;letter-spacing:.02em;
}
.ct-chain{
    display:inline-flex;align-items:center;gap:2px;margin-left:6px;
    color:var(--gold-text-deep);font-size:11px;line-height:16px;
    background:var(--gold-06);border:1px solid var(--gold-22);border-radius:10px;padding:0 6px;
}
.ct-amt{font-variant-numeric:tabular-nums}
.ct-amt.in{color:var(--green)}
.ct-amt.out{color:var(--red)}

/* —— 合同链 —— */
.chain{display:flex;flex-direction:column}
.chain-item{display:flex;gap:12px;padding:2px 0;color:inherit}
.chain-rail{position:relative;width:14px;flex:none;display:flex;flex-direction:column;align-items:center}
.chain-dot{
    width:9px;height:9px;border-radius:50%;flex:none;margin-top:7px;
    background:#fff;border:2px solid #c8ced8;box-sizing:border-box;
}
.chain-line{flex:1;width:1px;background:var(--line);margin:2px 0 0}
.chain-body{
    flex:1;min-width:0;padding:5px 10px 9px;border-radius:8px;
    transition:background .15s;
}
.chain-item:hover .chain-body{background:#f7f8fa}
.chain-item.on .chain-dot{border-color:var(--gold);background:var(--gold);box-shadow:0 0 0 3px var(--gold-06)}
.chain-item.on .chain-body{background:var(--gold-06)}
.chain-hd{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:3px}
.chain-idx{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.chain-cur{font-size:11px;color:var(--gold-text-deep);font-weight:600}
.chain-title{font-size:13.5px;color:var(--ink);line-height:1.5;font-weight:500}
.chain-item.on .chain-title{font-weight:600}
.chain-meta{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--muted);margin-top:2px;font-variant-numeric:tabular-nums}
.chain-empty{
    display:flex;gap:10px;align-items:flex-start;font-size:12.5px;line-height:1.8;
    color:var(--muted);padding:12px 14px;border:1px dashed var(--line);border-radius:var(--radius);background:#fafbfc;
}
.chain-empty b{color:var(--ink)}
.chain-empty svg{flex:none;margin-top:3px;color:var(--gold)}

/* —— 要素键值 —— */
.kv{padding:9px 11px;background:#f8f9fb;border-radius:8px}
.kv-k{font-size:11px;color:var(--muted);margin-bottom:3px}
.kv-v{font-size:12.5px;color:var(--ink);line-height:1.55}

/* —— 折叠区 —— */
details.fold{border-top:1px dashed var(--line);padding-top:10px;margin-top:4px}
details.fold > summary{
    cursor:pointer;font-size:12.5px;color:var(--gold-text-deep);
    list-style:none;display:inline-flex;align-items:center;gap:4px;user-select:none;
}
details.fold > summary::-webkit-details-marker{display:none}
details.fold > summary::before{content:"+";font-weight:600;font-size:13px;line-height:1}
details.fold[open] > summary::before{content:"−"}
details.fold > summary:hover{text-decoration:underline}

/* —— 办理流水 —— */
.fmt{display:flex;flex-direction:column;gap:0;max-height:420px;overflow-y:auto}
.fmt-item{display:flex;gap:9px;padding-bottom:12px;position:relative}
.fmt-item:not(:last-child)::before{
    content:"";position:absolute;left:3px;top:12px;bottom:0;width:1px;background:var(--line);
}
.fmt-dot{
    width:7px;height:7px;border-radius:50%;background:#c8ced8;flex:none;margin-top:5px;
    box-shadow:0 0 0 3px #fff;
}
.fmt-item:first-child .fmt-dot{background:var(--gold)}
.fmt-body{flex:1;min-width:0}
.fmt-txt{font-size:12.5px;line-height:1.6;color:var(--ink);word-break:break-word}
.fmt-meta{font-size:11px;color:var(--faint,#98a2b3);margin-top:1px;font-variant-numeric:tabular-nums}

/* ============================================================
   办案团队：协办可见
   ============================================================ */
.team-hint{
    font-size:12px;line-height:1.85;color:var(--muted);
    background:#fafbfc;border:1px dashed var(--line);border-radius:var(--radius);
    padding:9px 11px;margin-bottom:4px;
}
.team-hint b{color:var(--ink);font-weight:600}
.team-row{
    display:flex;gap:12px;align-items:center;flex-wrap:wrap;
    padding:10px 0;border-bottom:1px dashed var(--line-2);
}
.team-row:last-of-type{border-bottom:0}

.team-pick{
    border:1px solid var(--line);border-radius:var(--radius);
    max-height:300px;overflow-y:auto;background:#fff;
}
.team-pick-row{
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:7px 12px;border-bottom:1px solid var(--line-2);
}
.team-pick-row:last-child{border-bottom:0}
.team-pick-row:hover{background:#fafbfc}
.tp-main{
    display:flex;align-items:center;gap:8px;flex:1;min-width:0;
    font-size:13px;cursor:pointer;
}
.tp-main input{flex:none}
.tp-see{
    display:inline-flex;align-items:center;gap:5px;white-space:nowrap;
    font-size:12px;color:var(--muted);cursor:pointer;
    padding:2px 7px;border-radius:10px;
}
.tp-see:hover{background:var(--gold-06);color:var(--gold-text-deep)}
.tp-see input{accent-color:var(--gold)}
/* 团队勾选上方的搜索条：人多的时候靠它找人，别让人在六十行里用眼睛翻 */
.tp-tools{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.tp-find{
    display:flex;align-items:center;gap:7px;flex:1;min-width:0;
    padding:0 11px;height:34px;border:1px solid var(--line);border-radius:8px;
    background:#fff;color:var(--faint);
}
.tp-find:focus-within{border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-06)}
/* 选择器必须写到 input[type=search]：shared.css 里那条全局输入框样式
   用的正是 input[type="search"]（权重 0,1,1），而 shared.css 在 app.css 之后加载。
   只写 .tp-find input 与它同权重、后加载的胜出 —— 结果是外框里再套一个小输入框。 */
.tp-find input[type="search"]{
    flex:1;min-width:0;height:100%;padding:0;border:0;border-radius:0;outline:0;
    background:transparent;box-shadow:none;
    font-size:13px;color:var(--text);
}
.tp-find input::-webkit-search-cancel-button{-webkit-appearance:none}
.tp-tools s{text-decoration:none;font-size:12px;color:var(--muted);white-space:nowrap}
.team-pick-row.is-picked{background:var(--gold-06,rgba(176,141,87,.06))}
/* 姓名不折行；角色 / 部门太长就省略 —— 行高一跳一跳地看着很乱 */
.tp-main > span:nth-child(2){flex:none;white-space:nowrap}
.tp-main .tiny{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.team-pick-row.is-dim{opacity:.5}
.team-pick-row.is-off{display:none}
.tp-none{padding:16px;text-align:center;font-size:12.5px;color:var(--faint)}

/* 客户「已签约未立案」横幅：绿色＝好消息，但必须推动下一步动作 */
.cn-banner.is-signed{background:var(--green-soft);border-color:rgba(15,157,88,.25);color:var(--green);align-items:center}
.cn-banner.is-signed span{color:#3d6a50}
.cn-banner .grow{flex:1 1 auto;min-width:0}

/* 清单视图里已办结的行压低视觉重量，避免和待办抢注意力 */
.table tr.is-muted td{color:var(--faint)}
.table tr.is-muted .main-cell a{color:var(--faint);text-decoration:line-through}

/* ===================================================================
   统一筛选条（2026-11）
   报表、绩效、台账共用。做法：一整条工具条，内部分段，段间竖线，
   按钮右端独立。比一排松散的 label+input 更容易一眼看出「在按什么筛」。
   =================================================================== */
.flt-bar{display:flex;align-items:center;flex-wrap:wrap;gap:0;background:var(--panel,#fff);
    border:1px solid var(--line);border-radius:10px;padding:2px 4px;box-shadow:0 1px 2px rgba(16,24,40,.03)}
.flt-seg{display:flex;align-items:center;gap:7px;padding:7px 11px;border-right:1px solid var(--line-2);flex-wrap:wrap}
.flt-lb{font-size:11px;color:var(--muted);white-space:nowrap;letter-spacing:.02em}
.flt-sep{font-size:11px;color:var(--muted)}
.flt-seg input[type=date]{width:132px;border:0;background:transparent;padding:2px 0;font-size:13px;box-shadow:none}
.flt-seg select{width:110px;border:0;background:transparent;padding:2px 0;font-size:13px;box-shadow:none}
.flt-seg input:focus,.flt-seg select:focus{outline:none;box-shadow:none}
.flt-seg:focus-within{background:var(--gold-06);border-radius:7px}
.flt-seg input[type=date]::-webkit-calendar-picker-indicator{opacity:.42;cursor:pointer;transform:scale(.86)}
.flt-acts{display:flex;gap:6px;padding:6px 8px;margin-left:auto}
@media(max-width:900px){
    .flt-seg{border-right:0;border-bottom:1px solid var(--line-2);width:100%}
    .flt-acts{width:100%;margin-left:0}
}

/* 返回条：一行两个小胶囊按钮。
   以前是一条金色横幅，每页都占一整行、颜色又重，视觉上比页面标题还抢；
   改成按钮后重量接近于零，但「回哪去」一直摆在手边。 */
.backbar{display:flex;align-items:center;gap:6px;margin:-6px 0 10px;flex-wrap:wrap;font-size:12px}
.bb-btn{display:inline-flex;align-items:center;gap:4px;padding:3px 11px;
    border:1px solid var(--line);border-radius:999px;background:var(--panel,#fff);
    color:var(--muted);text-decoration:none;line-height:1.7;
    transition:border-color .15s,color .15s,background .15s}
.bb-btn:hover{border-color:var(--gold);color:var(--gold-text-deep);background:var(--gold-06)}
.bb-src{color:var(--gold-text-deep);border-color:var(--gold-22);background:var(--gold-06);font-weight:600}
.bb-src:hover{background:var(--gold-soft)}
.bb-sep{width:1px;height:12px;background:var(--line);margin:0 2px}
.bb-hint{margin-left:2px}
/* display:inline-flex 会盖掉 hidden 属性，这里补一刀 */
.backbar [hidden]{display:none!important}


/* 表格行内操作的表单容器：form 不能住在 <tbody> 里，统一挪到表格外面藏起来，
   按钮用 form="id" 关联。这里不能用 display:none —— 部分浏览器对隐藏表单的
   提交按钮仍需要可见性判定，用 0 尺寸 + 绝对定位更稳妥。 */
.hidden-forms{position:absolute;width:0;height:0;overflow:hidden;opacity:0;pointer-events:none}

/* ============ 系统设置三级 ============ */
/* 一级：分组卡。一张卡＝一类事，卡上直接列出这类里有什么，点进去才是列表 */
.set-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}
.set-card{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;background:var(--panel,#fff);
    border:1px solid var(--line);border-radius:10px;text-decoration:none;color:inherit;
    transition:border-color .15s,box-shadow .15s,transform .15s}
.set-card:hover{border-color:var(--gold);box-shadow:0 4px 16px rgba(0,0,0,.06);transform:translateY(-1px)}
.set-ic{flex:none;width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;
    background:var(--gold-06);color:var(--gold-text-deep)}
.set-body{flex:1;min-width:0}
.set-name{font-size:14.5px;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:8px}
.set-n{font-size:11px;font-weight:400;color:var(--faint);border:1px solid var(--line-2);border-radius:10px;padding:0 7px}
.set-desc{font-size:12px;color:var(--muted);line-height:1.65;margin-top:4px}
.set-items{display:flex;flex-wrap:wrap;gap:5px;margin-top:9px}
.set-items span{font-size:11px;color:var(--ink-2,#4a4f57);background:var(--fill-2,#f4f5f7);
    border-radius:5px;padding:2px 7px;white-space:nowrap}
.set-go{flex:none;color:var(--faint);margin-top:9px}

/* 二级：设置列表。一行一项，右侧灰字是「现在填的是什么」——不用点进去就能判断 */
.set-list{padding:2px 0}
.set-row{display:flex;align-items:center;gap:14px;padding:13px 18px;border-bottom:1px solid var(--line-2);
    text-decoration:none;color:inherit}
.set-row:last-child{border-bottom:0}
.set-row:hover{background:var(--gold-06)}
.set-row-main{flex:1;min-width:0}
.set-row-name{font-size:13.5px;font-weight:600;color:var(--ink);display:flex;align-items:center;gap:8px}
.set-ext{font-size:10.5px;font-weight:400;color:var(--faint);border:1px solid var(--line-2);border-radius:4px;padding:0 5px}
.set-row-desc{font-size:11.5px;color:var(--faint);line-height:1.6;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.set-row-val{flex:none;max-width:280px;text-align:right}
.set-row-val .badge{font-weight:500}

/* 三级：左表单 + 右同组导航 */
.grid-set{display:grid;grid-template-columns:minmax(0,1fr) 248px;gap:16px}
.set-form .card-bd{padding:18px 20px}
.set-siblings{padding:6px 0}
.set-sib{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:9px 18px;
    font-size:12.5px;color:var(--ink-2,#4a4f57);text-decoration:none;border-left:3px solid transparent}
.set-sib:hover{background:var(--gold-06);color:var(--gold-text-deep)}
.set-sib.on{background:var(--gold-06);border-left-color:var(--gold);color:var(--gold-text-deep);font-weight:600}

/* 通道自检小框 */
.self-test{margin-top:14px;padding:11px 13px;border:1px dashed var(--line);border-radius:8px;background:#fcfbf7}
.self-test-hd{font-size:12.5px;font-weight:600;margin-bottom:8px;display:flex;gap:8px;align-items:baseline}
.self-test-hd .faint{font-weight:400;font-size:11px}

@media (max-width:980px){
    .grid-set{grid-template-columns:1fr}
    .set-row-val{display:none}
}

/* ===== 从系统设置页下沉的组件样式（业务参数 / 通知模板 / 个人账字典 / 短信日志）=====
   三级化之后这些片段分散在多个详情页，样式不能再写某一页的 <style> 里，否则别的页进来就裸奔 */
/* 短信提醒开关：和上面一堆模板 ID 分开，避免看着像又一个要填的输入框 */
.sms-remind-box{margin-top:10px;padding:11px 13px;border:1px dashed var(--line);border-radius:8px;background:#fcfbf7}
.sms-log{margin-top:12px;border:1px solid var(--line-2);border-radius:8px;overflow:hidden}
.sms-log-hd{padding:8px 12px;background:#fafbfc;border-bottom:1px solid var(--line-2);font-size:12.5px;font-weight:600}
.sms-log .table{margin:0}

/* 业务参数：分组折叠 + 一行一项 */
.opt-group{border:1px solid var(--line-2);border-radius:8px;margin-bottom:10px;overflow:hidden;background:#fff}
.opt-group>summary{cursor:pointer;padding:9px 12px;background:#fafbfc;font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:space-between;list-style:none}
.opt-group>summary::-webkit-details-marker{display:none}
.opt-group[open]>summary{border-bottom:1px solid var(--line-2)}
.opt-count{font-size:11px;font-weight:400;color:var(--faint)}
.opt-list{padding:4px 12px 8px}
.opt-item{display:flex;gap:16px;align-items:flex-start;padding:12px 0;border-bottom:1px solid var(--line-2)}
.opt-item:last-child{border-bottom:0}
/* 税率表 / 说明文字这类宽控件：整行铺开，控件不再挤在 150px 里 */
.opt-item.is-wide{flex-direction:column;gap:8px}
.opt-item.is-wide .opt-ctl{width:100%}
.opt-hd{flex:1;min-width:0}
.opt-label{font-size:12.5px;font-weight:600;color:var(--ink);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.opt-unit{font-size:11px;font-weight:400;color:var(--faint);border:1px solid var(--line-2);border-radius:4px;padding:0 4px}
.opt-def{font-size:10px;font-weight:400;color:var(--faint);background:var(--fill-2,#f4f5f7);border-radius:4px;padding:1px 5px}
.opt-note{font-size:11.5px;color:var(--faint);line-height:1.65;margin-top:3px;max-width:60ch}
.opt-ctl{width:150px;flex:none}
.opt-ctl input[type=number],.opt-ctl input[type=text],.opt-ctl textarea{width:100%}
.opt-ctl textarea{width:100%}
.opt-inline{display:flex;align-items:center;gap:5px}
.opt-inline input{flex:1;min-width:0}
.opt-prefix,.opt-suffix{font-size:12px;color:var(--faint);flex:none}
.opt-switch{display:flex;align-items:center;gap:6px;font-size:12px;cursor:pointer}
.opt-switch input{width:auto;accent-color:var(--gold)}
.brk-table{width:100%}
.brk-hd,.brk-row{display:grid;grid-template-columns:1.2fr 92px 1.3fr;gap:8px}
.brk-hd{font-size:10.5px;color:var(--faint);margin-bottom:3px}
.brk-row{margin-bottom:4px}
.brk-row input{width:100%;padding:5px 7px;font-size:12.5px}
/* 审批链：逐道下拉，一行放得下 4 道；顺序即审批顺序 */
.opt-chain{display:flex;gap:8px;flex-wrap:wrap}
.opt-chain-slot{display:flex;align-items:center;gap:6px;flex:1 1 190px;min-width:0}
.opt-chain-no{font-size:11px;color:var(--faint);flex:none;white-space:nowrap}
.opt-chain-slot select{flex:1;min-width:0;padding:5px 7px;font-size:12.5px}
/* 业务参数在窄屏堆叠，避免控件被压成一条 */
@media (max-width:720px){
  .opt-item{flex-direction:column;gap:6px}
  .opt-ctl{width:100%}
}

/* 通知模板：一行一个场景，展开后上半截「短信变量对照」、下半截「邮件正文」 */
.ntpl-item{border:1px solid var(--line-2);border-radius:8px;margin-bottom:8px;overflow:hidden;background:#fff}
.ntpl-item>summary{cursor:pointer;padding:9px 12px;background:#fafbfc;display:flex;align-items:center;gap:10px;list-style:none;flex-wrap:wrap}
.ntpl-item>summary::-webkit-details-marker{display:none}
.ntpl-item[open]>summary{border-bottom:1px solid var(--line-2)}
.ntpl-name{font-size:12.5px;font-weight:600;color:var(--ink);flex:none}
.ntpl-for{font-size:11.5px;color:var(--faint);min-width:0}
.ntpl-tags{margin-left:auto;display:flex;gap:6px;flex:none}
.ntpl-body{padding:12px 13px 14px}
.ntpl-sms{border:1px dashed var(--line);border-radius:7px;padding:9px 11px;background:#fcfbf7;margin-bottom:13px}
.ntpl-lb{font-size:11.5px;font-weight:600;color:var(--ink);margin-bottom:6px}
.ntpl-lb .faint{font-weight:400}
.ntpl-vars{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:11.5px;color:var(--faint)}
.ntpl-var{display:inline-flex;align-items:center;gap:4px;padding:1px 7px;border-radius:4px;background:#fff;border:1px solid var(--line-2)}
.ntpl-var b{color:var(--gold);font-weight:600}
.ntpl-hint{margin-top:7px;line-height:1.7}
.ntpl-sw{display:flex;align-items:center;gap:7px;font-size:12.5px;margin-bottom:9px;cursor:pointer}
.ntpl-sw input{width:auto;accent-color:var(--gold)}
.ntpl-ta{width:100%;min-height:136px;padding:9px 11px;border:1px solid var(--line);border-radius:6px;
  font-family:inherit;font-size:13px;line-height:1.85;resize:vertical}
.ntpl-vars-mail{margin-top:7px}

/* 个人账字典：科目改名 / 停用、规则文案 */
.acc-grp{border:1px solid var(--line-2);border-radius:8px;margin-bottom:8px;background:#fff;overflow:hidden}
.acc-grp>summary{cursor:pointer;padding:9px 12px;background:#fafbfc;font-size:12.5px;font-weight:600;
  display:flex;justify-content:space-between;align-items:center;list-style:none}
.acc-grp>summary::-webkit-details-marker{display:none}
.acc-grp>summary span{font-weight:400;font-size:11px;color:var(--faint)}
.acc-grp[open]>summary{border-bottom:1px solid var(--line-2)}
.acc-grp>div{padding:10px 12px}
.acc-grid{display:grid;grid-template-columns:1fr;gap:6px}
.acc-cell{display:flex;align-items:center;gap:8px}
.acc-cell input[type=text]{flex:1;min-width:0;padding:5px 8px;font-size:12.5px}
.acc-key{font-size:10.5px;color:var(--faint);font-family:ui-monospace,monospace;flex:0 0 auto}
.acc-grid.is-cat .acc-cell{gap:6px}
.acc-hide{display:flex;align-items:center;gap:4px;font-size:11.5px;color:var(--muted);
  flex:0 0 58px;cursor:pointer;white-space:nowrap}
.acc-hide input{width:auto;accent-color:var(--gold)}
.acc-rule{margin-bottom:12px}
.acc-rule:last-child{margin-bottom:0}
.acc-rule-hd{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:5px}
.acc-rule-hd b{font-size:12px}
.acc-rule-hd span{font-size:11px;color:var(--faint)}
.acc-rule textarea{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:6px;
  font-family:inherit;font-size:12.5px;line-height:1.9;resize:vertical;min-height:88px}

/* ============ 备份中心 ============ */
.bk-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px;margin-bottom:14px}
.bk-card{padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--panel,#fff)}
.bk-t{font-size:11.5px;color:var(--faint)}
.bk-v{font-size:19px;font-weight:700;color:var(--ink);margin:2px 0 4px;letter-spacing:.3px}
.bk-s{font-size:11px;color:var(--muted);line-height:1.6}
.bk-picks{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:10px}
.bk-pick{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border:1px solid var(--line);
    border-radius:9px;cursor:pointer;background:var(--panel,#fff);transition:border-color .15s,background .15s}
.bk-pick:hover{border-color:var(--gold-soft)}
.bk-pick.on{border-color:var(--gold);background:var(--gold-06)}
.bk-pick input{width:auto;margin-top:3px;accent-color:var(--gold)}
.bk-pick-n{font-size:13px;font-weight:600;color:var(--ink);display:flex;align-items:center;gap:7px}
.bk-pick-d{font-size:11.5px;color:var(--faint);line-height:1.65;margin-top:3px}
.bk-opts{display:flex;flex-direction:column;gap:8px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line-2)}
.bk-opts .check-line{display:flex;align-items:center;gap:7px;font-size:12.5px}
.bk-opts input[type=checkbox]{width:auto;accent-color:var(--gold)}

/* ============ 审计日志 ============ */
.aud-note{border:1px solid var(--line);border-radius:10px;background:var(--panel,#fff);margin-bottom:12px}
.aud-note>summary{cursor:pointer;padding:10px 16px;font-size:12.5px;font-weight:600;color:var(--ink-2,#4a4f57);
    list-style:none;display:flex;align-items:center;gap:8px}
.aud-note>summary::-webkit-details-marker{display:none}
.aud-note>summary:before{content:'?';flex:none;width:16px;height:16px;border-radius:50%;
    background:var(--gold-06);color:var(--gold-text-deep);font-size:11px;font-weight:700;
    display:flex;align-items:center;justify-content:center}
.aud-note-bd{padding:2px 16px 14px;font-size:12px;color:var(--muted);line-height:1.85}
.aud-note-bd ul{margin:6px 0 0;padding-left:18px}
.aud-note-bd li{margin-bottom:4px}
.aud-note-h{font-size:12px;font-weight:700;color:var(--ink)}
.aud-tabs{display:flex;align-items:center;gap:6px;margin-bottom:10px;flex-wrap:wrap}
.aud-tab{display:inline-flex;align-items:center;gap:6px;padding:6px 13px;border-radius:999px;
    border:1px solid var(--line);background:var(--panel,#fff);font-size:12.5px;color:var(--muted);text-decoration:none}
.aud-tab:hover{border-color:var(--gold-soft);color:var(--gold-text-deep)}
.aud-tab.on{background:var(--gold);border-color:var(--gold);color:var(--on-gold);font-weight:600}
.aud-tab.on .aud-n{color:var(--on-gold);opacity:.8}
.aud-n{font-size:11px;color:var(--faint)}
.aud-week{margin-left:auto;font-size:11.5px;color:var(--faint)}
.aud-mod{display:block;font-size:11px;color:var(--faint);margin-top:2px}
.aud-detail{max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}
.aud-link{color:var(--gold-text-deep);text-decoration:none;border-bottom:1px dashed var(--gold-soft)}
.aud-link:hover{color:var(--gold)}
tr.aud-danger td{background:rgba(192,57,43,.035)}

/* ---- 字段含义说明表 ---- */
.aud-legend{width:100%;border-collapse:collapse;font-size:12px;margin-top:2px}
.aud-legend th{width:74px;text-align:left;vertical-align:top;padding:5px 10px 5px 0;
    font-weight:700;color:var(--ink);white-space:nowrap}
.aud-legend td{padding:5px 0;color:var(--muted);line-height:1.75;border-top:1px solid var(--line-2)}
.aud-legend tr:first-child td{border-top:0}
.aud-legend b{color:var(--ink-2);font-weight:600}
.aud-eq{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.94em;
    background:var(--gold-06);color:var(--gold-text-deep);padding:1px 5px;border-radius:4px;white-space:nowrap}

/* ---- 表格：对象列（名称 + 类型·编号） ---- */
.aud-tb td{vertical-align:top}
.aud-who{display:block;color:var(--ink);line-height:1.5}
.aud-who-r{display:block;font-size:10.5px;color:var(--faint);line-height:1.4}
.aud-obj{display:flex;flex-direction:column;min-width:0;line-height:1.5}
.aud-obj-n{display:block;font-size:12.5px;color:var(--ink);font-weight:500;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.aud-obj-n.aud-link{border-bottom:1px dashed var(--gold-soft);width:fit-content;max-width:100%}
.aud-obj-n.is-gone{color:var(--faint);text-decoration:line-through;text-decoration-color:var(--line)}
.aud-obj-s{display:block;font-size:10.5px;color:var(--faint);line-height:1.5;margin-top:1px;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.aud-gone{color:#9a6a1e}

/* ---- 详情列：一句话摘要 + 「详情」入口 ---- */
.aud-dt{display:flex;align-items:baseline;gap:8px;min-width:0}
/* 详情最多两行：一句话常被截成半句就失去意义（「把 案由 从「…」改成…」），
   两行足够交代清楚，再长就点开弹窗看 */
.aud-dt-t{color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
    overflow:hidden;line-height:1.55;min-width:0;word-break:break-word}
.aud-dt-t.is-empty{color:var(--faint)}
.aud-more{flex:none;padding:0 6px;height:19px;line-height:19px;border-radius:5px;
    border:1px solid var(--line);background:var(--surface);font-family:inherit;font-size:10.5px;
    color:var(--gold-text-deep);cursor:pointer;white-space:nowrap}
.aud-more:hover{border-color:var(--gold-22);background:var(--gold-06)}

.aud-more.is-quiet{color:var(--faint);border-color:var(--line-2)}
.aud-more.is-quiet:hover{color:var(--gold-text-deep);border-color:var(--gold-22)}

/* ---- 详情弹窗 ---- */
.aud-dlg{width:min(560px, calc(92vw / var(--z,1)));max-height:calc(84vh / var(--z,1));padding:0;border:1px solid var(--line);
    border-radius:14px;background:var(--surface);box-shadow:0 26px 70px rgba(16,24,40,.22);
    color:var(--text);overflow:hidden}
.aud-dlg::backdrop{background:rgba(18,32,46,.42)}
.aud-dlg-h{display:flex;align-items:flex-start;gap:12px;padding:15px 18px 12px;
    border-bottom:1px solid var(--line-2);background:var(--fill-2,#fafbfc)}
/* 一句话读完这件事 —— 弹窗里最先被看到的应该是它，不是字段表 */
.ad-lead{font-size:15px;font-weight:600;color:var(--ink);line-height:1.55;letter-spacing:.1px}
.aud-dlg-t{font-size:15px;font-weight:600;color:var(--ink);line-height:1.45}
.aud-dlg-s{font-size:11.5px;color:var(--faint);margin-top:3px;line-height:1.6}
.aud-dlg-x{margin-left:auto;flex:none;width:26px;height:26px;border:0;border-radius:8px;
    background:none;font-size:19px;line-height:1;color:var(--faint);cursor:pointer}
.aud-dlg-x:hover{background:var(--ink-06);color:var(--ink)}
.aud-dlg-b{padding:4px 18px 14px;max-height:calc(calc(84vh / var(--z,1)) - 120px);overflow:auto}
.aud-dlg-f{display:flex;justify-content:flex-end;gap:8px;padding:10px 18px;
    border-top:1px solid var(--line-2);background:var(--fill-2,#fafbfc)}
.ad-sec{padding:12px 0;border-bottom:1px dashed var(--line-2)}
.ad-sec:last-child{border-bottom:0}
.ad-sec-h{font-size:11px;font-weight:700;letter-spacing:.4px;color:var(--faint);margin-bottom:6px}
.ad-n{font-weight:400;color:var(--faint)}
.ad-kv{display:flex;gap:12px;font-size:12.5px;line-height:1.85}
.ad-k{width:76px;flex:none;color:var(--faint)}
.ad-v{color:var(--ink-2);min-width:0;word-break:break-word}
.ad-ch{width:100%;border-collapse:collapse;font-size:12.5px}
.ad-ch th{text-align:left;font-weight:600;font-size:11px;color:var(--faint);padding:0 8px 4px 0}
.ad-ch td{padding:5px 8px 5px 0;vertical-align:top;border-top:1px solid var(--line-2)}
.ad-ch-f{color:var(--ink);font-weight:600;white-space:nowrap}
.ad-ch-o{color:var(--faint);text-decoration:line-through;text-decoration-color:var(--line);word-break:break-word}
.ad-ch-a{color:var(--faint);width:14px;text-align:center}
.ad-ch-n{color:var(--gold-text-deep);font-weight:600;word-break:break-word}
.ad-raw summary{font-size:11.5px;color:var(--faint);cursor:pointer}
.ad-raw pre{margin:6px 0 0;padding:9px 11px;background:var(--fill-2,#fafbfc);border:1px solid var(--line-2);
    border-radius:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;
    color:var(--ink-2);white-space:pre-wrap;word-break:break-all;max-height:180px;overflow:auto}

/* ============================================================
   人员选择器（staff-picker）：可搜索的下拉
   —— 律所几十上百人时，原生 select 只能靠滚。这里换成「按钮 + 搜索面板」，
      但底下仍是一张原生 select（提交、required 校验、无 JS 降级都靠它）。
   ============================================================ */
.pk{position:relative;display:inline-block;max-width:100%;vertical-align:middle}

/* 视觉上藏起来，但不 display:none —— 否则浏览器跳过 required 校验 */
.pk-native{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
    overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

.pk-btn{display:block;width:100%;min-width:132px;height:34px;padding:0 26px 0 10px;
    border:1px solid var(--line);border-radius:8px;background:var(--surface,#fff);
    font-family:inherit;font-size:13px;color:var(--ink);text-align:left;cursor:pointer;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative;
    transition:border-color .15s}
.pk-btn:hover{border-color:var(--gold-22)}
.pk-btn:focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-06)}
.pk-btn::after{content:'';position:absolute;right:10px;top:50%;margin-top:-2px;
    border-left:4px solid transparent;border-right:4px solid transparent;
    border-top:5px solid var(--faint)}
.pk-btn.is-empty{color:var(--faint)}

.pk-pop{position:absolute;z-index:70;top:calc(100% + 5px);left:0;
    width:max-content;min-width:100%;max-width:min(340px, calc(92vw / var(--z,1)));
    background:var(--surface,#fff);border:1px solid var(--line);border-radius:10px;
    box-shadow:0 14px 38px rgba(16,24,40,.16);padding:6px}
.pk-search input{width:100%;height:32px;padding:0 9px;font-size:12.5px;
    border:1px solid var(--line);border-radius:7px;background:var(--fill-2,#fafbfc)}
.pk-search input:focus{outline:none;border-color:var(--gold);background:var(--surface,#fff)}
.pk-list{max-height:264px;overflow:auto;margin-top:5px;overscroll-behavior:contain}
.pk-gt{font-size:10.5px;color:var(--faint);letter-spacing:.5px;padding:7px 8px 3px;
    position:sticky;top:0;background:var(--surface,#fff);z-index:1}
.pk-o{display:flex;align-items:center;justify-content:space-between;gap:10px;
    width:100%;padding:6px 9px;border:0;background:none;border-radius:6px;
    font-family:inherit;font-size:12.5px;color:var(--ink);text-align:left;cursor:pointer}
.pk-o:hover,.pk-o.is-active{background:var(--gold-06)}
.pk-o.on{background:var(--gold-soft);color:var(--gold-text-deep);font-weight:600}
.pk-n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pk-s{font-size:10.5px;color:var(--faint);flex:none}
.pk-o.on .pk-s{color:var(--gold-text-deep);opacity:.8}
.pk-empty{padding:16px 8px;text-align:center;font-size:12px;color:var(--faint)}

/* 筛选条里的选择器：融入分段，不要外框（与 .flt-seg select 观感一致） */
.flt-seg .pk{width:110px}
.flt-seg .pk-btn{height:26px;min-width:0;padding:0 20px 0 2px;border:0;background:transparent;
    font-size:13px;border-radius:4px}
.flt-seg .pk-btn:hover{border:0;color:var(--gold-text-deep)}
.flt-seg .pk-btn:focus{box-shadow:none;border:0;background:var(--gold-06)}
.flt-seg .pk-btn::after{right:6px}
/* 日期段的「承办律师」这类窄栏，面板可以比按钮宽 */
.flt-seg .pk-pop{min-width:220px}

/* 表格 / 行内的紧凑变体 */
.pk-sm .pk-btn{height:28px;font-size:12px;min-width:104px}

/* 面包屑已于 2026-11 移除（用户反馈：顶部太乱）。页面里历史遗留的 .crumb 一并隐藏 ——
   逐个改 100+ 个页面不值当，等哪一轮顺手改到那页再删。 */
.page-hd .crumb{display:none}

/* 设置页的页内 chips 已被「左侧树」取代（2026-11 第三轮），旧规则删除：
   .set-chips / .set-chip 现在只由 group.blade 的内联样式提供（不再需要）。 */

/* ============================================================
   备份 · 加密密码卡
   ============================================================ */
.bp-note{display:flex;gap:9px;align-items:flex-start;padding:10px 13px;border-radius:9px;
    background:var(--fill-2,#fafbfc);border:1px solid var(--line-2);
    font-size:12.5px;line-height:1.75;color:var(--muted)}
.bp-note.is-warn{background:var(--amber-soft);border-color:transparent;color:#8a5a00}
.bp-note svg{flex:none;margin-top:2px}

.bp-form{margin-top:14px}
.bp-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px;max-width:640px}
.bp-fields .field{margin:0}
.bp-fields .field label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}
.bp-fields .field input{width:100%;height:36px;padding:0 11px;border:1px solid var(--line);
    border-radius:8px;font-size:13px;background:#fff}
.bp-fields .field input:focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-06)}

.bp-meter{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:11.5px;color:var(--faint)}
.bp-bar{display:inline-flex;gap:3px}
.bp-bar i{display:block;width:26px;height:3px;border-radius:2px;background:var(--line)}
.bp-meter[data-level="weak"] .bp-bar i:nth-child(1){background:var(--red)}
.bp-meter[data-level="fair"] .bp-bar i:nth-child(-n+2){background:var(--amber)}
.bp-meter[data-level="strong"] .bp-bar i{background:var(--green,#137333)}
.bp-meter[data-level="weak"] .bp-mt{color:var(--red)}
.bp-meter[data-level="fair"] .bp-mt{color:var(--amber)}
.bp-meter[data-level="strong"] .bp-mt{color:var(--green,#137333)}

.bp-hint{margin-top:6px;font-size:11.5px;color:var(--faint);min-height:16px}
.bp-hint.ok{color:var(--green,#137333)}
.bp-hint.bad{color:var(--red)}

.bp-acts{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:14px;
    padding-top:13px;border-top:1px solid var(--line-2)}

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

/* 表格里「主标题 + 副行」型单元格：一行截断，悬停看全文（title）。
   以前用 Str::limit(标题, 16) 截断，宽屏上会截出一串省略号 —— 截断应该交给布局，不该写死字数。 */
.pay-case,.cell-ellip{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pay-case{color:var(--blue)}
.pay-sub{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 筛选条右侧的动作组：检索 / 重置 永远待在一起并靠右，
   不再各自当一个 flex 子项 —— 否则窄屏时「重置」会自己掉到第二行。 */
.flt-acts{margin-left:auto;display:flex;gap:8px;flex:none}

/* =========================================================
   可增删改的字典表（系统设置 → 案件类型 / 律师职级）
   ---------------------------------------------------------
   定宽布局 + colgroup 百分比：新增行在 <tfoot> 里，与数据行共用同一套列，
   否则怎么调都对不上表头（见 docs/页面设计风格.md 第十一节）。
   ========================================================= */
.opt-table{table-layout:fixed;width:100%;font-size:12.5px}
/* 同一个块里放两张字典表时的分段小标题（合同与函件类型共用一页） */
.opt-sub{font-size:13px;font-weight:600;color:var(--ink);margin:2px 0 0}
.opt-sub-d{font-size:11.5px;color:var(--faint);line-height:1.7;margin:4px 0 8px;max-width:88ch}
.opt-sub.mt24{margin-top:24px}
.opt-table th{padding:8px 10px;font-size:11.5px;font-weight:500;color:var(--faint);
    background:#fbfbfc;letter-spacing:.02em}
.opt-table td{padding:6px 10px;vertical-align:middle}
.opt-table td input[type=text],.opt-table td select{width:100%;height:30px;padding:0 8px;
    font-size:12.5px;border-radius:6px;border-color:var(--line-2);background:#fff}
.opt-table td input[type=text]:focus,.opt-table td select:focus{border-color:var(--gold);
    box-shadow:0 0 0 3px var(--gold-06)}

.opt-name{display:flex;align-items:center;gap:8px;min-width:0}
/* 输入框跟着列宽无限拉长会显得空；360px 足够放下「高级合伙人（授薪）」这类长名字 */
.opt-name input{flex:1;min-width:0;max-width:360px}
.opt-name code{flex:none;font-size:10.5px;color:var(--faint);opacity:.8;
    font-family:ui-monospace,SFMono-Regular,Menlo,monospace}

.opt-sw{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);cursor:pointer;white-space:nowrap}
.opt-sw input{width:14px;height:14px;accent-color:var(--gold);cursor:pointer}

.opt-count{font-weight:600;color:var(--gold-text-deep)}
.opt-ops{display:flex;gap:5px;justify-content:flex-end;white-space:nowrap}
.opt-del{color:var(--red)}
.opt-del-na{font-size:11px;color:var(--faint)}

.opt-table tr.opt-off td:not(:last-child){opacity:.55}
.opt-table tr.opt-off .opt-sw span{color:var(--faint)}

/* 新增行：与数据行同一套列，只是底色区分「这是往里加，不是已有的一条」 */
.opt-add-hd td{padding:14px 10px 5px;border-top:1px solid var(--line-2);background:#fcfcfd}
.opt-add-hd b{font-size:12px;color:var(--ink);margin-right:8px}
.opt-add-hd .faint{font-size:11px}
.opt-add td{padding:4px 10px 12px;background:#fcfcfd}
.opt-add td:first-child{padding-left:10px}
.opt-add-btn{width:100%;justify-content:center}

/* ============================================================
   官网管理 · 2026-11 第二批修整
   ------------------------------------------------------------
   ① 搜索框图标与提示文字重合：shared.css 的 input[type=search]
      与本文件的 .cms-search input 权重相同，而 shared.css 后加载，
      padding-left:30px 被它的 8px 11px 盖掉。这里把选择器提到
      input[type=search] 一级，权重胜出，图标才有位置。
   ② 内容列表补一条表头（全选 + 列名），批量操作不再是隐藏功能。
   ③ 栏目管理右侧面板：一页一块纸，栏目内分类做成可增删改排序的小表。
   ============================================================ */

.cms-search input[type=search],
.cms-search input[type=text]{padding-left:30px}
.cms-search svg{top:50%;transform:translateY(-50%)}

/* 表头：与 .cm-row 同一套栅格，全选框与每行的框上下对齐 */
.cm-head{display:grid;align-items:center;gap:14px;padding:9px 18px;
  grid-template-columns:24px 56px minmax(0,1fr) 92px 70px 100px 168px;
  background:#fbfcfd;border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  font-size:11px;color:var(--faint);letter-spacing:.06em}
.cm-head .cm-h-main{grid-column:span 2}
.cm-head .cm-h-num,.cm-head .cm-h-time{text-align:right}
.cm-head .cm-h-ops{text-align:right}
.cm-pane .cm-head{margin:0}
@media(max-width:1180px){
  .cm-head{grid-template-columns:24px 52px minmax(0,1fr) 88px 152px;gap:12px}
  .cm-head .cm-h-num,.cm-head .cm-h-time{display:none}}
@media(max-width:820px){
  .cm-head{display:none}}

/* 批量操作条：没选东西时收起，选了就从表头上方滑出来（位置固定在列表顶部） */
.cms-bulk{position:sticky;top:0;z-index:6}

/* ---------------- 栏目管理：右侧面板 ---------------- */
.chn-top{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap;padding:16px 20px 14px;border-bottom:1px solid var(--line)}
.chn-top .id{min-width:0;flex:1 1 320px}
.chn-top .id h2{margin:0;font-family:"Noto Serif SC",serif;font-size:19px;font-weight:600;color:var(--ink);letter-spacing:.02em}
.chn-top .id .meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:7px;font-size:11.5px;color:var(--faint)}
.chn-top .id .meta code{font-size:11px;background:#f4f6f9;border-radius:5px;padding:1px 6px;color:var(--muted)}
.chn-top .rows{display:flex;gap:0;flex-wrap:wrap}
.chn-top .rows .r{padding:0 18px;border-left:1px solid var(--line)}
.chn-top .rows .r:first-child{padding-left:0;border-left:0}
.chn-top .rows b{display:block;font-size:19px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.25}
.chn-top .rows span{font-size:11px;color:var(--faint)}
.chn-top .rows .r.is-warn b{color:var(--amber)}

.chn-navbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:11px 20px;background:#fbfcfd;border-bottom:1px solid var(--line)}
.chn-navbar .st{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
.chn-navbar .st i{width:6px;height:6px;border-radius:50%;background:#c3ccd8;display:block}
.chn-navbar .st.on i{background:var(--green)}
.chn-navbar .grow{flex:1}

/* 分类小表：一行一项，支持上下移与删除，提交是整表一次写入 */
.cat-table{width:100%;border-collapse:collapse}
.cat-table th{font-size:11px;font-weight:500;color:var(--faint);text-align:left;padding:0 10px 7px;letter-spacing:.05em}
.cat-table td{padding:4px 10px;border-top:1px solid var(--line-2);vertical-align:middle}
.cat-table tr:first-child td{border-top:0}
.cat-table td.mv{width:56px;white-space:nowrap}
.cat-table td.op{width:44px;text-align:right}
.cat-table input[type=text]{font-size:12.5px;padding:6px 9px}
.cat-table .key{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;color:var(--faint)}
.cat-mv{width:24px;height:24px;border:1px solid var(--line);background:#fff;border-radius:6px;color:var(--muted);
  font-size:11px;line-height:1;cursor:pointer;padding:0}
.cat-mv:hover{border-color:var(--gold);color:var(--gold-deep)}
.cat-del{width:24px;height:24px;border:0;background:transparent;border-radius:6px;color:#b9c2ce;cursor:pointer;font-size:13px;line-height:1}
.cat-del:hover{background:#fdf1f0;color:var(--red)}
.cat-use{font-size:11px;color:var(--faint);white-space:nowrap}
.cat-use b{color:var(--gold-deep);font-weight:600}
.cat-empty{padding:14px 4px;font-size:12px;color:var(--faint)}
.chn-cat-add{margin-top:10px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.chn-cat-add input{max-width:280px}

/* ---------------- 咨询通道 / 客户留言：段落式，不再一屏七八张卡 ---------------- */
.cfg-sec{border-top:1px solid var(--line)}
.cfg-sec:first-of-type{border-top:0}
.cfg-sec-hd{display:flex;align-items:flex-start;gap:12px;padding:16px 20px 0}
.cfg-sec-hd .no{flex:none;width:22px;height:22px;border-radius:7px;display:grid;place-items:center;
  font-size:10.5px;font-weight:600;color:var(--gold-deep);background:var(--gold-soft);font-variant-numeric:tabular-nums}
.cfg-sec-hd .t{flex:1;min-width:0}
.cfg-sec-hd h3{margin:0;font-size:13.5px;font-weight:600;color:var(--ink)}
.cfg-sec-hd p{margin:3px 0 0;font-size:11.5px;color:var(--faint);line-height:1.7}
.cfg-sec-bd{padding:14px 20px 18px 54px}
.cfg-sec-bd .form-grid{gap:14px 20px}
.cfg-note{font-size:11.5px;color:var(--faint);line-height:1.9;background:#fafbfd;border:1px solid var(--line-2);
  border-radius:9px;padding:10px 13px}
.cfg-note b{color:var(--ink)}
.cfg-note code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;background:#eef1f5;
  border-radius:4px;padding:1px 5px}
.cfg-qr{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap}
.cfg-qr .box{width:104px;height:104px;border:1px dashed var(--line);border-radius:10px;background:#fbfcfd;
  display:grid;place-items:center;flex:none;overflow:hidden}
.cfg-qr .box img{max-width:100%;max-height:100%;display:block}
.cfg-qr .box span{font-size:11px;color:var(--faint)}
.cfg-qr .side{flex:1;min-width:220px}
.cfg-stat{display:flex;align-items:center;gap:0;flex-wrap:wrap;padding:13px 20px;background:#fbfcfd;border-bottom:1px solid var(--line)}
.cfg-stat .it{display:flex;align-items:center;gap:7px;padding:0 18px;border-left:1px solid var(--line);font-size:11.5px;color:var(--faint)}
.cfg-stat .it:first-child{padding-left:0;border-left:0}
.cfg-stat .it b{font-size:12.5px;font-weight:600;color:var(--ink)}
.cfg-foot{display:flex;align-items:center;gap:12px;padding:13px 20px;border-top:1px solid var(--line);background:#fbfcfd}
.cfg-foot .tip{flex:1;font-size:11.5px;color:var(--faint)}

/* 留言列表：一行一条，靠细线分，不靠边框卡片 */
.msg-head,.msg-row{display:grid;gap:14px;padding:12px 20px;
  grid-template-columns:170px minmax(0,1fr) 92px 104px 78px}
.msg-head{background:#fbfcfd;border-bottom:1px solid var(--line);font-size:11px;color:var(--faint);letter-spacing:.06em}
.msg-head .r,.msg-row .r{text-align:right}
.msg-row{align-items:center;border-top:1px solid var(--line-2)}
.msg-row:first-child{border-top:0}
.msg-row:hover{background:#fbfcfe}
.msg-row .who{min-width:0}
.msg-row .who b{font-size:13.5px;font-weight:600;color:var(--ink);display:block}
.msg-row .who .ph{font-size:11.5px;color:var(--faint);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;margin-top:2px}
.msg-row .what{min-width:0}
.msg-row .what .s{font-size:13px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msg-row .what .c{font-size:11.5px;color:var(--faint);margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.msg-row .when{font-size:11.5px;color:var(--faint);line-height:1.6}
/* 放大字号后内容区实际只剩 400 出头，五列无论如何塞不下。表格可以横向滚，
   但这里「状态列」是市场岗必须一眼看见的东西，滚到右边就等于没有。
   所以放大态直接换成手机上那种两行式：上排客户 + 状态，中间内容，下面按钮。
   100% 时一个像素都不变。 */
.msg-wrap{overflow-x:auto}
html[data-zlg] .msg-head{display:none}
html[data-zlg] .msg-row{
  grid-template-columns:minmax(0,1fr) max-content;
  grid-template-areas:"who state" "what what" "act act";
  row-gap:8px;
}
html[data-zlg] .msg-row>div:nth-child(1){grid-area:who}
html[data-zlg] .msg-row>div:nth-child(2){grid-area:what}
/* 第 3 个是「方便联系」：放大态先让它，详情里还看得到 */
html[data-zlg] .msg-row>div:nth-child(3){display:none}
html[data-zlg] .msg-row>div:nth-child(4){grid-area:state;text-align:right}
html[data-zlg] .msg-row>div:nth-child(5){grid-area:act}
/* 转了律师却一直没跟进：小红字。市场岗靠扫列表决定要不要打电话或接手，
   所以它必须留在状态列、不用点进详情 —— 详情页那句提示写了大半年没人看见。 */
.msg-idle{margin-top:2px;font-size:11px;font-weight:500;color:var(--red);line-height:1.5;white-space:nowrap}
@media(max-width:1100px){
  .msg-head{display:none}
  .msg-row{grid-template-columns:minmax(0,1fr) auto;gap:10px}
  .msg-row .when,.msg-row .pref{display:none}}

/* 页面板块编辑：左右 3:1，整页居中（原来靠左、右栏 296px 固定不随屏宽长，
   宽屏上显得又挤又偏）。用 fr 分配，屏越宽右栏越宽，比例恒为 3:1。 */
.spp-wrap{max-width:1520px;margin:0 auto}
.spp-layout{grid-template-columns:minmax(0,3fr) minmax(300px,1fr);gap:18px}
.spp-side>.spp-card{padding:0}

/* 文章 / 页面编辑（.edx）：宽屏下不再贴着左边，整块居中 */
.edx{max-width:1500px;margin:0 auto}
@media(max-width:1180px){.spp-layout{grid-template-columns:1fr}}

/* 底部保存条：原来是半透明 + 模糊，滚动时下面卡片的字会透上来，
   看着像两层字叠在一起。改成实色，并给页面留出它的高度。 */
.spp-foot{background:#f7f8fa;box-shadow:0 -1px 0 var(--line),0 -10px 24px -22px rgba(18,32,46,.7)}
.spp-wrap{padding-bottom:6px}

/* 3:1 用纯 fr 分配（带 min 会被最小值顶掉，宽屏上比例又跑偏） */
.spp-layout{grid-template-columns:minmax(0,3fr) minmax(0,1fr)}
/* 右栏是 sticky 的，底部保存条会盖住它最后一张卡 —— 留出保存条的高度 */
.spp-side{padding-bottom:70px}
/* 文章/页面编辑与板块编辑用同一套比例：主体 3、右栏 1。
   只在宽屏用 3:1 —— 右栏按比例走，屏越宽越宽；
   1440 及以下回到上面那条 336px 的固定右栏，否则 1280 上右栏只剩 180px，
   下拉框里的字要折三行才放得下（这句话原来写成全局规则，把 1180 的响应式也盖掉了）。 */
@media (min-width:1600px){
  .edx-body{grid-template-columns:minmax(0,3fr) minmax(360px,1fr);gap:20px}
}

/* 课程 / 专栏列表：补上勾选列，表头与行同一套栅格 */
.cm-row.cm-course{grid-template-columns:24px 56px minmax(0,1fr) 62px 92px 86px 196px}
.cm-head.cm-head-course{grid-template-columns:24px 56px minmax(0,1fr) 62px 92px 86px 196px}
.cm-head.cm-head-course .cm-h-main{grid-column:span 2}
.cm-head.cm-head-course .cm-h-state{text-align:left}
@media(max-width:1180px){
  .cm-row.cm-course{grid-template-columns:24px 52px minmax(0,1fr) 84px 190px}
  .cm-head.cm-head-course{grid-template-columns:24px 52px minmax(0,1fr) 84px 190px}
  .cm-head.cm-head-course .cm-h-num,.cm-head.cm-head-course .cm-h-time{display:none}}
@media(max-width:820px){
  .cm-row.cm-course{grid-template-columns:22px minmax(0,1fr)}
  .cm-head.cm-head-course{display:none}}
.cat-table td:first-child input{max-width:360px}

/* ============================================================
   批量归类面板（文章 / 课程 / 专栏三张列表共用）
   ------------------------------------------------------------
   点「归类到…」在批量条下方展开一层，选中栏目后再出「分类」下拉
   （只有该栏目自己配了分类时才出现，没配就不摆一个空下拉）。
   ============================================================ */
.cms-move{flex:1 1 100%;display:flex;align-items:center;gap:9px;flex-wrap:wrap;
  margin-top:3px;padding-top:9px;border-top:1px dashed var(--gold-22)}
/* hidden 必须压过 display:flex，否则「收起」不生效 */
.cms-move[hidden]{display:none!important}
.cms-move .hd{font-size:12px;color:var(--muted)}
.cms-move .hd b{color:var(--gold-deep);font-variant-numeric:tabular-nums;font-weight:600}
.cms-move select{font-size:12px;padding:5px 9px;border-radius:7px;border:1px solid var(--gold-22);
  background:#fff;color:var(--ink);max-width:240px}
.cms-move select:focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-06)}
.cms-move .cat{display:inline-flex;align-items:center;gap:7px}
.cms-move .cat[hidden]{display:none!important}
.cms-move .cat label{font-size:11.5px;color:var(--faint);white-space:nowrap}
.cms-move .grow{flex:1}
.cms-move .btn{padding:4px 11px;font-size:12px;border-radius:6px}
.cms-move .btn-primary{background:var(--gold-solid);border-color:var(--gold-solid);color:var(--on-gold)}
.cms-move .btn-primary:hover{background:var(--gold-hover);border-color:var(--gold-hover);color:var(--on-gold-hover)}

/* ============================================================
   官网管理：左树常驻 + 列表页与编辑页同宽（2026-11 第三批）
   ------------------------------------------------------------
   原来列表页是「树 + 面板」、编辑页是整页铺满并各自限宽 1500 / 1520 居中，
   于是宽屏上一进编辑页就变窄、还看不出自己在哪个栏目。
   现在所有编辑页也套同一个 .cms-console（bare + nohd：只借左树与栅格，
   面板头由页面自己的 .edx-top / .page-hd 担任），右边一栏的宽度
   与列表页的面板完全一致；整块再统一到 1680 上限，超宽屏不散。
   ============================================================ */
.cms-console{max-width:1680px;margin-left:auto;margin-right:auto}
/* 编辑页内部那块不再二次限宽居中（它已经在栅格里了） */
.cms-console .edx,
.cms-console .spp-wrap{max-width:none;margin-left:0;margin-right:0}
/* 没有面板头的壳：不画框，且必须 visible —— 否则 .edx-top / .edx-foot 的 sticky 失效 */
.cms-pane.is-nohd{border:0;background:none;box-shadow:none;border-radius:0;overflow:visible}
/* 编辑页没有面板头的内边距，标题块自己带；这里只兜住贴边 */
.cms-pane.is-nohd > .edx > .edx-top:first-child,
.cms-pane.is-nohd > .spp-wrap > .page-hd:first-child{margin-top:0}

@media(max-width:1080px){
  /* 窄屏：树改成上方一条可横滑的胶囊，不占正文高度（后台本来不做手机版，
     这里只是让 1024 的笔记本别把表单挤成一条） */
  .cms-console{grid-template-columns:minmax(0,1fr)}
  .cms-tree{position:static;max-height:none;display:flex;flex-wrap:wrap;gap:6px;overflow:visible;padding:7px}
  .cms-tree-hd,.cms-tree-grp{display:none}
  .cms-tree-it{flex:none;white-space:nowrap}
  .cms-tree-it .n,.cms-tree-it .st{display:none}
  .cms-tree-it.is-sub{padding-left:10px}
}

/* ============================================================
   官网管理 · 第四批：面板内留白统一（2026-11）
   ------------------------------------------------------------
   ① .crs-row 原本是给「卡片内部」设计的（.edx-card-bd 自带 20px 内边距），
      直接搬进 .cms-pane 后序号「01」与右侧图标就贴着卡片边 —— 章节管理页
      一眼看去比文章列表挤。只给面板里的那一份补留白，卡片里的不动。
   ② .cms-bar / .cms-ft 是 16px，而 .cm-meta 与面板头是 20px，
      同一页里左边缘差 4px，标题、页签、读数带对不齐。统一到 20。
   ============================================================ */
.cms-pane .crs-row{padding-left:18px;padding-right:18px}
.cms-pane .crs-add{margin:14px 18px 6px;width:calc(100% - 36px)}
.cms-pane .cms-bar{padding-left:20px;padding-right:20px}
.cms-pane .cms-ft{padding-left:20px;padding-right:20px}

/* ---- 文章编辑：摘要框 / 正文上方的封面行 ---- */
/* 摘要原来是无边框的输入区，看上去像一行说明文字，不像能编辑 —— 给个浅框 */
.edx-sub{border:1px solid var(--line);border-radius:9px;background:#fcfdfe;padding:9px 12px;
  transition:border-color .16s,background .16s}
.edx-sub:hover{border-color:#dfe4ec}
.edx-sub:focus{border-color:var(--gold-22);background:#fff;outline:none}
/* 正文上方的封面：横排小图，不占首屏高度 */
.edx-cover-inline .edx-cover{width:180px}
.edx-cover-inline .edx-cover-up{align-self:center}

/* ---- 角色权限矩阵的列宽写在 admin/roles/index.blade.php 的页内样式里，
   不要在 app.css 再写一份：页内 <style> 在本文件之后，两边同选择器会打架。 ---- */

/* ---- 专栏列表：两个文字按钮并排（专栏详情 / 章节管理） ---- */
.cm-row.cm-course{grid-template-columns:24px 56px minmax(0,1fr) 62px 92px 86px 240px}
.cm-head.cm-head-course{grid-template-columns:24px 56px minmax(0,1fr) 62px 92px 86px 240px}
@media(max-width:1180px){
  .cm-row.cm-course{grid-template-columns:24px 52px minmax(0,1fr) 84px 228px}
  .cm-head.cm-head-course{grid-template-columns:24px 52px minmax(0,1fr) 84px 228px}}

/* ============================================================
   全站视觉统一（2026-11 第五批）
   ------------------------------------------------------------
   官网管理那一套（左树 + 一块纸 + 细线分段 + 20px 内边距）看着最稳，
   但其余页面各写各的：有的铺满 2560，有的限宽 1200 居中；页头字号
   18/20/22 三种；筛选条与表格是两张各带边框的卡，看着碎。
   这一批只做一件事：把「容器」统一成一套，页面结构本身不动。
   ============================================================ */

/* 1) 内容区：与官网管理同一个上限，超宽屏居中，左右 24px 一致 */
/* 注意 width:100% 与 flex-basis：.content 是 .main（列向 flex）的子项，
   只写 margin:auto 时浏览器的 auto 外边距会先吃掉剩余空间，页面会被压成
   内容宽度（通知页实测 891px，比别的页窄一大截）。给死 width:100% + 不收缩，
   上限才真正生效。 */
.content{max-width:1680px;margin-left:auto;margin-right:auto;
  width:100%;flex:1 0 auto;padding:20px 24px 56px}

/* 2) 页头：页内标题与官网面板头同一套（衬线 20px、说明 12.5px） */
.content > .page-hd{margin:0 0 16px;padding:0 0 14px;border-bottom:1px solid var(--line)}
.content > .page-hd h1{font-family:"Noto Serif SC",serif;font-size:20px;font-weight:600;
  letter-spacing:.03em;line-height:1.4;margin:0}
.content > .page-hd .sub{margin-top:5px;font-size:12.5px;line-height:1.75;color:var(--muted);max-width:92ch}
.content > .page-hd .page-actions{align-items:center}

/* 3) 卡片：与 .cms-pane 同样的圆角、发丝边、几乎无阴影 */
.card{border-radius:12px;box-shadow:var(--shadow-sm)}
.card-hd{padding:14px 20px}
.card-bd{padding:18px 20px}
.card-ft{padding:12px 20px}
.card-hd h2,.card-hd h3{font-size:14.5px;font-weight:600;color:var(--ink)}

/* 4) 相邻卡片拼成一张纸：筛选条在上、列表在下，中间的边框只留一条 */
.content > .card + .card{margin-top:-1px;border-radius:0}
.content > .card + .card:last-of-type{border-radius:0 0 12px 12px}
.content > .card:has(+ .card){border-radius:12px 12px 0 0}
.content > .card + .card::before{content:none}

/* 5) 表格：与官网列表同一套行高与表头底色 */
.table th{padding:10px 16px;background:#fbfcfd;font-size:11.5px;letter-spacing:.05em;color:var(--faint)}
.table td{padding:11px 16px}
.table.compact th,.table.compact td{padding:8px 12px}
.table tbody tr:last-child td{border-bottom:0}
.table-wrap{overflow:auto}

/* 6) 页签：字重与间距统一，当前项用主色下划线（原来各处粗细不一） */
.tabs{display:flex;align-items:center;gap:2px;flex-wrap:wrap;border-bottom:1px solid var(--line);margin-bottom:14px}
.tabs > a{padding:9px 13px;font-size:13px;color:var(--muted);border-bottom:2px solid transparent;
  margin-bottom:-1px;text-decoration:none;border-radius:6px 6px 0 0}
.tabs > a:hover{color:var(--ink);background:#fbfcfd}
.tabs > a.on{color:var(--gold-text-deep);border-bottom-color:var(--gold-solid);font-weight:600;background:none}
.tabs > a .faint{color:var(--faint);font-weight:400}

/* 7) 统计卡：与官网读数带同一套字号，不再 26px 巨大数字 */
.stat{padding:14px 18px;border-radius:12px}
.stat .value{font-size:23px;margin:4px 0 1px}
.stat .label{font-size:12px}
.stat .foot{font-size:11.5px}

/* 8) 筛选条：贴住下方面板（列表页统一成「筛选条 + 列表」一整块） */
.content > .flt-bar{margin:0;border-radius:12px}
.content > .flt-bar + .card{margin-top:12px}
.content > .card > .card-bd > form:first-child{margin:0}

/* 9) 空状态统一 */
.empty{padding:38px 20px;text-align:center;color:var(--faint)}
.empty p{margin:6px 0 0;font-size:12.5px}

/* ---------------- 站内通知（与官网管理同一套壳） ---------------- */
.nt-meta{display:flex;align-items:center;gap:13px;flex-wrap:wrap;margin:0;
  padding:12px 20px;border-bottom:1px solid var(--line);background:#fbfcfd;
  font-size:12px;color:var(--faint)}
.nt-meta b{font-size:15px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;margin-right:1px}
.nt-meta i{width:1px;height:11px;background:var(--line);display:inline-block}

.nt-list{padding:0}
.nt-day{position:sticky;top:0;z-index:3;padding:8px 20px;background:#fbfcfd;
  border-top:1px solid var(--line-2);border-bottom:1px solid var(--line-2);
  font-size:11px;color:var(--faint);letter-spacing:.06em}
.nt-day:first-child{border-top:0}

.nt-row{display:flex;align-items:flex-start;gap:12px;padding:13px 20px;
  border-top:1px solid var(--line-2);text-decoration:none;color:inherit}
.nt-row:first-child{border-top:0}
.nt-row:hover{background:#fbfcfe}
.nt-row.is-new{background:#fdfefb}
.nt-row.is-new:hover{background:#fbfdf8}

.nt-ico{flex:none;width:32px;height:32px;border-radius:9px;display:grid;place-items:center;margin-top:1px}
.nt-date{flex:none;width:44px;text-align:center;padding-top:1px}
.nt-date b{display:block;font-size:17px;font-weight:600;color:var(--ink);line-height:1.15;font-variant-numeric:tabular-nums}
.nt-date i{font-style:normal;font-size:10.5px;color:var(--faint)}

.nt-main{flex:1;min-width:0}
.nt-t{font-size:13.5px;font-weight:600;color:var(--ink);line-height:1.5;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nt-t a{color:inherit;text-decoration:none}
.nt-t a:hover{color:var(--gold-deep);text-decoration:underline}
.nt-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--red);
  margin-left:7px;vertical-align:2px}
.nt-s{margin-top:3px;font-size:12px;color:var(--muted);line-height:1.7;
  overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}

.nt-side{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:4px;min-width:78px}
.nt-time{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}
.nt-mark{background:none;border:0;padding:0;cursor:pointer;font-size:11px;color:var(--faint);
  text-decoration:underline;font-family:inherit}
.nt-mark:hover{color:var(--gold-deep)}
.nt-go{flex:none;align-self:center;font-size:11.5px;color:var(--gold-deep);
  border:1px solid var(--gold-22);background:var(--gold-06);border-radius:999px;padding:3px 11px}
.nt-row:hover .nt-go{background:var(--gold-soft)}

.nt-empty{padding:44px 20px;text-align:center;color:var(--faint)}
.nt-empty svg{margin-bottom:8px;opacity:.55}
.nt-empty b{display:block;font-size:13.5px;color:var(--ink);font-weight:600}
.nt-empty p{margin:5px 0 0;font-size:12px}

.nt-note{display:flex;align-items:center;gap:14px;flex-wrap:wrap;justify-content:space-between;
  margin-bottom:12px;padding:11px 16px;border:1px solid var(--line);border-radius:10px;
  background:#fbfcfd;font-size:12.5px;color:var(--muted);line-height:1.7}
.nt-note b{color:var(--ink)}

/* 文章编辑：封面是一条横幅（图 + 上传），高度约 84px，夹在摘要与正文之间 */
.edx-cover-line{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:12px 14px;border:1px solid var(--line-2);border-radius:10px;background:#fcfdfe}
.edx-cover-line .lb{flex:none;font-size:11.5px;color:var(--faint);letter-spacing:.04em;width:44px}
.edx-cover-line .edx-cover{width:150px;flex:none;border-radius:8px}
.edx-cover-line .edx-cover-up{flex:1;min-width:240px}
.edx-cover-line .edx-cover .ph{font-size:10px}

/* ============================================================
   操作日志（审计）2026-11 重写
   ------------------------------------------------------------
   一屏之内先看懂「他做了什么」，再看证据（字段前后值、IP、指纹）。
   视觉与官网管理一致：左树 + 一块纸 + 细线分行，不用表格 ——
   表格会逼着人横向对齐去读，而这里的每一行本来就是一句话。
   ============================================================ */
.ad-meta{display:flex;align-items:center;gap:13px;flex-wrap:wrap;margin:0;
  padding:12px 20px;border-bottom:1px solid var(--line);background:#fbfcfd;
  font-size:12px;color:var(--faint)}
.ad-meta b{font-size:15px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;margin-right:1px}
.ad-meta b.is-red{color:var(--red)}
.ad-meta i{width:1px;height:11px;background:var(--line);display:inline-block}
.ad-shield{display:inline-flex;align-items:center;gap:5px;color:var(--green);
  background:var(--green-soft,#eef7f1);border-radius:999px;padding:3px 10px}

.ad-verify{display:flex;gap:11px;align-items:flex-start;margin:14px 20px;padding:12px 16px;
  border:1px solid var(--line);border-radius:11px;font-size:12.5px;line-height:1.75}
.ad-verify.is-ok{border-color:#cfe7d8;background:#f4faf6;color:#2f6b48}
.ad-verify.is-bad{border-color:#f0cbc6;background:#fdf4f3;color:#8c2f26}
.ad-verify b{color:inherit;font-weight:600}
.ad-verify p{margin:3px 0 0;opacity:.85}
.ad-verify ul{margin:6px 0 0 16px;padding:0}
.ad-verify li{font-size:11.5px}

.ad-scope{display:flex;align-items:center;gap:10px;margin-bottom:12px;padding:9px 14px;
  border-radius:9px;background:var(--gold-06);border:1px solid var(--gold-22);
  font-size:12px;color:var(--gold-text-deep)}

.ad-note{margin:14px 20px;border:1px solid var(--line);border-radius:11px;background:#fbfcfd}
.ad-note summary{padding:10px 16px;cursor:pointer;font-size:12.5px;color:var(--muted);list-style:none}
.ad-note summary::-webkit-details-marker{display:none}
.ad-note summary:before{content:"？";display:inline-grid;place-items:center;width:16px;height:16px;
  border-radius:50%;background:var(--line);color:#fff;font-size:10px;margin-right:7px;vertical-align:-2px}
.ad-note[open] summary{border-bottom:1px solid var(--line);color:var(--ink)}
.ad-note-bd{padding:14px 16px}
.ad-note-g{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px 22px}
.ad-note-g b{display:block;font-size:12.5px;color:var(--ink);margin-bottom:3px}
.ad-note-g p{margin:0;font-size:11.5px;color:var(--muted);line-height:1.8}
.ad-lv{display:inline-block;font-size:10.5px;line-height:1.6;padding:0 7px;border-radius:999px;border:1px solid transparent}
.ad-lv.is-danger{background:#fdf1f0;color:#b3261e;border-color:#f3cdc8}
.ad-lv.is-warn{background:#fdf7ec;color:#a1701c;border-color:#efdcbd}
.ad-lv.is-normal{background:#f4f5f7;color:#6b7280;border-color:#e5e8ec}

.ad-filter{display:flex;align-items:center;flex-wrap:wrap;gap:0;padding:2px 8px;
  border-bottom:1px solid var(--line);background:#fbfcfd}
.ad-f{display:flex;align-items:center;gap:7px;padding:8px 12px;border-right:1px solid var(--line-2)}
.ad-f.grow{flex:1;min-width:200px;border-right:0}
.ad-f .lb{font-size:11px;color:var(--muted);white-space:nowrap}
.ad-f select,.ad-f input[type=date]{border:0;background:transparent;font-size:12.5px;padding:2px 0;
  box-shadow:none;width:auto;max-width:150px}
.ad-f input[type=search]{border:0;background:transparent;font-size:12.5px;padding:2px 0;
  box-shadow:none;width:100%}
.ad-f input:focus,.ad-f select:focus{outline:none;box-shadow:none}
.ad-f:focus-within{background:var(--gold-06);border-radius:7px}
.ad-f-acts{display:flex;gap:6px;padding:6px 8px;margin-left:auto}

.ad-list{padding:0}
.ad-day{position:sticky;top:0;z-index:3;padding:8px 20px;background:#fbfcfd;
  border-top:1px solid var(--line-2);border-bottom:1px solid var(--line-2);
  font-size:11px;color:var(--faint);letter-spacing:.06em}
.ad-day:first-child{border-top:0}

.ad-row{display:grid;grid-template-columns:44px 26px minmax(0,1fr) 62px 46px;
  align-items:start;gap:12px;padding:12px 20px;border-top:1px solid var(--line-2)}
.ad-row:first-child{border-top:0}
.ad-row:hover{background:#fbfcfe}
.ad-row.is-danger{box-shadow:inset 2px 0 0 rgba(179,38,30,.55)}

.ad-time{font-size:11.5px;color:var(--faint);font-variant-numeric:tabular-nums;padding-top:3px}
.ad-ava{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;
  font-size:11px;background:#eef1f5;color:#5b6675;margin-top:1px}
.ad-ava.is-danger{background:#fbe9e7;color:#b3261e}
.ad-ava.is-warn{background:#fbf1e2;color:#a1701c}

.ad-main{min-width:0}
.ad-say{font-size:13.5px;line-height:1.65;color:var(--ink);
  overflow-wrap:anywhere}
.ad-open{margin-left:5px;color:var(--gold-deep);text-decoration:none;font-size:12px}
.ad-open:hover{text-decoration:underline}
.ad-gone{margin-left:6px;font-size:10.5px;color:var(--red);border:1px solid #f3cdc8;
  border-radius:4px;padding:0 5px;background:#fdf4f3}
.ad-sub{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:3px;
  font-size:11px;color:var(--faint)}
.ad-sub i{width:1px;height:9px;background:var(--line);display:inline-block}
.ad-auto{color:var(--muted);border-bottom:1px dashed var(--line)}

.ad-row > .ad-lv{align-self:center;justify-self:start;margin-top:1px}
.ad-more{align-self:center;justify-self:end;background:none;border:1px solid var(--line);
  border-radius:6px;padding:3px 9px;font-size:11.5px;color:var(--muted);cursor:pointer;font-family:inherit}
.ad-more:hover{border-color:var(--gold);color:var(--gold-deep);background:var(--gold-06)}

.ad-empty{padding:48px 20px;text-align:center;color:var(--faint)}
.ad-empty b{display:block;margin-top:8px;font-size:13.5px;color:var(--ink)}
.ad-empty p{margin:4px 0 0;font-size:12px}

.ad-prune{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  margin:14px 20px 20px;padding:13px 18px;border:1px solid var(--line);border-radius:11px;background:#fff}
.ad-prune b{font-size:12.5px;color:var(--ink);margin-right:6px}
.ad-prune span{font-size:12px;color:var(--faint)}
.ad-prune>div:first-child{flex:1 1 320px;min-width:0}
.ad-prune-r{display:flex;align-items:center;gap:7px;flex:none;white-space:nowrap}
.ad-prune-r input{width:76px;padding:5px 8px;font-size:12.5px}

/* 详情抽屉：从右侧滑出，宽度约 560，读一句话 + 一张变更表刚好 */
.ad-dlg{margin:0 0 0 auto;height:calc(100vh / var(--z,1));max-height:calc(100vh / var(--z,1));width:min(580px, calc(94vw / var(--z,1)));max-width:580px;
  padding:0;border:0;border-left:1px solid var(--line);border-radius:0;background:#fff;
  box-shadow:-24px 0 60px -30px rgba(18,32,46,.5)}
.ad-dlg[open]{display:flex;flex-direction:column}
.ad-dlg::backdrop{background:rgba(14,26,38,.34)}
.ad-dlg-h{display:flex;align-items:flex-start;gap:12px;padding:18px 20px 14px;border-bottom:1px solid var(--line)}
.ad-dlg-t{font-size:15px;font-weight:600;line-height:1.6;color:var(--ink)}
.ad-dlg-s{margin-top:6px;font-size:11.5px;color:var(--faint);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ad-dlg-x{margin-left:auto;flex:none;width:28px;height:28px;border:0;background:#f2f4f7;border-radius:8px;
  font-size:16px;line-height:1;color:var(--muted);cursor:pointer}
.ad-dlg-b{flex:1;overflow:auto;padding:4px 20px 20px}
.ad-dlg-f{display:flex;align-items:center;gap:10px;padding:12px 20px;border-top:1px solid var(--line);background:#fbfcfd}
.ad-dlg-tip{flex:1;font-size:11px;color:var(--faint);line-height:1.6}

.ad-sec{padding:14px 0;border-top:1px solid var(--line-2)}
.ad-sec:first-child{border-top:0}
.ad-sec-h{font-size:11px;color:var(--faint);letter-spacing:.06em;margin-bottom:8px}
.ad-sec-h .ad-n{float:right;color:var(--muted)}
.ad-kv{display:flex;gap:12px;padding:4px 0;font-size:12.5px;line-height:1.7}
.ad-k{flex:none;width:72px;color:var(--faint)}
.ad-v{flex:1;min-width:0;color:var(--text);overflow-wrap:anywhere}
.ad-links{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}

.ad-ch{width:100%;border-collapse:collapse;font-size:12.5px}
.ad-ch th{text-align:left;font-weight:500;font-size:11px;color:var(--faint);padding:0 8px 6px}
.ad-ch td{padding:6px 8px;border-top:1px solid var(--line-2);vertical-align:top}
.ad-ch-f{color:var(--muted);white-space:nowrap}
.ad-ch-o{color:var(--faint);text-decoration:line-through;text-decoration-color:#d6dbe2}
.ad-ch-a{color:var(--faint);width:16px;text-align:center}
.ad-ch-n{color:var(--ink);font-weight:600}

.ad-none{font-size:12px;color:var(--muted);line-height:1.9;background:#fbfcfd;
  border:1px solid var(--line-2);border-radius:9px;padding:10px 13px}
.ad-raw summary{cursor:pointer;font-size:11.5px;color:var(--faint)}
.ad-raw pre{margin:8px 0 0;padding:10px;background:#f7f8fa;border-radius:8px;
  font-size:11px;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere;max-height:240px;overflow:auto}

/* ---------------- 站内通知：信箱（列表勾选 / 清理 / 读信） ---------------- */
/* 一行 = 勾选框 + 可点的整行。复选框不能放进 <a> 里，所以拆成两个并列子元素 */
.nt-line{display:flex;align-items:stretch;border-top:1px solid var(--line-2)}
.nt-day + .nt-line{border-top:0}
.nt-line.is-new{background:#fdfefb}
.nt-line .nt-row{border-top:0;flex:1;min-width:0;padding-left:10px}
.nt-line:hover{background:#fbfcfe}
.nt-line.is-new:hover{background:#fbfdf8}
.nt-ck{flex:none;display:flex;align-items:flex-start;padding:15px 0 0 20px;cursor:pointer}
.nt-ck input{width:14px;height:14px;accent-color:var(--gold);cursor:pointer;margin:0}
.nt-kind{font-size:10.5px;color:var(--faint);border:1px solid var(--line);border-radius:999px;
  padding:1px 7px;white-space:nowrap;background:#fff}
.nt-allck{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);cursor:pointer;margin-right:4px}
.nt-allck input{width:13px;height:13px;accent-color:var(--gold);cursor:pointer;margin:0}

.nt-bulk{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:9px 20px;
  background:var(--gold-06);border-bottom:1px solid var(--gold-22);font-size:12.5px;color:var(--gold-deep)}
.nt-bulk[hidden]{display:none}
.nt-bulk b{font-variant-numeric:tabular-nums}

.nt-clean-foot{margin:14px 2px 0;font-size:11.5px;color:var(--faint);line-height:1.8}
.nt-clean-foot .btn{margin-left:4px;vertical-align:1px}
.nt-clean-tip{margin:0 0 12px;font-size:12.5px;color:var(--muted);line-height:1.8}
.nt-clean-opt{display:flex;align-items:flex-start;gap:10px;padding:11px 13px;margin-bottom:8px;
  border:1px solid var(--line);border-radius:10px;cursor:pointer;transition:border-color .12s,background .12s}
.nt-clean-opt:hover{border-color:var(--gold-22);background:#fdfcfa}
.nt-clean-opt:has(input:checked){border-color:var(--gold);background:var(--gold-06)}
.nt-clean-opt input{margin:3px 0 0;accent-color:var(--gold);cursor:pointer}
.nt-clean-opt b{display:block;font-size:13px;color:var(--ink);font-weight:600}
.nt-clean-opt i{display:block;font-style:normal;font-size:11.5px;color:var(--faint);margin-top:3px}

/* 读信：一张信纸。正文限宽 78ch，长句读起来不横跨一整个屏幕 */
.nr-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.nr-bar .is-off{opacity:.35;cursor:default;pointer-events:none}
.nr-card{background:#fff;border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--shadow-sm);padding:26px 34px 20px}
.nr-kind{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.nr-chip{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;
  border-radius:999px;padding:3px 10px}
.nr-from{font-size:12px;color:var(--muted)}
.nr-from b{color:var(--ink);font-weight:600}
.nr-new{font-size:10.5px;color:var(--red);border:1px solid #f5cfca;background:var(--red-soft);
  border-radius:999px;padding:1px 7px}
.nr-title{margin:13px 0 0;font-size:20px;line-height:1.55;color:var(--ink);font-weight:600;letter-spacing:.01em}
.nr-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:9px;font-size:11.5px;color:var(--faint)}
.nr-meta i{width:1px;height:10px;background:var(--line);display:inline-block}
.nr-body{margin-top:20px;padding-top:18px;border-top:1px solid var(--line-2);
  font-size:14px;line-height:2;color:var(--text);max-width:78ch;overflow-wrap:anywhere}
.nr-plain{color:var(--faint)}
.nr-act{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:24px;padding-top:16px;
  border-top:1px solid var(--line-2)}
.nr-act form{margin:0;display:inline-flex}
.nr-del-btn{color:var(--red)}
.nr-del-btn:hover{background:var(--red-soft);color:var(--red)}
.nr-foot{margin:12px 2px 0;font-size:11.5px;color:var(--faint);line-height:1.85}
.nr-foot a{color:var(--gold-deep)}
@media (max-width:720px){
  .nr-card{padding:20px 18px}
  .nr-title{font-size:17px}
  .nr-body{font-size:13.5px}
  .nt-ck{padding-left:14px}
}

/* ---------------- 模块外壳：左侧树 + 原页面（历史页面统一加树用） ---------------- */
/* 与 .cms-console 同一个栅格：左 226 白卡、右内容自适应，整组 1680 居中。
   区别只在右边不套 .cms-pane —— 里面是各模块自己的页头、筛选条与卡片。 */
.mod-shell{display:grid;grid-template-columns:226px minmax(0,1fr);gap:16px;align-items:start;
  max-width:1680px;margin:0 auto}
.mod-body{min-width:0}
.mod-tree{max-height:calc(calc(100vh / var(--z,1)) - 100px)}
/* 1200 以下把树收成顶部一排胶囊：再窄下去 226px 会把表格挤到只能横向滚 */
@media(max-width:1200px){
  .mod-shell{grid-template-columns:minmax(0,1fr);gap:12px}
  .mod-tree{position:static;max-height:none;display:flex;flex-wrap:wrap;gap:6px;overflow:visible}
  .mod-tree .cms-tree-hd,.mod-tree .cms-tree-grp{display:none}
  .mod-tree .cms-tree-it{flex:none;border:1px solid var(--line);border-radius:20px;padding:5px 12px}
  .mod-tree .cms-tree-it .n{display:none}
  .mod-tree .cms-tree-it.is-sub{padding-left:12px}
}

/* 日程清单的两档页签（日程 / 开庭）：做成实心 pill，跟卡头右侧的月历/清单分段区分开 */
.cal-pane-tabs{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
.cal-pane-tabs>a{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:8px;
  font-size:13px;color:var(--muted);text-decoration:none;transition:background .14s,color .14s}
.cal-pane-tabs>a span{font-size:11px;color:var(--faint);font-variant-numeric:tabular-nums}
.cal-pane-tabs>a:hover{background:#f2f4f7;color:var(--text)}
.cal-pane-tabs>a.on{background:var(--ink);color:#fff;font-weight:600}
.cal-pane-tabs>a.on span{color:rgba(255,255,255,.7)}
.cal-pane-tabs>a.on:hover{background:var(--ink)}
.cal-pane-hint{margin-left:2px}

/* ---------------- 读信页（按邮箱详情的样子） ---------------- */
.ml-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.ml-top .is-off{opacity:.35;cursor:default;pointer-events:none}
.ml-sheet{background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-sm);overflow:hidden}
.ml-hd{display:flex;align-items:flex-start;gap:13px;padding:20px 28px 16px;border-bottom:1px solid var(--line-2)}
.ml-ava{flex:none;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;
  background:var(--gold-soft);color:var(--gold-text-deep);font-family:"Noto Serif SC",serif;
  font-size:17px;font-weight:600}
.ml-from{flex:1;min-width:0;display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.ml-name{font-size:14px;font-weight:600;color:var(--ink)}
.ml-to{margin-top:3px;font-size:11.5px;color:var(--faint)}
.ml-date{flex:none;font-size:11.5px;color:var(--faint);text-align:right;line-height:1.9}
.ml-new{display:inline-block;margin-left:6px;font-size:10.5px;color:var(--red);
  border:1px solid #f5cfca;background:var(--red-soft);border-radius:999px;padding:0 7px}
.ml-subject{padding:18px 28px 0}
.ml-subject h1{margin:0;font-family:"Noto Serif SC",serif;font-size:21px;font-weight:600;
  line-height:1.5;letter-spacing:.01em;color:var(--ink)}
.ml-chips{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:11px}
.ml-chip{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;
  border-radius:999px;padding:3px 10px}
.ml-chip.is-plain{background:#f4f5f7;color:var(--faint);font-weight:400}
/* 正文是整封信唯一的重点：纯白底、实边框、给足高度（至少 190px，短信用也不像便签）。
   它排在虚线明细的下面 —— 明细是「元数据」，正文是「内容」，阅读顺序不能倒。 */
.ml-body{margin:16px 28px 0;padding:20px 22px 22px;border:1px solid var(--line);border-radius:11px;
  background:#fff;box-shadow:0 1px 2px rgba(18,32,46,.03);
  min-height:190px;font-size:15px;line-height:2.05;color:var(--ink);overflow-wrap:anywhere}
.ml-body-lb{font-size:10.5px;letter-spacing:.14em;color:#a7b0bb;margin-bottom:8px}
.ml-empty{color:var(--faint)}
.ml-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px 22px;
  margin:16px 28px 0;padding:14px 16px;border:1px dashed var(--line);border-radius:11px}
/* 放大字号：三列会把「张建国诉某某民间借贷纠纷案」挤成三行，读起来比正文还费劲 —— 降成两列 */
html[data-zlg] .ml-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.ml-grid dt{font-size:10.5px;color:var(--faint);letter-spacing:.05em}
.ml-grid dd{margin:3px 0 0;font-size:12.5px;color:var(--ink);overflow-wrap:anywhere}
.ml-rel{display:flex;align-items:center;gap:12px;margin:16px 28px 0;padding:13px 16px;
  border:1px solid var(--gold-22);background:var(--gold-06);border-radius:11px}
.ml-rel-ic{flex:none;width:32px;height:32px;border-radius:9px;display:grid;place-items:center;
  background:#fff;color:var(--gold-text-deep);border:1px solid var(--gold-22)}
.ml-rel-t{flex:1;min-width:0}
.ml-rel-t b{display:block;font-size:12.5px;color:var(--ink)}
.ml-rel-t span{display:block;margin-top:2px;font-size:11px;color:var(--faint);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ml-actions-lb{font-size:11.5px;color:var(--faint);margin-right:2px}
.ml-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  margin-top:18px;padding:16px 28px;border-top:1px solid var(--line-2);background:#fbfcfd}
.ml-actions form{margin:0;display:inline-flex}
.ml-del-btn{color:var(--red)}
.ml-del-btn:hover{background:var(--red-soft);color:var(--red)}
.ml-sig{margin:14px 28px 22px;font-size:11.5px;color:var(--faint);line-height:1.9}
.ml-sig a{color:var(--gold-deep)}
@media(max-width:720px){
  .ml-hd,.ml-subject,.ml-actions{padding-left:18px;padding-right:18px}
  .ml-body,.ml-grid,.ml-rel{margin-left:18px;margin-right:18px}
  .ml-sig{margin-left:18px;margin-right:18px}
  .ml-subject h1{font-size:18px}
  .ml-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ml-from{flex-direction:column;gap:4px}
  .ml-date{text-align:left}
}
/* 通知行里的「来自 X」：比正文浅一档，别抢标题 */
.nt-by{color:var(--faint)}
.nt-sep{margin:0 4px;color:#cfd6de}

/* 有左树的列表页：表格左右内边距从 16 收到 12。
   226px 的树吃掉宽度后，10 列表格正好差几十像素，最后一列被切一半；
   每列省 8px（左右各 4），十列就是 80px，表就回到容器里了。 */
.mod-body .table th,
.mod-body .table td{padding-left:12px;padding-right:12px}
.mod-body .table.compact th,
.mod-body .table.compact td{padding-left:10px;padding-right:10px}
/* 案件列表末尾的箭头：只有图标，省下的宽度留给状态列 */
.case-go{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:7px;
  color:var(--faint);border:1px solid var(--line);transition:.12s}
.case-go:hover{color:var(--gold-text-deep);border-color:var(--gold-22);background:var(--gold-06)}
/* 长单位名在两行内收住：三行会把整行撑高，列表扫起来一高一低 */
.clamp2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* —— 字号缩放（2026-11）：给看不惯小字的老年律师用 ——
   作用在 <html> 的 zoom 上，等效浏览器 Ctrl +/-：不用改几百处写死的 px，
   视口 CSS 尺寸按 1/zoom 缩小，vh/sticky/fixed 一起等比走，布局比例不变。
   只放大不改档的地方：打印永远按 100%。 */
.zoom-ctl{display:inline-flex;align-items:center;gap:1px;padding:2px;border:1px solid var(--line);
  border-radius:9px;background:#fff;flex:0 0 auto}
.zoom-ctl button{height:28px;min-width:28px;padding:0 6px;border:0;background:none;border-radius:7px;
  cursor:pointer;color:var(--ink-2);font-family:inherit;font-size:14px;font-weight:600;line-height:1;
  display:inline-flex;align-items:center;justify-content:center;transition:background .12s,color .12s}
.zoom-ctl button:hover{background:var(--gold-06);color:var(--gold-text-deep)}
.zoom-ctl button:active{transform:translateY(1px)}
.zoom-ctl .lv{min-width:48px;font-size:12.5px;font-weight:500;color:var(--muted);
  font-variant-numeric:tabular-nums}
.zoom-ctl button[disabled]{opacity:.32;cursor:default;background:none;color:var(--muted)}
/* 窄屏顶栏本来就挤，只留 A- / A+，百分比藏起来 */
@media(max-width:1240px){.zoom-ctl .lv{display:none}}
@media print{html{zoom:1!important}.zoom-ctl{display:none!important}}

/* 放大字号后统计卡变窄，右上角的 .mark 图标会压住标题文字（截图里像「已…」被截断）。
   给标题右侧留出图标位置，让它提前换行而不是钻到图标底下。 */
html[data-zlg] .stat .label{padding-right:44px}

/* =====================================================================
   常用工具（诉讼费 / 律师费 / 赔偿 / 利息 / 期限 / 刑期）
   —— 一页一个计算器：左边填数、右边出结果，结果卡吸顶，滚到哪都看得见。
   ===================================================================== */
.tool-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.tool-card{display:flex;gap:12px;padding:15px 16px;align-items:flex-start;background:#fff;border:1px solid var(--line);
  border-radius:12px;text-decoration:none;color:inherit;transition:border-color .15s,box-shadow .15s,transform .15s}
.tool-card:hover{border-color:var(--gold-22);box-shadow:0 6px 18px rgba(18,32,46,.07);transform:translateY(-1px)}
.tool-card .tc-ico{flex:none;width:34px;height:34px;border-radius:10px;background:var(--gold-06);
  border:1px solid var(--gold-22);color:var(--gold-text-deep);display:flex;align-items:center;justify-content:center}
.tool-card .tc-t{display:block;font-size:13.5px;font-weight:600;margin-bottom:4px;color:var(--ink)}
.tool-card .tc-d{display:block;font-size:11.5px;line-height:1.7;color:var(--faint)}
.tool-card .tc-a{display:block;font-size:11.5px;color:var(--gold-text-deep);margin-top:8px}

/* 两栏不再 align-items:start：结果卡比左卡矮时，底边会短一截，看着像页面没做完。
   改成默认 stretch 让两张卡等高，结果卡内部用 flex 把「说明」推到底部，
   多出来的空白落在合计与说明之间，而不是卡片最下面留一块空边。 */
.tool-wrap{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:16px;align-items:stretch}
/* 放大到 130% 以上时，主区实际可用宽度只有 600 多像素，两栏会被压成「左窄右更窄」，
   结果卡里的金额直接溢出到页面外。媒体查询按视口宽度判断，这里量不到 zoom，
   所以用 zoom.js 打的 data-zlg 标记切单栏。 */
html[data-zlg] .tool-wrap{grid-template-columns:1fr}
html[data-zlg] .tool-res{position:static}
/* 放大字号后左栏变窄，标题会被说明文字挤成两行：标题不换行，说明文字自己折 */
.tool-wrap .card-hd h2{flex:none;white-space:nowrap}
.tool-wrap .card-hd .faint{min-width:0;text-align:right;line-height:1.5}
/* 结果卡标题与副标题上下排：右栏本来就只有 1fr 宽，横排一放大就挤成「费」单独一行 */
.tool-res .card-hd{display:block}
.tool-res .card-hd h2{margin-bottom:3px}
.tool-res .card-hd .faint{display:block;text-align:left}
.tool-res{position:sticky;top:14px;display:flex;flex-direction:column}
/* 与左卡等高后，内部纵向撑开：说明贴底，空白留在「合计」与「说明」之间 */
.tool-res .card-bd{display:flex;flex-direction:column;flex:1}
.tool-res .tool-notes{margin-top:auto}
.tool-res .total{display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap;
  margin-top:4px;padding-top:12px;border-top:1px solid var(--line)}
.tool-res .total b{white-space:nowrap}
.tool-res .total .lb{font-size:12px;color:var(--muted)}
.tool-res .total b{font-size:23px;letter-spacing:-.01em;font-variant-numeric:tabular-nums;color:var(--ink)}
.tool-res .range{font-size:12px;color:var(--muted);margin-top:6px;line-height:1.8}
.tool-line{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;padding:9px 0;
  border-bottom:1px dashed var(--line-2)}
.tool-line:last-of-type{border-bottom:0}
.tool-line .nm{font-size:12.5px;color:var(--ink-2);min-width:0;word-break:break-word}
.tool-line .vl{font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.tool-line .nt{grid-column:1/-1;font-size:11px;color:var(--faint);line-height:1.65}
.tool-notes{margin-top:14px;padding-top:12px;border-top:1px dashed var(--line-2)}
.tool-notes li{font-size:11.5px;line-height:1.85;color:var(--muted);margin-left:15px;list-style:disc}
.tool-hint{font-size:11.5px;color:var(--faint);margin-top:4px;line-height:1.7}
.tool-sub{font-size:12px;font-weight:600;color:var(--muted);margin:14px 0 8px;letter-spacing:.02em}
.tool-sub:first-child{margin-top:0}
.tool-seg{display:grid;grid-template-columns:1fr 1fr .8fr;gap:8px}
.tool-actions{display:flex;gap:8px;align-items:center;margin-top:14px;flex-wrap:wrap}
@media(max-width:1100px){
  .tool-wrap{grid-template-columns:1fr}
  .tool-res{position:static}
  .tool-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:720px){
  .tool-cards{grid-template-columns:1fr}
  .tool-seg{grid-template-columns:1fr}
}

/* ==========================================================================
   立案风控清单（审批详情页）
   --------------------------------------------------------------------------
   2026-11-14 改成「一行一项」的清单表（.rk-t，样式在文件末尾），
   旧的卡片式排布（.rk-grp / .rk-i / .rk-why）随之删除 —— 留着它，
   下次改版又会有人照着旧的那套写一遍。
   这里只剩人工判定那三格的公共部分（表格与弹层都按这个来）。
   ========================================================================== */

/* 人工判定的三选一：默认都不选 —— 「还没看」必须和「看了没问题」分开 */
.rk-opt { display: inline-flex; gap: 5px; margin-left: auto; }
.rk-r { position: relative; font-size: 12px; padding: 3px 9px; border: 1px solid var(--line); border-radius: 6px; cursor: pointer; color: var(--muted); background: #fff; }
.rk-r input { position: absolute; opacity: 0; pointer-events: none; }
.rk-r:has(input:checked) { border-color: var(--gold-text); background: var(--gold-06); color: var(--gold-text); font-weight: 600; }
.rk-r:has(input[value=fail]:checked) { border-color: var(--red); background: #fdf3f3; color: var(--red); }
.rk-r:has(input[value=warn]:checked) { border-color: var(--amber, #d39326); background: #fdf8ec; color: var(--amber, #b57a1e); }

/* ==========================================================================
   法规库（律师法 / 执业规范）
   --------------------------------------------------------------------------
   读法条的场景是「查某一条到底怎么写的」，不是「从头读一遍」。
   所以左栏常驻章节导航、条文各自带锚点、行号可复制链接；
   被系统实际用于判定的条文（第 51/52 条那几条）标一个「系统引用」。
   ========================================================================== */
.law-wrap { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 18px; align-items: start; }
.law-nav { position: sticky; top: 14px; border: 1px solid var(--line); border-radius: 10px; background: #fff; overflow: hidden; max-height: calc(100vh - 40px); overflow-y: auto; }
.law-nav-h { padding: 10px 12px; font-size: 12px; color: var(--faint); background: #fafafa; border-bottom: 1px solid var(--line-soft); }
.law-nav a { display: block; padding: 7px 12px; font-size: 12.5px; color: var(--muted); border-top: 1px solid var(--line-soft); line-height: 1.5; }
.law-nav a:first-of-type { border-top: 0; }
.law-nav a:hover { background: var(--gold-06); color: var(--gold-text); }
.law-nav a.on { background: var(--gold-06); color: var(--gold-text); font-weight: 600; }
.law-nav-ch { padding: 9px 12px 3px; font-size: 11.5px; font-weight: 600; color: var(--ink); background: #fff; line-height: 1.5; }
.law-nav a { padding-left: 20px; }

.law-ch { margin: 0 0 6px; padding: 10px 2px 6px; font-size: 13px; font-weight: 600; color: var(--ink); border-bottom: 1px solid var(--line); }

.law-art { padding: 12px 0 14px; border-bottom: 1px solid var(--line-soft); position: relative; scroll-margin-top: 72px; }
.law-art:target { background: #fffdf6; }
.law-art-h { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.law-art-h b { font-size: 13.5px; color: var(--ink); }
.law-art-h .law-where { font-size: 11.5px; color: var(--faint); }
.law-art-h a.law-anchor { margin-left: auto; font-size: 11.5px; color: var(--faint); }
.law-art-b { font-size: 13.5px; line-height: 2; color: var(--ink2); white-space: pre-wrap; }
.law-art-b em { font-style: normal; background: #fff3c4; padding: 0 1px; }

.law-cite { border: 1px solid var(--line); border-radius: 8px; padding: 9px 12px; margin-bottom: 8px; background: #fff; }
.law-cite-h { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.law-cite-h b { font-size: 12.5px; color: var(--ink); }
.law-cite-h s { text-decoration: none; font-size: 12px; color: var(--muted); }
.law-cite-h a { margin-left: auto; font-size: 11.5px; color: var(--gold-text); }
.law-cite details { margin-top: 5px; }
.law-cite summary { font-size: 11.5px; color: var(--faint); cursor: pointer; list-style: none; }
.law-cite summary::-webkit-details-marker { display: none; }
.law-cite summary::before { content: '▸'; margin-right: 4px; }
.law-cite details[open] summary::before { content: '▾'; }
.law-cite p { font-size: 12.5px; line-height: 1.95; color: var(--muted); margin: 6px 0 0; padding-left: 10px; border-left: 2px solid var(--line-2); white-space: pre-wrap; }

/* 页面内嵌的引用块（立案页、审批页）：比正文小一号，不抢注意力 */
.law-inline { margin-top: 10px; }
.law-inline > .law-cite:last-child { margin-bottom: 0; }

@media(max-width:900px){
  .law-wrap { grid-template-columns: 1fr; }
  .law-nav { position: static; max-height: none; }
}

/* 「依据条文」折叠块：默认收起 —— 十几页材料里，条文是备查不是正文 */
.law-block { margin-top: 10px; border: 1px solid var(--line); border-radius: 8px; background: #fcfcfd; padding: 8px 12px; }
.law-block > summary { font-size: 12px; color: var(--muted); cursor: pointer; list-style: none; }
.law-block > summary::-webkit-details-marker { display: none; }
.law-block > summary::before { content: '§'; margin-right: 6px; color: var(--gold-text); }
.law-block[open] > summary { margin-bottom: 8px; padding-bottom: 6px; border-bottom: 1px solid var(--line-soft); }

/* 案情摘要（审批页立案要件里）：审批人判断「该不该接」第一手就是它。
   原来是一行 12px 灰字、连标题都没有，眼睛直接跳过去；现在给它一个标题和一块底色，
   但仍然不做成告警样式 —— 它是材料，不是风险提示。 */
.case-brief {
  font-size: 13.5px; line-height: 1.95; color: var(--ink);
  background: var(--gold-06); border-left: 3px solid var(--gold);
  border-radius: 0 8px 8px 0; padding: 10px 14px; white-space: pre-wrap;
}

/* ===== 利冲条文（《执业规范》51/52/53 条）直接摊开 =====
   故意不做折叠：这两条是「能不能接」的唯一判据，需要点开才看得见的提醒等于没有提醒。
   红＝不得代理（没有同意这条路），琥珀＝需书面同意（有同意书才可以），
   灰＝豁免之后的持续保密义务（横跨一行，它与前两条是并列关系，不是附注）。 */
/* 两列还是堆叠，由**容器宽度**决定，不由 viewport 决定：
   利冲检索页正文区 1100px 上下 → 两列并排，51/52 各占一半、53 横跨一行，整行排满；
   审批详情页正文栏只有 600px 左右（右边还有审批操作卡）→ 单列堆叠。
   上一版用 repeat(auto-fit, minmax(320px,1fr))：1100px 会被切成三列，
   51/52 各占 1/3、右边空出一列 —— 看上去就是「没排满」。
   容器查询修的就是这个：列数只认 1 或 2，宽度够就一定两列、不够就一列。 */
.cf-arts-wrap { container-type: inline-size; }
.cf-arts { display: grid; grid-template-columns: 1fr; gap: 10px; }
@container (min-width: 820px) {
    .cf-arts { grid-template-columns: 1fr 1fr; }
}
/* 老浏览器不认容器查询：退回「宽屏两列、窄屏一列」，判据总能看，只是窄栏里会并得偏挤 */
@supports not (container-type: inline-size) {
    @media (min-width: 900px) {
        .cf-arts { grid-template-columns: 1fr 1fr; }
    }
}
.cf-art { border: 1px solid var(--line); border-radius: 10px; background: #fff; overflow: hidden; min-width: 0; }
.cf-art.is-bar { border-color: #f1cfcb; }
.cf-art.is-consent { border-color: #efe0c6; }
.cf-art-hd {
    /* 「全文」固定右上角：它一参与换行，提示长的那张卡就多出一行，
       两张卡头部高矮不齐（同一屏里并排，看着就像没对齐的表格） */
    position: relative; padding: 9px 12px 10px;
}
.cf-art.is-bar .cf-art-hd { background: var(--red-soft); }
.cf-art.is-consent .cf-art-hd { background: var(--amber-soft); }
.cf-art-hd b { display: block; padding-right: 44px; font-size: 13px; color: var(--ink); }
.cf-art.is-bar .cf-art-hd b { color: #8a2020; }
.cf-art.is-consent .cf-art-hd b { color: #7a5310; }
/* 提示固定按两行留位：两张卡的副标题长短不一，只留一行的话还是会差一行 */
.cf-art-hd s {
    display: block; margin-top: 3px; padding-right: 40px;
    text-decoration: none; font-size: 11.5px; line-height: 1.5; color: var(--muted);
    min-height: 3em;
}
.cf-art-hd a { position: absolute; right: 12px; top: 9px; font-size: 11.5px; color: var(--gold-text); white-space: nowrap; }
.cf-art-lead { padding: 8px 12px 4px; font-size: 12px; color: var(--muted); line-height: 1.8; }
.cf-art-li { display: flex; gap: 6px; padding: 5px 12px; font-size: 12.5px; line-height: 1.85; color: var(--ink); }
.cf-art-li + .cf-art-li { border-top: 1px dashed var(--line-soft); }
.cf-art-li i { flex: none; font-style: normal; color: var(--faint); font-variant-numeric: tabular-nums; }
.cf-art-tail { padding: 8px 12px; font-size: 12px; line-height: 1.8; color: var(--muted); background: #fcfcfd; border-top: 1px solid var(--line-soft); }
/* 第五十三条：横跨一行。它只有引导句没有分项，所以正文按「条文」而不是「说明」的排法，
   否则一眼看过去又变成附注（原来那行灰字就是这么被跳过的）。 */
.cf-art.is-note { grid-column: 1 / -1; background: #fcfcfd; }
.cf-art.is-note .cf-art-hd { background: #f4f5f7; }
.cf-art.is-note .cf-art-lead { font-size: 13px; color: var(--ink); line-height: 1.85; padding: 8px 12px 12px; }

/* ===== 收案风控要点 31 条 =====
   编号是对外的引用号（驳回意见里会说「要点 5」前后的事），所以编号栏固定宽度、等宽数字。 */
.rp { border: 1px solid var(--line); border-radius: 10px; background: #fff; margin-top: 12px; }
.rp > summary { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; padding: 10px 14px; cursor: pointer; list-style: none; }
.rp > summary::-webkit-details-marker { display: none; }
.rp > summary::before { content: '§'; color: var(--gold-text); }
.rp > summary b { font-size: 13px; }
.rp > summary s { text-decoration: none; font-size: 11.5px; color: var(--muted); }
.rp[open] > summary { border-bottom: 1px solid var(--line-soft); }
.rp-body { padding-bottom: 6px; }
.rp-group + .rp-group { border-top: 1px solid var(--line-2); }
.rp-gh { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; padding: 9px 14px 5px; background: #fcfcfd; }
.rp-gh b { font-size: 12.5px; color: var(--ink); }
.rp-gh s { text-decoration: none; font-size: 11.5px; color: var(--faint); }
.rp-row { display: flex; gap: 8px; align-items: flex-start; padding: 7px 14px; border-top: 1px dashed var(--line-soft); }
.rp-row:first-of-type { border-top: 0; }
.rp-no { flex: none; width: 20px; text-align: right; color: var(--faint); font-size: 12px; font-variant-numeric: tabular-nums; line-height: 1.9; }
.rp-tx { min-width: 0; flex: 1; font-size: 12.5px; line-height: 1.8; color: var(--ink); }
.rp-tx .rp-art { font-size: 11.5px; color: var(--faint); }
.rp-row .btn { flex: none; }

/* ===== 收案风控驳回理由（审批操作卡窄栏版）=====
   列在 300 多 px 宽的操作卡里：徽标一摆就挤，所以整行做成按钮、只留编号；
   列表最高 42vh 并在框内滚动 —— 31 条全展开会把「同意 / 驳回」推到屏幕外，
   而那两个按钮恰恰是这张卡存在的理由。 */
.rp-c { margin-top: 0; }
.rp-c > summary { padding: 9px 12px; gap: 2px; }
.rp-c > summary::before { content: '§'; }
.rp-c > summary b { font-size: 12.5px; }
.rp-c > summary s { flex-basis: 100%; line-height: 1.7; }
.rp-c-body { max-height: 42vh; overflow: auto; overscroll-behavior: contain; }
.rp-c-g {
  position: sticky; top: 0; z-index: 1;
  padding: 7px 12px 5px; font-size: 11.5px; color: var(--muted);
  background: #fcfcfd; border-top: 1px solid var(--line-2);
}
.rp-c-g:first-child { border-top: 0; }
.rp-c-i {
  display: flex; gap: 7px; align-items: flex-start; width: 100%;
  padding: 7px 12px; border: 0; border-top: 1px dashed var(--line-soft);
  background: #fff; color: var(--ink); text-align: left; cursor: pointer;
  font: inherit; font-size: 12.5px; line-height: 1.7;
}
.rp-c-i:hover { background: var(--gold-06); }
.rp-c-i.is-on { background: var(--red-soft); box-shadow: inset 3px 0 0 var(--red); }
.rp-c-i i {
  flex: none; width: 16px; text-align: right; font-style: normal;
  color: var(--faint); font-variant-numeric: tabular-nums;
}
.rp-c-i span { min-width: 0; }

/* ===== 条文卡整块折叠（利冲检索页）=====
   summary 直接复用 .card-hd 的外观，只在右边加一个「展开 / 收起」提示：
   拆成一条独立的小标题条，会让它看起来像一个「可点的小控件」，
   而这一块的内容是判据，要有正卡的重量。 */
.cf-law > summary { cursor: pointer; list-style: none; user-select: none; }
.cf-law > summary::-webkit-details-marker { display: none; }
.cf-law > summary:hover h2 { color: var(--gold-text); }
.cf-law-sw { margin-left: auto; flex: none; font-size: 12px; color: var(--gold-text); white-space: nowrap; }
.cf-law-sw::after { content: '展开 ↓'; }
.cf-law[open] > summary .cf-law-sw::after { content: '收起 ↑'; }
.cf-law[open] > summary { border-bottom: 1px solid var(--line-soft); }

/* ===== 审批详情页：条文块（折叠 + 要显眼）=====
   折起来之后最怕「找不到」：标题条给左侧主色条 + 渐变底 + 「必看」标签，
   并且把结论直接摆在标题上（几条绝对不得代理、几条需书面同意），
   不点开也知道这一块在说什么。
   注：--gold 是各所可配的品牌色（这家所配的是蓝），别当成真的金色。 */
.cf-arts-card { border-left: 3px solid var(--gold); }
.cf-arts-card > summary {
    display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
    padding: 10px 14px; cursor: pointer; list-style: none; user-select: none;
    background: linear-gradient(90deg, var(--gold-06), #fff 70%);
    border-radius: 0 10px 0 0;
}
.cf-arts-card > summary::-webkit-details-marker { display: none; }
/* summary 改成 flex 之后，Chromium 仍会在最右边画一个小三角（::marker 不跟着 list-style 走），
   只能直接清空它的内容 —— 否则「展开 ↓」右边永远挂着一个多余的灰点 */
.cf-arts-card > summary::marker, .cf-law > summary::marker { content: ''; }
.cf-arts-card > summary b { font-size: 14px; color: var(--ink); }
.cf-arts-card[open] > summary { border-bottom: 1px solid var(--line-soft); }
.cf-arts-card > summary .cf-law-sw { margin-left: auto; }
.cf-arts-card .cf-arts-tag { display: flex; flex-wrap: wrap; gap: 6px; }
.cf-arts-card .cf-arts-flag {
    font-size: 10.5px; letter-spacing: .08em; color: #fff;
    background: var(--gold); padding: 2px 6px; border-radius: 4px; line-height: 1.5;
}

/* details.card 有一套全局的「▾」指示（右上角 52px 留白 + 旋转）。
   这两处自己写了「展开 ↓ / 收起 ↑」文字，再叠一个 ▾ 就是两个指示器挤在一起，
   所以把全局那个关掉、右内边距收回正常值。 */
.cf-law.card > summary::after,
.cf-arts-card.card > summary::after { content: none; }
.cf-law.card > summary,
.cf-arts-card.card > summary { padding-right: 14px; }

/* ===== 风控备注（多人 · 多次 · 多条）=====
   与「审核意见」分开：意见是结论（一人一句、落在单据上），备注是过程（A 提疑点 → B 复核 → A 补充）。
   列表限高滚动，避免把下面的「通过 / 驳回」推出屏幕。 */
.rn { margin-top: 12px; border: 1px solid var(--line); border-radius: 10px; background: #fff; }
.rn-hd { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; padding: 9px 12px; border-bottom: 1px solid var(--line-soft); }
.rn-hd b { font-size: 13px; color: var(--ink); }
.rn-hd s { text-decoration: none; font-size: 11.5px; color: var(--muted); }
.rn-tip { margin-left: auto; font-size: 11px; color: var(--faint); line-height: 1.6; }
.rn-empty { padding: 12px; font-size: 12.5px; color: var(--muted); line-height: 1.8; }
.rn-list { max-height: 300px; overflow: auto; overscroll-behavior: contain; }
.rn-i { padding: 9px 12px; border-top: 1px dashed var(--line-soft); }
.rn-i:first-child { border-top: 0; }
.rn-meta { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; font-size: 11.5px; color: var(--muted); margin-bottom: 3px; }
.rn-meta b { color: var(--ink); font-size: 12px; }
.rn-body { font-size: 12.5px; line-height: 1.8; color: var(--ink); word-break: break-word; }
.rn-form { padding: 10px 12px; border-top: 1px solid var(--line-2); background: #fcfcfd; }
.rn-form textarea { width: 100%; font-size: 12.5px; line-height: 1.7; min-height: 52px; }
.rn-form-ft { display: flex; align-items: center; gap: 8px; margin-top: 6px; }
.rn-form-ft .btn { margin-left: auto; flex: none; }
.cf-entry { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.cf-entry .small { line-height: 1.7; }
/* 单独成卡时（审批中心右栏）：外层已经是卡，别再套一层边框 —— 卡中卡看着像没做完。
   标题行、分隔线、输入区照旧，只是去掉那一圈多余的框。 */
.rn-card .rn { margin-top: 0; border: 0; border-radius: 0; }
/* 右栏窄：那句提示放不下就整行另起，别挤成右边孤零零一小段 */
.rn-card .rn-tip { flex: 1 1 100%; margin-left: 0; }
/* 右栏只有 300 出头，原来 52px 的输入框会把占位文字拦腰截断，看着像坏了 */
.rn-form textarea { min-height: 76px; }

/* ===== 成案登记：当事人结构化录入 =====
   参考的是同类系统的做法：不在表单里塞一行「对方当事人（多个用顿号分隔）」，
   而是逐个录入成卡片 —— 因为利冲要按证件号精确比对，一串文本拆完就只剩名字。
   行与行之间用分隔线（卡内行），不再每行套一张卡，否则六行当事人会把页面撑得很长。 */
.pt { border-top: 1px solid var(--line-soft); padding: 11px 0; }
.pt:first-child { border-top: 0; padding-top: 2px; }
.pt-hd { display: flex; align-items: center; gap: 8px; margin-bottom: 7px; }
.pt-hd > b { font-size: 13px; font-weight: 600; color: var(--ink); }
.pt-hd .req { color: var(--red); }
.pt-hd .pt-add { margin-left: auto; }
.pt-list { display: flex; flex-wrap: wrap; gap: 7px; }
.pt-empty {
    font-size: 12px; color: var(--faint); line-height: 1.7;
    border: 1px dashed var(--line); border-radius: 8px; padding: 9px 12px; width: 100%;
}
.pt-card {
    display: flex; align-items: center; gap: 8px; min-width: 0;
    border: 1px solid var(--line); border-radius: 8px; background: #fff;
    padding: 6px 8px 6px 10px; max-width: 100%;
}
.pt-card .pt-name { font-size: 12.5px; color: var(--ink); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pt-card .pt-sub { font-size: 11px; color: var(--muted); font-variant-numeric: tabular-nums; }
.pt-x {
    flex: none; width: 18px; height: 18px; line-height: 1; border: 0; border-radius: 4px;
    background: transparent; color: var(--faint); cursor: pointer; font-size: 14px;
}
.pt-x:hover { background: var(--fill-2, #f4f5f7); color: var(--red); }

/* 单选组（案源形式）：两三个选项，radio 横排就够，不用下拉 */
.seg { display: flex; flex-wrap: wrap; gap: 6px; }
.seg label {
    display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
    border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px;
    font-size: 12.5px; color: var(--ink); background: #fff;
}
.seg label:has(input:checked) { border-color: var(--gold-line, #c9a227); background: var(--gold-06); }
.seg input { margin: 0; }

/* 案源形式 + 渠道共一行：形式两三个短选项、渠道一个下拉，横排正好，
   分两行填人会只填上面那个。窄到放不下时整块换行，不让字挤在一起。 */
.src-line { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.src-line .seg { flex: none; gap: 4px; }
/* 这一行要和下拉挤在一起，单选块收窄一点：1300 宽也要能并排，
   否则「一行」在笔记本上就变成两行了 */
.src-line .seg label { padding: 5px 8px; font-size: 12px; gap: 5px; }
.src-line select { flex: 1; min-width: 96px; width: auto; }

/* 当事人弹窗里的类型单选：四个选项一行放得下，放不下就换行 */
.pt-types { display: flex; flex-wrap: wrap; gap: 14px; }
.pt-types label { display: inline-flex; align-items: center; gap: 5px; font-size: 13px; cursor: pointer; }

/* 空态即添加按钮，以及「再加一个」的小方块 */
.pt-empty-btn { text-align: left; cursor: pointer; background: #fff; font-family: inherit; }
.pt-empty-btn:hover { border-color: var(--gold-line, #c9a227); color: var(--ink); background: var(--gold-06); }
.pt-add-s {
    flex: none; width: 30px; height: 30px; border-radius: 8px; cursor: pointer;
    border: 1px dashed var(--line); background: #fff; color: var(--muted);
    font-size: 15px; line-height: 1;
}
.pt-add-s:hover { border-color: var(--gold-line, #c9a227); color: var(--gold-text, #8a6d1f); background: var(--gold-06); }

/* ===== 合同申请 / 函件申请 ===== */
/* 申请方式：两张可选卡。参考成熟 OA 的做法 —— 两个选项各配三行说明，
   比一个下拉更容易选对（电子签章到底能不能用，取决于当事人认不认） */
.ap-opts { display: grid; gap: 10px; max-width: 660px; }
/* 签章方式两项并排：一眼比较「纸质 / 电子」的差别，不用上下扫。
   等高由 grid 默认 stretch 保证，两张卡不会一高一低。 */
.ap-opts.is-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); max-width: none; }
.ap-opts.is-2 > .ap-opt { height: 100%; }
@media (max-width: 980px) { .ap-opts.is-2 { grid-template-columns: minmax(0, 1fr); } }
.ap-opt {
    display: flex; gap: 10px; align-items: flex-start; cursor: pointer;
    border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; background: #fff;
}
.ap-opt:hover { border-color: var(--gold-line, #c9a227); }
.ap-opt:has(input:checked) { border-color: var(--gold-line, #c9a227); background: var(--gold-06); }
.ap-opt input { margin: 3px 0 0; flex: none; }
.ap-opt b { display: block; font-size: 13.5px; color: var(--ink); }
.ap-opt-d { font-size: 12px; color: var(--muted); line-height: 1.85; margin-top: 4px; }

/* 只读字段：是「已经有的信息」，不是「等你填」 */
input.ro, textarea.ro, select.ro {
    background: var(--fill-1, #fafbfc); color: var(--muted); cursor: default;
}

/* 函件申请：一块一份函件 */
.lt-block {
    border: 1px solid var(--line); border-radius: 10px; background: var(--fill-1, #fafbfc);
    padding: 12px 14px 4px; margin-bottom: 12px;
}
.lt-hd { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
.lt-hd b { font-size: 13px; color: var(--ink); }
.lt-block[hidden] { display: none; }
/* 原生 file 控件默认很窄，和同排输入框对不齐 */
#apForm input[type=file], #ltForm input[type=file] {
    width: 100%; font-size: 12.5px; color: var(--muted); padding: 5px 0;
}
#apForm input[type=file]::file-selector-button, #ltForm input[type=file]::file-selector-button {
    font: inherit; margin-right: 10px; padding: 4px 10px; cursor: pointer;
    border: 1px solid var(--line); border-radius: 6px; background: #fff; color: var(--ink);
}

/* ===== 学习中心（所内学习 / 内容平台）===== */
/* 左树四级缩进：cms-tree 只给了 is-sub（二级），这里补到四级 */
.cms-tree-it.d2 { padding-left: 27px; font-size: 12.5px; }
.cms-tree-it.d3 { padding-left: 40px; font-size: 12.5px; }
.cms-tree-it.d4 { padding-left: 52px; font-size: 12px; }

/* 内容卡片：封面在上、文字在下。学习平台要的是「扫一眼知道讲什么」，
   纯标题行会让所有文章长得一样 */
.lib-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(232px, 1fr)); gap: 12px; }
.lib-card {
    display: flex; flex-direction: column; min-width: 0;
    border: 1px solid var(--line); border-radius: 12px; background: #fff; overflow: hidden;
    transition: border-color .14s, box-shadow .14s;
}
.lib-card:hover { border-color: var(--gold-22); box-shadow: 0 8px 22px -18px rgba(15,23,42,.55); }
.lib-cover {
    position: relative; aspect-ratio: 16 / 9; background: #f3f5f8;
    display: flex; align-items: center; justify-content: center; color: #c3cbd6;
}
.lib-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lib-cover .ph { font-size: 22px; }
.lib-cover .tag {
    position: absolute; left: 8px; top: 8px; font-size: 10.5px; line-height: 1.6;
    padding: 1px 7px; border-radius: 20px; background: rgba(255,255,255,.92); color: var(--ink-2);
}
.lib-cover .dur {
    position: absolute; right: 8px; bottom: 8px; font-size: 10.5px;
    padding: 1px 6px; border-radius: 4px; background: rgba(0,0,0,.62); color: #fff;
    font-variant-numeric: tabular-nums;
}
.lib-body { padding: 10px 12px 12px; min-width: 0; display: flex; flex-direction: column; gap: 5px; flex: 1; }
.lib-title {
    font-size: 13.5px; font-weight: 600; line-height: 1.5; color: var(--ink);
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.lib-sum {
    font-size: 12px; color: var(--muted); line-height: 1.65;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.lib-meta { margin-top: auto; font-size: 11.5px; color: var(--faint); display: flex; gap: 8px; flex-wrap: wrap; }

/* 文章正文：富文本存的是 HTML，这里给它一份「读得下去」的排版 */
.lib-article { font-size: 14.5px; line-height: 1.95; color: var(--text); word-break: break-word; }
.lib-article h1, .lib-article h2, .lib-article h3 { margin: 1.4em 0 .6em; line-height: 1.5; color: var(--ink); }
.lib-article h2 { font-size: 17px; }
.lib-article h3 { font-size: 15.5px; }
.lib-article p { margin: .8em 0; }
.lib-article img { max-width: 100%; height: auto; border-radius: 8px; }
.lib-article blockquote {
    margin: 1em 0; padding: 8px 14px; border-left: 3px solid var(--gold-22);
    background: var(--gold-06); color: var(--muted); border-radius: 0 6px 6px 0;
}
.lib-article table { width: 100%; border-collapse: collapse; margin: 1em 0; font-size: 13px; }
.lib-article th, .lib-article td { border: 1px solid var(--line); padding: 7px 10px; text-align: left; }
.lib-article ul, .lib-article ol { padding-left: 1.6em; margin: .8em 0; }

/* 专栏目录 */
.lib-toc { border: 1px solid var(--line); border-radius: 12px; background: #fff; overflow: hidden; }
.lib-toc-it { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border-top: 1px solid var(--line-2); min-width: 0; }
.lib-toc-it:first-child { border-top: 0; }
.lib-toc-it:hover { background: #fbfcfe; }
.lib-toc-no {
    flex: none; width: 22px; height: 22px; border-radius: 6px; display: grid; place-items: center;
    font-size: 11.5px; font-variant-numeric: tabular-nums; color: var(--gold-text-deep); background: var(--gold-06);
}
.lib-toc-tx { min-width: 0; flex: 1; }
.lib-toc-tx b { display: block; font-size: 13.5px; font-weight: 500; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lib-toc-tx i { font-style: normal; font-size: 11.5px; color: var(--faint); }

/* 视频播放器：黑底、圆角，与卡片同宽 */
.lib-video { width: 100%; border-radius: 12px; background: #000; display: block; max-height: 68vh; }
.lib-video-frame { position: relative; padding-top: 56.25%; border-radius: 12px; overflow: hidden; background: #000; }
.lib-video-frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

/* 学习中心路径：.page-hd .crumb 在全局是被 display:none 的（顶部已有返回条），
   但四级栏目里「建设工程」单看不知道属于哪条线，路径得自己排一行 */
.lib-path { display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
    font-size: 12px; color: var(--faint); margin-bottom: 5px; }
.lib-path a { color: var(--muted); }
.lib-path a:hover { color: var(--gold-deep); }
.lib-path .sep { color: #cfd6de; }

/* ============================================================================
   利冲检索（2026-11 重排）
   ----------------------------------------------------------------------------
   一页四段：关联案件 → 检索对象 → 结论 → 判定依据（折叠）。
   旧版的毛病：顶部两段 alert、下拉与「带入当事人」按钮高矮不齐、判定依据夹在
   表单与结论中间（查完还要先翻过半页法条才看得见结论）。
   ========================================================================== */
.cf-block{background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-sm);margin-bottom:14px}
/* 关联案件这一块用统一的 cf-block-hd / cf-body 内边距，自己不再加一层 padding */
.cf-block-case{padding:0}
.cf-block-case .cf-body{padding:12px 18px 14px}

/* ---------- 关联案件：已关联时是一行摘要，未关联时是一个搜索框 ---------- */
.cf-case-on{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cf-tag{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--gold-deep);
  background:var(--gold-06);border:1px solid var(--gold-22);border-radius:20px;padding:2px 9px;flex:none}
/* 案名吃掉剩余宽度、超出省略，右侧两个动作永远留在同一行 ——
   否则放大字号后「换一个案件 / 不关联」会被挤到第二行，看着像掉出来的 */
.cf-case-main{flex:1 1 0;min-width:0;display:flex;align-items:baseline;gap:8px}
.cf-case-link{flex:0 1 auto;font-size:13.5px;font-weight:600;color:var(--ink);min-width:0;max-width:560px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cf-case-link:hover{color:var(--gold-deep)}
.cf-case-cli{flex:none;font-size:12.5px;color:var(--muted)}
.cf-case-acts{margin-left:auto;display:flex;align-items:center;gap:14px;flex:none;white-space:nowrap}
.cf-linkbtn{border:0;background:none;padding:0;font-family:inherit;font-size:12.5px;
  color:var(--gold-deep);cursor:pointer;line-height:1.6}
.cf-linkbtn:hover{text-decoration:underline}
.cf-linkbtn.is-quiet{color:var(--faint)}

/* 搜索框本身就是框：外面不再套一层描边容器。
   原先这里是「40px 带边框的壳 + 去边框的 input」，视觉上是框里套框；
   而且 `.cf-pick-in input{border:0}` 的权重(0,1,1)输给了 shared.css 里后加载的
   `input[type="search"]`(0,1,1)，壳里的 input 又把边框画了回来 —— 真的是两层框。
   现在壳只负责横向排列，边框交给 input 自己（与「检索对象」里那些输入框同款）。 */
.cf-pick{position:relative}
.cf-pick-in{display:flex;align-items:center;gap:10px}
.cf-pick-in input{flex:1;min-width:0;font-size:13.5px}
.cf-pick-in input::-webkit-search-cancel-button{-webkit-appearance:none}
.cf-pick-n{flex:none;font-size:11.5px;color:var(--faint);font-variant-numeric:tabular-nums}

/* 下拉结果：绝对定位，不撑开页面。几十个案子时这一层是唯一能用的入口 */
.cf-pick-list{position:absolute;left:0;right:0;top:calc(100% + 5px);z-index:40;display:none;
  background:#fff;border:1px solid var(--line);border-radius:11px;padding:4px;
  box-shadow:0 20px 48px -24px rgba(15,23,42,.5);max-height:312px;overflow:auto}
.cf-pick.is-open .cf-pick-list{display:block}
.cf-pick-i{display:flex;align-items:baseline;gap:9px;padding:8px 10px;border-radius:8px;
  font-size:13px;color:var(--text);line-height:1.55}
/* hidden 属性会被 author 的 display:flex 盖掉（教训 19）—— 筛掉的条目必须真的消失 */
.cf-pick-i[hidden]{display:none}
.cf-pick-i:hover,.cf-pick-i:focus{background:var(--gold-06);outline:none}
.cf-pick-no{flex:none;font-size:11.5px;color:var(--faint);font-variant-numeric:tabular-nums;min-width:74px}
.cf-pick-tt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cf-pick-st{flex:none;font-size:11px;color:var(--faint)}
.cf-pick-none{padding:16px 12px;font-size:12.5px;color:var(--faint);text-align:center}
.cf-pick-ft{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:7px;flex-wrap:wrap}
.cf-hint{font-size:11.5px;color:var(--faint);line-height:1.7}

/* ---------- 检索对象 ---------- */
.cf-block-hd{display:flex;align-items:baseline;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.cf-block-hd h2{margin:0;font-size:14.5px;font-weight:600;color:var(--ink);letter-spacing:.01em;
  display:flex;align-items:center;gap:6px}
.cf-block-hd h2 svg{color:var(--faint)}
.cf-block-hd s{flex:1;min-width:120px;font-size:11.5px;color:var(--faint);text-decoration:none;line-height:1.7}

.cf-body{padding:2px 18px 0}
.cf-grp{padding:13px 0 12px;border-top:1px solid var(--line-2)}
.cf-grp:first-child{border-top:0}
.cf-grp-hd{display:flex;align-items:baseline;gap:9px;margin-bottom:9px;flex-wrap:wrap}
.cf-grp-hd b{flex:none;font-size:13px;color:var(--ink)}
.cf-grp-hd s{flex:1;min-width:140px;font-size:11.5px;color:var(--faint);text-decoration:none;line-height:1.7}
.cf-add{flex:none;border:1px solid var(--line);background:#fff;border-radius:7px;padding:3px 9px;
  font-family:inherit;font-size:12px;color:var(--muted);cursor:pointer;transition:.14s}
.cf-add:hover{border-color:var(--gold-22);color:var(--gold-deep);background:var(--gold-06)}

/* 一行三格：名称 > 号码 > 证件类型。1fr 不加 minmax(0,·) 会被长单位名撑破（教训 27） */
.cf-line{display:grid;grid-template-columns:minmax(0,1.2fr) 104px minmax(0,1.5fr) 24px;
  gap:8px;align-items:center;margin-bottom:6px}
.cf-line:last-child{margin-bottom:0}
.cf-line input,.cf-line select{width:100%;min-width:0;font-size:13px;height:36px}
.cf-x{width:24px;height:24px;border:0;background:none;color:#c3ccd8;font-size:17px;line-height:1;
  cursor:pointer;padding:0;border-radius:6px}
.cf-x:hover{color:var(--red);background:var(--red-soft)}

.cf-extra{display:flex;align-items:center;gap:12px;padding:12px 0 14px;border-top:1px solid var(--line-2)}
.cf-extra label{flex:none;font-size:12.5px;color:var(--muted)}
.cf-extra input{flex:1;min-width:0;font-size:13px}

.cf-foot{display:flex;align-items:center;gap:12px;padding:13px 18px;border-top:1px solid var(--line);
  background:#fbfcfd;border-radius:0 0 14px 14px;flex-wrap:wrap}
.cf-submit{padding:9px 22px}
.cf-err{flex:1 1 100%;color:var(--red);font-size:12.5px}

/* ---------- 结论 ---------- */
.cf-verdict{display:flex;align-items:flex-start;gap:13px;padding:15px 18px;border:1px solid;
  border-radius:14px;margin-bottom:12px}
.cf-verdict .ic{flex:none;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;
  background:rgba(255,255,255,.62)}
.cf-verdict .tx{min-width:0}
.cf-verdict b{font-size:15px;letter-spacing:.01em}
.cf-verdict p{margin:3px 0 0;font-size:12.5px;line-height:1.8}
.cf-verdict.is-ok{background:var(--green-soft);border-color:#c9ead8;color:#0b6e3f}
.cf-verdict.is-warn{background:var(--amber-soft);border-color:#f3e0bb;color:#8a5c14}
.cf-verdict.is-bar{background:var(--red-soft);border-color:#f5cfca;color:#a3231b}

.cf-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin:0 2px 8px;
  font-size:12px;color:var(--faint)}
.cf-meta b{font-weight:500;color:var(--muted);margin-right:2px}
.cf-meta b + b,.cf-meta .badge + b{margin-left:6px}
.cf-scope{font-size:11.5px;color:var(--faint);line-height:1.9;margin:0 2px 12px;padding-bottom:8px;
  border-bottom:1px dashed var(--line-2)}

/* ---------- 命中明细 ---------- */
.cf-hits{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-bottom:12px}
.cf-hits-hd{display:flex;align-items:baseline;gap:10px;padding:13px 18px;background:#fbfcfd;
  border-bottom:1px solid var(--line);flex-wrap:wrap}
.cf-hits-hd b{font-size:14px}
.cf-hits-hd s{flex:1;min-width:120px;font-size:11.5px;color:var(--faint);text-decoration:none}
.cf-hit-grp{border-top:1px solid var(--line-2)}
.cf-hit-grp:first-of-type{border-top:0}
.cf-hit-grp-hd{display:flex;align-items:center;gap:8px;padding:7px 18px;background:#fcfcfd;
  font-size:12px;color:var(--muted);flex-wrap:wrap}
.cf-hit-grp-hd b{font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}
.cf-hit{display:flex;align-items:center;gap:12px;padding:10px 18px;border-top:1px solid var(--line-2)}
.cf-hit-t{font-size:13px;line-height:1.65;color:var(--text)}
.cf-hit-x{font-size:11.5px;color:var(--faint);margin-top:2px;line-height:1.6}

.cf-more{margin-bottom:14px}
.cf-more>summary{cursor:pointer;font-size:12.5px;color:var(--muted);padding:3px 2px;list-style:none}
.cf-more>summary::-webkit-details-marker{display:none}
.cf-more>summary:before{content:"▸ ";color:var(--faint)}
.cf-more[open]>summary:before{content:"▾ "}

/* ---------- 判定依据（折叠） ---------- */
.cf-ref{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden}
.cf-ref>summary{display:flex;align-items:baseline;gap:10px;padding:14px 18px;cursor:pointer;
  list-style:none;flex-wrap:wrap}
.cf-ref>summary::-webkit-details-marker{display:none}
.cf-ref>summary b{flex:none;font-size:14px;color:var(--ink)}
.cf-ref>summary s{flex:1;min-width:140px;font-size:11.5px;color:var(--faint);text-decoration:none;line-height:1.7}
.cf-ref-sw{flex:none;font-size:12px;color:var(--gold-deep)}
.cf-ref-sw:after{content:"展开"}
.cf-ref[open] .cf-ref-sw:after{content:"收起"}
.cf-ref-bd{padding:2px 18px 18px;border-top:1px solid var(--line)}
.cf-ref-law{margin-top:16px;padding-top:6px;border-top:1px solid var(--line-2)}

@media (max-width:900px){
  /* 窄屏（把字号放大也会落进这里）：一行三格变成两行 ——
     上行「名称 + ×」，下行「证件类型 + 号码」。挤成一条时名称只剩十几个字宽。 */
  .cf-line{grid-template-columns:minmax(0,1fr) 104px 24px;row-gap:7px}
  .cf-line input[name*="[name]"]{grid-column:1 / 3}
  .cf-line .cf-x{grid-column:3;grid-row:1;align-self:center}
  .cf-line select{grid-column:1;grid-row:2}
  .cf-line input[name*="[id_no]"]{grid-column:2 / 4;grid-row:2}
  .cf-case-link{max-width:100%}
}

/* ============================================================================
   学习中心（2026-11 改版：与「官网 → 内容管理」同一套外壳）
   ----------------------------------------------------------------------------
   列表、编辑页、栏目管理全部换到 cms-console + cm-row 这套结构上，
   原来那套 mod-shell + 卡片列表（.lib-grid 卡片墙）只留给「同栏目还有」这类横排。
   ========================================================================== */
/* 下级栏目的面包屑：只在二级以下出现（一级栏目的名字已在面板标题上） */
.lib-crumb { display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
    padding: 10px 20px 0; font-size: 12px; color: var(--faint); }
.lib-crumb a { color: var(--muted); }
.lib-crumb a:hover { color: var(--gold-deep); }
.lib-crumb b { color: var(--text); font-weight: 500; }
.lib-crumb .sep { color: #cfd6de; }

/* 批量 / 校验失败的提示：夹在面板里，不能再用 .alert 的 16px 外边距 */
.lib-flash { margin: 0; padding: 9px 20px; font-size: 12.5px; color: var(--red);
    background: var(--red-soft); border-bottom: 1px solid #f5cfca; }

/* 子栏目入口：一行一个，不用卡片墙（卡片墙要和下面的内容列表抢视觉） */
.lib-subnodes { display: flex; flex-direction: column; margin: 0; border-bottom: 1px solid var(--line); }
.lib-subnode { display: flex; align-items: center; gap: 9px; padding: 9px 20px;
    border-top: 1px solid var(--line-2); font-size: 13px; color: var(--text); }
.lib-subnode:first-child { border-top: 0; }
.lib-subnode svg { color: var(--gold-text); flex: none; }
.lib-subnode span { flex: 1; min-width: 0; }
.lib-subnode s { flex: none; font-size: 11.5px; color: var(--faint); text-decoration: none;
    font-variant-numeric: tabular-nums; }
.lib-subnode:hover { background: #fbfcfe; }

/* 阅读页正文区：cms-pane 里没有自动内边距 */
.lib-read { padding: 16px 20px 20px; }
.lib-read > .card { border-radius: 12px; }

/* 法条全文的抬头 */
.lib-law-meta { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; margin-bottom: 12px;
    padding: 10px 13px; border: 1px solid var(--line); border-radius: 10px; background: #fbfcfd;
    font-size: 12.5px; color: var(--muted); }
.lib-law-meta b { color: var(--ink); font-size: 13px; }
.lib-law-meta .lib-link { margin-left: auto; color: var(--gold-text); font-size: 12.5px; }
.lib-law-meta .lib-link:hover { text-decoration: underline; }

/* 条文正文：一条一段，条号加粗另起；章标题单独一行。
   这是「法律原文」，不是文章 —— 行距比正文略紧、条与条之间用细线分开，
   读起来才像法条，而不是一段一段的散文。 */
/* 法条一行太长不好读：与书籍版心一样限宽，右边留白，不用满屏 */
.lib-law { font-size: 14px; line-height: 1.95; max-width: 820px; }
.lib-law h2 { margin: 26px 0 10px; padding-bottom: 6px; font-size: 16px;
    border-bottom: 1px solid var(--line-2); font-weight: 600; color: var(--ink); }
.lib-law h2:first-of-type { margin-top: 6px; }
.lib-law h3 { margin: 18px 0 6px; font-size: 13.5px; font-weight: 600; color: var(--gold-text); }
.lib-law p { margin: 0 0 10px; }
.lib-law p.law-art { padding: 7px 0; border-bottom: 1px dashed var(--line-2); }
.lib-law p.law-art:last-child { border-bottom: 0; }
.lib-law p.law-art b { color: var(--ink); margin-right: 6px; }
/* 锚点跳过来时高亮一下：从利冲页点「看第五十一条原文」，
   页面跳到几千字中间，不标一下根本不知道自己落在哪。
   scroll-margin 是给「跳过去别被顶部粘条盖住」用的（粘条 56px）。 */
.lib-law p.law-art { scroll-margin-top: 78px; }
.lib-law p.law-art:target {
    background: #fdf6e9; border-left: 3px solid var(--gold); padding-left: 9px;
    box-shadow: 0 0 0 8px #fdf6e9; border-radius: 4px;
}

/* ---------- 栏目管理 ---------- */
.lib-node-row { display: grid; align-items: center; gap: 14px; padding: 11px 18px;
    grid-template-columns: minmax(0,1fr) 70px 80px 80px 76px 150px;
    border-top: 1px solid var(--line-2); }
.lib-node-row:first-child { border-top: 0; }
.lib-node-row:hover { background: #fbfcfe; }
.lib-node-name { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.lib-node-name a { font-size: 13.5px; color: var(--text); }
.lib-node-name a.is-top { font-weight: 600; }
.lib-node-name a:hover { color: var(--gold-deep); }
.lib-node-name s { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    font-size: 11.5px; color: var(--faint); text-decoration: none; }
/* 二级以下的那一小横杠：比「└」干净，也不会在不同字体下错位 */
.lib-node-bar { flex: none; width: 10px; height: 1px; background: #cfd6de; }
.lib-node-c { font-size: 12px; color: var(--faint); }
.lib-node-c.is-num { text-align: right; font-variant-numeric: tabular-nums; color: var(--muted); }
.lib-node-ops { display: flex; justify-content: flex-end; }
.lib-node-new { padding: 16px 18px; border-top: 1px solid var(--line); background: #fbfcfd; }
.lib-node-new-hd { display: flex; align-items: baseline; gap: 9px; margin-bottom: 10px; flex-wrap: wrap; }
.lib-node-new-hd b { font-size: 13.5px; }
.lib-node-new-hd s { font-size: 11.5px; color: var(--faint); text-decoration: none; }
.lib-node-new-row { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; }
.lib-node-new-row .field { margin-bottom: 0; min-width: 160px; }
.lib-node-new-row .field:first-child { flex: 1 1 200px; }
.lib-node-new-row .field:nth-child(3) { flex: 1 1 220px; }

/* ---------- 投稿页 ---------- */
.lib-form .card { border-radius: 0; border-left: 0; border-right: 0; border-bottom: 0; }
.lib-form .card:first-child { border-top: 0; }
.lib-form .card .card-bd { padding: 16px 20px; }
.lib-form-ft { display: flex; align-items: center; gap: 10px; padding: 14px 20px;
    border-top: 1px solid var(--line); background: #fbfcfd; flex-wrap: wrap; }

@media (max-width: 900px) {
  .lib-node-row { grid-template-columns: minmax(0,1fr) 60px 110px; row-gap: 6px; }
  .lib-node-row .lib-node-c:nth-child(3),
  .lib-node-row .lib-node-c:nth-child(4) { display: none; }
}

/* 投稿审核条：夹在阅读页顶部，读完正文之前就能判 */
.lib-review { margin: 16px 20px 0; padding: 13px 15px; border: 1px solid var(--gold-22);
    background: var(--gold-06); border-radius: 12px; }
.lib-review-hd { display: flex; align-items: baseline; gap: 9px; flex-wrap: wrap; margin-bottom: 9px; }
.lib-review-hd b { font-size: 13.5px; color: var(--gold-deep); }
.lib-review-hd s { font-size: 11.5px; color: var(--muted); text-decoration: none; line-height: 1.7; }
.lib-review-row { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.lib-review-row input { flex: 1 1 260px; min-width: 0; font-size: 13px; }


/* 审稿三步：左边一条细线把三个圆点串起来，比三行纯文字更看得出「有先后」 */
.lib-submit-flow { position: relative; padding-left: 22px; }
.lib-submit-flow:before { content: ""; position: absolute; left: 8px; top: 6px; bottom: 8px;
    width: 1px; background: var(--line); }
.lib-submit-flow > div { position: relative; padding: 0 0 12px; font-size: 12px; line-height: 1.75; color: var(--muted); }
.lib-submit-flow > div:last-child { padding-bottom: 0; }
.lib-submit-flow i { position: absolute; left: -22px; top: 1px; width: 17px; height: 17px; border-radius: 50%;
    display: grid; place-items: center; font-style: normal; font-size: 10.5px; font-variant-numeric: tabular-nums;
    background: var(--gold-06); color: var(--gold-deep); border: 1px solid var(--gold-22); }



/* ============================================================================
   统一上传区（x-file-drop）
   ----------------------------------------------------------------------------
   与「案件办理 → 归档目录 → 上传」弹窗里的拖拽区同一套：虚线框 + 图标 + 两行文案，
   选完在下面列文件名与大小，可逐个移除。
   真 input 铺满整块（透明），点击与拖拽都落在它身上 —— 不靠 JS 转发 click，
   因为 display:none 的 required input 会静默拦住提交，还不给任何提示。
   ========================================================================== */
.fd-dz { position: relative; display: flex; flex-direction: column; align-items: center;
    justify-content: center; gap: 5px; border: 2px dashed var(--line); border-radius: 10px;
    background: #fafbfc; padding: 22px 16px; text-align: center; cursor: pointer;
    transition: border-color .15s, background .15s; }
.fd-dz:hover, .fd-dz:focus-within, .fd-dz.drag { border-color: var(--gold); background: var(--gold-06); }
.fd-dz.is-err { border-color: #d0563f; background: #fdf3f1; }
.fd-dz input[type=file] { position: absolute; inset: 0; width: 100%; height: 100%;
    opacity: 0; cursor: pointer; font-size: 0; }
.fd-ic { color: var(--gold); display: flex; }
.fd-t1 { font-size: 13.5px; color: var(--text); }
.fd-t2 { font-size: 12px; color: var(--faint); }

/* 紧凑版：右栏、窄卡片里用，别占掉半屏 */
.fd.is-sm .fd-dz { padding: 13px 12px; gap: 3px; border-width: 1px; }
.fd.is-sm .fd-ic svg { width: 17px; height: 17px; }
.fd.is-sm .fd-t1 { font-size: 12.5px; }
.fd.is-sm .fd-t2 { font-size: 11.5px; }

.fd-list { display: flex; flex-direction: column; gap: 5px; margin-top: 8px; }
.fd-list:empty { margin-top: 0; }
.fd-f { display: flex; align-items: center; gap: 8px; background: var(--bar);
    border-radius: 7px; padding: 6px 9px; font-size: 12.5px; }
.fd-f b { flex: 1; min-width: 0; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fd-f s { flex: none; text-decoration: none; color: var(--faint); font-size: 11.5px;
    font-variant-numeric: tabular-nums; }
.fd-x { flex: none; width: 20px; height: 20px; border: 0; border-radius: 50%; background: transparent;
    color: var(--faint); font-size: 15px; line-height: 1; cursor: pointer; display: grid; place-items: center; }
.fd-x:hover { background: #e6eaf0; color: var(--danger, #c0392b); }
.fd-warn { margin-top: 6px; font-size: 12px; color: #b4521f; line-height: 1.7; }
.fd-have { margin-top: 6px; font-size: 11.5px; color: var(--faint);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---------- 上传定稿：左选框 + 右须知 ----------
   合同申请与函件申请共用。原先是一条通栏虚线框（1100px 宽、字缩在正中间），
   底下再挤两行小字说明 —— 框越大越不知道要传什么。
   改成左边选框、右边「传之前先确认」，两块等高，扫一眼就知道交什么。 */
.up-split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(240px, 300px); gap: 14px; align-items: stretch; }
.up-split .fd { display: flex; flex-direction: column; }
.up-split .fd-dz { flex: 1; padding: 20px 16px; }
.up-tips { display: flex; flex-direction: column; gap: 6px; border: 1px solid var(--line);
    border-radius: 10px; background: #fafbfc; padding: 12px 14px;
    font-size: 11.5px; color: var(--muted); line-height: 1.8; }
.up-tips > b { font-size: 11.5px; font-weight: 600; color: var(--ink); letter-spacing: .02em; }
.up-tips ul { display: flex; flex-direction: column; gap: 4px; margin: 0; padding: 0; list-style: none; }
.up-tips li { position: relative; padding-left: 13px; }
.up-tips li:before { content: ""; position: absolute; left: 1px; top: 8px; width: 5px; height: 5px;
    border-radius: 50%; background: var(--gold); }
.up-tips li b { font-weight: 600; color: var(--ink); }
.up-tips a { margin-top: auto; padding-top: 7px; border-top: 1px dashed var(--line);
    color: var(--gold-text-deep); font-size: 11.5px; font-weight: 600; text-decoration: none; }
.up-tips a:hover { text-decoration: underline; }
@media(max-width:640px) { .up-split { grid-template-columns: 1fr; } }

/* ---------- 异步上传器（x-uploader）的空状态：与 x-file-drop 同一套虚线区 ----------
   官网封面、头像、图片库、视频这几个地方传的是「先传上去拿地址」，不能套同步表单组件；
   但「还没传」的那一刻，用户看到的东西应该和别处一模一样。 */
.uptr-row.is-empty { flex-direction: column; align-items: center; justify-content: center; gap: 6px;
    border: 2px dashed var(--line); border-radius: 10px; background: #fafbfc;
    padding: 18px 16px; text-align: center; cursor: pointer; }
.uptr-row.is-empty:hover { border-color: var(--gold); background: var(--gold-06); }
.uptr-row.is-empty .uptr-meta { flex: none; align-items: center; }
.uptr-row.is-empty .uptr-name { white-space: normal; color: var(--text); font-size: 13px; }
.uptr-row.is-empty .uptr-sub { white-space: normal; }
.uptr-row.is-empty .uptr-ic { width: 24px; height: 24px; background: transparent; color: var(--gold); }
.uptr-row.is-empty .uptr-trigger { display: none; }

/* ============================================================
   列表栅格的断点按「整页可用宽度」算，不按视口宽度
   ------------------------------------------------------------
   cms-console 这一套是「侧栏 220 + 左树 226 + 内容」，1280 的窗口里
   .cm-row 实际只剩 750 左右。原来断点写的是 1180（按视口），于是
   1280~1366 这段仍按 7 列排，「标题」被挤到 120px —— 一篇文章的名字
   只剩四个字（实测「民间…」），摘要挤成一列竖排。
   这里把两档断点抬到与真实可用宽度相符的位置：
   ≤1366 收掉「阅读 / 发布时间」，≤1040 再收掉缩略图、状态与操作。
   .cm-head 必须跟着一起改，否则表头与行错列。
   ============================================================ */
@media(max-width:1366px){
  .cm-head{grid-template-columns:24px 52px minmax(0,1fr) 88px 152px;gap:12px}
  .cm-head .cm-h-num,.cm-head .cm-h-time{display:none}
  .cm-row{grid-template-columns:24px 52px minmax(0,1fr) 88px 152px;gap:12px}
  .cm-num,.cm-time{display:none}
  .cm-row.cm-course,
  .cm-head.cm-head-course{grid-template-columns:24px 52px minmax(0,1fr) 84px 228px}
  .cm-head.cm-head-course .cm-h-num,.cm-head.cm-head-course .cm-h-time{display:none}
}
@media(max-width:1040px){
  .cm-head{display:none}
  .cm-row{grid-template-columns:22px minmax(0,1fr);gap:11px;padding:14px 15px}
  .cm-row.cm-course{grid-template-columns:minmax(0,1fr);gap:8px}
  .cm-thumb,.cm-state,.cm-ops,.cm-num,.cm-time{display:none}
}

/* ============================================================
   文件预览（审批详情 / 合同详情 / 用章详情共用一个组件）
   ------------------------------------------------------------
   审批人真正要判的是「这份文件里写了什么」。原来合同审核页只有一行
   「打开合同全文与附件」的灰链接，点了还是下载 —— 等于没给看。
   这里给它一个 560px 高的内嵌阅读区：头部常驻文件名与「新窗口打开」，
   下面直接翻页，不用离开页面。
   ============================================================ */
.dp{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff}
/* 审批页里这份文件是「要你判的东西」，金边 + 淡金底，跟普通卡片分开 */
.dp.is-key{border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-06)}
.dp.is-key .dp-hd{background:var(--gold-06)}
.dp-hd{display:flex;align-items:center;gap:10px;padding:9px 12px;
    background:#fbfcfd;border-bottom:1px solid var(--line-soft)}
.dp-ico{display:inline-flex;align-items:center;justify-content:center;flex:none;
    width:30px;height:30px;border-radius:8px;background:var(--gold-06);color:var(--gold-text)}
.dp-file{flex:1;min-width:0}
.dp-name{display:block;font-size:13px;font-weight:600;color:var(--ink);line-height:1.45;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:none}
.dp-name:hover{color:var(--gold-text-deep);text-decoration:underline}
.dp-meta{font-size:11px;color:var(--faint);line-height:1.6;margin-top:1px}
.dp-acts{display:flex;gap:6px;align-items:center;flex:none}
.dp-bd{position:relative;background:#eef0f4;overflow:hidden}
.dp-bd iframe{display:block;width:100%;height:100%;border:0;background:#fff}
.dp-bd img{display:block;width:100%;height:100%;object-fit:contain;background:#fff}
.dp-none{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:6px;color:var(--muted);font-size:12px;text-align:center;padding:20px}
.dp-none b{font-size:13px;color:var(--ink)}
.dp-ft{padding:7px 12px;border-top:1px solid var(--line-soft);background:#fbfcfd;
    font-size:11px;color:var(--faint);line-height:1.7}
/* 空状态：没传文件时要说清「谁该补」，不是一片空白 */
.dp.is-empty{display:flex;align-items:flex-start;gap:10px;padding:12px;
    border-color:var(--amber);background:var(--amber-soft)}
.dp.is-empty .dp-ico{background:#fff;color:var(--amber)}
.dp.is-empty b{font-size:12.5px;color:var(--ink)}
@media(max-width:1180px){
    .dp-bd{height:calc(46vh / var(--z,1)) !important;min-height:300px}
    .dp-acts .btn{padding-left:9px;padding-right:9px}
}

/* 段内小标题：与 .section-title 同一根金色竖条，字号收一档。
   审批页的「申请人备注 / 付款约定 / 风险提示」用它 —— 同一条竖条让人一眼
   看出它们和「合同要点」是一组，字号小一档说明是段内细分。 */
.section-title.is-sub{font-size:12px;margin:0 0 6px;color:var(--ink);letter-spacing:0}
.section-title.is-sub:before{height:10px}

/* 用章台账里的文件名就是审阅入口，做成一眼能点的样子（原来是一段普通文字） */
.seal-doc{font-weight:600;color:var(--ink);text-decoration:none}
.seal-doc:hover{color:var(--gold-text-deep);text-decoration:underline}
.dp-tip{color:var(--faint);opacity:.85}

/* ============================================================
   合同详情（2026-11 重排）
   ------------------------------------------------------------
   一屏要回答五件事：这是什么、多少钱、什么时候到期、文件在不在、
   还欠哪几道手续。手续缺口做成顶部一条「还差 N 件事」，点一下落到对应卡片。
   ============================================================ */
.ct-sub{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ct-sub .ct-cat{margin-right:0}

/* 还差什么事：一条横向清单，最多三条，每条一个可点的标签卡 */
.ct-todo{display:flex;gap:12px;align-items:center;flex-wrap:wrap;
    border:1px solid var(--gold);background:var(--gold-06);border-radius:12px;
    padding:10px 13px;margin-bottom:16px}
.ct-todo-hd{display:flex;align-items:center;gap:6px;flex:none;
    font-size:12.5px;font-weight:600;color:var(--gold-text-deep)}
.ct-todo-items{display:flex;gap:8px;flex-wrap:wrap;flex:1;min-width:0}
.ct-todo-i{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);
    border-radius:9px;padding:6px 10px;text-decoration:none;color:var(--ink);font-size:12px;line-height:1.5}
.ct-todo-i:hover{border-color:var(--gold);text-decoration:none}
.ct-todo-tag{flex:none;font-size:10.5px;color:var(--gold-text-deep);
    background:var(--gold-06);border-radius:4px;padding:1px 5px}
.ct-todo-x{min-width:0;max-width:34ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ct-todo-act{flex:none;color:var(--gold-text-deep);font-weight:600}

/* 关键条款：从正文里摘出来的大段文字，表格装不下（会挤成一条竖线） */
.clause{margin-bottom:16px}
.clause:last-child{margin-bottom:0}
.clause-txt{font-size:13px;line-height:1.95;color:var(--ink);white-space:pre-wrap}
.clause-empty{font-size:12px;line-height:1.8;color:var(--amber)}
.clause-empty.is-plain{color:var(--faint)}

/* 只有一份合同的合同链：压成一行，不做成一张空卡 */
.chain-empty.is-line{border:0;background:transparent;padding:0;font-size:12px;color:var(--faint)}

/* 顶部「还差几件事」跳卡片时别被吸顶栏盖住 */
.card[id]{scroll-margin-top:88px}

/* ============================================================================
   案件表单 · 收费结构（FeePlan）
   ----------------------------------------------------------------------------
   四种收法各一块，只显示当前这一块。分期明细是一行一期（金额 / 约定日期 / 说明），
   合计条固定在下面：改任何一格，钱数当场跟着变，不用保存后回来看。
   ========================================================================== */
.fee-modes { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.fee-mode { position: relative; display: flex; flex-direction: column; gap: 2px;
    padding: 9px 10px; border: 1px solid var(--line); border-radius: 9px; background: #fff;
    cursor: pointer; transition: .15s; }
.fee-mode input[type=radio] { position: absolute; opacity: 0; width: 0; height: 0; }
.fee-mode b { font-size: 12.5px; font-weight: 600; color: var(--ink); }
.fee-mode em { font-style: normal; font-size: 10.5px; color: var(--faint); line-height: 1.4; }
.fee-mode:hover { border-color: var(--gold); }
.fee-mode:has(input:checked) { border-color: var(--gold); background: var(--gold-soft);
    box-shadow: 0 0 0 2px var(--gold-22); }
.fee-mode:has(input:checked) b { color: var(--gold-text-deep); }

.fee-panel { margin-top: 14px; padding-top: 14px; border-top: 1px dashed var(--line-2); }
.fee-panel[hidden] { display: none; }
.fee-panel .form-grid { margin-bottom: 0; }

.fee-inst-hd { display: flex; align-items: center; gap: 8px; margin: 0 0 8px; }
.fee-inst-hd b { font-size: 12px; font-weight: 600; color: var(--ink); }
.fee-inst-hd .btn { margin-left: auto; }
.fee-inst { display: grid; grid-template-columns: 22px minmax(110px, 1fr) 148px minmax(130px, 1.1fr) 26px;
    gap: 8px; align-items: center; margin-bottom: 6px; }
.fee-inst-no { width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center;
    font-size: 11px; background: var(--gold-06); color: var(--gold-deep); font-variant-numeric: tabular-nums; }
.fee-inst input { height: 34px; padding: 0 9px; font-size: 12.5px; }
.fee-inst-x { width: 26px; height: 26px; border: 0; border-radius: 50%; background: transparent;
    color: var(--faint); font-size: 16px; line-height: 1; cursor: pointer; display: grid; place-items: center; }
.fee-inst-x:hover { background: #f1f3f6; color: var(--red); }

.fee-total { display: flex; align-items: baseline; gap: 10px; margin-top: 14px; padding: 11px 14px;
    border-radius: 10px; background: var(--gold-06); border: 1px solid var(--gold-22); }
.fee-total span { font-size: 12px; color: var(--muted); }
.fee-total b { font-size: 18px; color: var(--gold-text-deep); font-variant-numeric: tabular-nums; }
.fee-total em { font-style: normal; font-size: 11px; color: var(--faint); margin-left: auto; text-align: right; }

.fee-cap { margin-top: 10px; padding: 9px 12px; border-radius: 9px; font-size: 11.5px; line-height: 1.8; }
.fee-cap.is-ok { background: #f4f8f4; border: 1px solid #dbe7db; color: var(--muted); }
.fee-cap.is-bad { background: #fdf3f1; border: 1px solid #f0d5cf; color: #a1361f; }
.fee-cap b { font-weight: 600; }

@media (max-width: 720px) {
    .fee-modes { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .fee-inst { grid-template-columns: 22px minmax(0, 1fr) 26px; }
    .fee-inst input[type=date], .fee-inst input[type=text] { grid-column: 2 / 3; }
    .fee-total { flex-wrap: wrap; }
    .fee-total em { margin-left: 0; }
}

/* 收费结构摘要（合同申请、费用与开票、合同详情共用）
   —— 一行一条：标签 + 值 + 可选说明，外面一个浅底框。 */
.fee-sum { border: 1px solid var(--line); border-radius: 10px; background: #fbfbfc; overflow: hidden; }
.fee-sum-hd { display: flex; align-items: baseline; gap: 10px; padding: 9px 14px;
    background: #f6f7f9; border-bottom: 1px solid var(--line-soft); }
.fee-sum-hd b { font-size: 12.5px; font-weight: 600; color: var(--ink); }
.fee-sum-hd span { margin-left: auto; font-size: 11.5px; color: var(--faint); }
.fee-sum-hd em { font-style: normal; font-weight: 600; color: var(--gold-text-deep);
    font-variant-numeric: tabular-nums; }
.fee-sum-r { display: flex; align-items: baseline; gap: 12px; padding: 7px 14px;
    border-top: 1px solid var(--line-soft); font-size: 12px; }
.fee-sum-r > span { flex: none; width: 96px; color: var(--muted); }
.fee-sum-r > b { font-weight: 600; color: var(--ink); font-variant-numeric: tabular-nums; }
.fee-sum-r > em { font-style: normal; font-size: 11px; color: var(--faint); margin-left: auto; text-align: right; }

/* 审批页「这次拿谁去比的」：委托人 / 利益相对方 / 第三人 三格
   —— 利冲最常见的错不是没查，是两栏填反；三格摆出来一眼对得上。 */
.cf-subj { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 2px 0 10px; }
.cf-subj-i { border: 1px solid var(--line); border-radius: 9px; padding: 8px 10px; background: #fbfbfc; min-width: 0; }
.cf-subj-i > span { display: block; font-size: 10.5px; color: var(--faint); letter-spacing: .03em; }
.cf-subj-i > b { display: block; font-size: 12px; font-weight: 600; color: var(--ink); margin-top: 2px; line-height: 1.6; }
.cf-subj-i > b.is-none { color: var(--faint); font-weight: 400; }
.cf-subj-i.is-opp { border-color: var(--gold-22); background: var(--gold-06); }
.cf-subj-i.is-opp > span { color: var(--gold-text-deep); }
@media (max-width: 900px) { .cf-subj { grid-template-columns: 1fr; } }

/* 利冲「这一档意味着什么」：成案页与审批页共用
   —— 系统只做匹配，这四句话解释「为什么会被标出来、依据哪一条、下一步谁定」。 */
.cf-mean { border: 1px solid var(--line); border-radius: 9px; background: #fbfbfc; margin: 0 0 10px; overflow: hidden; }
.cf-mean-r { display: flex; gap: 10px; padding: 8px 12px; border-top: 1px solid var(--line-soft); font-size: 11.5px; line-height: 1.8; }
.cf-mean-r:first-child { border-top: 0; }
.cf-mean-r > b { flex: none; width: 168px; color: var(--ink); font-weight: 600; line-height: 1.7; }
.cf-mean-r > span { min-width: 0; color: var(--muted); }
@media (max-width: 720px) { .cf-mean-r { flex-direction: column; gap: 2px; } .cf-mean-r > b { width: auto; } }

/* 审批页：承办律师判断说明 / 怎么用这份结果
   —— 说明是「人写的判断」，给独立的一块浅底框，不混在系统提示里。 */
.cf-judge { border: 1px solid var(--line); border-radius: 9px; margin: 0 0 10px; overflow: hidden; }
.cf-judge-hd { display: flex; align-items: baseline; gap: 10px; padding: 8px 12px;
    background: #f6f7f9; border-bottom: 1px solid var(--line-soft); }
.cf-judge-hd b { font-size: 12px; font-weight: 600; color: var(--ink); }
.cf-judge-hd span { margin-left: auto; font-size: 11px; color: var(--faint); }
.cf-judge-bd { padding: 10px 12px; font-size: 12.5px; line-height: 1.85; color: var(--text);
    white-space: normal; overflow-wrap: anywhere; text-align: left; }
.cf-judge.is-missing { border-color: #f0d5cf; }
.cf-judge.is-missing .cf-judge-hd { background: #fdf3f1; }
.cf-judge .is-warn { color: #a1361f; }

.cf-decide { border: 1px solid var(--gold-22); background: var(--gold-06); border-radius: 9px;
    padding: 10px 12px; margin-top: 10px; font-size: 12px; }
.cf-decide > b { font-size: 12px; font-weight: 600; color: var(--gold-text-deep); }

/* ===================================================================
   审批详情页（成案）2026-11-14 改版
   ---------------------------------------------------------------------------
   左侧原来是「一叠说明 + 一叠告警」：成案要件一段、案情摘要又一段、利冲
   五块大小相近的框、风控清单每条占三行。审批人翻到第二屏就只看标题了。
   现在两块各有自己的形状：
     · 利益冲突 = 一份报告（结论 → 查了什么 → 比了谁 → 命中 → 判断）
     · 风控审核 = 一张清单表（一行一项，说明是标题的注脚）
   =================================================================== */

/* ---------- 案情摘要并进「成案要件」表：与 kv 同一底色，只在下沿收圆角 ---------- */
.kv:has(+ .kv-brief) { border-radius: 8px 8px 0 0; }
.kv-brief {
    display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 9px 12px;
    background: #f8f9fb; border-radius: 0 0 8px 8px; padding: 4px 11px 11px;
}
.kv-brief-lb { font-size: 12.5px; color: var(--muted); }
.kv-brief-bd { min-width: 0; }

/* ---------- 成案风控审核：汇总条 ---------- */
.rk-sum {
    display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
    padding: 10px 13px; border-radius: 9px; border: 1px solid var(--line);
    background: #fbfcfd; margin-bottom: 7px;
}
.rk-sum.is-fail { background: #fdf6f5; border-color: #f0d5cf; }
.rk-sum.is-warn { background: #fffcf3; border-color: #f2e4c6; }
.rk-sum.is-ok   { background: #f6faf7; border-color: #d9ead9; }
.rk-sum-l { flex: 1 1 220px; min-width: 0; }
.rk-sum-l b { font-size: 13px; color: var(--ink); }
.rk-sum.is-fail .rk-sum-l b { color: #a3231b; }
.rk-sum.is-warn .rk-sum-l b { color: #8a5c14; }
.rk-sum.is-ok  .rk-sum-l b { color: #20693f; }
.rk-sum-l s { display: block; text-decoration: none; font-size: 11.5px; color: var(--faint); margin-top: 2px; }
.rk-sum-r {
    flex: none; text-align: right; font-size: 11.5px; color: var(--muted);
    font-variant-numeric: tabular-nums; line-height: 1.55;
}
.rk-sum-r b { font-size: 14px; color: var(--ink); }
.rk-sum-r span { display: block; font-size: 11px; color: #8a5c14; }
.rk-sum-r span.is-done { color: #20693f; }
.rk-tip { font-size: 11.5px; color: var(--faint); line-height: 1.75; margin: 0 2px 8px; }

/* ---------- 成案风控审核：清单表 ---------- */
.rk-t {
    width: 100%; border-collapse: separate; border-spacing: 0;
    border: 1px solid var(--line); border-radius: 10px; overflow: hidden;
    font-size: 12.5px;
}
.rk-t thead th {
    font-size: 10.5px; font-weight: 500; color: var(--faint); text-align: left;
    padding: 6px 12px; background: #fbfcfd; border-bottom: 1px solid var(--line);
    letter-spacing: .04em;
}
/* 判定列宽度写死：三档里「不通过」最长，列窄了会把三个字挤成一团。
   徽标（系统 · 正常）也正好用这个宽度。 */
.rk-t thead th.rk-t-vh { width: 152px; white-space: nowrap; text-align: right; }
.rk-t-g td { padding: 7px 12px; background: #f6f7f9; border-top: 1px solid var(--line-soft); }
.rk-t-g:first-child td { border-top: 0; }
.rk-t-g b { font-size: 12px; color: var(--ink); margin-right: 8px; }
.rk-t-g s { text-decoration: none; font-size: 11px; color: var(--faint); line-height: 1.6; }
.rk-t-r > td { padding: 8px 12px; border-top: 1px solid var(--line-soft); vertical-align: top; }
.rk-t-r.is-fail > td { background: #fdf8f8; }
.rk-t-r.is-warn > td { background: #fffdf6; }
.rk-t-n { min-width: 0; }
.rk-t-t { display: flex; align-items: flex-start; gap: 6px; font-weight: 600; color: var(--ink); line-height: 1.6; }
.rk-t-x { font-size: 11.5px; color: var(--muted); line-height: 1.7; margin-top: 3px; font-weight: 400; }
.rk-t-x.is-empty { color: #8a5c14; }
.rk-t-v { white-space: nowrap; text-align: right; }
.rk-t-why > td { background: #fbfcfd; border-top: 1px solid var(--line-soft); padding: 8px 12px 10px; }
.rk-t-why div { font-size: 11.5px; color: var(--muted); line-height: 1.85; }
.rk-t-why div + div { margin-top: 3px; }
.rk-t-why b { display: inline-block; margin-right: 6px; font-size: 10.5px; color: var(--faint); }

/* 「？」＝这一项的依据与怎么查。收起时不占行高，展开就在本行下面摊开 */
.rk-q {
    flex: none; width: 15px; height: 15px; margin-top: 2px; padding: 0;
    border: 1px solid var(--line); border-radius: 50%; background: #fff;
    color: var(--faint); font-size: 10px; line-height: 1; cursor: pointer;
}
.rk-q:hover { border-color: var(--gold-22); color: var(--gold-text); }
.rk-q.is-on { border-color: var(--gold); background: var(--gold-06); color: var(--gold-text); }

/* 三档判定：三个等宽小格，选中即整格上色 —— 比三个圆点更容易看出「这是三选一」 */
.rk-opt { display: flex; gap: 3px; }
.rk-opt .rk-r { flex: 1 1 0; text-align: center; font-size: 11px; padding: 3px 5px; }

/* ---------- 利益冲突报告 ---------- */
.cf-rep { border: 1px solid var(--line); border-radius: 12px; background: #fff; overflow: hidden; }
.cf-rep-top {
    display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
    padding: 12px 16px; border-bottom: 1px solid var(--line-soft);
    border-left: 3px solid var(--line-2);
}
.cf-rep-top.is-ok   { background: #f6faf7; border-left-color: #2f9e6e; }
.cf-rep-top.is-warn { background: #fffcf4; border-left-color: #d39326; }
.cf-rep-top.is-bar  { background: #fdf7f6; border-left-color: #c0392b; }
.cf-rep-v { flex: 1 1 240px; min-width: 0; }
.cf-rep-v b { display: block; font-size: 14px; letter-spacing: .01em; color: var(--ink); }
.cf-rep-top.is-ok   .cf-rep-v b { color: #0b6e3f; }
.cf-rep-top.is-warn .cf-rep-v b { color: #8a5c14; }
.cf-rep-top.is-bar  .cf-rep-v b { color: #a3231b; }
.cf-rep-v s { display: block; text-decoration: none; font-size: 11.5px; line-height: 1.75; margin-top: 3px; color: var(--muted); }
.cf-rep-v s b { display: inline; font-size: 11.5px; color: var(--ink); }
.cf-rep-tally { display: flex; gap: 5px; flex-wrap: wrap; }
.cf-rep-tally span {
    display: flex; align-items: baseline; gap: 4px; font-size: 10.5px;
    padding: 3px 8px; border-radius: 20px; background: #fff;
    border: 1px solid var(--line-2); color: var(--muted);
}
.cf-rep-tally b { font-size: 12.5px; color: var(--ink); font-variant-numeric: tabular-nums; }
.cf-rep-tally .is-bar    { background: #fdf1f0; border-color: #f2d3ce; color: #a3231b; }
.cf-rep-tally .is-bar b  { color: #a3231b; }
.cf-rep-tally .is-waive  { background: #fdf7e9; border-color: #f0e0bf; color: #8a5c14; }
.cf-rep-tally .is-waive b{ color: #8a5c14; }
.cf-rep-tally .is-review { background: #f2f6fd; border-color: #d5e2f5; color: #2a5b9e; }
.cf-rep-tally .is-review b { color: #2a5b9e; }

/* 查了什么：时间 / 人 / 范围。范围那一行是「这次真的查了几个库」的凭据 */
.cf-rep-meta { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); margin: 0; }
.cf-rep-meta > div { padding: 8px 16px; border-top: 1px solid var(--line-soft); }
.cf-rep-meta > div:nth-child(-n+2) { border-top: 0; }
.cf-rep-meta > div.is-wide { grid-column: 1 / -1; }
.cf-rep-meta dt { font-size: 10.5px; color: var(--faint); letter-spacing: .03em; }
.cf-rep-meta dd { margin: 2px 0 0; font-size: 12px; color: var(--ink); line-height: 1.7; }
.cf-rep-meta dd span { margin-right: 10px; white-space: nowrap; color: var(--faint); }
.cf-rep-meta dd span.is-hit { color: var(--ink); font-weight: 600; }

.cf-sec {
    display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
    padding: 11px 16px 6px; font-size: 12px; font-weight: 600; color: var(--ink);
    border-top: 1px solid var(--line-soft);
}
.cf-rep-meta + .cf-sec { border-top: 0; }
.cf-sec s { text-decoration: none; font-weight: 400; font-size: 11px; color: var(--faint); }
.cf-sec-bd { padding: 0 16px 12px; }

.cf-t { width: 100%; border-collapse: collapse; font-size: 12px; }
.cf-t thead th {
    font-size: 10.5px; font-weight: 500; color: var(--faint); text-align: left;
    padding: 5px 10px; background: #fbfcfd; letter-spacing: .03em;
    border-top: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft);
}
/* 档次 / 角色列只放两三个字的徽标：贴边 78px 在 1280 的窄栏里白占一整列 */
.cf-t th:first-child, .cf-t td:first-child { width: 70px; }
.cf-t td { padding: 6px 10px; border-bottom: 1px solid var(--line-soft); vertical-align: top; line-height: 1.65; }
.cf-t tbody tr:last-child td { border-bottom: 0; }
.cf-t tr.is-opp td { background: #fdfaf3; }
.cf-t tr.is-empty td { color: var(--faint); }
.cf-t-hit td { padding-top: 7px; padding-bottom: 7px; }
.cf-role {
    font-size: 10.5px; color: var(--muted); background: #f3f4f6;
    border-radius: 4px; padding: 1px 6px; white-space: nowrap;
}
.cf-t tr.is-opp .cf-role { background: var(--gold-06); color: var(--gold-text-deep); }
.cf-hit-line { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.cf-hit-sub {
    font-size: 10.5px; color: var(--gold-text-deep); background: var(--gold-06);
    border-radius: 4px; padding: 1px 5px; white-space: nowrap;
}
.cf-hit-x { line-height: 1.6; margin-top: 1px; }
.cf-remark {
    margin-top: 8px; padding: 8px 12px; background: #fbfcfd;
    border: 1px solid var(--line-soft); border-radius: 8px;
}
.cf-remark b { font-size: 11px; color: var(--muted); }
.cf-remark div { font-size: 12px; color: var(--text); line-height: 1.8; margin-top: 3px; }

@media (max-width: 720px) {
    .cf-rep-meta { grid-template-columns: 1fr; }
    .cf-rep-meta > div:nth-child(2) { border-top: 1px solid var(--line-soft); }
    .cf-rep-tally { width: 100%; }
    .rk-t-t { font-size: 12px; }
    .rk-opt { flex-direction: column; }
    .rk-opt .rk-r { font-size: 10.5px; padding: 2px 4px; }
}

/* 判完一项就在行首留一道竖条：三档一个颜色，扫一眼就知道哪几行已经拿过主意 */
.rk-t-r.is-judged .rk-t-x.is-empty { display: none; }
.rk-t-r.is-judged > td:first-child { box-shadow: inset 3px 0 0 var(--line-2); }
.rk-t-r:has(input[value=ok]:checked) > td:first-child { box-shadow: inset 3px 0 0 #2f9e6e; }
.rk-t-r:has(input[value=warn]:checked) > td:first-child { box-shadow: inset 3px 0 0 #d39326; }
.rk-t-r:has(input[value=fail]:checked) > td:first-child { box-shadow: inset 3px 0 0 #c0392b; }

/* ==========================================================================
   财务说明条（.fin-guide）：收款管理 / 提款打款共用
   --------------------------------------------------------------------------
   2026-11-14：这段原来只写在 payments.blade.php 的页面内 <style> 里，
   提款打款页也用了同一组类名却没定义 —— 于是三块说明竖着堆、文字顶着卡片边框。
   「同一组类名」就必须「同一份定义」，所以搬到这里，页面里那份删掉。
   ========================================================================== */
.fin-guide{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;padding:0}
.fin-guide .fg-item{padding:13px 18px;border-right:1px solid var(--line-2)}
.fin-guide .fg-item:last-child{border-right:0}
.fin-guide .fg-hd{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:var(--text);margin-bottom:4px}
.fin-guide .fg-hd svg{color:var(--gold-text)}
.fin-guide p{margin:0;font-size:12px;line-height:1.7;color:var(--muted)}
/* 内容区窄于 1200 时三列会挤成细条：改成一段一行，分隔线由上边线承担 */
@media(max-width:1200px){
    .fin-guide{grid-template-columns:1fr}
    .fin-guide .fg-item{border-right:0;border-bottom:1px solid var(--line-2)}
    .fin-guide .fg-item:last-child{border-bottom:0}
}
