/* ============================================================
   星衡财务管理系统 - 全局样式（深空蓝 · 全站视觉体系）
   设计令牌与登录页一致：深蓝品牌渐变 + 白卡片 + 圆角 + 柔影
   ============================================================ */
:root {
  --navy-900: #0d1d3d; --navy-700: #14325f; --navy-500: #1b4b8f;
  --blue-600: #2563eb; --blue-500: #3b82f6; --blue-100: #e9f1ff;
  --ink: #1c2a45; --ink-2: #4c5872; --muted: #8a94a6; --muted-2: #a9b3c5;
  --line: #e6ebf3; --line-2: #f0f3f8; --bg: #f3f5fa;
  --radius: 12px; --radius-sm: 9px;
  --shadow-card: 0 1px 2px rgba(16,30,60,.04), 0 4px 16px rgba(16,30,60,.05);
  --shadow-pop: 0 20px 60px rgba(10,25,55,.16);
  --grad-brand: linear-gradient(160deg, #0d1d3d 0%, #143160 55%, #1b4b8f 100%);
  --grad-btn: linear-gradient(180deg, var(--blue-500), var(--blue-600));
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; }
/* 品牌图标（2026-10-13 起）：顶栏与登录页用新 logo（外圆内方＋节点流线＋上扬箭羽）。
   全部走 <img>，不改任何文字与结构 —— 验证脚本按文字查 DOM，换字会全红。 */
.mz-brand-mark { width: 22px; height: 22px; display: block; flex: 0 0 22px; align-self: center; }
.mz-login-mark { display: inline-flex; align-items: center; justify-content: center; width: 46px; height: 46px;
  border-radius: 12px; background: #fff; box-shadow: 0 4px 16px rgba(6,20,50,.28); align-self: center; }
.mz-login-mark img { width: 34px; height: 34px; display: block; }
/* 默认字号：2026-10-12 起整体上移一级（用户要求"默认字体大一些"）。
   ⚠ 表格（.mz-table / .bs-dual / .mz-vou-lines）的字号与行高**保持原样不动** —— 那是核对过、要贴打印口径的固定值。 */
body { font-family: -apple-system, "PingFang SC", "Microsoft YaHei", "Segoe UI", SimSun, sans-serif; font-size: 16px; color: var(--ink); background: var(--bg); }
button { font-family: inherit; }
input, select, textarea { font-family: inherit; font-size: 13.5px; color: var(--ink); }
input:focus, select:focus, textarea:focus { outline: none; border-color: var(--blue-600); }
.mz-btn { transition: background .15s, border-color .15s, transform .15s, box-shadow .15s; }
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-thumb { background: #c6d2e4; border-radius: 8px; }
::-webkit-scrollbar-thumb:hover { background: #a9b8d2; }
::-webkit-scrollbar-track { background: transparent; }

/* ---------- 登录（浅色极光 · 玻璃白卡） ---------- */
.mz-login { display: none; align-items: center; justify-content: center; min-height: 100vh; padding: 28px; background: #f4f7fd; }
/* 卡片背后的呼吸光晕：只在登录页出现，缓慢缩放与位移，给浅色背景一点律动 */
.mz-login::before { content: ''; position: fixed; inset: -15%; pointer-events: none; z-index: 0; filter: blur(46px); opacity: .5;
  background:
    radial-gradient(closest-side at 24% 30%, rgba(147,197,253,.55), transparent 70%),
    radial-gradient(closest-side at 74% 26%, rgba(196,181,253,.50), transparent 70%),
    radial-gradient(closest-side at 30% 78%, rgba(165,243,252,.45), transparent 70%),
    radial-gradient(closest-side at 78% 76%, rgba(254,205,211,.50), transparent 70%);
  animation: mzBlobFlow 22s ease-in-out infinite alternate; }
@keyframes mzBlobFlow {
  0%   { transform: translate3d(-2%, -1%, 0) scale(1); }
  50%  { transform: translate3d(2%, 2%, 0) scale(1.06); }
  100% { transform: translate3d(-1%, 3%, 0) scale(1.02); }
}
.mz-login::after { content: ''; position: fixed; left: 50%; top: 50%; width: min(820px, 92vw); height: min(820px, 92vw);
  transform: translate(-50%, -50%); border-radius: 50%; pointer-events: none; z-index: 0; filter: blur(34px);
  background: radial-gradient(circle at 40% 40%, rgba(99,102,241,.16), transparent 62%),
              radial-gradient(circle at 64% 62%, rgba(56,189,248,.14), transparent 60%),
              radial-gradient(circle at 50% 80%, rgba(168,85,247,.10), transparent 62%);
  animation: mzLoginGlow 20s ease-in-out infinite alternate; }
@keyframes mzLoginGlow {
  from { transform: translate(-52%, -50%) scale(1); opacity: .75; }
  to   { transform: translate(-48%, -52%) scale(1.12); opacity: 1; }
}
.mz-login-card { position: relative; z-index: 1; width: 480px; max-width: 100%; min-width: 0; background: rgba(255,255,255,.94);
  backdrop-filter: blur(8px); border: 1px solid rgba(255,255,255,.9); border-radius: 26px; padding: 40px 36px 22px;
  box-shadow: 0 32px 80px rgba(30,64,175,.14), 0 4px 16px rgba(15,23,42,.06), inset 0 1px 0 #fff;
  overflow: hidden; animation: mzLoginIn .45s cubic-bezier(.2,.8,.2,1); }
.mz-login-card::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: 4px;
  background: linear-gradient(90deg, #2563eb, #7c3aed 45%, #06b6d4);
  animation: mzTopSheen 12s ease-in-out infinite alternate; }
@keyframes mzTopSheen { from { filter: hue-rotate(0deg) brightness(1); } to { filter: hue-rotate(26deg) brightness(1.08); } }
@media (prefers-reduced-motion: reduce) {
  body[data-bg="stars-light"], body[data-bg="stars-light"]::before, body[data-bg="stars-light"] .mz-login, .mz-login-card::before, .mz-login::before, .mz-login::after { animation: none; }
}
@keyframes mzLoginIn { from { opacity: 0; transform: translateY(16px) scale(.985); } to { opacity: 1; transform: none; } }
.mz-login-brand { display: flex; align-items: center; gap: 10px; margin-bottom: 26px; }
.mz-login-mark { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; flex: 0 0 44px;
  border-radius: 14px; background: #fff; box-shadow: 0 0 0 1px #e6ecf7, 0 6px 16px rgba(37,99,235,.12); }
.mz-login-mark img { width: 32px; height: 32px; display: block; }
.mz-login-word { font-size: 19px; font-weight: 750; color: #0f172a; letter-spacing: .5px; }
.mz-login-en { font-size: 11px; letter-spacing: 1.6px; color: #8d99ad; text-transform: uppercase; }
.mz-login-hello { font-size: 26px; font-weight: 700; color: #0f172a; margin: 0 0 8px; letter-spacing: .2px; }
.mz-login-sub { font-size: 13.5px; color: #64748b; margin-bottom: 24px; }
.mz-login-field { margin-bottom: 15px; }
.mz-login-field label { display: block; font-size: 12.5px; color: #475569; margin-bottom: 7px; font-weight: 600; }
.mz-login-input { position: relative; }
.mz-login-ico { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); color: #94a3b8; line-height: 0; pointer-events: none; }
.mz-login-ico svg { width: 18px; height: 18px; display: block; }
.mz-login-input.has-eye input { padding-right: 46px; }
.mz-login-eye { position: absolute; right: 8px; top: 50%; transform: translateY(-50%); width: 34px; height: 34px;
  display: inline-flex; align-items: center; justify-content: center; border: 0; border-radius: 9px; background: transparent;
  color: #94a3b8; cursor: pointer; transition: color .15s, background .15s; }
.mz-login-eye:hover { color: #2563eb; background: #eef4ff; }
.mz-login-eye:focus-visible { outline: 2px solid rgba(37,99,235,.45); outline-offset: 1px; }
.mz-login-eye svg { width: 19px; height: 19px; display: block; }
.mz-login-eye .eye-off { display: none; }
.mz-login-eye.on .eye-open { display: none; }
.mz-login-eye.on .eye-off { display: block; }
.mz-login-field .mz-login-input input, .mz-login-captcha input { width: 100%; height: 48px; padding: 0 14px 0 42px;
  border: 1px solid #e2e8f2; border-radius: 12px; font-size: 14px; background: #f8fafd; color: #0f172a; transition: border-color .16s, box-shadow .16s, background .16s; }
.mz-login-captcha input { padding-left: 14px; letter-spacing: 3px; }
.mz-login-field .mz-login-input input::placeholder, .mz-login-captcha input::placeholder { color: #aab4c3; }
.mz-login-field .mz-login-input input:focus, .mz-login-captcha input:focus { outline: none; border-color: #3b82f6; background: #fff;
  box-shadow: 0 0 0 4px rgba(59,130,246,.14); }
.mz-login-field .mz-login-input:focus-within .mz-login-ico { color: #2563eb; }
.mz-login-captcha { display: flex; align-items: center; gap: 8px; margin-bottom: 15px; }
.mz-login-captcha input { flex: 1; min-width: 0; }
.mz-login-captcha #login-cap-img { display: inline-flex; align-items: center; justify-content: center; height: 48px; width: 112px; flex: 0 0 112px;
  border: 1px solid #e2e8f2; border-radius: 12px; overflow: hidden; background: #fff; cursor: pointer; }
.mz-login-captcha #login-cap-img svg { height: 100%; width: 100%; display: block; }
.mz-login-cap-refresh { border: none; background: none; color: #2563eb; font-size: 12px; padding: 0 2px; cursor: pointer; white-space: nowrap; }
.mz-login-cap-refresh:hover { text-decoration: underline; }
.mz-btn-login { width: 100%; height: 48px; margin-top: 8px; padding: 0; border: none; border-radius: 12px;
  background: linear-gradient(135deg, #1d4ed8, #2563eb 52%, #0284c7); color: #fff; font-size: 15px; font-weight: 650; letter-spacing: 3px;
  cursor: pointer; box-shadow: 0 12px 24px rgba(37,99,235,.30); transition: transform .16s, box-shadow .16s, filter .16s; }
.mz-btn-login:hover { transform: translateY(-1px); box-shadow: 0 16px 30px rgba(37,99,235,.34); filter: brightness(1.02); }
.mz-btn-login:active { transform: translateY(0); }
.mz-btn-login:disabled { opacity: .65; box-shadow: none; cursor: wait; transform: none; }
.mz-login-tip { margin-top: 14px; font-size: 12.5px; color: #94a3b8; text-align: center; }
.mz-login-links { margin-top: 22px; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 6px; font-size: 11px; }
.mz-login-links a { color: #5b6b84; text-decoration: none; padding: 4px 8px; border-radius: 999px; background: #f4f7fc; border: 1px solid #e8eef8; transition: .15s; white-space: nowrap; }
.mz-login-links a:hover { color: #1d4ed8; background: #eef4ff; border-color: #d7e3fb; }
.mz-login-deliv { margin-top: 22px; text-align: center; font-size: 11px; color: #98a2b3; letter-spacing: .2px; }
.mz-login-foot { margin-top: 6px; text-align: center; font-size: 11px; line-height: 1.7; color: #b3bccb; }
/* 交付水印徽标（顶栏也用） */
.mz-deliv { font-size: 11.5px; padding: 3px 9px; border-radius: 999px; background: #f2f4f7; color: #5b6472; border: 1px solid #e6e9ef; white-space: nowrap; cursor: help; }
.mz-deliv.expiring { background: rgba(229,72,77,.92); border-color: rgba(229,72,77,.92); color: #fff; }
@media (max-width: 560px) {
  .mz-login { padding: 0 14px; }
  .mz-login-card { width: 100%; padding: 32px 22px 18px; border-radius: 20px; }
  .mz-login-hello { font-size: 23px; }
  .mz-login-links { gap: 6px; }
  .mz-login-captcha #login-cap-img { width: 96px; flex-basis: 96px; }
}

/* ---------- 布局（顶栏 = 登录页品牌渐变） ---------- */
#mz-app { display: flex; flex-direction: column; height: 100vh; }
.mz-topbar { display: flex; align-items: center; gap: 18px; background: var(--md-surface); color: var(--md-on-surface); padding: 0 20px; height: 58px; flex-shrink: 0; flex-wrap: nowrap; min-width: 0;
  box-shadow: none; position: relative; z-index: 20; }
.mz-topbar::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: rgba(255,255,255,.08); }
.mz-brand { display: flex; align-items: baseline; gap: 9px; white-space: nowrap; min-width: 0; overflow: hidden; }
/* 顶栏品牌字「星衡」：渐变字（background + background-clip:text）。
   ⚠ 2026-10-13 修：M3 改版后顶栏在**浅色主题下是白色面**，而这里固定用「白→浅蓝」渐变（那是给深色顶栏设计的）→ 浅色下白字白底、几乎看不见。
   现在按主题分两套；默认值给浅色那套（主题属性是 JS 启动后才写的，首屏也不能出现"看不见"的一帧）。 */
.mz-logo { font-size: 23px; font-weight: 800; letter-spacing: 2px; color: transparent; -webkit-text-fill-color: transparent;
  background: linear-gradient(92deg, var(--navy-900), var(--blue-600)); -webkit-background-clip: text; background-clip: text; }
.mz-brand-sub { font-size: 13.5px; color: var(--md-on-surface-variant); letter-spacing: 1.5px; }
.mz-top-ctl { display: flex; align-items: center; gap: 8px; margin-left: 14px; font-size: 12.5px; color: var(--md-on-surface-variant); min-width: 0; flex-shrink: 1; }
.mz-top-ctl select, .mz-top-ctl input { padding: 4px 10px; height: 28px; border-radius: 8px; border: 1px solid var(--md-outline); background: var(--md-surface); color: var(--md-on-surface); transition: .15s; box-sizing: border-box; }
.mz-top-ctl select:hover, .mz-top-ctl input:hover { background: var(--md-hover-neutral); }
.mz-top-ctl select option { color: #1c2a45; }
#mz-set { max-width: 170px; min-width: 96px; }
#mz-period { width: 134px; flex: 0 0 auto; }
.mz-user { margin-left: auto; display: flex; align-items: center; gap: 10px; font-size: 13.5px; color: var(--md-on-surface); min-width: 0; flex-shrink: 1; }
#mz-user-name { max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mz-bell { position: relative; display: inline-flex; font-size: 17px; cursor: pointer; padding: 5px 7px; border-radius: 9px; transition: .15s; }
.mz-bell:hover { background: var(--md-hover-neutral); }
.mz-bell-dot { position: absolute; top: 0; right: 0; min-width: 16px; height: 16px; padding: 0 4px; border-radius: 999px; background: var(--md-error); color: #fff; font-size: 10px; font-weight: 700;
  display: flex; align-items: center; justify-content: center; box-shadow: 0 0 0 2px var(--navy-900); }
/* 顶栏上的按钮 → 玻璃态 */
.mz-topbar .mz-btn { background: transparent; border-color: transparent; color: var(--md-on-surface-variant); box-shadow: none; flex-shrink: 0; }
.mz-topbar .mz-btn:hover { background: var(--md-hover-neutral); transform: none; }
/* 顶栏「新建账套」按钮强调 */
.mz-topbar #mz-addset { background: var(--md-surface-2); border-color: var(--md-outline); color: var(--md-on-surface); font-weight: 700; }
.mz-topbar #mz-addset:hover { background: var(--md-surface-3); border-color: var(--md-outline); }
/* 顶栏响应式：窄窗口按优先级隐藏次要元素，避免文字溢出深色顶栏 */
@media (max-width: 1500px) { .mz-top-link { display: none !important; } }
@media (max-width: 1280px) { .mz-top-ctl label { display: none; } }
@media (max-width: 1080px) { .mz-brand-sub { display: none; } }
@media (max-width: 900px) {
  #mz-user-name, #mz-pwd { display: none; }
}
@media (max-width: 760px) {
  .mz-topbar { gap: 10px; padding: 0 10px; }
  .mz-top-ctl { margin-left: 6px; gap: 6px; }
  #mz-period { width: 118px; }
  #mz-addset { display: none; }
  #mz-prefs { padding: 4px 8px; }
}

.mz-body { display: flex; flex: 1; overflow: hidden; }
.mz-sidebar { width: 188px; background: var(--md-surface); border-right: 1px solid var(--line); padding: 10px 10px 20px; overflow-y: auto; flex-shrink: 0; }
.mz-nav-group-title { padding: 13px 12px 5px; font-size: 12.5px; font-weight: 600; color: var(--md-on-surface-variant); letter-spacing: 1.5px; }
.mz-nav-group-title:first-child { padding-top: 4px; }
.mz-nav-between { height: 1px; background: var(--md-outline-variant); margin: 10px 8px; }
.mz-nav-item { display: flex; align-items: center; gap: 10px; padding: 9px 12px; margin-bottom: 2px; color: var(--md-on-surface-variant); text-decoration: none; font-size: 15.5px; border-radius: 0 var(--md-r-full) var(--md-r-full) 0; transition: .15s; }
.mz-nav-item:hover { background: var(--md-hover-neutral); color: var(--md-on-surface); }
.mz-nav-item.active { background: var(--md-primary-container); color: var(--md-on-primary-container); font-weight: 700; box-shadow: none; }
.mz-nav-ico { width: 20px; text-align: center; font-size: 14px; }
.mz-main { flex: 1; min-width: 0; overflow-y: auto; padding: 18px 22px 70px; background: var(--bg); }
.mz-loading, .mz-page-empty { color: var(--muted); text-align: center; padding: 70px 0; font-size: 14px; }

/* ---------- 页面 ---------- */
.mz-page { animation: mzPageIn .25s ease; }
@keyframes mzPageIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.mz-page-head { display: flex; align-items: baseline; gap: 12px; margin-bottom: 16px; padding-left: 12px; position: relative; }
.mz-page-head::before { content: ''; position: absolute; left: 0; top: 5px; bottom: 5px; width: 4px; border-radius: 4px; background: linear-gradient(180deg, var(--blue-500), var(--blue-600)); }
.mz-page-head h2 { font-size: 22px; font-weight: 800; color: var(--md-on-surface); letter-spacing: .5px; }
.mz-page-sub { color: var(--md-on-surface-variant); font-size: 13.5px; margin-left: 2px; }
/* 页面标题右侧的按钮位（「导出本页」等页面级动作） */
.mz-page-actions { margin-left: auto; display: flex; gap: 8px; align-items: center; align-self: center; }
.mz-filter-bar { display: flex; align-items: center; gap: 8px; background: transparent; border: 1px solid var(--line); border-radius: 0; padding: 11px 14px; margin-bottom: 14px; flex-wrap: wrap; box-shadow: none; min-height: 56px; }
.mz-filter-bar label { font-size: 13.5px; color: var(--md-on-surface-variant); font-weight: 500; line-height: 32px; white-space: nowrap; }
.mz-filter-bar input, .mz-filter-bar select { padding: 6px 10px; border: 1px solid var(--line); border-radius: 8px; height: 32px; background: var(--md-surface); transition: .15s; vertical-align: middle; }
.mz-filter-bar input:focus, .mz-filter-bar select:focus { border-color: var(--md-primary); box-shadow: 0 0 0 1px var(--md-primary); background: #fff; }
.mz-filter-bar input[type=checkbox] { width: 15px; height: 15px; min-width: 15px; padding: 0; margin: 0 6px 0 2px; cursor: pointer; accent-color: var(--blue-600); box-shadow: none; align-self: center; }
.mz-filter-bar input[type=checkbox]:focus { box-shadow: 0 0 0 3px rgba(37,99,235,.12); }
.mz-filter-bar .mz-btn { margin-left: 4px; height: 32px; display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; }
.mz-filter-bar > span { line-height: 1.5; display: inline-flex; align-items: center; }
.mz-filter-bar span.mz-login-sub { display: block; }

/* ---------- 按钮 ---------- */
.mz-btn { padding: 7px 15px; border: 1px solid #d8e0ec; background: transparent; border-radius: var(--md-r-full); cursor: pointer; font-size: 14.5px; color: var(--md-primary); box-shadow: none; }
/* 刷新按钮 ↻：点击后转圈动画（加载完成自动恢复，并统一给一句 toast —— 见 core.js 的 MZ.bindRun） */
.mz-btn.t-run { position: relative; min-width: 34px; }
/* 统一：**所有**「刷新」类按钮共用同一套转圈，不再只有账簿/报表的 .t-run 有效
   （凭证列表、固定资产各页、基础资料期初、进销存、期末处理的刷新按钮一并走这里 · 2026-10-13） */
.mz-btn.spin { position: relative; color: transparent !important; pointer-events: none; }
.mz-btn.spin::before {
  content: ''; position: absolute; top: 50%; left: 50%;
  width: 14px; height: 14px; margin: -7px 0 0 -7px;
  border: 2px solid rgba(51,71,95,.28); border-top-color: #33475f;
  border-radius: 50%; animation: mzSpin .7s linear infinite;
}
/* 蓝底（主色）刷新按钮用白色转圈；暗色主题下白底按钮用浅色转圈 */
.mz-btn-primary.spin::before { border-color: rgba(255,255,255,.35); border-top-color: #fff; }
@keyframes mzSpin { to { transform: rotate(360deg); } }
/* 报表/账簿刷新后内容"闪一下" */
.mz-flash { animation: mzFlash .45s ease; }
@keyframes mzFlash { 0% { opacity: .25; } 100% { opacity: 1; } }
.mz-btn:hover { background: var(--md-hover); border-color: var(--md-primary); transform: translateY(-1px); }
.mz-btn:disabled { opacity: .45; cursor: not-allowed; transform: none; }
.mz-btn-primary { background: var(--md-primary); border-color: transparent; color: var(--md-on-primary); box-shadow: var(--md-e1); }
.mz-btn-primary:hover { background: var(--md-primary-hover); border-color: transparent; filter: brightness(1.05); box-shadow: var(--md-e2); color: #fff; }
.mz-btn-danger { background: var(--md-error); border-color: transparent; color: #fff; box-shadow: 0 4px 12px rgba(229,72,77,.22); }
.mz-btn-danger:hover { filter: brightness(1.04); color: #fff; }
.mz-btn-warn { background: var(--md-warning-container); border-color: transparent; color: var(--md-on-warning-container); box-shadow: 0 4px 12px rgba(245,158,11,.22); }
.mz-btn-warn:hover { filter: brightness(1.04); color: #fff; }
.mz-btn-sm { padding: 4px 10px; font-size: 13.5px; border-radius: 7px; }

/* ---------- 表格与卡片 ---------- */
/* 表格外壳：**只圆上面两角**。原来是四角都圆 + overflow:hidden，表格长得比外壳高时
   下沿两角会被圆角裁掉一块（看起来像把表格的角"切"了）。下沿改成直角就不切了，
   "圆角卡片"的观感基本不变（2026-10-12 用户确认按此改）。 */
.mz-table-wrap { background: #fff; border: 1px solid var(--line); border-radius: var(--radius) var(--radius) 0 0; overflow: hidden; box-shadow: var(--shadow-card); }
.mz-table-toolbar { display: flex; align-items: center; gap: 8px; padding: 12px 16px; border-bottom: 1px solid var(--line-2); flex-wrap: wrap; background: var(--md-surface-1); }
.mz-table-toolbar .mz-btn { margin: 0; }
.mz-table-scroll { overflow-x: auto; }
/* 表格网格线清晰化（与朋友版资产负债表完全一致：深色网格、表头灰蓝底） */
.mz-table { width: 100%; border-collapse: collapse; font-size: 13px; border: 1px solid #aebccf; }
.mz-table th { background: #eef2f7; color: #33475f; font-weight: 600; padding: 8px 11px; text-align: left; border: 1px solid #aebccf; white-space: nowrap; font-size: 12.5px; letter-spacing: .2px; }
.mz-table td { padding: 7px 11px; border: 1px solid #c2cfdf; vertical-align: top; }
/* 报表表格瘦身（列距紧凑、宽度随内容自适应、居中，与平台一致） */
.mz-report .mz-table-scroll { padding-right: 6px; }
.mz-report .mz-table-scroll .mz-table { width: auto; min-width: 48%; max-width: 100%; margin: 0 auto; }
.mz-report .mz-table-scroll .mz-table th { padding: 7px 9px; }
.mz-report .mz-table-scroll .mz-table td { padding: 6px 9px; }
.mz-report .mz-table-scroll .mz-table td:first-child, .mz-report .mz-table-scroll .mz-table th:first-child { max-width: 340px; }
/* 打印/导出样式：纸张上同样保留清晰网格 */
@media print {
  .mz-table th, .mz-table td, .mz-table { border: 1px solid #6a7789 !important; }
}
.mz-table tbody tr:hover { background: #f5f9ff; }
.mz-table .chk { width: 34px; text-align: center; }
.mz-table .ops { white-space: nowrap; }
.mz-empty { text-align: center; color: var(--md-on-surface-variant); padding: 32px 0; }
.mz-link { color: var(--md-primary); cursor: pointer; text-decoration: none; }
.mz-link:hover { text-decoration: underline; }
.mz-table-foot { padding: 9px 16px; border-top: 1px solid var(--line-2); background: #fbfcfe; }
.mz-pagination { display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--md-on-surface-variant); }
.mz-pagination button { padding: 3px 11px; border-radius: 7px; }

/* ---------- 报表工具条（期间徽章 / 开关 / 打印导出，对标主流云财税平台） ---------- */
.mz-report-bar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 8px 10px; border-radius: 0; background: transparent; border: 1px solid #dbe7f8; margin-bottom: 10px; }
.mz-period-chip { background: var(--md-primary-container); color: var(--md-on-primary-container); font-weight: 700; font-size: 13px; padding: 5px 14px; border-radius: 16px; cursor: pointer; }
.mz-bar-right { margin-left: auto; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.mz-mode-group { display: inline-flex; gap: 2px; align-items: center; background: var(--md-surface); border: 1px solid var(--md-outline-variant); border-radius: 16px; padding: 3px 8px; }
.mz-mode-group .mz-radio { margin: 0; }

/* ---------- 期间选择器（左上角日期：◀ 年月 ▶ 标题条 + 年份列 / 月份列） ---------- */
.mz-report-bar { position: relative; }
.mz-period-chip.is-picker { background: var(--blue-600); }      /* 选择器徽章：主题蓝 */
.mz-period-chip.is-picker:hover { background: #1d4ed8; }
/* 账簿的期间选择：与报表的期间徽章同一套外观（胶囊 + ▾），底层仍是 month-picker 面板 */
.mz-filter-bar.led-period > label { display: none; }
.mz-filter-bar.led-period .mz-month-field { height: 30px; min-width: 132px; }
.mz-filter-bar.led-period .mz-month-field > .mz-month-native { height: 30px; }
.mz-filter-bar.led-period .mz-month-field > .mz-month-trigger {
  background: var(--md-primary-container); color: var(--md-on-primary-container);
  border: 0; border-radius: 16px; font-weight: 700; font-size: 13px;
  padding: 0 14px; justify-content: center; gap: 6px; }
.mz-filter-bar.led-period .mz-month-field > .mz-month-trigger:hover { background: #dbe7ff; border: 0; }
.mz-filter-bar.led-period .mz-month-icon { display: none; }
.mz-filter-bar.led-period .mz-month-field > .mz-month-trigger::after { content: '▾'; font-size: 11px; opacity: .75; }
.mz-pp-pop { position: fixed; left: 10px; top: 60px; z-index: 3000; width: 300px; background: var(--md-surface-2); border: 1px solid #dbe3ec; border-radius: var(--md-r-lg); padding: 10px 12px; box-shadow: var(--md-e3); display: none; }
.mz-pp-head { display: flex; align-items: center; background: var(--blue-600); color: #fff; border-radius: 8px; padding: 2px 4px; }
.mz-pp-arrow { background: transparent; border: 0; color: #fff; font-size: 15px; cursor: pointer; padding: 6px 12px; }
.mz-pp-arrow:hover { opacity: .75; }
.mz-pp-title { flex: 1; text-align: center; font-weight: 700; font-size: 15px; }
.mz-pp-cols { display: flex; gap: 10px; align-items: stretch; margin-top: 10px; min-height: 300px; }
.mz-pp-col { flex: 1; display: flex; flex-direction: column; gap: 2px; background: var(--md-surface); border: 1px solid #e3e8ee; border-radius: var(--md-r-md); padding: 6px; max-height: 340px; overflow: auto; }
.mz-pp-item { padding: 9px 10px; border-radius: var(--md-r-full); cursor: pointer; font-size: 13px; color: var(--md-on-surface-variant); text-align: center; }
.mz-pp-item:hover { background: var(--md-hover); color: var(--md-primary); }
.mz-pp-item.on { background: var(--md-primary); color: var(--md-on-primary); font-weight: 700; }

/* ---------- 明细账工具条与打印 ---------- */
.d-print-slot .mz-menu-btn { min-width: 118px; justify-content: center; }
.d-qty { margin-right: 6px; }
.led-cover { text-align: center; padding: 120px 0 0; }
.led-cover h1 { font-size: 30px; letter-spacing: 8px; margin: 0 0 60px; }
.led-cover-line { font-size: 15px; line-height: 2.6; }

/* ---------- 账簿「选择范围」徽章 + 悬停筛选面板 ---------- */
.led-scope { position: relative; display: inline-flex; align-items: center; }
.led-chip { background: var(--md-primary); display: inline-flex; align-items: center; gap: 6px; }
.led-ico { display: inline-flex; align-items: center; }
.led-pop { position: fixed; left: 0; top: 0; z-index: 3000; width: 470px; background: #fff; border: 1px solid #dbe3ec;
  border-radius: 10px; padding: 0 0 14px; box-shadow: 0 14px 36px rgba(31, 45, 61, .2); }
.led-head { padding: 10px 16px; border-bottom: 1px solid #eef2f7; }
.led-head-chip { display: inline-flex; align-items: center; gap: 6px; background: var(--blue-600); color: #fff; border-radius: 6px; padding: 4px 12px; font-size: 13px; }
.led-row { display: flex; align-items: center; gap: 8px; padding: 9px 16px 0; }
/* 面板内输入控件统一盒模型与可收缩（避免"金额/凭证号"等成对输入框溢出弹窗） */
.led-pop .led-row > input,
.led-pop .led-row > select,
.led-pop .led-row .led-acc input,
.led-pop .led-row .led-date input { box-sizing: border-box; min-width: 0; }
.led-pop .led-row .led-acc, .led-pop .led-row .led-date { min-width: 0; box-sizing: border-box; }
.led-pop .led-row > span[style*="flex:1"], .led-pop .led-row > input[style*="flex:1"] { min-width: 0; }
.led-k { width: 84px; flex: 0 0 84px; color: var(--md-on-surface-variant); font-size: 13.5px; }
.led-to { color: #5b6b84; font-size: 13px; padding: 0 2px; }
.led-date { display: inline-flex; align-items: center; gap: 6px; border: 1px solid #dde3ea; border-radius: 6px; padding: 5px 8px 5px 10px; background: #fff; }
.led-date-in { border: 0; outline: none; width: 96px; font-size: 13px; cursor: pointer; background: transparent; }
.led-cal { cursor: pointer; font-size: 13px; opacity: .75; }
.led-cal:hover { opacity: 1; }
.led-acc { display: inline-flex; align-items: center; gap: 6px; border: 1px solid #dde3ea; border-radius: 6px; padding: 5px 8px 5px 10px; background: #fff; flex: 1; }
.led-acc-in { border: 0; outline: none; width: 100%; font-size: 13px; background: transparent; }
.led-book { cursor: pointer; font-size: 14px; opacity: .7; }
.led-book:hover { opacity: 1; }
.led-spin { display: inline-flex; align-items: center; border: 1px solid #dde3ea; border-radius: var(--md-r-sm); overflow: hidden; background: var(--md-surface); }
.led-spin input { width: 74px; border: 0; outline: none; text-align: center; padding: 6px 4px; font-size: 13px; }
.led-spin-btns { display: flex; flex-direction: column; border-left: 1px solid #eef1f5; }
.led-spin-btns i { font-style: normal; font-size: 8px; line-height: 11px; padding: 1px 6px; cursor: pointer; color: var(--md-on-surface-variant); background: var(--md-surface-1); }
.led-spin-btns i:hover { background: var(--md-hover); color: var(--md-primary); }
.led-kw-in { flex: 1; padding: 7px 10px; border: 1px solid #dde3ea; border-radius: 6px; font-size: 13px; outline: none; }
.led-radios { display: flex; gap: 20px; }
.led-checks { display: flex; flex-direction: column; gap: 9px; padding: 12px 16px 0; }
.led-btns { display: flex; justify-content: center; gap: 12px; padding: 14px 16px 0; }
/* 年月选择器 */
.ym-pop { position: fixed; z-index: 5200; background: #fff; border: 1px solid #dbe3ec; border-radius: 10px; box-shadow: 0 12px 30px rgba(31, 45, 61, .2); padding: 10px 12px; width: 300px; }
.ym-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.ym-title { font-weight: 700; font-size: 15px; color: #33475f; }
.ym-nav { cursor: pointer; color: #7b8a9e; font-size: 16px; padding: 2px 10px; border-radius: 6px; }
.ym-nav:hover { background: var(--blue-100); color: var(--blue-600); }
.ym-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.ym-m { text-align: center; padding: 12px 0; border-radius: 24px; background: #f1f6f2; color: #4b5b70; font-size: 13px; cursor: pointer; }
.ym-m:hover { background: var(--blue-100); color: var(--blue-600); }
.ym-m.on { background: var(--blue-600); color: #fff; font-weight: 700; }
/* 科目内联下拉 */
.acc-pop { position: fixed; z-index: 5200; background: #fff; border: 1px solid #dbe3ec; border-radius: 8px; box-shadow: 0 12px 30px rgba(31, 45, 61, .2); overflow: hidden; }
.acc-kw { width: 100%; box-sizing: border-box; border: 0; border-bottom: 1px solid #eef1f5; padding: 8px 12px; font-size: 13px; outline: none; }
.acc-list { max-height: 260px; overflow: auto; }
.acc-item { display: flex; gap: 10px; padding: 8px 12px; cursor: pointer; font-size: 13px; }
.acc-item:hover, .acc-item.on { background: var(--blue-600); color: #fff; }
.acc-code { font-weight: 700; }
.acc-empty { padding: 12px; text-align: center; color: #a2adb9; font-size: 12.5px; }
/* 明细账「科目快速切换」面板的拖拽分隔条（宽度由 ledger.js 写在 q-panel 的行内样式上）。
   握把不做成中间一小段，而是跟着面板/表格的高度从上贯到下 —— 表格越长条越长，整条都能拖。
   ⚠ 握把**默认不画**（2026-10-12 用户确认）：原来那条 4px 灰蓝竖条常显，又紧贴表格右边缘，
   看起来像把表格"切"了一道。现在鼠标移到分隔条上（或正在拖拽）才显形，平时只留一条极淡的分界线。 */
.q-split { flex: 0 0 7px; align-self: stretch; min-height: 320px; cursor: col-resize; box-sizing: border-box; display: flex; align-items: stretch; justify-content: center; border-left: 1px solid #eef1f5; background: transparent; }
.q-split i { width: 4px; align-self: stretch; margin: 8px 0; border-radius: 3px; background: transparent; box-shadow: none; transition: background .12s; }
.q-split:hover, .q-split.on { background: var(--blue-100); }
.q-split:hover i, .q-split.on i { background: var(--blue-600); }

/* ---------- 现金流量表期初数弹窗 ---------- */
.cf-open-wrap { display: flex; flex-direction: column; max-height: 72vh; }
.cf-open-bar { display: flex; justify-content: flex-end; gap: 10px; padding: 10px 16px; border-bottom: 1px solid #eef2f7; }
.cf-open-scroll { overflow: auto; flex: 1; }
.cf-open-scroll .mz-table th { position: sticky; top: 0; z-index: 2; }
.cf-open-table th.cf-th { font-weight: 700; }                 /* 表头加粗 */
.cf-open-table td.cf-ttl { font-weight: 700; padding-left: 10px; }   /* 标题行：加粗、顶左 */
.cf-open-table td.cf-sub { padding-left: 30px; color: #33475f; }     /* 明细行：不加粗、缩进 */
.cf-open-table tr.cf-row-ttl td { background: #fafbfc; }
.cf-imp-link { color: var(--blue-600); margin-left: 12px; text-decoration: none; cursor: pointer; }
.cf-imp-link:hover { text-decoration: underline; }

/* ---------- 选择范围面板（部门/项目利润表） ---------- */
.dim-scope { position: relative; display: inline-flex; align-items: center; gap: 4px; }
.dim-chip { background: var(--blue-600); }
.dim-ico { font-size: 12px; margin-left: 2px; }
.dim-help { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; border-radius: 50%;
  background: var(--blue-600); color: #fff; font-size: 12px; font-weight: 700; cursor: pointer; margin-left: 2px; }
.dim-help:hover { background: #1d4ed8; }
.dim-pop { position: fixed; left: 0; top: 0; z-index: 3000; width: 420px; background: #fff; border: 1px solid #dbe3ec;
  border-radius: 10px; padding: 0 0 14px; box-shadow: 0 14px 36px rgba(31, 45, 61, .2); }
.dim-head { display: flex; align-items: center; gap: 6px; padding: 10px 16px; border-bottom: 1px solid #eef2f7; }
.dim-head-chip { background: var(--blue-600); color: #fff; border-radius: 6px; padding: 4px 10px; font-size: 13px; }
.dim-head-help { display: inline-flex; align-items: center; justify-content: center; width: 17px; height: 17px; border-radius: 50%;
  background: var(--blue-100); color: var(--blue-600); font-weight: 700; font-size: 12px; cursor: pointer; margin-left: 8px; }
.dim-head-help-txt { color: var(--blue-600); font-size: 13px; cursor: pointer; }
.dim-row { display: flex; align-items: center; gap: 10px; padding: 9px 16px 0; }
.dim-k { width: 84px; flex: 0 0 84px; color: #33475f; font-size: 13.5px; }
.dim-row select { flex: 1; padding: 7px 10px; border: 1px solid #dde3ea; border-radius: 6px; font-size: 13px; }
.dim-sel { position: relative; flex: 1; }
.dim-sel-box { display: flex; align-items: center; justify-content: space-between; border: 1px solid #dde3ea; border-radius: 6px;
  padding: 7px 10px; font-size: 13px; cursor: pointer; background: #fff; }
.dim-caret { color: #8a97a5; font-size: 11px; }
.dim-sel-pop { position: absolute; left: 0; right: 0; top: calc(100% + 4px); z-index: 3100; background: #fff; border: 1px solid #dbe3ec;
  border-radius: 8px; box-shadow: 0 10px 26px rgba(31, 45, 61, .18); overflow: hidden; }
.dim-sel-head { display: flex; align-items: center; gap: 8px; background: var(--blue-600); color: #fff; padding: 8px 10px; }
.dim-sel-head .dim-count { font-size: 12.5px; white-space: nowrap; }
.dim-search { flex: 1; border: 0; border-radius: 4px; padding: 5px 8px; font-size: 12.5px; outline: none; }
.dim-sel-list { max-height: 260px; overflow: auto; padding: 6px 0; }
.dim-item { display: flex; align-items: center; gap: 8px; padding: 8px 14px; font-size: 13px; color: #33475f; cursor: pointer; }
.dim-item:hover { background: var(--blue-100); color: var(--blue-600); }
.dim-checks { display: flex; flex-direction: column; gap: 9px; padding: 12px 16px 0; }
.dim-btns { display: flex; justify-content: center; gap: 12px; padding: 14px 16px 0; }

/* 报表选项右上角的「?」帮助图标（点击查看口径说明） */
.rc-help { display: inline-flex; align-items: center; justify-content: center; width: 15px; height: 15px; border-radius: 50%;
  border: 1.5px solid #9aa8bb; color: #7b8a9e; font-size: 10px; font-weight: 700; cursor: pointer; margin: 0 4px 0 -4px; vertical-align: -2px; }
.rc-help:hover { border-color: var(--md-primary); color: var(--blue-600); background: var(--md-hover); }

/* ---------- 税务信息页 ---------- */
.mz-tax-tip { background: #fff8ec; border: 1px solid #f5e3c3; color: #8a6d3b; border-radius: 8px; padding: 10px 14px; font-size: 13px; margin-bottom: 14px; }

/* ---------- 下拉菜单（打印 ▾ / 导出 ▾） ---------- */
.mz-menu-btn { position: relative; }
.mz-caret { opacity: .65; font-size: 10px; margin-left: 4px; }
.mz-menu { position: fixed; min-width: 168px; background: var(--md-surface); border: 1px solid #e2e8f0; border-radius: 10px;
  box-shadow: var(--md-e2); padding: 6px; z-index: 5000; }
.mz-menu-item { padding: 9px 14px; border-radius: 7px; cursor: pointer; font-size: 13px; color: var(--md-on-surface); white-space: nowrap; }
.mz-menu-item:hover { background: var(--md-hover); color: var(--blue-600); }

/* ---------- 打印设置窗 / 批量打印窗 ---------- */
.mz-pd { padding: 8px 20px 4px; }
.mz-pd-row { display: flex; align-items: center; gap: 10px; margin: 14px 0; }
.mz-pd-k { width: 96px; flex: 0 0 96px; color: #33475f; font-size: 13.5px; }
.mz-pd-grid { display: grid; grid-template-columns: auto 1fr auto 1fr; gap: 10px 18px; flex: 1; align-items: center; }
.mz-pd-lbl { color: #5b6b84; font-size: 13px; }
.mz-spin { display: inline-flex; align-items: center; background: #fff; border: 1px solid #c9d5e3; border-radius: 6px; overflow: hidden; }
.mz-spin input { width: 54px; border: 0; text-align: center; padding: 7px 4px; outline: none; font-size: 13px; }
.mz-spin-btns { display: flex; flex-direction: column; }
.mz-spin-btns button { border: 0; background: #f4f6f8; width: 22px; font-size: 9px; line-height: 12px; cursor: pointer; color: #6b7a90; }
.mz-spin-btns button:hover { background: var(--blue-100); color: var(--blue-600); }
.mz-spin-unit { padding: 0 8px 0 4px; color: #5b6b84; font-size: 12px; }

/* ---------- 日期选择器（打印日期） ---------- */
.mz-dp-pop { position: fixed; z-index: 5200; background: #fff; border: 1px solid #dbe3ec; border-radius: 12px;
  box-shadow: 0 14px 36px rgba(31, 45, 61, .2); padding: 12px; width: 286px; }
.mz-dp-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.mz-dp-title { font-weight: 700; font-size: 15px; color: #33475f; }
.mz-dp-nav { cursor: pointer; color: #7b8a9e; font-size: 16px; padding: 2px 8px; border-radius: 6px; }
.mz-dp-nav:hover { background: var(--blue-100); color: var(--blue-600); }
.mz-dp-week, .mz-dp-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.mz-dp-week span { text-align: center; color: #8a97a5; font-size: 12px; padding: 4px 0; }
.mz-dp-day { text-align: center; padding: 7px 0; border-radius: 50%; cursor: pointer; font-size: 13px; color: #33475f; }
.mz-dp-day:hover { background: var(--blue-100); color: var(--blue-600); }
.mz-dp-day.out { color: #c3ccd8; }
.mz-dp-day.today { color: var(--blue-600); font-weight: 700; }
.mz-dp-day.on { background: var(--blue-600); color: #fff; font-weight: 700; }

/* ---------- 资产负债表（左右双栏同一张表：行对齐/底部对齐） ---------- */
.bs-wrap { overflow-x: auto; }
.bs-dual { min-width: 960px; border: 1px solid var(--line); table-layout: fixed; }
.bs-dual th, .bs-dual td { border: 1px solid #c3cede; }
.bs-dual th { font-weight: 500; }
.bs-dual .bs-title { text-align: center; font-weight: 500; font-size: 14px; background: #f7f9fc; }
.bs-dual .bs-b { font-weight: 800; border-top: 1px solid #9aa8bf; font-size: 14px; }
.bs-dual .bs-idx { width: 44px; text-align: center; color: #8a97a5; font-size: 12px; white-space: nowrap; }
.bs-dual .bs-amt { width: 120px; text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.bs-dual td:not(.bs-idx):not(.bs-amt) { overflow-wrap: break-word; }
.bs-dual .bs-sec { color: #1f3a66; font-weight: 800; padding: 7px 10px; font-size: 14px; }
.bs-dual .bs-blank { }
.mz-row-toggle {
  display: inline-flex; align-items: center; justify-content: center;
  width: 18px; height: 18px; line-height: 1; border-radius: 50%;
  margin-right: 6px; vertical-align: middle; flex: none;
  background: #e3edf8; color: #25639c; border: 1px solid #bcd4ec;
  font-size: 10px; font-weight: 700; cursor: pointer; user-select: none;
  transition: background .15s, color .15s, transform .15s;
}
.mz-row-toggle:hover { background: #d0e2f6; color: #174f86; transform: scale(1.12); }
.bs-check { display: flex; gap: 14px; align-items: center; margin-top: 14px; padding: 10px 14px; border-radius: 10px; font-size: 13px; flex-wrap: wrap; }
.bs-check.bs-ok { background: #ecf7f0; border: 1px solid #bfe3cd; color: #1c7a45; }
.bs-check.bs-bad { background: #fdf0ee; border: 1px solid #f2c3ba; color: #c0392b; }
.bs-check .bs-chk { margin-left: auto; font-weight: 700; }

/* 财务报表模块：报表表格统一完整网格线（资产负债表 bs-dual 已有专属网格线，排除） */
.mz-report .mz-table-wrap { border: none; }
.mz-report .mz-table:not(.bs-dual) { border: 1px solid var(--line); }
.mz-report .mz-table:not(.bs-dual) th,
.mz-report .mz-table:not(.bs-dual) td { border-left: 1px solid var(--line-2); border-right: 1px solid var(--line-2); }

/* ---------- 消息卡片（统一待办/站内消息） ---------- */
.mz-msg-card { border: 1px solid #eef1f5; border-radius: 10px; padding: 10px 12px; margin-bottom: 8px; color: #4c5872; }
.mz-msg-card.mz-msg-unread { background: var(--md-surface-1); border-color: var(--md-primary); }
.mz-msg-card + .mz-msg-card { margin-top: 0; }

/* ---------- 表单：单选/复选（新增科目表单） ---------- */
.mz-radio, .mz-check { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; color: var(--md-on-surface-variant); font-size: 12.5px; }
.mz-radio input, .mz-check input { margin: 0; }
.mz-subacc-ro { background: #f4f7fb; border: 1px solid #e2e7f0; border-radius: 7px; padding: 6px 10px; }

/* ---------- 科目分类汇总（资产/负债/权益/成本/损益） ---------- */
.mz-acc-tree { background: #fff; border: 1px solid #e3e8ee; border-radius: 8px; padding: 4px 8px; }
.mz-perm { font-size: 12px; line-height: 1.9; color: #4c5872; }
.mz-badge { display: inline-block; padding: 3px 10px; border-radius: var(--md-r-sm); font-size: 13px; font-weight: 500; }
.mz-badge-gray { background: var(--md-surface-3); color: var(--md-on-surface-variant); }
.mz-badge-blue { background: var(--md-info-container); color: var(--md-on-info-container); }
.mz-badge-green { background: var(--md-success-container); color: var(--md-on-success-container); }
.mz-badge-red { background: var(--md-error-container); color: var(--md-on-error-container); }
.mz-badge-orange { background: var(--md-warning-container); color: var(--md-on-warning-container); }

/* ---------- 表单 ---------- */
.mz-form { padding: 4px 2px 2px; }
.mz-form-row { display: flex; align-items: flex-start; margin-bottom: 14px; }
.mz-form-row label { width: 116px; padding: 9px 12px 0 0; text-align: right; color: #4c5872; font-size: 13.5px; line-height: 1.5; flex-shrink: 0; }
.mz-form-row .req { color: #dc2626; margin-left: 2px; }
.mz-form-ctrl { flex: 1; min-width: 0; }
.mz-form-ctrl input, .mz-form-ctrl select, .mz-form-ctrl textarea { width: 100%; padding: 9px 12px; border: 1px solid var(--line); border-radius: 8px; font-size: 14px; line-height: 1.5; transition: .15s; background: #fbfcfe; }
.mz-form-ctrl input:focus, .mz-form-ctrl select:focus, .mz-form-ctrl textarea:focus { border-color: var(--blue-600); box-shadow: 0 0 0 3px rgba(37,99,235,.12); background: #fff; }
.mz-form-ctrl input[type=checkbox] { width: auto; }
.mz-form-inline { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.mz-form-inline label { font-size: 12px; color: #5b6b84; }
/* 勾选行：方块在左、文字占满整行（长说明不再被挤成竖条）。
   选择器要压过 `.mz-form-row label` 的 116px 标签列，否则文字仍被挤成窄条。 */
.mz-form-row-check { margin-bottom: 14px; }
.mz-form-row label.mz-check { display: flex; align-items: flex-start; gap: 10px; width: auto; flex: 1; min-width: 0;
  text-align: left; padding: 2px 0; margin: 0; color: #4c5872; font-size: 13px; line-height: 1.6; cursor: pointer; }
.mz-check input[type=checkbox] { width: 16px; height: 16px; flex: 0 0 16px; margin: 2px 0 0; padding: 0; accent-color: var(--blue-600); cursor: pointer; }
.mz-check > span { flex: 1; min-width: 0; }
.mz-check .req { margin-left: 2px; }

/* ---------- 账套参数（基础资料 → 账套参数） ---------- */
.mz-params-box { max-width: 880px; padding: 2px 0 4px; }
.mz-params-intro { background: #f7f9fc; border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; margin-bottom: 16px;
  font-size: 13.5px; line-height: 1.75; color: #4c5872; }
.mz-params-sec { background: #fff; border: 1px solid var(--line); border-radius: 14px; padding: 16px 20px 10px; margin-bottom: 14px;
  box-shadow: 0 1px 2px rgba(16,30,60,.03); }
.mz-params-sec h3 { font-size: 15px; font-weight: 700; color: var(--navy-900); margin: 0 0 4px; }
.mz-params-desc { font-size: 12.5px; color: var(--muted); margin: 0 0 14px; line-height: 1.6; }
.mz-params-sec .mz-form { padding: 0; }
.mz-params-sec .mz-form-row { margin-bottom: 12px; }
.mz-params-sec .mz-form-row:last-child { margin-bottom: 4px; }
.mz-params-sec .mz-form-row > label:not(.mz-check) { width: 200px; }
.mz-params-sec .mz-form-ctrl select { max-width: 420px; }
.mz-params-sec .mz-form-ctrl input[type="number"] { max-width: 180px; }
.mz-params-actions { max-width: 880px; display: flex; justify-content: flex-end; padding: 4px 0 24px; }
.mz-params-actions .mz-btn { min-width: 112px; }

/* ---------- 弹窗 ---------- */
.mz-modal-overlay { position: fixed; inset: 0; background: rgba(13,29,61,.5); backdrop-filter: blur(2px); display: flex; align-items: flex-start; justify-content: center; padding-top: 7vh; z-index: 1000; animation: mzFade .18s ease; }
@keyframes mzFade { from { opacity: 0; } to { opacity: 1; } }
.mz-modal { background: var(--md-surface); border-radius: var(--md-r-xl); width: 100%; max-height: 86vh; display: flex; flex-direction: column; box-shadow: var(--md-e3); animation: mzModalIn .22s ease; }
@keyframes mzModalIn { from { opacity: 0; transform: translateY(10px) scale(.985); } to { opacity: 1; transform: none; } }
.mz-modal-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 17px 22px 14px; border-bottom: 1px solid var(--line-2); font-weight: 700; color: var(--navy-900); font-size: 17px; letter-spacing: .2px; }
.mz-modal-close { border: none; background: none; font-size: 20px; cursor: pointer; color: #8a94a6; border-radius: 8px; width: 30px; height: 30px; flex: 0 0 30px; }
.mz-modal-close:hover { color: #1d4ed8; background: var(--md-hover-neutral); }
.mz-modal-body { padding: 16px 20px 6px; overflow-y: auto; }
.mz-modal-foot { display: flex; justify-content: flex-end; gap: 10px; padding: 14px 22px; border-top: 1px solid var(--line-2); background: var(--md-surface); border-radius: 0 0 16px 16px; }
.mz-modal-foot .mz-btn { min-width: 84px; }

/* ---------- 标签页 ---------- */
.mz-tabs { display: flex; gap: 4px; border-bottom: 2px solid var(--line); margin-bottom: 16px; flex-wrap: wrap; }
.mz-tab { padding: 9px 17px; border: none; background: none; cursor: pointer; color: var(--md-on-surface-variant); font-size: 14.5px; border-bottom: 2.5px solid transparent; margin-bottom: -2px; border-radius: 9px 9px 0 0; transition: .15s; }
.mz-tab:hover { color: var(--md-primary); background: var(--md-hover-neutral); }
.mz-tab.active { color: var(--md-primary); font-weight: 700; border-bottom-color: var(--md-primary); }

/* ---------- 卡片/汇总 ---------- */
.mz-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; margin-bottom: 16px; }
.mz-card { background: var(--md-surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px 18px; box-shadow: none; transition: .18s; }
.mz-card:hover { transform: translateY(-2px); box-shadow: var(--md-e1); }
.mz-card .t { color: var(--md-on-surface-variant); font-size: 13.5px; margin-bottom: 6px; }
.mz-card .v { font-size: 23px; font-weight: 800; color: var(--md-on-surface); letter-spacing: .2px; }
.mz-card .s { font-size: 13px; color: var(--muted); margin-top: 4px; }
.mz-kv { display: flex; flex-wrap: wrap; gap: 18px 28px; padding: 12px 16px; background: #fff; border: 1px solid var(--line); border-radius: var(--radius); margin-bottom: 12px; box-shadow: var(--shadow-card); }
.mz-kv .kv { min-width: 130px; }
.mz-kv .kv .k { font-size: 13px; color: var(--muted); }
.mz-kv .kv .v { font-size: 16px; font-weight: 700; margin-top: 2px; color: var(--ink); }

/* ---------- 提示 ---------- */
/* 2026-10-14 修：原来只设了反色底、**没设文字色** —— 浅色主题下反色面是深色（#2f3033）而文字继承 body 的深墨色，
   变成"深底深字"（客户截图里那条「未启用或未配置 Webhook」就是它）。补上 --md-inverse-on-surface，两个主题都成立。 */
.mz-toast { background: var(--md-inverse-surface); color: var(--md-inverse-on-surface); border: 1px solid var(--line); border-left: 4px solid var(--blue-600); box-shadow: var(--md-e3); padding: 10px 16px; border-radius: 10px; margin-bottom: 10px; font-size: 14px; animation: mz-in .2s; min-width: 220px; max-width: 420px; }
.mz-toast-error { border-left-color: #e5484d; }
.mz-toast-success { border-left-color: #16a34a; }
.mz-toast.out { opacity: 0; transition: opacity .3s; }
@keyframes mz-in { from { transform: translateY(-8px); opacity: 0; } }

/* ---------- 图表 ---------- */
.mz-bars { padding: 6px 0; }
.mz-bar-row { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.mz-bar-label { width: 150px; font-size: 12px; color: #4c5872; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mz-bar-track { flex: 1; background: var(--md-surface-3); height: 14px; border-radius: 7px; overflow: hidden; }
.mz-bar { background: var(--md-primary); height: 100%; border-radius: 7px; min-width: 2px; }
.mz-bar-val { width: 110px; font-size: 12px; text-align: right; color: #33475f; }

/* ---------- 凭证编辑表格 ---------- */
.mz-vou-lines input { width: 100%; padding: 5px 8px; border: 1px solid #dde3ea; border-radius: 6px; box-sizing: border-box; }
/* 科目格：输入框填满整列，下方显示「编码 + 完整科目名」便于核对 */
.mz-vou-lines td .l-acc-info { font-size: 11.5px; }
.mz-vou-lines select { padding: 4px 6px; border: 1px solid #dde3ea; border-radius: 6px; background: #fff; color: var(--ink); }
.mz-vou-lines td { padding: 3px 5px; }
.mz-vou-lines th { padding: 6px; }
.mz-vou-lines input.l-acc-bad { border-color: #dc2626 !important; background: #fef2f2 !important; }
.mz-totalbar { font-weight: 700; }
/* 凭证头信息带（浅色/深色主题自适应） */
.mz-vou-head { display: flex; gap: 16px; flex-wrap: wrap; align-items: center; padding: 12px 16px; background: var(--md-surface-1); border-bottom: 1px solid #eef1f5; }
.mz-vou-head label { display: flex; align-items: center; gap: 6px; color: var(--md-on-surface-variant); white-space: nowrap; }
.mz-vou-head input, .mz-vou-head select { padding: 5px 8px; border: 1px solid #dde3ea; border-radius: 7px; color: var(--md-on-surface); background: var(--md-surface); }
.mz-vou-head .vou-no { color: var(--md-primary); font-size: 14px; }
.mz-vou-head .mz-vou-no-tip { font-size: 11px; color: var(--md-on-surface-variant); }
.mz-vou-head .words-hint { color: #8a97a5; font-size: 12px; }
.mz-vou-hint { padding: 8px 16px 0; font-size: 12.5px; color: var(--md-on-surface-variant); }

/* 凭证内页标签（列表 / 填制）与内页表单 */
.mz-vou-tabs { margin-top: 2px; }
.mz-vou-tabs { flex-wrap: nowrap; overflow: hidden; }
.mz-vou-tabscroll { display: flex; gap: 4px; flex: 0 1 auto; min-width: 0; overflow-x: auto; scrollbar-width: none; }
.mz-vou-tabscroll::-webkit-scrollbar { display: none; }
.mz-vou-tabscroll .mz-tab { flex-shrink: 0; }
.mz-vou-addtab { flex-shrink: 0; align-self: flex-start; font-size: 17px; padding: 8px 12px; }
.mz-vou-panel { min-height: 220px; }
/* 摘要常用词下拉（白底不透明，避免文字悬浮在页面上） */
.sum-drop { background: var(--md-surface); border: 1px solid #d5dbe3; border-radius: 8px; box-shadow: var(--md-e2); max-height: 220px; overflow-y: auto; }
.mz-vou-entry { background: #fff; border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 1px 3px rgba(16,28,44,.06); }
.mz-vou-entry-head { display: flex; align-items: center; justify-content: space-between; padding: 13px 18px; border-bottom: 1px solid var(--line); background: var(--md-surface-dim); border-radius: 12px 12px 0 0; }
.mz-vou-entry-head h3 { font-size: 15.5px; color: var(--md-on-surface); margin: 0; }
.mz-vou-entry-foot { display: flex; gap: 10px; justify-content: flex-end; padding: 13px 18px; border-top: 1px solid var(--line); background: #fafbfc; border-radius: 0 0 12px 12px; }
/* 保存成功后的就地操作条（替代原「凭证已保存 / 是否立即打印」弹窗）：靠左，其余按钮仍在右侧 */
.mz-vou-saved { display: flex; align-items: center; gap: 8px; margin-right: auto; min-width: 0; font-size: 12.5px; color: #1c7a45; }
.mz-vou-saved .vs-ico { flex-shrink: 0; width: 18px; height: 18px; border-radius: 50%; background: #e8f5ee; color: #1c7a45; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; }
.mz-vou-saved .vs-text { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 320px; }
.mz-vou-saved .vs-text b { color: #0f6b3a; }
@media (max-width: 900px) { .mz-vou-saved .vs-text { max-width: 140px; } }
/* 科目下拉（锚定单元格定位，避免弹窗遮罩 backdrop-filter 影响 fixed 定位） */
.acc-drop { position: absolute; z-index: 1300; background: #fff; border: 1px solid #d5dbe3; max-height: 220px; overflow-y: auto; width: 300px; box-shadow: 0 6px 18px rgba(0,0,0,.15); border-radius: 8px; }
.mz-acc-item:hover { background: #f0f6ff; }

/* ---------- 对齐工具类（模块自定义表格使用） ---------- */
.r { text-align: right; }
.c { text-align: center; }
.mz-table .r, .mz-table td.r, .mz-table th.r { text-align: right; }
.mz-table .c, .mz-table td.c, .mz-table th.c { text-align: center; }

/* ---------- 打印 ---------- */
@media print { .mz-topbar, .mz-sidebar, .mz-filter-bar, .mz-btn { display: none !important; } }

/* ---------- 工作台（业务概览） ---------- */
.mz-card-stat .v { font-size: 24px; }
.mz-mini-bars { display: flex; align-items: flex-end; gap: 3px; height: 34px; margin-top: 10px; padding-top: 6px; border-top: 1px dashed var(--line); }
.mz-mini-bars i { flex: 1; background: var(--md-primary); border-radius: 3px 3px 0 0; opacity: .45; min-height: 3px; }
.mz-dash-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 14px; }
@media (max-width: 900px) { .mz-dash-row { grid-template-columns: 1fr; } }
.mz-dash-panel { background: #fff; border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow-card); overflow: hidden; }
.mz-panel-head { display: flex; align-items: center; justify-content: space-between; padding: 12px 14px 8px; font-size: 14.5px; color: var(--navy-900); border-bottom: 1px solid var(--line-2); }
.mz-panel-more { font-size: 12px; font-weight: 400; }
.mz-todo-list { padding: 6px 8px; }
.mz-todo-item { display: flex; align-items: center; gap: 8px; padding: 9px 10px; border-radius: 9px; text-decoration: none; color: #33475f; font-size: 13px; transition: .15s; }
.mz-todo-item:hover { background: #f0f6ff; }
.mz-todo-dot { width: 7px; height: 7px; border-radius: 50%; background: #f59e0b; flex-shrink: 0; }
.mz-todo-label { flex: 1; }
.mz-todo-count { background: var(--md-surface-3); color: var(--md-on-surface-variant); border-radius: 999px; font-size: 12px; font-weight: 700; padding: 1px 8px; }
.mz-quick-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; padding: 10px 12px; }
.mz-quick { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 13px 6px; border: 1px solid var(--line); border-radius: 10px; text-decoration: none; color: #33475f; font-size: 12.5px; transition: .15s; }
.mz-quick:hover { border-color: var(--blue-500); background: var(--md-hover); transform: translateY(-1px); box-shadow: 0 6px 16px rgba(37,99,235,.12); }
.mz-quick-ico { font-size: 20px; }

/* ---------- 细节对齐：按钮/徽章不换行 ---------- */
.mz-btn { white-space: nowrap; }
.mz-badge { white-space: nowrap; }
.mz-table .ops, .mz-table td.ops { white-space: nowrap; }
.mz-table th { white-space: nowrap; }

/* ---------- 表单：勾选框与文字垂直对齐 ---------- */
.mz-form-ctrl input[type=checkbox] { width: 16px; height: 16px; margin: 0; accent-color: var(--blue-600); cursor: pointer; }
.mz-form-ctrl:has(> input[type=checkbox]) { display: flex; align-items: center; min-height: 38px; }

/* ============================================================
   深蓝星空（个性化 → 背景=深蓝星空）
   三层真实星形：暗场小星群 / 光晕亮星 / 四芒闪光；
   两组不同相位与频率的明暗闪烁（模拟独立星点呼吸）+ 极缓慢漂移；
   底色：夜空黑蓝（#01060f → 午夜蓝），带蓝紫星云光。
   ============================================================ */
:root {
  /* 小星层：细密星点（SVG，1200×800 平铺） */
  --mz-star-small: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1200' height='800'%3E%3Cg fill='%23cfe2ff'%3E%3Ccircle cx='23' cy='45' r='1'/%3E%3Ccircle cx='97' cy='210' r='0.8'/%3E%3Ccircle cx='180' cy='77' r='1.2'/%3E%3Ccircle cx='264' cy='330' r='0.9'/%3E%3Ccircle cx='320' cy='150' r='0.7'/%3E%3Ccircle cx='415' cy='420' r='1'/%3E%3Ccircle cx='470' cy='88' r='1.1'/%3E%3Ccircle cx='540' cy='260' r='0.8'/%3E%3Ccircle cx='610' cy='500' r='1.2'/%3E%3Ccircle cx='690' cy='130' r='0.9'/%3E%3Ccircle cx='745' cy='310' r='0.7'/%3E%3Ccircle cx='820' cy='560' r='1'/%3E%3Ccircle cx='870' cy='190' r='1.1'/%3E%3Ccircle cx='940' cy='380' r='0.8'/%3E%3Ccircle cx='1010' cy='60' r='1.2'/%3E%3Ccircle cx='1065' cy='240' r='0.9'/%3E%3Ccircle cx='1120' cy='430' r='0.7'/%3E%3Ccircle cx='1160' cy='120' r='1'/%3E%3Ccircle cx='55' cy='600' r='1'/%3E%3Ccircle cx='150' cy='700' r='0.8'/%3E%3Ccircle cx='240' cy='640' r='1.1'/%3E%3Ccircle cx='350' cy='740' r='0.9'/%3E%3Ccircle cx='500' cy='660' r='0.7'/%3E%3Ccircle cx='620' cy='720' r='1'/%3E%3Ccircle cx='740' cy='680' r='0.8'/%3E%3Ccircle cx='860' cy='750' r='1.1'/%3E%3Ccircle cx='980' cy='650' r='0.9'/%3E%3Ccircle cx='1100' cy='710' r='1'/%3E%3Ccircle cx='420' cy='570' r='0.6'/%3E%3Ccircle cx='700' cy='40' r='0.6'/%3E%3Ccircle cx='930' cy='620' r='0.6'/%3E%3C/g%3E%3C/svg%3E");
  /* 亮星层：光晕亮星 + 四芒闪光（SVG，1400×900 平铺） */
  --mz-star-bright: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1400' height='900'%3E%3Cdefs%3E%3CradialGradient id='h'%3E%3Cstop offset='0' stop-color='%23ffffff' stop-opacity='0.95'/%3E%3Cstop offset='0.28' stop-color='%23bcd4ff' stop-opacity='0.5'/%3E%3Cstop offset='0.6' stop-color='%237fb3ff' stop-opacity='0.14'/%3E%3Cstop offset='1' stop-color='%237fb3ff' stop-opacity='0'/%3E%3C/radialGradient%3E%3Cpath id='sp' d='M0,-13 C1.5,-3.2 3.2,-1.5 13,0 C3.2,1.5 1.5,3.2 0,13 C-1.5,3.2 -3.2,1.5 -13,0 C-3.2,-1.5 -1.5,-3.2 0,-13 Z' fill='%23ffffff'/%3E%3C/defs%3E%3Cg%3E%3Ccircle cx='150' cy='140' r='26' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='150' y='140'/%3E%3Ccircle cx='420' cy='620' r='22' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='420' y='620'/%3E%3Ccircle cx='720' cy='210' r='30' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='720' y='210'/%3E%3Ccircle cx='1010' cy='540' r='24' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='1010' y='540'/%3E%3Ccircle cx='1240' cy='120' r='20' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='1240' y='120'/%3E%3Ccircle cx='90' cy='760' r='18' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='90' y='760'/%3E%3Ccircle cx='560' cy='60' r='17' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='560' y='60'/%3E%3Ccircle cx='1180' cy='700' r='20' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='1180' y='700'/%3E%3Ccircle cx='280' cy='420' r='16' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='280' y='420'/%3E%3Ccircle cx='880' cy='800' r='17' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='880' y='800'/%3E%3Ccircle cx='1320' cy='340' r='15' fill='url(%23h)'/%3E%3Cuse href='%23sp' x='1320' y='340'/%3E%3C/g%3E%3C/svg%3E");
}
body[data-bg="galaxy"] { background: #01060f;
  background-image:
    radial-gradient(1400px 720px at 14% -12%, rgba(31, 84, 200, .30), transparent 60%),
    radial-gradient(1100px 620px at 90% 116%, rgba(16, 56, 150, .30), transparent 60%),
    radial-gradient(760px 520px at 68% 24%, rgba(96, 64, 215, .12), transparent 65%),
    linear-gradient(178deg, #01060f 0%, #04122b 46%, #071c42 78%, #0a2454 100%);
  background-attachment: fixed; }
/* 业务页面保持 浅色/深色 主题（星空仅登录页）；登录容器透明以透出星空 */
body[data-bg="galaxy"] .mz-login { position: relative; background: transparent; }
body[data-bg="galaxy"] .mz-login-card { position: relative; z-index: 1; }

/* 远处恒星层（静态密星群，不参与闪烁——给近处闪烁星做底） */
body[data-bg="galaxy"]::before {
  content: ''; position: fixed; inset: 0; pointer-events: none; z-index: 0;
  background-image: var(--mz-star-small); background-size: 1200px 800px; background-repeat: repeat;
  opacity: .35; }

/* ============================================================
   浅色星空（个性化 → 登录页背景=浅色星空）
   与深蓝星空同一套星点/闪烁机制，只把底色与星色换成浅色版：
   近白底 + 淡蓝晕、星点用蓝灰（#7e97bd），保证白底上也看得见。
   ============================================================ */
:root {
  /* 浅色版细密星点（深一点的蓝灰，浅底可见） */
  --mz-star-small-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='900' height='600'%3E%3Cg fill='%237e97bd'%3E%3Ccircle cx='31' cy='48' r='1.1'/%3E%3Ccircle cx='118' cy='196' r='0.9'/%3E%3Ccircle cx='206' cy='84' r='1.3'/%3E%3Ccircle cx='294' cy='318' r='1'/%3E%3Ccircle cx='382' cy='142' r='0.8'/%3E%3Ccircle cx='470' cy='404' r='1.2'/%3E%3Ccircle cx='558' cy='96' r='1'/%3E%3Ccircle cx='646' cy='262' r='0.9'/%3E%3Ccircle cx='734' cy='488' r='1.2'/%3E%3Ccircle cx='822' cy='128' r='1'/%3E%3Ccircle cx='64' cy='512' r='0.9'/%3E%3Ccircle cx='178' cy='420' r='1.2'/%3E%3Ccircle cx='300' cy='540' r='0.8'/%3E%3Ccircle cx='412' cy='252' r='1'/%3E%3Ccircle cx='540' cy='566' r='1.1'/%3E%3Ccircle cx='678' cy='366' r='0.9'/%3E%3Ccircle cx='790' cy='238' r='1.2'/%3E%3Ccircle cx='864' cy='430' r='0.8'/%3E%3C/g%3E%3C/svg%3E");
}
body[data-bg="stars-light"] { background: #f4f7fd;
  background-image:
    radial-gradient(900px 620px at 8% -12%, rgba(99,102,241,.22), transparent 62%),
    radial-gradient(820px 560px at 100% -4%, rgba(56,189,248,.20), transparent 64%),
    radial-gradient(900px 760px at 50% 118%, rgba(168,85,247,.14), transparent 66%),
    radial-gradient(700px 520px at -6% 108%, rgba(34,197,94,.10), transparent 62%),
    linear-gradient(180deg, #fbfcff 0%, #eef3fc 58%, #e9f0fb 100%);
  background-size: 150% 150%, 145% 145%, 160% 160%, 135% 135%, 100% 100%;
  background-attachment: fixed;
  animation: mzAuroraDrift 30s ease-in-out infinite alternate; }
/* 极光缓慢漂移：四层色晕各自换位，像呼吸一样不抢注意力 */
@keyframes mzAuroraDrift {
  0%   { background-position: 0% 0%, 100% 0%, 50% 100%, 0% 100%, 0 0; }
  50%  { background-position: 6% 4%, 94% 6%, 46% 94%, 4% 96%, 0 0; }
  100% { background-position: 12% 9%, 87% 11%, 41% 89%, 9% 92%, 0 0; }
}
body[data-bg="stars-light"] .mz-login { position: relative;
  background-image: linear-gradient(115deg,
    rgba(219,234,254,.85) 0%, rgba(233,213,255,.75) 18%, rgba(207,250,254,.72) 38%,
    rgba(254,226,226,.68) 58%, rgba(224,231,255,.80) 80%, rgba(219,234,254,.85) 100%);
  background-size: 340% 340%; animation: mzGradFlow 24s ease-in-out infinite alternate; }
@keyframes mzGradFlow {
  0%   { background-position: 0% 0%; }
  50%  { background-position: 100% 42%; }
  100% { background-position: 38% 100%; }
}
body[data-bg="stars-light"] .mz-login-card { position: relative; z-index: 1; }
body[data-bg="stars-light"]::before {
  content: ''; position: fixed; inset: 0; pointer-events: none; z-index: 0;
  background-image: var(--mz-star-small-light); background-size: 900px 600px; background-repeat: repeat;
  opacity: .6; animation: mzStarDrift 140s linear infinite; }
/* 星层极慢平移（视差感），一分钟只走几十像素 */
@keyframes mzStarDrift { from { background-position: 0 0; } to { background-position: 900px 600px; } }
body[data-bg="stars-light"] #mz-stars .mz-star {
  background: radial-gradient(circle, rgba(59,95,160,.75) 0 55%, rgba(59,95,160,.25) 70%, transparent 78%); }
body[data-bg="stars-light"] #mz-stars .mz-star-glow {
  background: radial-gradient(circle, rgba(59,95,160,.55) 0 6%, rgba(90,125,190,.26) 22%, rgba(120,150,205,.10) 45%, transparent 70%); }
body[data-bg="stars-light"] #mz-stars .mz-star-spark {
  background: radial-gradient(circle, rgba(40,70,130,.9) 0 1.5px, transparent 2.5px); }
body[data-bg="stars-light"] #mz-stars .mz-star-spark::before,
body[data-bg="stars-light"] #mz-stars .mz-star-spark::after {
  background: linear-gradient(180deg, transparent, rgba(40,70,130,.85) 50%, transparent); }
body[data-bg="stars-light"] #mz-stars .mz-meteor { background: rgba(40,70,130,.9); box-shadow: 0 0 9px 3px rgba(90,125,190,.35); }
body[data-bg="stars-light"] #mz-stars .mz-meteor::after {
  background: linear-gradient(90deg, rgba(40,70,130,.9), rgba(90,125,190,.35) 40%, transparent); }

/* ---------- 独立闪烁星场（JS 逐星生成，随机 位置/大小/亮度/频率/相位） ---------- */
#mz-stars { position: fixed; inset: 0; overflow: hidden; pointer-events: none; z-index: 0; }
.mz-star { position: absolute; border-radius: 50%;
  background: radial-gradient(circle, #ffffff 0 55%, rgba(180, 205, 255, .55) 70%, transparent 78%);
  opacity: .2; animation: mzStarPulse var(--d, 3s) ease-in-out var(--dl, 0s) infinite; }
@keyframes mzStarPulse {
  0%, 100% { opacity: .12; transform: scale(.72); }
  35%      { opacity: var(--pk, .9); transform: scale(1); }
  60%      { opacity: .3; transform: scale(.85); }
  82%      { opacity: var(--pk, .9) * .8; transform: scale(1.06); }
}
/* 光晕亮星（大一点、白色光晕） */
.mz-star-glow { border-radius: 50%;
  background: radial-gradient(circle, rgba(255,255,255,.95) 0 6%, rgba(190,214,255,.5) 22%, rgba(130,170,255,.16) 45%, transparent 70%);
  animation-duration: var(--d, 4s); }
/* 四芒闪光星（十字星芒） */
.mz-star-spark { background: radial-gradient(circle, #fff 0 1.5px, transparent 2.5px); }
.mz-star-spark::before, .mz-star-spark::after {
  content: ''; position: absolute; left: 50%; top: 50%; background: linear-gradient(180deg, transparent, rgba(255,255,255,.95) 50%, transparent); }
.mz-star-spark::before { width: 1.5px; height: 100%; transform: translate(-50%, -50%); }
.mz-star-spark::after { width: 100%; height: 1.5px; transform: translate(-50%, -50%); }
/* 流星 */
.mz-meteor { position: absolute; width: 2.4px; height: 2.4px; border-radius: 50%; background: #fff;
  box-shadow: 0 0 9px 3px rgba(170, 200, 255, .75); opacity: 0;
  animation: mzMeteor 11s linear infinite; animation-delay: var(--dl, 2s); }
.mz-meteor::after { content: ''; position: absolute; left: 0; top: 0; width: 130px; height: 1.6px;
  transform: rotate(-32deg); transform-origin: left center;
  background: linear-gradient(90deg, rgba(255,255,255,.95), rgba(150,185,255,.4) 40%, transparent); }
@keyframes mzMeteor {
  0%   { transform: translate(0, 0); opacity: 0; }
  1.5% { opacity: 1; }
  7%   { transform: translate(-48vw, 30vh); opacity: 0; }
  100% { transform: translate(-48vw, 30vh); opacity: 0; }
}

/* ---------- 个性化设置：字号 ----------
   默认档（normal）在 2026-10-12 整体上移了一级（用户要求"默认字体大一些"），
   所以这里的"大号"相应再 +1px，保持两档之间正好差一级；表格/图表/趋势两档都不动。 ---------- */
body[data-font="large"] { font-size: 17px; }
body[data-font="large"] .mz-nav-item { font-size: 16.5px; }
body[data-font="large"] .mz-top-ctl, body[data-font="large"] .mz-user { font-size: 14.5px; }
body[data-font="large"] .mz-brand-sub { font-size: 14.5px; }
body[data-font="large"] .mz-page-head h2 { font-size: 23px; }
body[data-font="large"] .mz-page-sub { font-size: 14.5px; }
body[data-font="large"] .mz-filter-bar label,
body[data-font="large"] .mz-from-row label,
body[data-font="large"] .mz-form-row label { font-size: 14.5px; }
body[data-font="large"] input, body[data-font="large"] select, body[data-font="large"] textarea { font-size: 15.5px; }
body[data-font="large"] .mz-btn { font-size: 15.5px; }
body[data-font="large"] .mz-btn-sm { font-size: 14.5px; }
body[data-font="large"] .mz-tab { font-size: 16px; }
body[data-font="large"] .mz-modal-head { font-size: 18px; }
body[data-font="large"] .mz-card .t, body[data-font="large"] .mz-card .s,
body[data-font="large"] .mz-kv .kv .k, body[data-font="large"] .mz-panel-head,
body[data-font="large"] .mz-todo-item, body[data-font="large"] .mz-quick,
body[data-font="large"] .mz-form-row label, body[data-font="large"] .mz-badge,
body[data-font="large"] .mz-toast, body[data-font="large"] .mz-pagination,
body[data-font="large"] .mz-mini-bars, body[data-font="large"] .mz-page-sub { font-size: 14px; }
body[data-font="large"] .mz-card .v { font-size: 24px; }
body[data-font="large"] .mz-kv .kv .v { font-size: 17px; }
body[data-font="large"] .mz-panel-head b { font-size: 15.5px; }
/* 表格与可视化保持默认尺寸（不放大、不挤压） */
body[data-font="large"] .mz-table { font-size: 14px; }
body[data-font="large"] .mz-table th { font-size: 13px; }
body[data-font="large"] .mz-table td { padding: 8px 14px; } /* 字号+1 → 行内边距-1，行高基本不变，保持整齐 */
body[data-font="large"] .mz-table .ops { font-size: 13px; }
body[data-font="large"] .mz-bars .mz-bar-label, body[data-font="large"] .mz-bars .mz-bar-val { font-size: 12px; }

body[data-sidebar="compact"] .mz-sidebar { width: 62px; padding: 12px 8px; }
body[data-sidebar="compact"] .mz-nav-item { justify-content: center; padding: 10px 0; }
body[data-sidebar="compact"] .mz-nav-txt { display: none; }
body[data-sidebar="compact"] .mz-nav-ico { width: auto; font-size: 17px; }
body[data-sidebar="compact"] .mz-nav-item.active { box-shadow: inset 3px 0 0 var(--blue-600); }
body[data-sidebar="compact"] .mz-nav-group-title { display: none; font-size: 0; }
@media (max-width: 780px) { body[data-sidebar="compact"] .mz-nav-txt { display: inline; } }
.mz-table td { color: var(--ink); }
/* 个性化设置：说明框随主题（避免行内浅色框） */
.mz-prefs-note { font-size: 13px; line-height: 1.9; color: #4c5872; background: #f8fafc; border: 1px solid #eef1f5; border-radius: 10px; padding: 10px 14px; margin-bottom: 16px; }

/* ---------- 表格全网格最终样式（每列竖线；深色线+表头浅蓝底，与 v1.0.20 淡蓝配色一致） ---------- */
.mz-table { border: 1px solid #70829c !important; }
.mz-table th { background: linear-gradient(#f7f9fc, #eef2f8) !important; color: #3f4d68 !important; border: 1px solid #70829c !important; font-weight: 700 !important; text-align: center !important; text-shadow: 0 1px 0 rgba(255,255,255,.6); }
.mz-table td { border: 1px solid #8d9db5 !important; }
.mz-table tbody tr:nth-child(odd) td { background: #f6f9fd !important; }
.mz-table tbody tr:nth-child(even) td { background: #ffffff !important; }
.mz-table tbody tr:hover td { background: #f5f9ff !important; }
.mz-table tr.tot td, .mz-table .bs-tot td { background: #eef2f8 !important; font-weight: 700; border-top: 2px solid #70829c !important; }
.mz-vou-lines td, .mz-vou-lines th { border: 1px solid #8d9db5 !important; }

/* ---------- 期末处理：月份网格 + 三步向导（沿用全站令牌与配色） ---------- */
.mz-period-year { font-size: 13px; font-weight: 700; color: var(--navy-900); margin: 6px 0 10px; }
.mz-period-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(122px, 1fr)); gap: 10px; margin-bottom: 20px; }
.mz-period-cell { background: #fff; border: 1px solid var(--line); border-left: 3px solid #cbd5e1; border-radius: var(--radius); padding: 11px 13px; cursor: pointer; transition: .16s; box-shadow: var(--shadow-card); }
.mz-period-cell:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(16,30,60,.1); }
.mz-period-cell .m { font-size: 17px; font-weight: 800; color: var(--navy-900); display: flex; align-items: center; justify-content: space-between; }
.mz-period-cell .t { font-size: 12px; color: var(--muted); margin-top: 4px; white-space: nowrap; }
.mz-period-cell.is-ready { border-left-color: var(--blue-600); }
.mz-period-cell.is-todo { border-left-color: #f59e0b; background: #fffdf7; }
.mz-period-cell.is-closed { border-left-color: #16a34a; background: #f6fdf9; }
.mz-period-cell.is-cur { border-color: var(--blue-600); box-shadow: 0 0 0 3px rgba(37,99,235,.12); }
.mz-legend { display: inline-flex; align-items: center; gap: 14px; font-size: 12px; color: #5b6b84; flex-wrap: wrap; }
.mz-legend > span { white-space: nowrap; display: inline-flex; align-items: center; }
.mz-legend i { display: inline-block; width: 9px; height: 9px; border-radius: 3px; margin-right: 5px; vertical-align: -1px; }

.mz-close-card .hd { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.mz-close-card .v small { font-size: 12px; font-weight: 500; color: var(--muted); margin-left: 5px; }
.mz-close-card .acts { margin-top: 12px; display: flex; gap: 8px; flex-wrap: wrap; }

.mz-steps { display: flex; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; }
.mz-steps .st { display: inline-flex; align-items: center; gap: 7px; padding: 6px 14px 6px 7px; border-radius: 20px; background: #fff; border: 1px solid var(--line); font-size: 13px; color: var(--muted); cursor: pointer; transition: .15s; }
.mz-steps .st b { width: 20px; height: 20px; border-radius: 50%; background: #eef1f6; color: #64748b; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; flex: 0 0 auto; }
.mz-steps .st.active { border-color: var(--blue-600); color: #1d4ed8; background: #f4f8ff; font-weight: 600; }
.mz-steps .st.active b { background: var(--blue-600); color: #fff; }
.mz-steps .st.done b { background: #16a34a; color: #fff; }
.mz-wizard-foot { display: flex; gap: 8px; justify-content: flex-end; align-items: center; padding: 16px 0 4px; }
.mz-wizard-foot .l { margin-right: auto; font-size: 12px; color: #5b6b84; }
.mz-note { font-size: 12px; line-height: 1.9; color: var(--md-on-surface-variant); background: #f8fafc; border: 1px solid #eef1f5; border-radius: 10px; padding: 10px 14px; margin-bottom: 14px; }

.mz-dropdown { position: relative; display: inline-block; }
.mz-dropdown-menu { position: absolute; right: 0; top: calc(100% + 6px); min-width: 230px; background: #fff; border: 1px solid var(--line); border-radius: 10px; box-shadow: var(--shadow-pop); padding: 6px; z-index: 30; display: none; }
.mz-dropdown-menu.open { display: block; }
.mz-dropdown-menu button { display: block; width: 100%; text-align: left; background: none; border: 0; padding: 9px 12px; border-radius: 7px; font-size: 13px; color: var(--ink); cursor: pointer; }
.mz-dropdown-menu button:hover { background: var(--blue-100); color: #1d4ed8; }

/* 向导/弹窗里的表格：窗口窄时整表横向滚动，避免「摘要 / 科目 / 明细」被挤成一字一行 */
.mz-closing-body, .mz-modal-body { overflow-x: auto; }
.mz-closing-body table.mz-table, .mz-modal-body table.mz-table { min-width: 520px; }

/* 填制凭证表头：附件 / 备注 / 记账帮助 / 放大 / 全屏 */
.mz-vou-head .mz-vou-link, .mz-vou-head .mz-vou-help {
  color: var(--blue-600); text-decoration: none; cursor: pointer; font-size: 13px;
  padding: 2px 6px; border-radius: 5px; white-space: nowrap;
}
.mz-vou-head .mz-vou-link:hover, .mz-vou-head .mz-vou-help:hover { background: var(--md-hover); }
.mz-vou-head .mz-vou-link.is-on { font-weight: 600; }
.mz-vou-head .vou-att-n { color: #c0392b; font-size: 12px; }
.mz-vou-head .mz-vou-help {
  display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px;
  border: 1px solid var(--blue-600); border-radius: 50%; font-size: 12px; line-height: 1; padding: 0;
}
.mz-vou-head .mz-vou-tip { color: #d48806; font-size: 12.5px; }
/* 录入区版式：默认「瘦」——表头/提示/表格居中收窄（与平台一致）；点「放大」后铺满可用宽度，
   只改表格宽度，不放大文字 */
.mz-vou-entry .mz-vou-head,
.mz-vou-entry .mz-vou-hint,
.mz-vou-entry .vou-lines-wrap {
  max-width: 1000px; margin-left: auto; margin-right: auto;
}
.mz-vou-entry.vou-zoomed .mz-vou-head,
.mz-vou-entry.vou-zoomed .mz-vou-hint,
.mz-vou-entry.vou-zoomed .vou-lines-wrap {
  max-width: none;
}
/* 放大后金额列略加宽，数字更好读（字号保持不变） */
.mz-vou-entry.vou-zoomed .mz-vou-lines th:nth-child(4), .mz-vou-entry.vou-zoomed .mz-vou-lines td:nth-child(4),
.mz-vou-entry.vou-zoomed .mz-vou-lines th:nth-child(5), .mz-vou-entry.vou-zoomed .mz-vou-lines td:nth-child(5) { width: 15%; }
.mz-vou-entry:fullscreen { background: #fff; padding: 10px 14px; overflow: auto; }
.mz-vou-entry:-webkit-full-screen { background: #fff; padding: 10px 14px; overflow: auto; }

/* 全屏录入（沉浸式）：保留浏览器自身界面，只隐藏本系统的外壳 —— 顶栏 / 左侧导航 / 页签条 / 模块标题，
   录入区铺满整个视口；按 Esc 或再点「退出全屏」还原。 */
body.mz-immersive .mz-topbar,
body.mz-immersive .mz-sidebar,
body.mz-immersive .mz-vou-tabs,
body.mz-immersive .mz-page-head { display: none !important; }
body.mz-immersive .mz-body { display: block !important; }
body.mz-immersive .mz-main { padding: 0 !important; height: 100vh; overflow: hidden; }
body.mz-immersive .mz-vou-entry {
  position: fixed; inset: 0; z-index: 900; overflow: auto;
  background: var(--card, #fff); padding: 14px 20px 28px;
}
body.mz-immersive .mz-vou-entry .mz-vou-head,
body.mz-immersive .mz-vou-entry .mz-vou-hint,
body.mz-immersive .mz-vou-entry .vou-lines-wrap { max-width: none !important; }
/* 沉浸式下：标题固定顶部、操作栏固定底部（否则会被铺满的录入区盖住，保存按钮点不到） */
body.mz-immersive .mz-vou-entry-head {
  position: fixed; top: 0; left: 0; right: 0; z-index: 950; background: var(--card, #fff);
  padding: 8px 20px; border-bottom: 1px solid #eef1f5; margin: 0;
}
body.mz-immersive .mz-vou-entry-head h3 { margin: 0; font-size: 15px; }
body.mz-immersive .mz-vou-entry-foot {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 950; background: var(--card, #fff);
  border-top: 1px solid #eef1f5; padding: 8px 20px; margin: 0; display: flex; gap: 8px; align-items: center;
}
body.mz-immersive .mz-vou-entry { padding: 58px 20px 70px; }

/* 导航分类（报表 / 税务管理 / 工资管理 / AI 这类有分类的项）：鼠标移上去在**主项右侧**弹出浮层。
   ⚠ 不能用绝对定位往侧栏外面弹：`.mz-sidebar` 是 overflow-y:auto，横向同样会被裁剪，浮层直接看不见。
   所以浮层用 position:fixed（fixed 不受祖先 overflow 裁剪影响），位置由 shell.js 的 bindNavFly() 算。
   这样做还有一个好处：浮层不占文档流 —— 原先"就地展开"会把下面的项推下去，侧栏滚到下半段时
   浏览器重算滚动位置，鼠标底下那一行会被顶走（用户报的"主项直接向上移动"）。 */
.mz-nav-wrap .mz-nav-arrow { margin-left: auto; opacity: .45; font-size: 12px; }
/* 快捷导航：导航项右侧的 ★ 收藏开关（平时隐藏，鼠标移到该项或已收藏时常显） */
.mz-nav-wrap { position: relative; }
.mz-nav-sub { position: fixed; display: none; z-index: 2400; min-width: 200px; padding: 8px;
  background: var(--md-surface); border: 1px solid #e2e8f0; border-radius: var(--md-r-md); box-shadow: var(--md-e3); }
/* 分类浮层指向主项的小三角（位置在 shell.js 里算；独立元素而不是 ::after，
   免得以后给浮层加 max-height/滚动条时把三角裁掉） */
.mz-nav-fly-arrow { position: fixed; display: none; z-index: 2401; width: 8px; height: 8px;
  background: var(--md-surface); border-left: 1px solid #e2e8f0; border-bottom: 1px solid #e2e8f0; transform: rotate(45deg); }
/* 主项与浮层之间那条 4px 缝隙也算"还停着"：透明命中条（鼠标斜着往下移不会先收掉） */
.mz-nav-sub::before { content: ''; position: absolute; left: -12px; top: 0; bottom: 0; width: 12px; }
.mz-nav-subrow { display: flex; align-items: center; gap: 6px; }
.mz-nav-subrow .mz-nav-subitem { flex: 1; }
/* 分类子项自己的 ★（父项那颗星已去掉：父项只是分类，点了进第一个子类） */
.mz-nav-substar { width: 26px; height: 26px; border: 0; background: transparent; color: var(--md-on-surface-variant);
  font-size: 15px; line-height: 1; cursor: pointer; border-radius: 7px; padding: 0;
  transition: background .15s, color .15s; flex-shrink: 0; }
/* 浮层本身就是"鼠标已经停在分类上"的状态，所以子项那颗 ★ **常显**，
   不再要求再悬停一次子项行才露出来（用户要的是"星星跟在每个选项后面"）。 */
.mz-nav-subrow:hover .mz-nav-substar { color: #8a97a5; }
.mz-nav-substar.on { color: var(--md-warning); }
.mz-nav-substar:hover { background: var(--md-hover-neutral); color: var(--md-warning); }
.mz-nav-star { position: absolute; right: 4px; top: 50%; transform: translateY(-50%); width: 22px; height: 22px;
  border: 0; background: transparent; color: var(--md-on-surface-variant); font-size: 13px; line-height: 1; cursor: pointer; border-radius: 6px;
  opacity: 0; transition: opacity .15s, color .15s; padding: 0; }
.mz-nav-wrap:hover .mz-nav-star, .mz-nav-star:focus { opacity: 1; }
.mz-nav-star.on { opacity: 1; color: var(--md-warning); }
.mz-nav-star:hover { background: var(--md-hover-neutral); color: #f0a500; }
body[data-sidebar="compact"] .mz-nav-star { display: none; }
/* 帮助中心：新手引导步骤 / 业务流程 / 常见问题 */
.mz-help-step { padding: 9px 0; border-top: 1px dashed #e6ecf5; display: flex; align-items: flex-start; gap: 10px; flex-wrap: wrap; }
.mz-help-step:first-of-type { border-top: 0; }
.mz-help-step .t { font-weight: 600; font-size: 13.5px; min-width: 190px; }
.mz-help-step .d { flex: 1; min-width: 260px; font-size: 12.5px; color: #5b6b84; line-height: 1.75; }
.mz-help-flow { padding: 10px 0; border-top: 1px dashed #e6ecf5; }
.mz-help-flow:first-of-type { border-top: 0; }
.mz-help-flow .t { font-weight: 600; font-size: 13.5px; margin-bottom: 4px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.mz-help-flow ol { margin: 0; padding-left: 22px; font-size: 12.5px; color: #5b6b84; line-height: 1.9; }
.mz-help-faq { padding: 8px 0; border-top: 1px dashed #e6ecf5; }
.mz-help-faq:first-of-type { border-top: 0; }
.mz-help-faq summary { cursor: pointer; font-size: 13.5px; font-weight: 600; }
.mz-help-faq .a { font-size: 12.5px; color: #5b6b84; line-height: 1.85; padding: 6px 0 2px 18px; }
/* 首页的新手引导条 */
.mz-onboard { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 10px 14px; margin-bottom: 12px;
  border: 1px solid #cfe0fb; border-radius: 12px; background: linear-gradient(90deg, #f2f8ff, #fbfdff); font-size: 13px; color: #33506f; }
.mz-onboard b { color: #1d4ed8; }
/* 分类子项：结构仍是 `.mz-nav-wrap > .mz-nav-sub > a.mz-nav-subitem`（验证脚本按这个查 DOM），
   只是外层 `.mz-nav-sub` 从"就地展开"改成"右侧浮层"（规则在上面导航那一段，靠 shell.js 定位）。 */
/* 分类子项：字号与侧栏主项一致（14.5px），行更高、更好点（用户 2026-10-15："字体可以大一些，易选择一些"） */
.mz-nav-subitem { display: block; padding: 9px 12px; margin-bottom: 2px; border-radius: var(--md-r-sm); color: #41506b; text-decoration: none; font-size: 14.5px; line-height: 1.45; white-space: nowrap; }
.mz-nav-subitem:hover { background: var(--md-hover); color: var(--md-primary); }
/* 「大字」偏好也要跟着放大浮层，否则开了大字反而这里最小 */
body[data-font="large"] .mz-nav-subitem { font-size: 16px; padding: 10px 12px; }
body[data-font="large"] .mz-nav-substar { width: 30px; height: 30px; font-size: 17px; }

/* 页面上方的分类面包屑（报表 › 管理报表） */
.mz-subnav { display: flex; align-items: center; gap: 6px; margin: 0 0 8px; font-size: 13px; color: #8a97a5; }
.mz-subnav-mod { color: var(--md-on-surface-variant); }
.mz-subnav-sep { opacity: .6; }
.mz-subnav-cur { color: var(--md-on-surface); font-weight: 600; }
.mz-subnav-sub { margin-left: 8px; color: #8a97a5; font-weight: 400; }

/* ============================================================================
   ↓↓↓ 以下整段是原 web/css/m3.css（Material 3 皮肤），2026-10-13「阶段 B」合并进本文件末尾。
   合并前后级联顺序完全一致（原先是 app.css 先加载、m3.css 后加载）；
   要回滚这一整段，从这一行删到文件末尾即可 —— 合并前的三件套基线见项目外的 _work/baseline-m3-before-20261013。
   ========================================================================== */
/* ============================================================================
   星衡 FMS · Material Design 3 皮肤（原独立文件 m3.css，2026-10-13 由「阶段 B」合并进 app.css 末尾）

   加载方式：合并前是 index.html 里两个 <link>（app.css 在前、m3.css 在后）—— 同权重规则后加载的赢。
   合并后这一整段仍排在 app.css 原有规则**之后**，级联顺序与合并前逐字相同，页面渲染不变
   （合并前后各 11 页的元素绝对坐标与关键计算样式逐项比对通过，脚本见 _work/cdp-snapshot.mjs）。

   ⚠ 更正：本节原写"app.css 一个字节都不用改，回滚只需删掉那一行 link"，与事实不符 ——
   本版（v1.3.16）app.css 本身就改过（默认字号整体上移一级、表格外壳只圆上面两角、
   分隔条握把默认不画、侧栏分类浮层样式），与 v1.3.15 相比是 +76 / −46 行。
   回滚要么盖回合并前基线（app.css + index.html + m3.css 三件），要么删掉本文件末尾这一整段。

   ── 本层只做一件事：换"皮肤" ──
   允许改：颜色 / 背景 / 边框色 / 圆角 / 阴影 / hover·focus 状态层 / 去掉装饰性图形。
   一律不改：任何**尺寸与排版** —— height、padding、margin、width、font-size、line-height、
             font-family、字重、边框线宽。理由见下面"表格为什么不参与"。

   ── 三条纪律 ──
   ① 只改样式，不动任何 DOM/JS/类名（100 个验证脚本按 .mz-* 点页面，改名会让它们全红）；
   ② 所有颜色只走 --md-* 令牌，不写第二条规则；
   ③ `body[data-theme]` 前缀是为了权重：与 app.css 原有规则同权重、靠后加载取胜。
      因为本层不碰尺寸，**大字模式与紧凑侧栏无需重新实现**
      （它们只改字号与显隐，本层不覆盖）。

   ── 表格为什么不参与（重要） ──
   app.css 第 833 行起那一整块表格样式带 `!important`（边框、表头渐变、斑马纹、合计行），
   而财务报表（含资产负债表那张 .bs-dual）与账簿的行高/字号/列距是**核对过、要贴打印口径**的固定值。
   所以本层对 .mz-table / .bs-dual / .mz-vou-lines **一律不动**：既不碰尺寸，也不去和 !important 较劲
   （否则只会留下一堆"写了却不生效"的死规则）。列表页将来若要更 M3 的表格皮肤，单独一阶段做，
   并用 `.mz-report` 反向排除报表。
   ========================================================================== */

/* ---------- ① 设计令牌（浅色） ---------- */
:root {
  --md-primary: #1a73e8;
  --md-on-primary: #ffffff;
  --md-primary-container: #d3e3fd;
  --md-on-primary-container: #041e49;
  --md-primary-hover: #1b66c9;

  /* 表面阶梯（浅 → 深）：靠分层区分，不再靠阴影堆叠 */
  --md-surface: #ffffff;
  --md-surface-1: #f8fafd;
  --md-surface-2: #f1f4f9;
  --md-surface-3: #e9eef6;
  --md-surface-dim: #f3f5fa;
  --md-inverse-surface: #2f3033;
  --md-inverse-on-surface: #f1f3f4;

  --md-on-surface: #1f1f1f;
  --md-on-surface-variant: #5f6368;
  --md-outline: #dadce0;
  --md-outline-variant: #e8eaed;

  --md-error: #d93025; --md-error-container: #fce8e6; --md-on-error-container: #601410;
  --md-success: #1e8e3e; --md-success-container: #e6f4ea; --md-on-success-container: #0d652d;
  --md-warning: #b06000; --md-warning-container: #fef7e0; --md-on-warning-container: #6b4200;
  --md-info-container: #e8f0fe; --md-on-info-container: #174ea6;

  /* 状态层（M3：hover/pressed 用透明叠加，不换底色） */
  --md-hover: rgba(26, 115, 232, .08);
  --md-pressed: rgba(26, 115, 232, .12);
  --md-hover-neutral: rgba(31, 31, 31, .06);

  /* 形状（只改圆角，不改尺寸） */
  --md-r-sm: 8px; --md-r-md: 12px; --md-r-lg: 16px; --md-r-xl: 28px; --md-r-full: 999px;

  /* 高度 3 级（只给浮层用；卡片一律去掉重阴影） */
  --md-e1: 0 1px 2px rgba(60,64,67,.16), 0 1px 3px 1px rgba(60,64,67,.08);
  --md-e2: 0 1px 2px rgba(60,64,67,.16), 0 2px 6px 2px rgba(60,64,67,.10);
  --md-e3: 0 4px 8px 3px rgba(60,64,67,.10), 0 1px 3px rgba(60,64,67,.18);
}

/* ---------- ② 顶栏（M3 Top App Bar：纯色表面 + 细分隔线；去掉原来的渐变描边） ---------- */
body[data-theme] .mz-topbar {  border-bottom-color: var(--md-outline-variant);  }
body[data-theme] .mz-topbar::after { display: none; }
body[data-theme] .mz-brand-sub, body[data-theme] #mz-user-name { color: var(--md-on-surface-variant); }
body[data-theme] .mz-top-ctl select, body[data-theme] .mz-top-ctl input,
body[data-theme] #mz-set, body[data-theme] #mz-period {
  background: var(--md-surface); color: var(--md-on-surface); border-color: var(--md-outline);
}
body[data-theme] .mz-top-ctl select:hover, body[data-theme] .mz-top-ctl input:hover { background: var(--md-hover-neutral); }
body[data-theme] .mz-topbar .mz-btn { border-color: transparent; background: transparent; color: var(--md-on-surface-variant); box-shadow: none; }
body[data-theme] .mz-topbar .mz-btn:hover {  color: var(--md-on-surface);  } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */

/* ---------- ③ 侧栏（M3 Navigation Drawer：选中项是右侧全圆胶囊 + 主色容器底） ---------- */
body[data-theme] .mz-sidebar { background: var(--md-surface); border-right-color: var(--md-outline-variant); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
/* 单项目分组用的细分隔线（app.css 里是 --line-2，暗色下那支是浅色会发白，这里统一走 M3 描边色） */ /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-nav-star.on, body[data-theme] .mz-nav-star:hover { color: var(--md-warning); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */

/* ---------- ④ 页面头 / 面包屑（只去装饰、换颜色，尺寸不动） ---------- */
body[data-theme] .mz-page-head::before { display: none; }          /* 去掉左 */ /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-subnav-mod, body[data-theme] .mz-subnav-sep, body[data-theme] .mz-subnav-sub { color: var(--md-on-surface-variant); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */

/* ---------- ⑤ 页签（只换色与状态层；指示条线宽保持原样，免得挤动布局） ---------- */
body[data-theme] .mz-tabs { border-bottom-color: var(--md-outline-variant); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-tab.active {   box-shadow: none; }

/* ---------- ⑥ 筛选条（从"卡片"降级为"工具条"：去底色去阴影去圆角，内边距不动） ---------- */
body[data-theme] .mz-filter-bar {
  background: transparent; border-color: transparent; border-bottom-color: var(--md-outline-variant);
  border-radius: 0; box-shadow: none;
}
body[data-theme] .mz-report-bar {
  /* 这是四边 1px 边框，去掉上边框会让这条工具条矮 1px、下面整张报表跟着上移 1px。
     所以要保留边框线宽，只把颜色换掉：上左右透明、下边一条分隔线。 */
  background: transparent; border-color: transparent; border-bottom-color: var(--md-outline-variant);
  border-radius: 0; box-shadow: none;
} /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-filter-bar input, body[data-theme] .mz-filter-bar select,
body[data-theme] .mz-form-ctrl input, body[data-theme] .mz-form-ctrl select,
body[data-theme] .mz-form-ctrl textarea, body[data-theme] .mz-input {
  background: var(--md-surface); color: var(--md-on-surface); border-color: var(--md-outline);
}
body[data-theme] .mz-filter-bar input:hover, body[data-theme] .mz-filter-bar select:hover { background: var(--md-surface-1); }
body[data-theme] .mz-filter-bar input:focus, body[data-theme] .mz-filter-bar select:focus,
body[data-theme] .mz-form-ctrl input:focus, body[data-theme] .mz-form-ctrl select:focus {
  outline: none; border-color: var(--md-primary); box-shadow: 0 0 0 1px var(--md-primary);
}
body[data-theme] .mz-period-chip { background: var(--md-primary-container); color: var(--md-on-primary-container); border-color: transparent; }

/* ---------- ⑦ 按钮（换色 + 全圆 + 去渐变去上浮；内边距与字号保持原样） ---------- */
body[data-theme] .mz-btn {
  border-radius: var(--md-r-full); background: transparent; color: var(--md-primary);
  border-color: var(--md-outline); box-shadow: none;
} /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-btn-danger:hover { background: var(--md-error);  } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-btn-login { background: var(--md-primary); box-shadow: var(--md-e1); }
body[data-theme] .mz-btn-login:hover { background: var(--md-primary-hover);  }

/* ---------- ⑧ 卡片 / KV / 面板（去重阴影、统一描边；尺寸不动） ---------- */
body[data-theme] .mz-card, body[data-theme] .mz-cards .mz-card, body[data-theme] .mz-kv,
body[data-theme] .mz-dash-panel, body[data-theme] .mz-msg-card {
  background: var(--md-surface); border-color: var(--md-outline-variant); box-shadow: none;
} /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-card .t, body[data-theme] .mz-kv .kv .k, body[data-theme] .mz-card .s,
body[data-theme] .mz-panel-head .mz-panel-more { color: var(--md-on-surface-variant); }
body[data-theme] .mz-card .v, body[data-theme] .mz-kv .kv .v, body[data-theme] .mz-card-stat .v { color: var(--md-on-surface); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-quick, body[data-theme] .mz-todo-item { border-color: var(--md-outline-variant); }
body[data-theme] .mz-quick:hover, body[data-theme] .mz-todo-item:hover { background: var(--md-hover); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-empty, body[data-theme] .mz-loading, body[data-theme] .mz-page-empty { color: var(--md-on-surface-variant); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */

/* ---------- ⑨ 徽章（M3 语义容器色；只改圆角与配色，不动内边距字号） --------- */ /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */

/* ---------- ⑩ 弹窗 / 浮层 / 提示条（只换色与阴影） --------- */ /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-modal-head, body[data-theme] .mz-modal-foot { border-color: var(--md-outline-variant); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-menu, body[data-theme] .mz-dropdown-menu, body[data-theme] .mz-pp-pop,
body[data-theme] .ym-pop, body[data-theme] .acc-pop, body[data-theme] .led-pop,
body[data-theme] .dim-pop, body[data-theme] .dim-sel-pop, body[data-theme] .dim-sel-box,
body[data-theme] .mz-dp-pop, body[data-theme] .sum-drop {
  background: var(--md-surface); border-color: var(--md-outline-variant); box-shadow: var(--md-e2);
}
body[data-theme] .mz-menu-item, body[data-theme] .mz-dropdown-menu button { color: var(--md-on-surface); }
body[data-theme] .mz-menu-item:hover, body[data-theme] .mz-dropdown-menu button:hover,
body[data-theme] .acc-item:hover, body[data-theme] .acc-item.on { background: var(--md-hover); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-toast-success { background: var(--md-success); color: #fff; }
body[data-theme] .mz-toast-error { background: var(--md-error); color: #fff; }
body[data-theme] .mz-check input, body[data-theme] .mz-radio input,
body[data-theme] .mz-filter-bar input[type=checkbox] { accent-color: var(--md-primary); }

/* ---------- ⑪ 登录页（第一印象：换配色与圆角，尺寸不动） --------- */ /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-login-right { background: var(--md-surface); }
/* ⚠ 登录按钮是 `.mz-btn.mz-btn-login`：上面 ⑦ 那条 `body[data-theme] .mz-btn { color: var(--md-primary) }`
   权重比 app.css 的 `.mz-btn-login { color:#fff }` 高，会把按钮文字染成和主色底一样的蓝 —— 蓝底蓝字看不见。
   这里按"主色底 + on-primary 字"补回来（只改颜色）。 */
body[data-theme] .mz-btn-login { color: var(--md-on-primary); }
/* 登录右栏在暗色下变成深色面，这几处 app.css 只写了浅色一套，要跟着走，否则是深底深字 */ /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-login-tip, body[data-theme] .mz-login-foot, body[data-theme] .mz-login-deliv { color: var(--md-on-surface-variant); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-login-field input, body[data-theme] .mz-login-captcha input {
   border-color: var(--md-outline); 
}
body[data-theme] .mz-login-field input:focus, body[data-theme] .mz-login-captcha input:focus {
  border-color: var(--md-primary); box-shadow: 0 0 0 1px var(--md-primary);
} /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */

/* 打印时保持黑白（表格本就由 app.css 的 !important 主导，这里只把外壳去阴影） */
@media print {
  body[data-theme] .mz-card, body[data-theme] .mz-topbar, body[data-theme] .mz-sidebar {
    box-shadow: none !important; background: #fff !important;
  }
}

/* ---------- ⑫ 报表与账簿：工具条周边 + 浮层（表格本体一律不碰） ----------
   纪律：`.bs-*`（资产负债表双栏表）、`.mz-table`、`.mz-ledger` 里的表格**一个字都不改** ——
   行高/字号/列距是核对过、要贴打印口径的固定值，用户明确要求保持现状。
   这一节只处理"表格外面"的东西：期间/年月选择浮层、账簿的范围面板、科目搜索框、帮助图标。 */

/* 年月选择浮层（报表页顶部「2026年10月 ▾」点开）：列改成 M3 表面阶梯，选中项 */ /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
/* 浮层顶部左右翻页的箭头（app.css 里是裸 button） */
body[data-theme] .mz-pp-pop button { color: var(--md-primary); background: transparent; border-radius: var(--md-r-full); }
body[data-theme] .mz-pp-pop button:hover { background: var(--md-hover); }

/* 账簿「期间/范围」面板（.led-pop）：里面的输入框、微调器、搜索框、标签统一换 M3 配色 */
body[data-theme] .led-pop input, body[data-theme] .led-pop select, body[data-theme] .led-pop textarea,
body[data-theme] .led-kw-in, body[data-theme] .led-acc input, body[data-theme] .led-date input {
  background: var(--md-surface); color: var(--md-on-surface); border-color: var(--md-outline);
}
body[data-theme] .led-pop input:focus, body[data-theme] .led-pop select:focus { border-color: var(--md-primary); box-shadow: 0 0 0 1px var(--md-primary); outline: none; } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .led-spin {  border-color: var(--md-outline);  }
body[data-theme] .led-spin input { background: transparent; color: var(--md-on-surface); }
body[data-theme] .led-spin-btns { border-left-color: var(--md-outline-variant); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
/* 账簿顶部「2026年10月 ▾」范围胶囊 */
body[data-theme] .led-chip { background: var(--md-primary); color: var(--md-on-primary); }
body[data-theme] .led-ico { color: inherit; }

/* 明细账右侧「科目快速切换」：搜索框的边框/内边距是 ledger.js 写在行内样式上的，
   行内样式只能靠 !important 盖住 —— 这里只盖颜色与圆角，尺寸一概不动。 */
body[data-theme] .q-kw {
  background: var(--md-surface) !important; color: var(--md-on-surface) !important;
  border-color: var(--md-outline) !important; border-radius: var(--md-r-sm) !important;
}
body[data-theme] .q-kw::placeholder { color: var(--md-on-surface-variant); }
body[data-theme] .q-kw:focus { border-color: var(--md-primary) !important; outline: none; }
body[data-theme] .q-panel { color: var(--md-on-surface); }

/* 报表工具条上的勾选项与「?」帮助图标（只在表格外面，不影响表体） */
body[data-theme] .mz-check, body[data-theme] .mz-check > span, body[data-theme] .rc-help { color: var(--md-on-surface-variant); }
body[data-theme] .rc-help { border-color: var(--md-outline); background: transparent; } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */

/* ---------- ⑬ 凭证录入（密集表单）：只换配色，明细网格的尺寸一律不动 ----------
   明细网格 .mz-vou-lines 的 td/th 内边距、输入框 padding、行高、字号**禁止改动**
   （用户明确要求"功能性的行高字号保持现状"）。app.css 里这个网格的边框/表头/输入框
   是带 !important 的，所以这里也只能用 !important 盖**颜色**，且只写颜色类属性 */ /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-vou-head .mz-vou-no-tip, body[data-theme] .mz-vou-head .words-hint { color: var(--md-on-surface-variant); }
body[data-theme] .mz-vou-link, body[data-theme] .mz-vou-head .mz-vou-help { color: var(--md-primary); }
body[data-theme] .mz-vou-head .mz-vou-link:hover, body[data-theme] .mz-vou-head .mz-vou-help:hover { background: var(--md-hover); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-vou-lines td, body[data-theme] .mz-vou-lines th { border-color: var(--md-outline-variant) !important; }
body[data-theme] .mz-vou-lines th { background: var(--md-surface-2) !important; color: var(--md-on-surface-variant) !important; }
body[data-theme] .mz-vou-lines input, body[data-theme] .mz-vou-lines select {
  background: var(--md-surface); color: var(--md-on-surface); border-color: var(--md-outline);
}
body[data-theme] .mz-vou-lines input:focus, body[data-theme] .mz-vou-lines select:focus {
  border-color: var(--md-primary); box-shadow: 0 0 0 1px var(--md-primary); outline: none;
} /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-totalbar { color: var(--md-on-surface); }
body[data-theme] .sum-drop, body[data-theme] .acc-drop { background: var(--md-surface); border-color: var(--md-outline-variant); box-shadow: var(--md-e2); color: var(--md-on-surface); }
body[data-theme] .mz-table-toolbar, body[data-theme] .mz-table-foot, body[data-theme] .v-listbar { background: var(--md-surface-1); border-color: var(--md-outline-variant); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body[data-theme] .mz-vou-tabs { border-bottom-color: var(--md-outline-variant); }
/* 全屏/放大（沉浸）模式下的卡片底色也跟着走，免得闪回旧海军蓝 */ /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */
body.mz-immersive[data-theme] .mz-vou-entry-head, body.mz-immersive[data-theme] .mz-vou-entry-foot { background: var(--md-surface-dim); border-color: var(--md-outline-variant); }255,
255"],
255,
255"]{
  background: var(--md-surface-2) !important; color: var(--md-on-surface-variant) !important;
}

/* ---------- ⑮ 侧栏分类浮层（向右弹出）：只换色与圆角，尺寸/内边距由 app.css 决定 ---------- */
body[data-theme] .mz-nav-sub { background: var(--md-surface); border-color: var(--md-outline-variant); border-radius: var(--md-r-md); box-shadow: var(--md-e3); } /* B2：声明已等价迁进老段（同一 --md-* 令牌），删除 */

/* 凭证与账簿工作区：数字易核对，滚动只发生在表格内。 */
.mz-voucher, .mz-ledger { min-width: 0; }
.mz-voucher .mz-btn, .mz-ledger .mz-btn { box-shadow: none; }
.mz-voucher .mz-btn:hover, .mz-ledger .mz-btn:hover { transform: none; }
body[data-theme] .mz-voucher .v-listbar > .mz-btn-primary:first-child,
body[data-theme] .mz-vou-entry-foot > .mz-btn-primary { background: var(--md-primary); color: var(--md-on-primary); border-color: var(--md-primary); }
.mz-voucher .v-listbar { gap: 10px; }
.mz-voucher .v-listbar .t-run { margin-left: auto; }
.mz-voucher .mz-table-toolbar:empty, .mz-ledger .mz-table-toolbar:empty { display: none; }
.mz-voucher .mz-table-scroll, .mz-ledger .mz-table-scroll { max-height: 60vh; overflow: auto; overscroll-behavior: contain; }
.mz-voucher .mz-vou-area .mz-table { min-width: 1000px; }
.mz-ledger .mz-table { min-width: 740px; }
.mz-voucher .mz-table-scroll thead, .mz-ledger .mz-table-scroll thead { position: sticky; top: 0; z-index: 2; }
.mz-voucher .mz-table td[style*="text-align:right"], .mz-ledger .mz-table td[style*="text-align:right"],
.mz-vou-lines .l-deb, .mz-vou-lines .l-cre, .mz-totalbar { font-variant-numeric: tabular-nums; white-space: nowrap; }
.mz-voucher .mz-vou-area .mz-table td { vertical-align: middle; }
.mz-voucher .mz-vou-area .mz-table td:nth-child(3),
.mz-voucher .mz-vou-area .mz-table td:nth-child(5),
.mz-voucher .mz-vou-area .mz-table td:nth-child(6),
.mz-voucher .mz-vou-area .mz-table td:nth-child(7) { white-space: nowrap; }
.mz-voucher .mz-table .ops { min-width: 182px; }
.mz-voucher .mz-table .ops .mz-btn { margin-right: 4px; }
.mz-voucher .mz-table .ops .mz-btn:disabled { opacity: .7; }
.mz-voucher .mz-table .ops { position: sticky; right: 0; background: var(--md-surface); box-shadow: -2px 0 3px rgba(0,0,0,.05); }
.mz-voucher .mz-table tr:hover .ops { background: var(--md-surface-2); }
.mz-ledger .mz-ledger-total td { background: var(--md-surface-2); font-weight: 700; border-top: 2px solid var(--md-outline); }
.mz-ledger td.r { font-variant-numeric: tabular-nums; white-space: nowrap; }
.mz-ledger .g-sub:has(td > b) td { font-weight: 600; border-top: 2px solid var(--md-outline); }
.mz-ledger .d-print-slot { flex-wrap: wrap; }
.mz-vou-error { margin: 12px 18px 0; padding: 10px 14px; border: 1px solid var(--md-error); border-radius: 8px; background: var(--md-error-container); color: var(--md-on-error-container); line-height: 1.7; overflow-wrap: anywhere; }
.mz-vou-error[hidden] { display: none; }
.mz-vou-entry .vou-lines-wrap { overflow-x: auto; }
.mz-vou-entry .lines-tbl { min-width: 740px; }
.mz-vou-lines tbody tr:focus-within { background: var(--md-primary-container); }
.mz-vou-lines input:focus-visible { outline: 2px solid var(--md-primary); outline-offset: 1px; }
.mz-vou-lines .l-deb, .mz-vou-lines .l-cre { text-align: right; }
.mz-totalbar { white-space: normal; line-height: 1.8; }
.bal-msg { display: inline-block; margin-left: 10px; font-weight: 600; }
.bal-msg.is-balanced { color: var(--md-primary); }
.bal-msg.is-unbalanced { color: var(--md-error); }
.mz-vou-entry-foot { flex-wrap: wrap; position: sticky; bottom: -1px; z-index: 4; }
.mz-voucher .mz-menu-item:focus-visible { outline: 2px solid var(--md-primary); outline-offset: -2px; background: var(--md-hover); }

@media screen and (max-width: 1100px) {
  body .mz-sidebar { width: 62px; padding: 12px 8px; }
  body .mz-nav-item { justify-content: center; padding: 10px 0; }
  body .mz-nav-txt, body[data-sidebar="compact"] .mz-nav-txt,
  body .mz-nav-group-title, body .mz-nav-star, body .mz-nav-arr { display: none; }
  body .mz-nav-txt, body[data-sidebar="compact"] .mz-nav-txt { display: inline; position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  body .mz-nav-ico { width: auto; font-size: 17px; }
  .mz-main { padding: 16px 14px 60px; }
  .mz-page-head { flex-wrap: wrap; }
  .mz-page-head h2 { flex-shrink: 0; }
  .mz-ledger .mz-filter-bar, .mz-voucher .mz-filter-bar { gap: 8px; padding: 10px; }
}
@media screen and (max-width: 640px) {
  .mz-topbar { height: auto; min-height: 58px; flex-wrap: wrap; gap: 6px; padding: 8px 10px; }
  .mz-top-ctl { order: 3; width: 100%; margin-left: 0; flex-wrap: wrap; }
  .mz-user { gap: 4px; }
  #mz-lang, #mz-help, .mz-topbar .mz-deliv { display: none; }
  #mz-set { flex: 1; max-width: none; min-width: 96px; }
  .mz-main { padding: 12px 8px 40px; }
  .mz-page-head h2 { font-size: 19px; }
  .mz-page-sub { line-height: 1.6; }
  .mz-vou-entry-head, .mz-vou-entry-foot { padding: 10px; }
  .mz-vou-entry-foot { gap: 8px; }
  .mz-vou-error { margin: 10px 10px 0; }
  .mz-vou-head label { max-width: 100%; flex-wrap: wrap; }
  .mz-vou-head .mz-vou-no-tip { white-space: normal; overflow-wrap: anywhere; }
  .mz-ledger .b-opts { flex-wrap: wrap; }
  .mz-ledger-detail-layout { flex-direction: column; }
  .mz-ledger-detail-layout > div:first-child { width: 100%; }
  .mz-ledger-detail-layout .q-panel { width: 100% !important; flex-basis: auto !important; max-height: 240px; margin-top: 12px; }
  .mz-ledger-detail-layout .q-split { display: none; }
}
@media print {
  .mz-voucher .mz-table-scroll, .mz-ledger .mz-table-scroll { max-height: none; overflow: visible; }
  .mz-voucher .mz-vou-area .mz-table, .mz-ledger .mz-table, .mz-vou-entry .lines-tbl { min-width: 0; }
  .mz-voucher .mz-table-scroll thead, .mz-ledger .mz-table-scroll thead { position: static; }
  .mz-voucher .mz-table .ops, .mz-vou-error { display: none; }
  .mz-vou-entry-foot { position: static; }
}

/* 客户服务与建账：沿用现有主题变量，窄屏按一列显示。 */
.mz-service-help { color:var(--md-on-surface-variant,#64748b);font-size:12px;line-height:1.7; }
.mz-service-summary { display:grid;grid-template-columns:2fr 1fr 1fr;gap:20px;padding:20px;border:1px solid var(--md-outline-variant,#dce2eb);border-radius:14px;margin-bottom:16px;line-height:1.9; }
.mz-service-summary h3 { margin:4px 0 10px; }.mz-service-summary strong { font-size:24px;font-variant-numeric:tabular-nums; }
.mz-service-summary>div { min-width:0;overflow-wrap:anywhere; }
.mz-service-customers .mz-table th,.mz-service-customers .mz-table td { white-space:nowrap; }
.mz-service-customers .mz-table td:first-child { white-space:normal;min-width:105px; }
.mz-service-form { display:grid;grid-template-columns:1fr 1fr;gap:4px 18px; }.mz-service-form .mz-form-row { min-width:0; }
.mz-service-form .mz-form-ctrl input,.mz-service-form .mz-form-ctrl select { width:100%;box-sizing:border-box; }
.mz-service-entry { border-bottom:1px solid var(--md-outline-variant,#dce2eb);padding:12px 0;overflow-wrap:anywhere; }
.mz-service-onboarding { border:1px solid var(--md-outline-variant,#dce2eb);border-radius:12px;padding:16px;margin:16px 0; }
.mz-service-heading { display:flex;gap:14px;align-items:center;flex-wrap:wrap; }.mz-service-heading a { margin-left:auto; }
.mz-service-onboarding progress { width:100%;height:8px;accent-color:var(--md-primary,#2563eb);margin:12px 0; }
.mz-service-step { display:flex;justify-content:space-between;align-items:center;gap:16px;padding:12px 0;border-top:1px solid var(--md-outline-variant,#dce2eb); }
.mz-service-step-actions { display:flex;gap:8px;flex-wrap:wrap;flex-shrink:0; }.mz-service-error { color:var(--md-error,#b42318); }
.mz-service-focus { display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:12px; }
@media(max-width:720px) { .mz-service-summary,.mz-service-form { grid-template-columns:1fr; }.mz-service-step { align-items:flex-start;flex-direction:column; }.mz-service-step-actions { width:100%; }.mz-service-summary { padding:14px;gap:14px; } }

/* 多智能体任务：进度、历史及带依据的业务报告。 */
.mz-workflows { min-width:0; }.mz-wf-form label { display:flex;gap:8px;align-items:center;flex-wrap:wrap; }
.mz-wf-layout { display:grid;grid-template-columns:minmax(180px,240px) minmax(0,1fr);gap:22px;margin-top:18px; }
.mz-wf-layout>section { min-width:0; }.mz-wf-history { display:flex;flex-direction:column;gap:5px;text-align:left;width:100%;padding:12px;margin:0 0 8px;border:1px solid var(--md-outline-variant,#dce2eb);border-radius:10px;background:var(--md-surface,#fff);color:inherit;cursor:pointer; }
.mz-workflows .f-history { max-height:520px;overflow:auto;padding:2px; }
.mz-wf-history:focus-visible { outline:2px solid var(--md-primary,#2563eb); }.mz-workflows small { color:var(--md-on-surface-variant,#64748b); }
.mz-wf-steps { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:0;list-style:none; }
.mz-wf-steps li,.mz-wf-finding { border:1px solid var(--md-outline-variant,#dce2eb);border-radius:10px;padding:12px;overflow-wrap:anywhere; }
.mz-wf-metrics { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px; }.mz-wf-metrics>div { display:flex;flex-direction:column;gap:8px;padding:14px;background:var(--md-surface-container-low,#f5f7fb);border-radius:10px;min-width:0;overflow-wrap:anywhere; }
.mz-wf-metrics strong { font-size:19px;font-variant-numeric:tabular-nums; }.mz-wf-finding { margin-bottom:10px; }.mz-wf-report { overflow-wrap:anywhere; }
@media(max-width:720px) { .mz-wf-layout { grid-template-columns:1fr; }.mz-wf-steps,.mz-wf-metrics { grid-template-columns:1fr; }.mz-wf-form .mz-input { max-width:100%;box-sizing:border-box; }.mz-workflows .f-history { max-height:220px; } }

/* ---------- AI 工作台 ---------- */
.mz-ws { display: grid; grid-template-columns: 220px minmax(0,1fr) 280px; gap: 14px; height: calc(100vh - 210px); min-height: 480px; }
.mz-ws-side, .mz-ws-task { background: var(--md-surface); border: 1px solid var(--line); border-radius: 14px; display: flex; flex-direction: column; min-height: 0; }
.mz-ws-side-head, .mz-ws-task-head { display: flex; align-items: center; justify-content: space-between; padding: 12px 12px 8px; font-size: 13px; color: #5b6b84; }
.mz-ws-convs { overflow: auto; padding: 4px 8px 10px; display: flex; flex-direction: column; gap: 4px; }
.mz-ws-conv { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; width: 100%; border: 1px solid transparent; background: transparent; border-radius: 10px; padding: 8px 10px; cursor: pointer; text-align: left; font-size: 13px; color: #334155; }
.mz-ws-conv span { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mz-ws-conv small { color: #94a3b8; font-size: 11px; }
.mz-ws-conv:hover { background: #f6f9ff; }
.mz-ws-conv.on { background: #eef4ff; border-color: #d7e3fb; color: #1d4ed8; }
.mz-ws-main { background: var(--md-surface); border: 1px solid var(--line); border-radius: 14px; display: flex; flex-direction: column; min-height: 0; }
.mz-ws-title { padding: 12px 16px; border-bottom: 1px solid var(--line-2); font-weight: 600; font-size: 14px; color: #1c2a45; }
.mz-ws-msgs { flex: 1; overflow: auto; padding: 16px; display: flex; flex-direction: column; gap: 12px; background: #fbfcff; }
.mz-ws-msg { display: flex; }
.mz-ws-msg.me { justify-content: flex-end; }
.mz-ws-bubble { max-width: 78%; padding: 10px 13px; border-radius: 12px; background: #fff; border: 1px solid #e3eaf3; font-size: 13.5px; line-height: 1.75; white-space: pre-wrap; }
.mz-ws-msg.me .mz-ws-bubble { background: #e9f1ff; border-color: #d7e3fb; }
.mz-ws-card { max-width: 86%; background: #fff; border: 1px solid #e3eaf3; border-radius: 12px; padding: 12px 14px; font-size: 13.5px; line-height: 1.7; }
.mz-ws-card.approve { background: #fffdf7; border-color: #f0d9a8; }
.mz-ws-card-title { font-weight: 600; margin-bottom: 8px; color: #92400e; }
.mz-ws-approve-item { padding: 8px 0; border-top: 1px dashed #efe2c6; }
.mz-ws-approve-item:first-of-type { border-top: 0; }
.mz-ws-approve-line { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.mz-ws-approve-args { font-size: 11.5px; color: #8a97a5; word-break: break-all; margin-top: 2px; }
.mz-ws-approve-why { font-size: 11.5px; color: #b45309; margin-top: 2px; }
.mz-ws-risk { font-size: 11px; border-radius: 999px; padding: 1px 8px; border: 1px solid #f0d9a8; background: #fff7e6; color: #b45309; }
.mz-ws-risk.r-delete { border-color: #f3c1c1; background: #fff1f1; color: #c0392b; }
.mz-ws-text { margin-top: 6px; white-space: pre-wrap; }
.mz-ws-actions { margin-top: 10px; display: flex; gap: 8px; }
.mz-ws-steps { margin-top: 6px; font-size: 12.5px; color: #5b6b84; }
.mz-ws-steps summary { cursor: pointer; color: #1d4ed8; }
.mz-ws-step { display: flex; gap: 6px; align-items: baseline; padding: 2px 0; }
.mz-ws-step.ok span { color: #1c7a45; }
.mz-ws-step.bad span { color: #c0392b; }
.mz-ws-step.skip span { color: #8a97a5; }
.mz-ws-step small { color: #94a3b8; }
.mz-ws-composer { border-top: 1px solid var(--line-2); padding: 10px 12px; background: #fff; }
.mz-ws-composer textarea { width: 100%; resize: vertical; min-height: 52px; border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; font-size: 13.5px; font-family: inherit; }
.mz-ws-composer-bar { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
.mz-ws-composer-bar select { width: 220px; }
.mz-ws-hint { color: #94a3b8; font-size: 11.5px; margin-left: auto; }
.mz-ws-welcome { max-width: 520px; margin: 12px auto; text-align: center; color: #5b6b84; }
.mz-ws-welcome h3 { color: #1c2a45; margin-bottom: 6px; }
.mz-ws-samples { display: flex; gap: 8px; justify-content: center; flex-wrap: wrap; margin-top: 12px; }
.mz-ws-samples button { border: 1px solid var(--line); background: #fff; border-radius: 999px; padding: 6px 12px; font-size: 12.5px; color: #334155; cursor: pointer; }
.mz-ws-samples button:hover { border-color: #c7d9f5; background: #f4f8ff; }
.mz-ws-task-body { padding: 0 12px 12px; overflow: auto; }
.mz-ws-task-status { display: inline-block; font-size: 12px; border-radius: 999px; padding: 2px 10px; background: #eef4ff; color: #1d4ed8; margin-bottom: 8px; }
.mz-ws-task-status.s-awaiting_approval { background: #fff7e6; color: #b45309; }
.mz-ws-task-status.s-done { background: #e9f9f1; color: #047857; }
.mz-ws-task-status.s-failed, .mz-ws-task-status.s-rejected { background: #fff1f1; color: #c0392b; }
.mz-ws-task-q { font-size: 13px; color: #1c2a45; line-height: 1.6; }
.mz-ws-task-meta { font-size: 11.5px; color: #94a3b8; margin: 4px 0 8px; }
.mz-ws-task-steps { font-size: 12.5px; }
.mz-ws-empty { color: #94a3b8; font-size: 12.5px; padding: 12px; text-align: center; }
@media (max-width: 1100px) { .mz-ws { grid-template-columns: 170px minmax(0,1fr); } .mz-ws-task { display: none; } }
@media (max-width: 760px) { .mz-ws { grid-template-columns: 1fr; height: auto; } .mz-ws-side { max-height: 140px; } .mz-ws-msgs { min-height: 320px; } }

/* ---------- Markdown 回答 ---------- */
.mz-md { font-size: 13.5px; line-height: 1.8; color: #1f2d3d; word-break: break-word; }
.mz-md p { margin: 0 0 8px; }
.mz-md p:last-child { margin-bottom: 0; }
.mz-md strong { font-weight: 600; color: #10233f; }
.mz-md h1, .mz-md h2, .mz-md h3, .mz-md h4 { margin: 14px 0 8px; line-height: 1.4; color: #10233f; }
.mz-md h1 { font-size: 19px; } .mz-md h2 { font-size: 17px; } .mz-md h3 { font-size: 15px; } .mz-md h4 { font-size: 14px; }
.mz-md ul, .mz-md ol { margin: 6px 0 10px; padding-left: 22px; }
.mz-md li { margin: 3px 0; }
.mz-md code { background: #f1f5fb; border: 1px solid #e3eaf3; border-radius: 5px; padding: 0 5px; font-size: 12.5px; color: #b23b3b; }
.mz-md .mz-md-pre { background: #f7f9fc; border: 1px solid #e3eaf3; border-radius: 8px; padding: 10px 12px; overflow: auto; margin: 8px 0; }
.mz-md .mz-md-pre code { background: none; border: 0; padding: 0; color: #24364f; }
.mz-md .mz-md-table { overflow-x: auto; margin: 8px 0 10px; }
.mz-md table { border-collapse: collapse; width: 100%; font-size: 12.5px; }
.mz-md th, .mz-md td { border: 1px solid #e3eaf3; padding: 5px 9px; text-align: left; }
.mz-md th { background: #f6f9fd; color: #3b4b61; font-weight: 600; }
.mz-md blockquote { margin: 8px 0; padding: 6px 12px; border-left: 3px solid #c7d9f5; background: #f8fbff; color: #4b5c73; }
.mz-md hr { border: 0; border-top: 1px solid #e3eaf3; margin: 12px 0; }
.mz-md a { color: #1d4ed8; }
/* ---------- 待补充信息表单 ---------- */
.mz-ws-card.form { background: #f8fbff; border-color: #cddff7; width: min(560px, 92%); max-width: 92%; }
.mz-ws-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px 12px; margin: 8px 0 4px; }
.mz-ws-field { display: flex; flex-direction: column; gap: 4px; font-size: 12.5px; color: #3b4b61; }
.mz-ws-field b { color: #c0392b; font-weight: 600; }
.mz-ws-field .mz-input { height: 34px; padding: 0 10px; border-radius: 8px; box-sizing: border-box; font-size: 13px; }
.mz-ws-field textarea.mz-input { height: auto; padding: 8px 10px; resize: vertical; }

/* ---------- 工作区会话菜单 ---------- */
.mz-ws-convrow { position: relative; display: flex; align-items: center; }
.mz-ws-convrow .mz-ws-conv { flex: 1; min-width: 0; }
.mz-ws-more { flex: none; border: 0; background: transparent; color: #8a97a5; font-size: 16px; line-height: 1; padding: 4px 6px; border-radius: 6px; cursor: pointer; opacity: 0; }
.mz-ws-convrow:hover .mz-ws-more, .mz-ws-more:focus { opacity: 1; }
.mz-ws-more:hover { background: #eef4ff; color: #1d4ed8; }
.mz-ws-menu { position: fixed; z-index: 80; background: #fff; border: 1px solid #e3eaf3; border-radius: 12px; box-shadow: 0 6px 24px rgba(15, 35, 70, .1); padding: 5px; width: 176px; max-width: calc(100vw - 16px); }
.mz-ws-menu button { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; border: 0; background: none; padding: 9px 10px; border-radius: 7px; font-size: 13px; color: #334155; cursor: pointer; }
.mz-ws-menu button:hover { background: #f2f7ff; color: #1d4ed8; }
.mz-ws-pin { font-style: normal; font-size: 10px; color: #1d4ed8; background: #e8f0ff; border-radius: 4px; padding: 0 4px; margin-right: 5px; vertical-align: 1px; }

/* 统一任务工作台，沿用全站 Material 色彩与控件。 */
.mz-ws { color: var(--md-on-surface); min-width: 0; }
.mz-ws :is(.mz-ws-side,.mz-ws-main,.mz-ws-task) { min-width: 0; background: var(--md-surface); border-color: var(--md-outline); }
.mz-ws :is(.mz-ws-title,.mz-ws-welcome h3,.mz-ws-task-q,.mz-ws-conv,.mz-ws-menu button,.mz-ws-field,.mz-md,.mz-md strong,.mz-md h1,.mz-md h2,.mz-md h3) { color: var(--md-on-surface); }
.mz-ws :is(.mz-ws-side-head,.mz-ws-task-head,.mz-ws-task-meta,.mz-ws-empty,.mz-ws-hint,.mz-ws-steps,.mz-ws-step small,.mz-ws-review-meta) { color: var(--md-on-surface-variant); }
.mz-ws :is(.mz-ws-msgs,.mz-ws-menu,.mz-ws-composer,.mz-ws-bubble,.mz-ws-card,.mz-ws-samples button) { background: var(--md-surface); border-color: var(--md-outline); color: var(--md-on-surface); }
.mz-ws .mz-ws-msgs { background: var(--md-surface-2, var(--md-surface)); }
.mz-ws .mz-ws-title { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.mz-ws-live-label { margin-left: auto; color: var(--md-on-surface-variant); font-size: 11px; font-weight: 400; }
.mz-ws .mz-ws-msg.me .mz-ws-bubble, .mz-ws .mz-ws-conv.on { background: var(--md-primary-container, #e9f1ff); color: var(--md-on-primary-container, var(--md-on-surface)); }
.mz-ws .mz-ws-card.approve { background: color-mix(in srgb, var(--md-surface) 93%, #f5b942); border-color: color-mix(in srgb, var(--md-outline) 65%, #d49b2b); width: min(640px, 100%); max-width: 100%; }
.mz-ws .mz-ws-card.form { background: color-mix(in srgb, var(--md-surface) 95%, #4285f4); }
.mz-ws .mz-ws-card h4 { font-size: 15px; margin: 8px 0 5px; }
.mz-ws .mz-ws-card p { color: var(--md-on-surface-variant); font-size: 12.5px; line-height: 1.8; }
.mz-ws .mz-ws-card-title { color: var(--md-on-surface); }
.mz-ws-review-meta { font-size: 12px; margin: 8px 0; }
.mz-ws-review-args { white-space: pre-wrap; overflow-wrap: anywhere; max-height: 260px; overflow: auto; background: var(--md-surface-2, var(--md-surface)); border: 1px solid var(--md-outline); border-radius: 9px; padding: 12px; font-family: inherit; font-size: 12px; line-height: 1.8; color: var(--md-on-surface); }
.mz-ws-review-fields { display: grid; grid-template-columns: 90px minmax(0,1fr); gap: 5px 10px; font-size: 12px; margin: 8px 0; }
.mz-ws-review-fields dt { color: var(--md-on-surface-variant); }.mz-ws-review-fields dd { overflow-wrap: anywhere; }
.mz-ws-review-table { overflow: auto; margin: 10px 0; border: 1px solid var(--md-outline); border-radius: 8px; }
.mz-ws-review-table table { width: 100%; border-collapse: collapse; font-size: 12px; white-space: nowrap; }.mz-ws-review-table :is(th,td) { padding: 7px 9px; text-align: left; border-bottom: 1px solid var(--md-outline); }.mz-ws-review-table th { color: var(--md-on-surface-variant); background: var(--md-surface-2); }
.mz-ws .mz-ws-approve-why { color: var(--md-on-surface-variant); }
.mz-ws-card-links { display: flex; gap: 14px; flex-wrap: wrap; margin: 8px 0; font-size: 12px; }
.mz-ws :is(.mz-ws-card-links a,.mz-ws-return) { color: var(--md-primary, #2563eb); text-decoration: none; }
.mz-ws-risk-ack { display: flex; align-items: start; gap: 8px; margin-top: 10px; font-size: 12px; }
.mz-ws-risk-ack input { margin-top: 4px; }
.mz-ws-live { display: flex; align-items: center; gap: 8px; color: var(--md-on-surface-variant); font-size: 12px; line-height: 1.8; padding: 0 16px; white-space: pre-wrap; overflow-wrap: anywhere; }
.mz-ws-live:not(:empty) { padding: 10px 16px; border-top: 1px solid var(--md-outline); }
.mz-ws-spinner { flex: none; width: 13px; height: 13px; border: 2px solid var(--md-outline); border-top-color: var(--md-primary, #2563eb); border-radius: 50%; animation: mz-ws-spin 1s linear infinite; }
@keyframes mz-ws-spin { to { transform: rotate(360deg); } }
.mz-ws-boundary { display: block; margin-top: 8px; color: var(--md-on-surface-variant); font-size: 11px; }
.mz-ws-plan-title { display: flex; gap: 8px; align-items: center; margin: 14px 0 8px; color: var(--md-on-surface); font-size: 12px; font-weight: 600; }
.mz-ws-plan { padding-left: 22px; margin: 10px 0 16px; font-size: 12px; }
.mz-ws-plan li { padding: 5px 0 8px 3px; color: var(--md-on-surface-variant); }
.mz-ws-plan li span { display: block; color: var(--md-on-surface); }
.mz-ws-plan li small { display: block; margin-top: 3px; font-size: 10px; }
.mz-ws-plan .p-running::marker { color: var(--md-primary, #2563eb); }
.mz-ws-plan .p-done::marker { content: '✓  '; color: #25965a; }
.mz-ws-decision { font-size: 11.5px; color: var(--md-on-surface-variant); padding: 6px 0; }
.mz-ws-task-body { flex: 1; min-height: 0; }
.mz-ws-task-body > .mz-btn { margin: 10px 5px 0 0; }
.mz-ws-queue { border-top: 1px solid var(--md-outline); padding: 0 12px 10px; overflow: auto; flex: none; max-height: 210px; }
.mz-ws-queue-item { display: flex; flex-direction: column; gap: 5px; padding: 9px; width: 100%; border: 0; background: transparent; color: var(--md-on-surface); border-radius: 8px; text-align: left; cursor: pointer; }
.mz-ws-queue-item:hover { background: var(--md-hover-neutral, var(--md-surface-2)); }
.mz-ws-queue-item span { font-size: 12px; overflow-wrap: anywhere; }
.mz-ws-queue-item small { font-size: 11px; color: var(--md-on-surface-variant); }
.mz-ws-uncertain { color: var(--md-on-surface); font-size: 12px; line-height: 1.8; padding: 10px; border: 1px solid var(--md-outline); border-radius: 8px; }
#ws-network:not(:empty) { padding: 8px 14px; color: var(--md-on-surface-variant); background: var(--md-surface-2); font-size: 12px; }
.mz-ws-approval-view { grid-template-columns: minmax(0, 1fr) 280px; }
.mz-ws-approval-view :is(.mz-ws-side,.mz-ws-composer) { display: none; }
.mz-ws-return { font-size: 12px; font-weight: 400; }
.mz-ws .mz-ws-more { opacity: 1; }
.mz-ws :is(button,a,input,select,textarea):focus-visible { outline: 2px solid var(--md-primary, #2563eb); outline-offset: 3px; }
@media (max-width:1100px) { .mz-ws { height: auto; grid-template-columns: 170px minmax(0,1fr); } .mz-ws-main { min-height: 560px; } .mz-ws .mz-ws-task { display: flex; grid-column: 1 / -1; max-height: 330px; } .mz-ws-task-body { flex: auto; } .mz-ws .mz-ws-queue { max-height: 130px; } .mz-ws-approval-view { grid-template-columns: 1fr; } }
@media (max-width:760px) { .mz-ws { grid-template-columns: minmax(0,1fr); } .mz-ws .mz-ws-main { min-height: 520px; } .mz-ws .mz-ws-card, .mz-ws .mz-ws-card.form, .mz-ws-bubble { max-width: 100%; } .mz-ws-composer-bar { flex-wrap: wrap; } .mz-ws-composer-bar select { flex: 1; width: auto; min-width: 150px; } .mz-ws-hint { display: none; } .mz-ws-msgs { padding: 12px; } .mz-ws-actions { flex-wrap: wrap; } .mz-ws-review-args { font-size: 11px; } }
@media (prefers-reduced-motion:reduce) { .mz-ws-spinner { animation: none; } }

/* 统一智能体工作台：会话、执行和业务资料在同一空间。 */
.mz-workspace-mode #mz-nav { display:none; }
.mz-workspace-mode #mz-main { padding:0; overflow:hidden; }
.mz-workspace-mode .mz-ws { height:100%; min-height:0; border:0; border-radius:0; gap:0; display:grid; grid-template-columns:236px minmax(0,1fr) 300px; position:relative; background:var(--md-surface); }
.mz-workspace-mode .mz-ws :is(.mz-ws-side,.mz-ws-main,.mz-ws-task) { border-radius:0; border:0; height:100%; min-height:0; }
.mz-workspace-mode .mz-ws-side { background:var(--md-surface-2); display:flex; flex-direction:column; border-right:1px solid var(--md-outline); padding:16px 10px 10px; max-height:none; }
.mz-ws .mz-ws-side-head { padding:4px 8px 16px; display:flex; flex-direction:column; align-items:stretch; gap:18px; }
.mz-ws-side-head b { color:var(--md-on-surface); font-size:15px; }
.mz-ws .mz-ws-side-head .mz-btn { text-align:left; border-radius:10px; }
.mz-ws-side-link { display:flex; align-items:center; justify-content:space-between; width:100%; padding:10px; background:none; border:0; color:var(--md-on-surface); text-align:left; cursor:pointer; border-radius:8px; font:inherit; font-size:12.5px; }
.mz-ws-side-link:hover { background:var(--md-hover-neutral,var(--md-surface)); }
.mz-ws-set-title { font-size:11px; color:var(--md-on-surface-variant); padding:22px 10px 8px; overflow-wrap:anywhere; }
.mz-ws-side-bottom { margin-top:auto; padding-top:12px; border-top:1px solid var(--md-outline); }
.mz-ws .mz-ws-convs { flex:1; min-height:0; padding:0; }
.mz-ws .mz-ws-conv { border-radius:8px; padding:10px; background:none; font-size:12.5px; }
.mz-ws .mz-ws-conv small { font-size:10px; }
.mz-ws .mz-ws-title { height:58px; flex:none; padding:8px 20px; gap:10px; border:0; }
.mz-ws #ws-title { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:44%; }
.mz-ws .mz-ws-live-label { font-size:11px; }
.mz-ws .mz-ws-msgs { background:var(--md-surface); padding:30px max(24px,calc((100% - 820px)/2)); gap:24px; overscroll-behavior:contain; min-height:0; }
.mz-ws .mz-ws-welcome { margin:auto; padding:30px 0; max-width:680px; width:100%; }
.mz-ws-welcome-mark { color:var(--md-primary); font-size:34px; }
.mz-ws .mz-ws-welcome h3 { font-size:26px; font-weight:600; letter-spacing:-.6px; margin:16px 0 12px; }
.mz-ws .mz-ws-welcome p { font-size:14px; line-height:1.9; color:var(--md-on-surface-variant); }
.mz-ws .mz-ws-samples { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-top:26px; }
.mz-ws .mz-ws-samples button { border:1px solid var(--md-outline); border-radius:12px; padding:15px; text-align:left; cursor:pointer; }
.mz-ws-samples strong { display:block; font-weight:500; font-size:12px; }.mz-ws-samples span { display:block; margin-top:8px; font-size:10.5px; color:var(--md-on-surface-variant); }
.mz-ws .mz-ws-msg.ai > .mz-ws-bubble { border:0; padding:0; max-width:100%; background:none; white-space:normal; }
.mz-ws .mz-ws-msg.me > .mz-ws-bubble { border:0; border-radius:16px 16px 4px 16px; padding:12px 16px; }
.mz-ws .mz-ws-card { max-width:100%; width:100%; border-radius:14px; padding:16px; }
.mz-ws .mz-ws-card:not(.approve):not(.form):not(.mz-ws-artifact) { border:0; padding:0; }
.mz-ws .mz-ws-artifact { display:flex; gap:14px; align-items:start; background:var(--md-surface-2); border-color:var(--md-outline); }
.mz-ws-artifact-icon { color:var(--md-primary); background:var(--md-primary-container); padding:7px 10px; border-radius:9px; font-size:20px; }
.mz-ws-artifact p { margin:6px 0 12px; }
.mz-ws .mz-ws-composer { flex:none; margin:12px max(24px,calc((100% - 820px)/2)) 20px; border:1px solid var(--md-outline); border-radius:18px; padding:15px; box-shadow:0 4px 20px #00000005; }
.mz-ws .mz-ws-composer textarea { border:0; padding:0 2px; min-height:52px; max-height:180px; font-size:14px; background:none; color:var(--md-on-surface); resize:vertical; }
.mz-ws .mz-ws-composer textarea:focus { outline:0; box-shadow:none; }
.mz-ws .mz-ws-composer-bar { gap:8px; flex-wrap:wrap; margin-top:10px; }
.mz-ws .mz-ws-composer-bar select { width:auto; min-width:0; max-width:170px; border:0; background:var(--md-surface-2); border-radius:9px; height:32px; font-size:11px; }
.mz-ws #ws-send { margin-left:auto; border-radius:10px; padding:7px 13px; min-height:32px; }
.mz-ws .mz-ws-boundary { margin-top:10px; line-height:1.7; font-size:10.5px; }
.mz-ws #ws-network:not(:empty) { margin:0 20px; font-size:12px; padding:10px; background:var(--md-surface-2); border-radius:8px; }
.mz-workspace-mode .mz-ws-task { display:flex; flex-direction:column; border-left:1px solid var(--md-outline); background:var(--md-surface); overflow:hidden; }
.mz-ws .mz-ws-task-head { min-height:58px; padding:12px 16px; display:flex; align-items:center; gap:8px; border-bottom:1px solid var(--md-outline); }
.mz-ws-task-head b { margin-right:auto; font-size:12px; }.mz-ws #ws-task { padding:18px; overflow:auto; }
.mz-ws.task-collapsed { grid-template-columns:236px minmax(0,1fr); }.mz-ws.task-collapsed .mz-ws-task { display:none; }
.mz-workspace-mode .mz-ws.has-detail { grid-template-columns:220px minmax(300px,1fr) minmax(420px,40%); }
.mz-workspace-mode .mz-ws.has-detail.task-collapsed { grid-template-columns:236px minmax(0,1fr); }
.mz-ws #ws-detail { overflow:auto; padding:22px; flex:1; min-height:0; }
.mz-ws [hidden] { display:none!important; }
.mz-ws-detail-top { display:flex; justify-content:space-between; gap:10px; align-items:start; margin-bottom:20px; }.mz-ws-detail-top h2 { margin:7px 0 0; font-size:18px; }.mz-ws-detail-top small { color:var(--md-on-surface-variant); font-size:10px; }
.mz-ws-detail-actions { display:flex; gap:8px; flex-wrap:wrap; margin-bottom:16px; }
.mz-ws-result-content { font-size:12.5px; line-height:1.9; overflow-wrap:anywhere; }.mz-ws-result-content h3 { font-size:14px; margin:22px 0 10px; }.mz-ws-result-content p { margin:8px 0; }.mz-ws-result-content ul { padding-left:20px; margin:6px 0; }.mz-ws-prose { white-space:pre-wrap; }
.mz-ws-data-fields { margin:0; }.mz-ws-data-fields dt { color:var(--md-on-surface-variant); font-size:11px; margin-top:10px; }.mz-ws-data-fields dd { margin:2px 0 12px; }.mz-ws-data-fields dd > .mz-ws-data-fields { padding-left:12px; border-left:2px solid var(--md-outline); }
.mz-ws-data-table { overflow:auto; max-width:100%; }.mz-ws-data-table table { width:100%; border-collapse:collapse; }.mz-ws-data-table th,.mz-ws-data-table td { text-align:left; vertical-align:top; padding:9px 10px; border-bottom:1px solid var(--md-outline); min-width:84px; max-width:360px; }.mz-ws-data-table th { background:var(--md-surface-2); color:var(--md-on-surface-variant); font-size:11px; white-space:nowrap; }
.mz-ws-history-row { width:100%; border:1px solid var(--md-outline); border-radius:10px; padding:14px; margin-bottom:8px; background:var(--md-surface); color:var(--md-on-surface); text-align:left; cursor:pointer; display:flex; flex-direction:column; gap:5px; }.mz-ws-history-row span,.mz-ws-history-row small { color:var(--md-on-surface-variant); font-size:11px; }
.mz-ws-history-picker,.mz-ws-business-links { display:flex; flex-wrap:wrap; gap:10px; }.mz-ws-facts { display:grid; gap:12px; }.mz-ws-facts .mz-ws-field { display:flex; flex-direction:column; gap:5px; }.mz-ws-facts p { font-size:12px; color:var(--md-on-surface-variant); }
.mz-ws-score { padding:18px; background:var(--md-surface-2); border-radius:12px; display:flex; flex-direction:column; gap:6px; }.mz-ws-score strong { font-size:32px; }.mz-ws-score small { font-size:12px; font-weight:400; }
.mz-ws-approval-total { display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 18px; margin:14px 0; }.mz-ws-approval-total strong { font-size:18px; }.mz-ws-approval-total span { font-size:12px; color:var(--md-on-surface-variant); }
.mz-ws #ws-side-toggle { display:none; }
.mz-ws-draft-line { border:1px solid var(--md-outline); border-radius:10px; padding:12px; margin:14px 0; }.mz-ws-draft-line h4 { margin:0 0 8px; display:flex; align-items:center; justify-content:space-between; }.mz-ws-result-content label { display:flex; flex-direction:column; gap:4px; margin:8px 0; }.mz-ws-result-content label.mz-ws-risk-ack { flex-direction:row; }.mz-ws-draft-pair { display:grid; grid-template-columns:1fr 1fr; gap:10px; }.mz-ws-result-content input,.mz-ws-result-content select { min-width:0; width:100%; }.mz-ws-result-content input[type=checkbox] { width:auto; }
@media(max-width:1300px) { .mz-workspace-mode .mz-ws { grid-template-columns:210px minmax(0,1fr) 270px; }.mz-ws .mz-ws-hint { display:none; }.mz-workspace-mode .mz-ws.has-detail { grid-template-columns:200px minmax(0,1fr) minmax(380px,45%); } }
@media(max-width:1100px) { .mz-workspace-mode .mz-ws,.mz-workspace-mode .mz-ws.has-detail,.mz-workspace-mode .mz-ws.task-collapsed { grid-template-columns:210px minmax(0,1fr); }.mz-workspace-mode .mz-ws .mz-ws-main { min-height:0; }.mz-workspace-mode .mz-ws .mz-ws-task { display:none; }.mz-workspace-mode .mz-ws.task-open .mz-ws-task { display:flex; position:absolute; right:0; top:0; bottom:0; width:min(600px,calc(100% - 30px)); height:100%; max-height:none; z-index:12; box-shadow:-18px 0 50px #00000015; }.mz-ws #ws-task-toggle { display:block; } }
@media(max-width:760px) { .mz-workspace-mode .mz-ws,.mz-workspace-mode .mz-ws.has-detail,.mz-workspace-mode .mz-ws.task-collapsed { grid-template-columns:minmax(0,1fr); }.mz-workspace-mode .mz-ws .mz-ws-side { display:none; }.mz-workspace-mode .mz-ws.side-open .mz-ws-side { display:flex; position:absolute; z-index:13; left:0; top:58px; bottom:0; width:260px; height:auto; box-shadow:18px 0 40px #00000018; }.mz-ws #ws-side-toggle { display:block; }.mz-ws .mz-ws-title { padding:8px 12px; }.mz-ws #ws-title { max-width:40%; font-size:12px; }.mz-ws .mz-ws-live-label { display:none; }.mz-ws #ws-task-toggle { margin-left:auto; }.mz-ws .mz-ws-msgs { padding:18px 16px; }.mz-ws .mz-ws-composer { margin:8px 12px 12px; padding:12px; }.mz-ws .mz-ws-welcome h3 { font-size:23px; }.mz-ws .mz-ws-samples { grid-template-columns:1fr; }.mz-ws .mz-ws-composer-bar select { max-width:145px; }.mz-ws #ws-detail { padding:16px; }.mz-ws.has-detail.task-open .mz-ws-task { width:100%; }.mz-ws .mz-ws-task-body { flex:1; } }
@media(max-width:1100px) and (min-width:761px) { .mz-workspace-mode .mz-ws.has-detail.task-collapsed { grid-template-columns:210px minmax(0,1fr); } }
@media(max-width:760px) { .mz-workspace-mode .mz-ws.has-detail.task-collapsed { grid-template-columns:minmax(0,1fr); } }

/* 统一功能图标与轻量交互。 */
.mz-icon { display:inline-block; width:18px; height:18px; flex:0 0 auto; vertical-align:-3px; pointer-events:none; }
.mz-nav-ico { display:inline-flex; align-items:center; justify-content:center; flex:0 0 20px; }
.mz-nav-ico .mz-icon { width:20px; height:20px; }
.mz-nav-arrow .mz-icon { width:13px; height:13px; }
.mz-nav-star .mz-icon,.mz-nav-substar .mz-icon { width:14px; height:14px; }
.mz-nav-star.on .mz-icon,.mz-nav-substar.on .mz-icon { fill:currentColor; }
.mz-brand { text-decoration:none; border-radius:8px; padding:4px; margin:-4px; }
.mz-brand:hover { background:var(--md-hover-neutral); }
.mz-brand:focus-visible,.mz-ws-menu button:focus-visible { outline:2px solid var(--md-primary); outline-offset:2px; }
.mz-bell { border:0; background:transparent; color:var(--md-on-surface-variant); align-items:center; justify-content:center; }
.mz-bell .mz-icon { width:20px; height:20px; }
.mz-user .mz-btn { display:inline-flex; align-items:center; justify-content:center; gap:5px; }
.mz-user .mz-icon { width:16px; height:16px; }
.mz-quick-ico .mz-icon { width:22px; height:22px; color:var(--md-primary); }
.mz-ws-side-link { justify-content:flex-start; gap:9px; }
#ws-approval-count { margin-left:auto; }
.mz-ws-welcome-mark .mz-icon { width:36px; height:36px; }
.mz-ws-more { width:28px; height:28px; padding:5px; }
.mz-ws-more[aria-expanded="true"] { opacity:1; background:var(--md-primary-container); color:var(--md-primary); }
.mz-ws .mz-ws-menu button.mz-ws-menu-danger { color:var(--md-error,#c0392b); border-top:1px solid var(--md-outline); border-radius:0 0 7px 7px; margin-top:4px; padding-top:11px; }
.mz-ws .mz-ws-menu button.mz-ws-menu-danger:hover,.mz-ws .mz-ws-menu button.mz-ws-menu-danger:focus-visible { color:var(--md-error,#c0392b); background:#fff2f2; }
.mz-ws-samples span .mz-icon,.mz-ws-card-links .mz-icon { width:13px; height:13px; }
.mz-ws .mz-ws-step .mz-icon { width:14px; height:14px; }
@media (hover:none) { .mz-ws-more { opacity:1; } }
