/* =========================================================
   速诉通 · 全局设计系统 v2 (UI Refresh 2026-08-09)
   说明：本文件为纯样式层，仅调整视觉，不改动任何 DOM 结构与 JS 逻辑。
   所有 class 名保持向后兼容；组件级内联样式（.rp-page / .ops-report）另行维护。
   ========================================================= */

/* ---------- 设计令牌 ---------- */
* { box-sizing: border-box; margin: 0; padding: 0; }
.hidden { display: none !important; }
:root {
  /* 表面与边框 */
  --bg: #eef1f6;
  --surface: #ffffff;
  --surface-2: #f8fafc;
  --surface-3: #f1f5f9;
  --line: #e7ebf1;
  --line-strong: #d6dde7;

  /* 文本 */
  --text: #0f172a;
  --text-2: #334155;
  --muted: #64748b;
  --muted-2: #94a3b8;

  /* 主题色（深蓝导航 + 专业蓝强调） */
  --primary: #1e3a8a;
  --primary-600: #23489e;
  --primary-700: #1a2f6e;
  --primary-soft: #e8edfb;
  --primary-soft-2: #dbe4f7;

  /* 语义色 */
  --green: #16a34a;  --green-soft: #e7f6ec;  --green-700: #15803d;
  --amber: #d97706;  --amber-soft: #fdf2dc;  --amber-700: #b45309;
  --red: #dc2626;    --red-soft: #fdeaea;    --red-700: #b91c1c;
  --blue: #2563eb;   --blue-soft: #e6effe;   --blue-700: #1d4ed8;
  --purple: #7c3aed; --purple-soft: #efe9fd; --purple-700: #6d28d9;
  --teal: #0d9488;   --teal-soft: #d9f3f0;   --teal-700: #0f766e;

  /* 圆角 */
  --r-xs: 6px; --r-sm: 8px; --r: 12px; --r-lg: 16px; --r-xl: 20px; --r-pill: 999px;

  /* 分层阴影 */
  --sh-xs: 0 1px 2px rgba(15,23,42,.06);
  --sh-sm: 0 1px 3px rgba(15,23,42,.08), 0 1px 2px rgba(15,23,42,.04);
  --sh-md: 0 4px 14px rgba(15,23,42,.08), 0 2px 6px rgba(15,23,42,.05);
  --sh-lg: 0 18px 50px rgba(15,23,42,.18);
  --ring: 0 0 0 3px var(--primary-soft);

  --content-max: 1480px;
}

html { color-scheme: light; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "PingFang SC", sans-serif;
  background: var(--bg);
  color: var(--text);
  font-size: 14px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
.muted { color: var(--muted); font-size: 12px; }

/* ---------- 按钮 ---------- */
.btn-primary { background: var(--primary); color: #fff; border: none; padding: 10px 18px; border-radius: var(--r-sm); cursor: pointer; font-size: 14px; font-weight: 600; box-shadow: var(--sh-xs); transition: background .15s, box-shadow .15s, transform .1s; }
.btn-primary:hover { background: var(--primary-600); box-shadow: var(--sh-sm); }
.btn-primary:active { transform: translateY(1px); }
.btn-secondary { background: var(--surface); color: var(--text-2); border: 1px solid var(--line-strong); padding: 9px 16px; border-radius: var(--r-sm); cursor: pointer; font-size: 14px; font-weight: 600; transition: background .15s, border-color .15s; }
.btn-secondary:hover { background: var(--surface-2); border-color: var(--muted-2); }
.btn-danger { background: var(--red); color: #fff; border: none; padding: 9px 16px; border-radius: var(--r-sm); cursor: pointer; font-size: 14px; font-weight: 600; box-shadow: var(--sh-xs); transition: background .15s; }
.btn-danger:hover { background: var(--red-700); }
.btn-ghost { background: transparent; border: 1px solid var(--line); color: var(--muted); padding: 7px 13px; border-radius: var(--r-sm); cursor: pointer; font-size: 13px; transition: background .15s, color .15s, border-color .15s; }
.btn-ghost:hover { background: var(--surface-2); color: var(--text-2); border-color: var(--line-strong); }
.btn-sm { padding: 6px 12px; font-size: 13px; border-radius: var(--r-xs); }

/* ---------- 登录 ---------- */
.login-view { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: radial-gradient(1200px 600px at 70% -10%, #2c4ba8 0%, transparent 60%), linear-gradient(135deg,#1e3a8a,#274fb0 55%,#1b2c66); padding: 20px; position: relative; overflow: hidden; }
.login-view::before { content: ''; position: absolute; inset: 0; background-image: radial-gradient(rgba(255,255,255,.06) 1px, transparent 1px); background-size: 22px 22px; opacity: .5; }
.login-card { position: relative; z-index: 1; background: rgba(255,255,255,.98); width: 100%; max-width: 420px; border-radius: var(--r-lg); padding: 30px 30px 26px; box-shadow: 0 24px 70px rgba(8,15,40,.38); }
.login-brand { display: flex; flex-direction: column; align-items: center; gap: 10px; margin-bottom: 22px; text-align: center; }
.login-logo { width: 62px; height: 62px; border-radius: var(--r); overflow: hidden; box-shadow: 0 8px 22px rgba(30,58,138,.4); }
.login-brand .brand-title { font-size: 19px; font-weight: 800; letter-spacing: 1px; color: var(--primary); }
.login-brand .brand-slogan { font-family: 'Noto Serif SC', serif; font-size: 12px; color: var(--muted); letter-spacing: 3px; }
.tabs { display: flex; gap: 8px; margin-bottom: 16px; background: var(--surface-3); padding: 4px; border-radius: var(--r-sm); }
.tab { flex: 1; padding: 9px; border: none; background: transparent; border-radius: 6px; cursor: pointer; color: var(--muted); font-size: 14px; font-weight: 600; transition: all .15s; }
.tab.active { background: #fff; color: var(--primary); box-shadow: var(--sh-xs); }
.auth-form { display: flex; flex-direction: column; gap: 11px; }
.auth-form input, .auth-form select { padding: 12px 13px; border: 1px solid var(--line-strong); border-radius: var(--r-sm); font-size: 14px; background: #fff; transition: border-color .15s, box-shadow .15s; }
.auth-form input:focus, .auth-form select:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.login-seal { position: fixed; right: 7%; bottom: 12%; animation: sealFloat 4s ease-in-out infinite; pointer-events: none; opacity: .95; z-index: 0; }
@keyframes sealFloat { 0%,100% { transform: translateY(0) rotate(-8deg); } 50% { transform: translateY(-12px) rotate(-8deg); } }
@media (max-width: 900px) { .login-seal { display: none; } }
.msg { font-size: 13px; min-height: 18px; }
.msg.error { color: var(--red); } .msg.ok { color: var(--green); }

/* ---------- 主布局：侧边栏 + 顶栏 ---------- */
.app-view { display: flex; min-height: 100vh; }
.sidebar {
  width: 232px; flex: none; background: linear-gradient(180deg,#22357e 0%, #1b2c66 100%);
  color: #fff; display: flex; flex-direction: column; padding: 18px 14px; position: sticky; top: 0; height: 100vh;
  box-shadow: 2px 0 18px rgba(15,23,42,.18); z-index: 8;
}
.side-logo { font-size: 19px; font-weight: 800; text-align: center; padding: 6px 0 6px; letter-spacing: 3px; display: flex; align-items: center; justify-content: center; gap: 8px; }
.side-logo::before { content: ''; width: 22px; height: 22px; border-radius: 7px; background: linear-gradient(135deg,#3b82f6,#1e3a8a); box-shadow: 0 3px 10px rgba(59,130,246,.5); }
.sidebar nav { display: flex; flex-direction: column; gap: 3px; flex: 1; margin-top: 14px; overflow-y: auto; }
.nav-item { display: flex; align-items: center; gap: 12px; padding: 11px 13px; border-radius: var(--r-sm); cursor: pointer; color: #c3cde6; font-size: 14px; font-weight: 500; position: relative; transition: background .15s, color .15s; }
.nav-item svg { width: 19px; height: 19px; flex: none; opacity: .9; }
.nav-item:hover { background: rgba(255,255,255,.1); color: #fff; }
.nav-item.active { background: #fff; color: var(--primary); font-weight: 700; box-shadow: var(--sh-sm); }
.nav-item.active::before { content: ''; position: absolute; left: 0; top: 9px; bottom: 9px; width: 4px; border-radius: 0 4px 4px 0; background: var(--primary); }
.side-user { border-top: 1px solid rgba(255,255,255,.14); padding-top: 13px; margin-top: 8px; }
#side-user-name { font-weight: 700; font-size: 14px; } #side-user-role { margin: 2px 0 9px; color: #aeb9d6; }
.side-user .btn-ghost { color: #c3cde6; border-color: rgba(255,255,255,.22); width: 100%; background: rgba(255,255,255,.06); }
.side-user .btn-ghost:hover { background: rgba(255,255,255,.16); color: #fff; border-color: rgba(255,255,255,.35); }

.main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.topbar {
  height: 62px; background: #fff;
  border-bottom: 1px solid var(--line); display: flex; align-items: center; justify-content: space-between;
  padding: 0 24px; position: sticky; top: 0; z-index: 5; box-shadow: 0 1px 0 rgba(15,23,42,.03);
}
.topbar::after { content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: linear-gradient(90deg, transparent, rgba(30,58,138,.12), transparent); }
#page-title { font-size: 17px; font-weight: 700; color: var(--text); letter-spacing: .2px; }
.topbar-right { display: flex; align-items: center; gap: 12px; }
.search-wrap { position: relative; }
.search-wrap::before { content: ''; position: absolute; left: 11px; top: 50%; width: 15px; height: 15px; transform: translateY(-50%); background: var(--muted-2); -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M21 21l-4-4'/%3E%3C/svg%3E") center/contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M21 21l-4-4'/%3E%3C/svg%3E") center/contain no-repeat; }
#global-search { padding: 9px 12px 9px 34px; border: 1px solid var(--line-strong); border-radius: var(--r-pill); width: 264px; font-size: 13px; background: var(--surface-2); transition: border-color .15s, box-shadow .15s, background .15s; }
#global-search:focus { outline: none; background: #fff; border-color: var(--primary); box-shadow: var(--ring); }
.noti-btn { position: relative; width: 38px; height: 38px; display: inline-flex; align-items: center; justify-content: center; background: var(--surface-2); border: 1px solid var(--line); border-radius: var(--r-pill); cursor: pointer; font-size: 17px; transition: background .15s, border-color .15s, transform .1s; }
.noti-btn:hover { background: var(--primary-soft); border-color: var(--primary-soft-2); transform: translateY(-1px); }
.badge { position: absolute; top: -5px; right: -5px; background: var(--red); color: #fff; border-radius: var(--r-pill); font-size: 11px; padding: 1px 6px; min-width: 18px; text-align: center; box-shadow: 0 0 0 2px #fff; }

.view { padding: 22px 24px 28px; max-width: var(--content-max); width: 100%; margin: 0 auto; }

/* ---------- 页面标题区（可选，组件级可选用） ---------- */
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; }
.page-head .ph-title { font-size: 19px; font-weight: 800; color: var(--text); letter-spacing: .2px; }
.page-head .ph-sub { font-size: 12.5px; color: var(--muted); margin-top: 4px; }
.page-head .ph-actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }

/* ---------- 面板 / 卡片 / 区块 ---------- */
.section-title { font-size: 12.5px; font-weight: 700; color: #334155; margin: 2px 0 10px; letter-spacing: .04em; display: flex; align-items: center; gap: 8px; }
.section-title::before { content: ''; width: 3px; height: 13px; background: var(--primary); border-radius: 2px; }
.func-assign { margin-top: 8px; padding: 18px 20px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); box-shadow: var(--sh-xs); }
.func-assign .form-grid { gap: 14px 18px; }
.sub-box { padding: 16px 18px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); box-shadow: var(--sh-xs); }
.sub-box + .sub-box { margin-top: 14px; }
.sub-box-title { font-size: 12.5px; font-weight: 700; color: #475569; margin: 0 0 12px; letter-spacing: .04em; display: flex; align-items: center; gap: 8px; }
.sub-box-title::before { content: ''; width: 3px; height: 14px; background: var(--primary); border-radius: 2px; }
.panel { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); padding: 20px; margin-bottom: 18px; box-shadow: var(--sh-sm); }
.panel h3 { font-size: 15px; margin-bottom: 14px; color: var(--text); font-weight: 700; }
.row { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.toolbar { display: flex; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; align-items: center; }
.panel > .toolbar { margin: -4px 0 16px 0; padding-bottom: 16px; border-bottom: 1px solid var(--line); }
.panel-hr { border: none; border-top: 1px solid var(--line); margin: 0 0 14px 0; }
.paste-hint { margin: 10px 0; padding: 13px 15px; border: 1.5px dashed var(--line-strong); border-radius: var(--r-sm); background: var(--surface-2); color: var(--muted); font-size: 13px; line-height: 1.7; }
.paste-hint b { color: var(--text); }
td[data-voucher-cell]:focus { outline: 2px solid #3b82f6; outline-offset: 2px; border-radius: 6px; }
.toolbar input, .toolbar select { padding: 9px 11px; border: 1px solid var(--line-strong); border-radius: var(--r-sm); font-size: 13px; background: #fff; transition: border-color .15s, box-shadow .15s; }
.toolbar input:focus, .toolbar select:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.toolbar .plaintiff-select { min-width: 140px; }
.toolbar #rp-defendant, .toolbar #rp-plaintiff { min-width: 150px; max-width: 220px; }
.toolbar-sep { width: 1px; height: 24px; background: var(--line); margin: 0 2px; }
.spacer { flex: 1; }

/* ---------- 指标卡 / KPI ---------- */
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px,1fr)); gap: 12px; margin-bottom: 18px; }
.stat { position: relative; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r); padding: 15px 16px 14px; min-height: 0; display: flex; flex-direction: column; gap: 6px; box-shadow: var(--sh-sm); transition: transform .15s ease, box-shadow .15s ease; overflow: hidden; }
.stat::after { content: ''; position: absolute; left: 0; top: 0; right: 0; height: 3px; background: var(--line); }
.stat:hover { transform: translateY(-2px); box-shadow: var(--sh-md); }
.stat .num { font-size: 22px; font-weight: 800; line-height: 1.1; letter-spacing: -.01em; color: #0f172a; white-space: nowrap; font-variant-numeric: tabular-nums; }
.stat .lbl { display: flex; align-items: center; gap: 6px; color: #64748b; font-size: 11.5px; font-weight: 600; letter-spacing: .02em; }
.stat .lbl::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: var(--line); flex: none; }
.stat.blue::after { background: var(--blue); } .stat.blue .lbl::before { background: var(--blue); } .stat.blue .num { color: var(--blue-700); }
.stat.green::after { background: var(--green); } .stat.green .lbl::before { background: var(--green); } .stat.green .num { color: var(--green-700); }
.stat.amber::after { background: var(--amber); } .stat.amber .lbl::before { background: var(--amber); } .stat.amber .num { color: var(--amber-700); }
.stat.red::after { background: var(--red); } .stat.red .lbl::before { background: var(--red); } .stat.red .num { color: var(--red); }
.stat.purple::after { background: var(--purple); } .stat.purple .lbl::before { background: var(--purple); } .stat.purple .num { color: var(--purple-700); }
.stat.teal::after { background: var(--teal); } .stat.teal .lbl::before { background: var(--teal); } .stat.teal .num { color: var(--teal-700); }
.stat.overdue-card { background: #fff5f5; } .stat.overdue-card::after { background: var(--red); } .stat.overdue-card .lbl::before { background: var(--red); } .stat.overdue-card .num { color: var(--red); }
.stat.seg-fs { background: linear-gradient(180deg,#f3f7ff,#ffffff); } .stat.seg-fs::after { background: var(--blue); } .stat.seg-fs .lbl::before { background: var(--blue); } .stat.seg-fs .num { color: var(--blue-700); }
.stat.seg-jz { background: linear-gradient(180deg,#f6f3ff,#ffffff); } .stat.seg-jz::after { background: var(--purple); } .stat.seg-jz .lbl::before { background: var(--purple); } .stat.seg-jz .num { color: var(--purple-700); }
.stat.seg-st { background: linear-gradient(180deg,#eefbfa,#ffffff); } .stat.seg-st::after { background: var(--teal); } .stat.seg-st .lbl::before { background: var(--teal); } .stat.seg-st .num { color: var(--teal-700); }

.kpi-grid { margin-bottom: 16px; }
.stat.kpi { border-radius: var(--r); padding: 15px 16px 14px; box-shadow: var(--sh-sm); }
.stat.kpi::after { background: var(--primary); }
.stat.kpi .num { font-size: 23px; }
.stat.kpi .lbl { margin-top: 1px; }
.kpi-mom { display: inline-block; align-self: flex-start; margin-top: 4px; padding: 2px 9px; border-radius: var(--r-pill); font-size: 11px; font-weight: 600; line-height: 1.5; background: var(--surface-3); color: var(--text-2); }
.kpi-mom.up { background: var(--red-soft); color: var(--red-700); }
.kpi-mom.down { background: var(--green-soft); color: var(--green-700); }
.kpi-mom.flat { background: var(--surface-3); color: var(--muted); }
.kpi-sub { color: var(--muted-2); font-size: 10.5px; margin-top: 2px; }
.kpi-sub .ks-plan { color: var(--muted); }
.kpi-sub .ks-done { color: var(--green); font-weight: 600; }

/* ---------- 表格 ---------- */
.table-scroll { overflow: auto; max-height: calc(100vh - 180px); border-radius: var(--r); border: 1px solid var(--line); background: #fff; box-shadow: var(--sh-sm); }
.table-scroll table { border-collapse: collapse; }
@media (max-width: 768px) { .table-scroll { max-height: calc(100vh - 140px); } }
.table-scroll::-webkit-scrollbar { height: 9px; width: 9px; }
.table-scroll::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: var(--r-pill); }
.table-scroll::-webkit-scrollbar-track { background: var(--surface-3); }
.table-scroll th { position: sticky; top: 0; z-index: 10; background: #f8fafc; }
table { width: 100%; border-collapse: collapse; font-size: 13px; }
th, td { text-align: left; padding: 11px 9px; border-bottom: 1px solid var(--line); }
.cell-input { width: 86px; padding: 6px 8px; border: 1px solid var(--line-strong); border-radius: var(--r-xs); font-size: 12px; background: #fff; transition: border-color .15s, box-shadow .15s; }
.cell-input[type="date"], .inst-due, .inst-paid { width: 132px; }
.cell-input:disabled { background: var(--surface-2); color: var(--muted); }
.cell-input:focus, .cell-input:not(:disabled):hover { outline: none; border-color: var(--primary); }
.cell-input:focus { box-shadow: var(--ring); }
.cell-select { width: 100%; max-width: 150px; padding: 6px 8px; font-size: 12px; border: 1px solid var(--line-strong); border-radius: var(--r-xs); background: #fff; color: var(--text); cursor: pointer; transition: border-color .15s, box-shadow .15s; }
.cell-select:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.cell-textarea { width: 100%; padding: 8px; border: 1px solid var(--line-strong); border-radius: var(--r-xs); font-size: 13px; resize: vertical; box-sizing: border-box; }
.cell-textarea:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
th { color: var(--muted); font-weight: 600; background: linear-gradient(180deg,#f8fafc,#eef2f7); border-bottom: 2px solid var(--line-strong) !important; }
tbody tr { transition: background .12s; }
tbody tr:hover { background: #f5f8ff; cursor: pointer; }
tbody tr:nth-child(even) { background: #fbfcfe; }
tbody tr:nth-child(even):hover { background: #eef3ff; }
tbody tr.rp-target-row { background: #fef9c3; }
tbody tr.rp-target-row:hover { background: #fde047; }
.num-col, td.num-col { text-align: right; font-variant-numeric: tabular-nums; }
.tag { display: inline-flex; align-items: center; padding: 3px 10px; border-radius: var(--r-pill); font-size: 12px; font-weight: 600; line-height: 1.5; }
.tag.blue { background: var(--blue-soft); color: var(--blue-700); }
.tag.green { background: var(--green-soft); color: var(--green-700); }
.tag.amber { background: var(--amber-soft); color: var(--amber-700); }
.tag.red { background: var(--red-soft); color: var(--red-700); }
.tag.gray { background: var(--surface-3); color: #475569; }
.nowrap { white-space: nowrap; }
.compact-table th, .compact-table td { white-space: nowrap; }
.compact-table td { max-width: 260px; overflow: hidden; text-overflow: ellipsis; }
.compact-table .plaintiff-cell { max-width: 200px; }
.compact-table th { font-size: 12px; padding: 9px 7px; }
.compact-table td { padding: 9px 7px; }
#settle-table th { white-space: nowrap; font-size: 12px; padding: 9px 5px; min-width: 64px; }
#settle-table td { white-space: nowrap; }

/* ---------- 立案记录表格 ---------- */
.filing-table th, .filing-table td { padding: 10px 9px; }
.filing-table tbody tr.clickable { cursor: pointer; transition: background .12s; }
.filing-table tbody tr.clickable:hover { background: #eef3ff; }
.pager { display: flex; align-items: center; gap: 12px; justify-content: flex-end; margin-top: 14px; }
.pager .pill-btn:disabled { opacity: .45; cursor: not-allowed; }

/* ---------- 详情 / 表单 ---------- */
.detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 24px; }
.detail-grid-lg { grid-template-columns: repeat(3, 1fr); gap: 12px 28px; }
.detail-grid .field { padding: 9px 0; border-bottom: 1px dashed var(--line); min-width: 0; }
.detail-grid .field .k { color: var(--muted); font-size: 12px; } .detail-grid .field .v { font-weight: 600; word-break: break-all; overflow-wrap: break-word; }
.form-grid textarea { width: 100%; padding: 10px 11px; border: 1px solid var(--line-strong); border-radius: var(--r-sm); resize: vertical; font-family: inherit; transition: border-color .15s, box-shadow .15s; }
.form-grid textarea:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.drawer { position: fixed; top: 0; right: 0; width: 360px; max-width: 92vw; height: 100vh; background: #fff; box-shadow: -8px 0 30px rgba(15,23,42,.16); z-index: 30; display: flex; flex-direction: column; }
.drawer-head { padding: 16px 18px; border-bottom: 1px solid var(--line); display: flex; justify-content: space-between; align-items: center; font-weight: 700; font-size: 15px; }
.drawer-body { padding: 14px 16px; overflow-y: auto; }
.noti-item { padding: 13px; border: 1px solid var(--line); border-radius: var(--r-sm); margin-bottom: 10px; cursor: pointer; transition: background .15s, border-color .15s; }
.noti-item:hover { background: var(--surface-2); border-color: var(--line-strong); }
.ov-item { cursor: pointer; transition: border-color .15s, box-shadow .15s, transform .1s; }
.ov-item:hover { border-color: var(--primary); box-shadow: 0 2px 10px rgba(37,99,235,.14); transform: translateY(-1px); }
.ov-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.ov-name { font-weight: 600; color: var(--text); }
.ov-sub { font-size: 12px; color: var(--muted); margin-top: 4px; }
.ov-amt { font-size: 12px; color: var(--muted); margin-top: 3px; font-variant-numeric: tabular-nums; }
.tag-todo { display: inline-block; background: #eef2ff; color: #3b5bdb; border: 1px solid #c7d2fe; border-radius: 6px; font-size: 11px; padding: 1px 6px; margin-right: 6px; vertical-align: middle; }

.modal { position: fixed; inset: 0; background: rgba(15,23,42,.55); display: flex; align-items: center; justify-content: center; z-index: 40; padding: 16px; }
.modal-card { background: #fff; width: 100%; max-width: min(1420px, calc(100vw - 24px)); border-radius: var(--r-lg); max-height: 92vh; display: flex; flex-direction: column; box-sizing: border-box; box-shadow: var(--sh-lg); overflow: hidden; }
.modal-head { padding: 17px 20px; border-bottom: 1px solid var(--line); display: flex; justify-content: space-between; align-items: center; font-weight: 700; font-size: 15px; }
.modal-body { padding: 20px; overflow-y: auto; overflow-x: auto; flex: 1; min-height: 0; }
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px 16px; align-items: start; }
.form-grid label { font-size: 12px; color: var(--muted); display: block; margin-bottom: 5px; font-weight: 600; }
.form-grid input, .form-grid select { width: 100%; padding: 10px 11px; border: 1px solid var(--line-strong); border-radius: var(--r-sm); font-size: 13px; background: #fff; transition: border-color .15s, box-shadow .15s; }
.form-grid input:focus, .form-grid select:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.form-full { grid-column: 1 / -1; }
.blocks-2col { grid-column: 1 / -1; display: grid; grid-template-columns: 1fr 1fr; gap: 16px; align-items: start; }
.blocks-2col > .func-assign { margin-top: 0; }
.perm-grid { display: flex; flex-wrap: wrap; gap: 10px 18px; }
.perm-item { font-size: 13px; color: var(--text); display: inline-flex; align-items: center; gap: 6px; margin: 0; }
.perm-item input { width: auto; margin: 0; accent-color: var(--primary); }
.form-actions { display: flex; justify-content: flex-end; align-items: center; gap: 10px; margin-top: 4px; }
.form-actions .btn-primary { min-width: 200px; }

/* ---------- 分期表格行 ---------- */
.inst-row td { padding: 7px 6px; vertical-align: middle; }
.inst-row td > * { vertical-align: middle; }
.inst-row td { white-space: nowrap; }
.inst-row td > .pill-btn, .inst-row td > a.pill-btn { display: inline-flex; align-items: center; margin: 0 2px; }
.inst-row td:has(> .pill-btn), .inst-row td:has(> a.pill-btn) { display: flex; flex-wrap: wrap; align-items: center; gap: 3px; }

.toast { position: fixed; bottom: 26px; left: 50%; transform: translateX(-50%); background: #0f172a; color: #fff; padding: 11px 20px; border-radius: var(--r-pill); z-index: 50; font-size: 13px; box-shadow: var(--sh-md); }

.pill-btn { padding: 7px 13px; border-radius: var(--r-sm); border: 1px solid var(--line-strong); background: #fff; cursor: pointer; font-size: 13px; font-weight: 500; transition: background .15s, border-color .15s, color .15s; }
.pill-btn:hover { background: var(--surface-2); border-color: var(--muted-2); }
.pill-danger { color: var(--red); border-color: #fecaca; }
.pill-danger:hover { background: var(--red-soft); border-color: #fca5a5; }

/* ---------- 法院联想下拉 ---------- */
.autocomplete-list { display:none; position:absolute; top:100%; left:0; right:0; z-index:999; max-height:200px; overflow-y:auto; background:#fff; border:1px solid var(--line-strong); border-radius: var(--r-sm); box-shadow: var(--sh-md); margin-top:3px; }
.autocomplete-item { height:38px; padding:0 12px; cursor:pointer; font-size:13px; border-bottom:1px solid #f0f0f0; display:flex; align-items:center; justify-content:space-between; gap:10px; box-sizing:border-box; }
.autocomplete-item .ac-name { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.autocomplete-item .ac-sub { flex:none; font-size:11px; color:#8a94a6; }
.autocomplete-item.active .ac-sub, .autocomplete-item:hover .ac-sub { color:#5b7cc4; }
.autocomplete-item:last-child { border-bottom:none; }
.autocomplete-item:hover, .autocomplete-item.active { background:#e8f0fe; color:#1a56db; }
.ocr-box { background: var(--surface-2); border: 1px dashed var(--line-strong); border-radius: var(--r); padding: 14px; text-align: center; margin-bottom: 14px; }

/* ---------- 上传区 ---------- */
.upload-zone { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; padding: 20px; border: 2px dashed var(--line-strong); border-radius: var(--r); background: var(--surface-2); }
.upload-zone .muted { width: 100%; }

/* ---------- 进度条 ---------- */
.bar { background: var(--surface-3); border-radius: var(--r-pill); height: 9px; width: 92px; overflow: hidden; display: inline-block; vertical-align: middle; box-shadow: inset 0 1px 2px rgba(15,23,42,.08); }
.bar-fill { background: linear-gradient(90deg,var(--green),#22c55e); height: 100%; }

/* ---------- AI 助手 ---------- */
.ai-messages { flex: 1; display: flex; flex-direction: column; gap: 10px; }
.ai-msg { padding: 11px 13px; border-radius: 12px; font-size: 13px; line-height: 1.65; white-space: pre-wrap; box-shadow: var(--sh-xs); }
.ai-msg.user { background: var(--primary); color: #fff; align-self: flex-end; max-width: 85%; border-bottom-right-radius: 4px; }
.ai-msg.bot { background: var(--surface-2); color: var(--text); align-self: flex-start; max-width: 85%; border-bottom-left-radius: 4px; }
.ai-input-row { display: flex; gap: 8px; padding: 12px; border-top: 1px solid var(--line); }
.ai-input-row textarea { flex: 1; resize: none; height: 48px; padding: 9px 11px; border: 1px solid var(--line-strong); border-radius: var(--r-sm); font-family: inherit; transition: border-color .15s, box-shadow .15s; }
.ai-input-row textarea:focus { outline: none; border-color: var(--primary); box-shadow: var(--ring); }
.ai-input-row .btn-primary { align-self: flex-end; }

/* ---------- 工作台日历 + 待办 ---------- */
.dashboard-calendar { display: grid; grid-template-columns: 1.1fr 1fr; gap: 18px; }
.calendar-panel, .todo-panel { min-height: 260px; }
.calendar-panel { padding: 14px; }
.cal-header { display: flex; gap: 8px; align-items: center; margin-bottom: 10px; }
.cal-header select { padding: 5px 7px; border: 1px solid var(--line-strong); border-radius: var(--r-xs); font-size: 12px; background: #fff; }
.cal-weekdays { display: grid; grid-template-columns: repeat(7, 1fr); text-align: center; color: var(--muted); font-size: 11px; margin-bottom: 4px; }
.cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.cal-cell { min-height: 36px; aspect-ratio: 1.35/1; display: flex; flex-direction: column; align-items: center; justify-content: center; border-radius: var(--r-xs); cursor: pointer; font-size: 12px; border: 1px solid transparent; position: relative; transition: background .12s; }
.cal-cell:hover { background: var(--surface-2); }
.cal-other { color: var(--muted-2); }
.cal-today { background: var(--primary-soft); color: var(--primary); font-weight: 700; }
.cal-selected { border-color: var(--primary); background: #eff6ff; }
.cal-dot { width: 4px; height: 4px; background: var(--amber); border-radius: 50%; margin-top: 2px; }
.cal-dot.due { background: var(--amber); }
.cal-dot.paid { background: #16a34a; }
.cal-dot.overdue { background: var(--red); }
.todo-section { margin-bottom: 14px; }
.todo-section-title { font-size: 12px; color: var(--muted); margin-bottom: 8px; }
.todo-item { padding: 11px 13px; border: 1px solid var(--line); border-radius: var(--r-sm); margin-bottom: 8px; cursor: pointer; background: #fff; transition: background .15s, border-color .15s, transform .1s; }
.todo-item:hover { background: var(--surface-2); border-color: var(--line-strong); transform: translateY(-1px); }
.todo-item.todo-overdue { border-left: 3px solid var(--red); }
.todo-item.todo-due { border-left: 3px solid var(--amber); }
.todo-item.todo-paid { border-left: 3px solid #16a34a; }
.todo-item.todo-info { border-left: 3px solid var(--blue); }
.todo-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 4px; }
.todo-case { font-weight: 600; font-size: 13px; }
.todo-title { font-size: 12px; color: var(--text); line-height: 1.5; }
.todo-amount { font-size: 13px; color: var(--red); font-weight: 700; margin-top: 4px; }
.todo-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--muted); padding: 30px 0; }
.empty-box { font-size: 42px; margin-bottom: 8px; }

@media (max-width: 900px) { .dashboard-calendar { grid-template-columns: 1fr; } }

/* ---------- 工作台 · 当日收款汇总 ---------- */
.today-collect h3 { display: flex; align-items: center; gap: 9px; margin-bottom: 12px; }
.tc-date { font-size: 11.5px; font-weight: 500; color: var(--muted); background: var(--surface-2); border: 1px solid var(--line); padding: 2px 8px; border-radius: var(--r-xs); font-variant-numeric: tabular-nums; }
.tc-month-btn { margin-left: auto; font-size: 11.5px; font-weight: 600; color: var(--primary); background: var(--primary-soft); border: 1px solid transparent; padding: 4px 11px; border-radius: var(--r-pill); cursor: pointer; transition: background .15s, border-color .15s; white-space: nowrap; }
.tc-month-btn:hover { background: var(--primary-soft-2); border-color: #c7d2fe; }
.tc-head { display: flex; align-items: center; justify-content: space-between; padding: 11px 15px; background: linear-gradient(90deg, #fff7ed, #ffffff); border: 1px solid #fed7aa; border-radius: var(--r-sm); margin-bottom: 10px; }
.tc-cnt { font-size: 12.5px; color: #9a3412; font-weight: 600; }
.tc-cnt b { font-size: 15px; }
.tc-total { font-size: 20px; font-weight: 800; color: var(--red); font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
.tc-cols { display: grid; grid-template-columns: 1fr 1.25fr 96px; gap: 10px; padding: 0 12px 6px; font-size: 11px; color: #94a3b8; font-weight: 600; letter-spacing: .03em; }
.tc-cols span:last-child { text-align: right; }
.tc-list { max-height: 330px; overflow-y: auto; padding-right: 3px; }
.tc-item { display: grid; grid-template-columns: 1fr 1.25fr 96px; gap: 10px; align-items: center; padding: 10px 13px; border: 1px solid var(--line); border-radius: var(--r-sm); margin-bottom: 7px; cursor: pointer; transition: background .15s, border-color .15s, transform .15s; background: #fff; }
.tc-item:hover { background: #fff7ed; border-color: #fdba74; transform: translateX(2px); }
.tc-def { font-weight: 600; color: #0f172a; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tc-pla { color: #475569; font-size: 12.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tc-amt { text-align: right; font-weight: 700; color: var(--red); font-size: 13.5px; font-variant-numeric: tabular-nums; }
.tc-empty { padding: 20px; text-align: center; color: #94a3b8; font-size: 12.5px; }

/* ---------- 工作台左右分栏 ---------- */
.dash-duo { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; align-items: start; margin-bottom: 18px; }
.dash-duo > .panel { margin-bottom: 0; }
.todo-panel h3 { display: flex; align-items: center; gap: 9px; margin-bottom: 12px; }
.tc-date-today { color: var(--primary); background: var(--primary-soft); border-color: transparent; font-weight: 600; }
#dash-todo { max-height: 392px; overflow-y: auto; padding-right: 3px; }
.todo-section-title { display: flex; align-items: center; justify-content: space-between; gap: 8px; position: sticky; top: 0; background: var(--bg); z-index: 2; padding: 6px 0; margin-bottom: 6px; }
.todo-title-right { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.todo-cnt { font-size: 11.5px; font-weight: 600; color: var(--amber-700); background: var(--amber-soft); border: 1px solid #fde68a; padding: 1px 7px; border-radius: var(--r-pill); font-variant-numeric: tabular-nums; }
.todo-cnt.red { color: var(--red-700); background: var(--red-soft); border-color: #fecaca; }
.todo-cnt.green { color: var(--green-700); background: var(--green-soft); border-color: #bbf7d0; }
.todo-empty-sm { padding: 14px 0; }
.todo-empty-sm .empty-box { font-size: 26px; margin-bottom: 4px; }
.todo-empty-sm > div:last-child { font-size: 12px; }
.todo-next { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 0; }
.todo-next-lbl { font-size: 11px; color: var(--muted); }
.todo-next-chip { font-size: 11.5px; color: var(--primary); background: var(--primary-soft); border-radius: var(--r-xs); padding: 3px 9px; cursor: pointer; font-variant-numeric: tabular-nums; transition: background .15s; }
.todo-next-chip:hover { background: var(--primary-soft-2); }
.todo-next-chip.active { background: var(--primary); color: #fff; font-weight: 600; }
.todo-next-chip.today { background: var(--green-soft); color: var(--green-700); font-weight: 600; }
.todo-name { font-weight: 700; }

/* ---------- 弹窗关闭交互 ---------- */
@keyframes modalShake { 0%,100% { transform: translateX(0); } 20% { transform: translateX(-7px); } 40% { transform: translateX(6px); } 60% { transform: translateX(-4px); } 80% { transform: translateX(2px); } }
.modal-shake { animation: modalShake .32s ease; }
@keyframes hintPulse { 0%,100% { box-shadow: 0 0 0 0 rgba(220,38,38,0); } 35% { box-shadow: 0 0 0 6px rgba(220,38,38,.22); } }
.modal-x { background: transparent; border: 1px solid var(--line); color: var(--muted); width: 30px; height: 30px; line-height: 1; border-radius: var(--r-sm); cursor: pointer; font-size: 15px; display: inline-flex; align-items: center; justify-content: center; flex: none; transition: background .15s, color .15s, border-color .15s; }
.modal-x:hover { background: var(--red-soft); border-color: #fca5a5; color: var(--red); }
.modal-x.hint-pulse { animation: hintPulse .6s ease; background: var(--red-soft); border-color: #fca5a5; color: var(--red); }

/* ---------- 还款计划拖拽排序 ---------- */
.drag-handle { cursor: grab; user-select: none; font-size: 13px; line-height: 1; color: #38bdf8; margin-right: 5px; vertical-align: middle; transition: color .15s, transform .15s; }
.drag-handle:hover { color: #0ea5e9; transform: scale(1.15); }
.drag-handle:active { cursor: grabbing; }
tr.inst-row.dragging { opacity: .45; background: #e0f2fe; }
tr.inst-row.flash { animation: flashRow .9s ease; }
@keyframes flashRow { 0% { background: #fef9c3; } 100% { background: transparent; } }
tr.drop-indicator td { padding: 0 !important; border: none !important; }
tr.drop-indicator .drop-line { height: 4px; background: linear-gradient(90deg, #0ea5e9, #2563eb); border-radius: 3px; position: relative; margin: 2px 0; box-shadow: 0 0 8px rgba(37,99,235,.55); }
tr.drop-indicator .drop-badge { position: absolute; right: 8px; top: 50%; transform: translateY(-50%); background: #2563eb; color: #fff; font-size: 12px; font-weight: 700; padding: 2px 10px; border-radius: var(--r-pill); white-space: nowrap; box-shadow: 0 2px 6px rgba(37,99,235,.4); }
.drag-tooltip { position: fixed; z-index: 9999; background: #2563eb; color: #fff; font-size: 13px; font-weight: 700; padding: 4px 10px; border-radius: var(--r-sm); pointer-events: none; box-shadow: var(--sh-md); white-space: nowrap; }

/* ---------- 空状态 ---------- */
.empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 52px 20px; color: var(--muted); text-align: center; gap: 10px; }
.empty-state .es-icon { font-size: 42px; opacity: .45; }
.empty-state .es-title { font-size: 14px; font-weight: 600; color: var(--text-2); }
.empty-state .es-text { font-size: 12.5px; max-width: 360px; line-height: 1.6; }
.empty-state .es-action { margin-top: 6px; }

/* ---------- 骨架屏 ---------- */
.skeleton { background: linear-gradient(90deg,#eef2f7 25%,#e2e8f0 37%,#eef2f7 63%); background-size: 400% 100%; animation: sk 1.4s ease infinite; border-radius: var(--r-xs); }
@keyframes sk { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } }

/* ---------- 全局滚动条 ---------- */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-thumb { background: #cdd5e0; border-radius: var(--r-pill); border: 2px solid var(--bg); }
::-webkit-scrollbar-thumb:hover { background: #b4bfce; }
::-webkit-scrollbar-track { background: transparent; }

/* ---------- 移动端 ---------- */
@media (max-width: 760px) {
  .sidebar { position: fixed; bottom: 0; top: auto; left: 0; right: 0; width: 100%; height: auto; flex-direction: row; padding: 6px; z-index: 20; }
  .side-logo, .side-user { display: none; }
  .sidebar nav { flex-direction: row; overflow-x: auto; margin-top: 0; }
  .nav-item { white-space: nowrap; padding: 9px 11px; }
  .nav-item span:last-child { display: none; }
  .nav-item.active::before { display: none; }
  .main { padding-bottom: 60px; }
  .topbar { padding: 0 12px; }
  #global-search { width: 140px; }
  .detail-grid, .form-grid, .blocks-2col { grid-template-columns: 1fr; }
  .detail-grid-lg { grid-template-columns: 1fr 1fr; }
  .drawer { width: 100%; }
  .view { padding: 14px; }
  table { font-size: 12px; }
}
