/* =====================================================================
   工程咨询项目管理系统 —— 视觉翻新（浅色清爽 · 科技感 · 流畅）
   说明：仅重做视觉，所有类名保持不变，功能逻辑不受影响。
   ===================================================================== */
:root {
  /* 主色 */
  --navy: #1e1b4b;
  --navy-2: #312e81;
  --blue: #5b5bd6;
  --blue-2: #4f46e5;
  --cyan: #0e7490;
  --grad: linear-gradient(135deg, #5b5bd6 0%, #0e7490 100%);
  --grad-soft: linear-gradient(135deg, #edeefc 0%, #e3f4f8 100%);
  /* 中性 */
  --bg: #f5f6fb;
  --card: #ffffff;
  --bg-2: #f8f9fd;
  --border: #e7e8f4;
  --text: #191a2e;
  --text-2: #4c5170;
  --text-3: #9398b8;
  --muted: #6b7099;
  --line: #eaebf5;
  /* 语义色 */
  --green: #16a34a;
  --green-bg: #e9f8ef;
  --amber: #d97706;
  --amber-bg: #fdf3e2;
  --red: #e23b3b;
  --red-bg: #fdeeee;
  --blue-bg: #edeefc;
  --gold: #f59e0b;
  /* 形状 / 阴影 */
  --radius: 18px;
  --radius-sm: 12px;
  --shadow: 0 1px 2px rgba(30,27,75,.04), 0 10px 28px rgba(30,27,75,.06);
  --shadow-lg: 0 14px 40px rgba(30,27,75,.12);
  --shadow-blue: 0 8px 22px rgba(91,91,214,.22);
  --font: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", Roboto, sans-serif;
  --font-display: "PingFang SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans CJK SC", sans-serif;
  /* 现代中文黑体优先：鸿蒙 / 小米 / 思源 / Noto，Windows 上最后才回退雅黑（避免默认老气字型） */
  --font-cn: "PingFang SC", "HarmonyOS Sans SC", "MiSans", "Source Han Sans SC", "Noto Sans SC", "Microsoft YaHei UI", "Microsoft YaHei", sans-serif;
  --ease: cubic-bezier(.22, 1, .36, 1);
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
html, body { height: 100%; }
body {
  font-family: var(--font);
  color: var(--text);
  background-color: #f4f5fb;
  /* 科技感：极淡蓝图网格 + 两团柔光晕（蓝/青），干净通透、不喧宾夺主 */
  background-image:
    linear-gradient(rgba(91,91,214,.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(91,91,214,.025) 1px, transparent 1px),
    radial-gradient(70vw 70vw at 88% -8%, rgba(14,116,144,.1) 0%, transparent 60%),
    radial-gradient(78vw 78vw at -10% 112%, rgba(91,91,214,.09) 0%, transparent 60%);
  background-size: 56px 56px, 56px 56px, 100% 100%, 100% 100%;
  background-attachment: fixed;
  font-size: 14px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}
a { color: var(--blue); text-decoration: none; }

/* 科技感：流动极光背景（缓慢漂移的柔光，营造未来感） */
#bg-aurora { position: fixed; inset: 0; z-index: -1; pointer-events: none; overflow: hidden; }
#bg-aurora::before, #bg-aurora::after { content: ''; position: absolute; width: 72vmax; height: 72vmax; border-radius: 50%; filter: blur(46px); opacity: .5; mix-blend-mode: screen; will-change: transform; }
#bg-aurora::before { background: radial-gradient(circle, rgba(91,91,214,.6), transparent 60%); top: -24%; left: -18%; animation: auroraA 19s var(--ease) infinite alternate; }
#bg-aurora::after { background: radial-gradient(circle, rgba(14,116,144,.55), transparent 60%); bottom: -28%; right: -20%; animation: auroraB 24s var(--ease) infinite alternate; }
@keyframes auroraA { from { transform: translate(0,0) scale(1); } to { transform: translate(22vw,14vh) scale(1.3); } }
@keyframes auroraB { from { transform: translate(0,0) scale(1.15); } to { transform: translate(-20vw,-12vh) scale(1); } }
button { font-family: var(--font); cursor: pointer; }
input, select, textarea {
  font-family: var(--font); font-size: 14px; color: var(--text);
  border: 1px solid var(--line); border-radius: 10px; padding: 10px 13px;
  outline: none; background: #fff; transition: border .26s var(--ease), box-shadow .26s var(--ease), background .26s var(--ease);
}
input:focus, select:focus, textarea:focus { border-color: var(--blue); box-shadow: 0 0 0 4px rgba(91,91,214,.12); }
label { display: block; font-size: 13px; color: var(--text-2); margin-bottom: 7px; }
table { width: 100%; border-collapse: collapse; }
th, td { text-align: left; padding: 13px 15px; border-bottom: 1px solid var(--line); }
th { font-size: 12px; color: var(--text-2); font-weight: 600; background: #f7f9fc; white-space: nowrap; position: sticky; top: 0; }
td { font-size: 13.5px; }
tbody tr { transition: background .2s var(--ease); }
tbody tr:hover { background: #f2f3fd; }

/* 滚动条（科技精致感） */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: #d3dcec; border-radius: 10px; border: 2px solid transparent; background-clip: padding-box; transition: background .2s; }
::-webkit-scrollbar-thumb:hover { background: #b6c2d8; }

/* ===================== 登录 ===================== */
/* 按 UI 设计稿：登录页铺满整屏、左右分栏（原来是浮在中间的圆角小卡，与设计稿不一致） */
.login-screen {
  min-height: 100vh; display: block; padding: 0;
  background: linear-gradient(135deg, #eef2f9 0%, #f5f8fc 50%, #e9f6fa 100%);
}
.login-split {
  /* 登录页中文统一用现代黑体栈，并开启抗锯齿，字更细腻不发虚 */
  font-family: var(--font-cn);
  -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  /* 设计稿：整屏左右分栏，不做圆角浮卡 */
  width: 100%; max-width: none; margin: 0; display: grid; grid-template-columns: 1.05fr .95fr;
  min-height: 100vh; border-radius: 0; border: 0; overflow: hidden;
  background: transparent; backdrop-filter: none; box-shadow: none;
}
.login-aside {
  position: relative; padding: 56px 54px; color: #fff; overflow: hidden;
  background:
    radial-gradient(circle at 1px 1px, rgba(255,255,255,.05) 1px, transparent 0) 0 0 / 60px 60px,
    linear-gradient(135deg, #1e1b4b 0%, #312e81 45%, #0e3a52 100%);
  display: flex; flex-direction: column;
}
.login-aside::after {
  content: ''; position: absolute; right: -90px; top: -90px; width: 280px; height: 280px;
  background: radial-gradient(circle, rgba(255,255,255,.26), transparent 70%); border-radius: 50%;
}
.login-aside::before {
  content: ''; position: absolute; left: -70px; bottom: -70px; width: 240px; height: 240px;
  background: radial-gradient(circle, rgba(255,255,255,.16), transparent 70%); border-radius: 50%;
}
.login-aside-top { display: flex; align-items: center; gap: 14px; position: relative; z-index: 1; }
.brand-logo {
  width: 54px; height: 54px; border-radius: 16px; flex: 0 0 auto;
  background: var(--grad); color: #fff; font-size: 27px; font-weight: 700;
  display: flex; align-items: center; justify-content: center; box-shadow: 0 8px 20px rgba(91,91,214,.32);
}
.brand-logo.lg { width: 58px; height: 58px; border-radius: 18px; font-size: 29px; background: rgba(255,255,255,.2); backdrop-filter: blur(6px); box-shadow: 0 10px 26px rgba(8,30,60,.3); }
.brand-logo.sm { width: 40px; height: 40px; border-radius: 12px; font-size: 20px; }
.brand-title { font-size: 23px; font-weight: 800; letter-spacing: .4px; color: #fff; }
/* 品牌副标题：设计稿样式（小号、大字距、青色高亮） */
.brand-sub { font-size: 10.5px; letter-spacing: 2.2px; color: #a5f3fc; font-weight: 700; margin-top: 4px; }
.login-slogan { position: relative; z-index: 1; margin-top: auto; font-size: 32px; font-weight: 800; line-height: 1.45; font-family: var(--font-display); letter-spacing: -.2px; }
.login-slogan .hl { background: linear-gradient(90deg, #c7d2fe, #a5f3fc); -webkit-background-clip: text; background-clip: text; color: transparent; }
.login-feats { position: relative; z-index: 1; margin: 28px 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 13px; }
.login-feats li { font-size: 14px; color: rgba(255,255,255,.92); display: flex; align-items: center; gap: 11px; }
/* 设计稿：圆形 ✓ 徽标（原来是 8px 小圆点，太小太素） */
.login-feats li::before { content: '✓'; flex: 0 0 auto; width: 22px; height: 22px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: rgba(255,255,255,.18); color: #a5f3fc; font-size: 11px; font-weight: 800; line-height: 1; }
.login-aside-foot { position: relative; z-index: 1; margin-top: 32px; font-size: 12px; color: rgba(255,255,255,.7); letter-spacing: .4px; }
.login-card-wrap { display: flex; align-items: center; justify-content: center; padding: 56px 54px; }
/* 设计稿：右侧是一张带「四角装饰线」的玻璃卡片 */
.login-box {
  width: 100%; max-width: 392px; position: relative; overflow: visible;
  background: rgba(255,255,255,.82); border: 1px solid var(--border); border-radius: 24px;
  padding: 34px 34px 28px; box-shadow: 0 24px 56px rgba(30,41,80,.14);
  -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px);
}
.login-box::before, .login-box::after {
  content: ''; position: absolute; width: 16px; height: 16px;
  border-color: rgba(14,116,144,.42); border-style: solid; pointer-events: none;
}
.login-box::before { top: 12px; left: 12px; border-width: 2px 0 0 2px; }
.login-box::after { bottom: 12px; right: 12px; border-width: 0 2px 2px 0; }
.login-card-head { margin-bottom: 28px; }
.login-card-title { font-size: 25px; font-weight: 800; color: var(--navy); font-family: var(--font-display); letter-spacing: .4px; }
.login-card-sub { font-size: 13px; color: var(--text-2); margin-top: 7px; }
/* 只作用于裸 label / input，避免影响下面带图标的新版输入框（.lg-input） */
.login-form > label { margin-top: 16px; font-weight: 600; color: var(--text); }
.login-form > input { width: 100%; padding: 13px 15px; border-radius: 12px; }

/* ── 登录表单：按 UI 设计稿《设计-登录页与项目模块》重做 ──
   输入框带前置图标、密码可一键显隐、记住我 / 忘记密码、渐变登录按钮 */
.lg-label { display: block; font-size: 12.5px; color: var(--text-2); font-weight: 700; margin: 0 0 8px 2px; }
.lg-field { position: relative; margin-bottom: 14px; }
/* 登录页专用中文字体栈：优先用更现代的国产黑体，Windows 上不再回退到老气的微软雅黑 */
.lg-input { display: flex; align-items: center; gap: 10px; height: 46px; padding: 0 14px; border-radius: 13px;
  background: rgba(255,255,255,.78); border: 1px solid var(--border); transition: all .2s var(--ease); }
.lg-input:focus-within { border-color: var(--blue); background: #fff; box-shadow: 0 0 0 3px rgba(91,91,214,.13); }
.lg-input svg { width: 17px; height: 17px; flex: 0 0 auto; color: var(--text-3); }
.lg-input input { flex: 1; min-width: 0; padding: 0; border: none; outline: none; background: none;
  font-family: var(--font-cn); font-size: 15px; font-weight: 600; letter-spacing: .3px; color: var(--text); }
.lg-input input::placeholder { color: var(--text-3); font-weight: 500; letter-spacing: 0; }
/* 关键：浏览器「自动填充」会强行给输入框刷白底（background:none 盖不住），
   必须用 inset 阴影铺满 + 超长 transition 才能压住，否则深色模式下会出现一块白底 */
.lg-input input:-webkit-autofill,
.lg-input input:-webkit-autofill:hover,
.lg-input input:-webkit-autofill:focus,
.lg-input input:-webkit-autofill:active {
  -webkit-text-fill-color: var(--text);
  -webkit-box-shadow: 0 0 0 1000px #fff inset;
  transition: background-color 9999s ease-in-out 0s;
  caret-color: var(--text);
}
.lg-eye { cursor: pointer; font-size: 14px; opacity: .6; transition: opacity .2s var(--ease); user-select: none; line-height: 1; }
.lg-eye:hover { opacity: 1; }
.lg-row { display: flex; align-items: center; justify-content: space-between; margin: 2px 0 20px; font-size: 12.5px; }
.lg-ck { display: flex; align-items: center; gap: 7px; color: var(--text-2); cursor: pointer; user-select: none; }
.lg-ck input { width: 14px; height: 14px; accent-color: var(--blue); cursor: pointer; }
.lg-row a { color: var(--blue); text-decoration: none; font-weight: 700; }
.lg-row a:hover { text-decoration: underline; }
.lg-btn { height: 48px; border-radius: 14px; font-size: 15px; font-weight: 800; letter-spacing: 3px; }
/* 登录按钮必须是设计稿的紫青渐变+白字。
   ⚠ ui-b.css 有全局规则 `body:not(.theme-dark) .btn{background:白}`（权重 0,2,1）会把它盖掉，
   所以这里用 ID 选择器 + !important 强制压回。 */
#login-btn.lg-btn {
  background: linear-gradient(135deg, #5b5bd6, #0e7490) !important;
  color: #fff !important; border: none !important;
  box-shadow: 0 8px 24px rgba(91,91,214,.34) !important;
}
#login-btn.lg-btn:hover { filter: brightness(1.08); transform: translateY(-2px); box-shadow: 0 12px 30px rgba(91,91,214,.46) !important; }

@media (max-width: 760px) {
  /* 整屏分栏改成单列：左侧品牌区收起，登录卡居中铺满 */
  .login-split { grid-template-columns: 1fr; min-height: 100vh; border-radius: 0; }
  .login-aside { display: none; }
  .login-card-wrap { padding: 42px 22px; }
  .login-box { padding: 28px 24px 24px; }
}

/* ===================== 布局 ===================== */
.app { display: flex; flex-direction: column; min-height: 100vh; animation: appIn .52s var(--ease); }
@keyframes appIn { from { opacity: 0; } to { opacity: 1; } }

/* 顶部导航（毛玻璃空间感） */
.topnav {
  position: sticky; top: 0; z-index: 40;
  display: flex; align-items: center; gap: 16px; height: 66px; padding: 0 26px;
  background: linear-gradient(180deg, rgba(255,255,255,.74), rgba(255,255,255,0) 55%), rgba(255,255,255,.5); -webkit-backdrop-filter: blur(56px) saturate(230%); backdrop-filter: blur(56px) saturate(230%);
  border-bottom: 1px solid rgba(255,255,255,.85);
  box-shadow: 0 1px 0 rgba(255,255,255,1) inset, 0 12px 40px rgba(30,27,75,.16);
}
.topnav-brand { display: flex; align-items: center; gap: 11px; flex: 0 0 auto; }
.topnav-brand-name { font-size: 16px; font-weight: 800; color: var(--navy); letter-spacing: .3px; font-family: var(--font-display); }
.topnav-brand-sub { font-size: 11px; color: var(--text-3); margin-top: 1px; }
.topnav-menu { display: flex; align-items: center; gap: 4px; flex: 1; min-width: 0; overflow-x: auto; scrollbar-width: none; }
.topnav-menu::-webkit-scrollbar { display: none; }
.topnav-link {
  display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; flex: 0 0 auto;
  padding: 9px 15px; border-radius: 12px; color: var(--text-2); cursor: pointer;
  font-size: 14px; font-weight: 600; transition: all .26s var(--ease);
}
.topnav-link svg { width: 18px; height: 18px; }
.topnav-link:hover { background: rgba(91,91,214,.09); color: var(--navy); }
.topnav-link.active { background: var(--grad); color: #fff; box-shadow: 0 8px 20px rgba(91,91,214,.28); }
.topnav-link .nav-badge { margin-left: 2px; background: var(--red); color: #fff; font-size: 11px; border-radius: 10px; padding: 1px 7px; box-shadow: 0 2px 6px rgba(226,59,59,.35); }
.topnav-right { display: flex; align-items: center; gap: 12px; flex: 0 0 auto; }
.topnav-burger { display: none; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 12px; background: rgba(91,91,214,.08); color: var(--navy); border: none; cursor: pointer; transition: all .26s var(--ease); }
.topnav-burger:hover { background: rgba(91,91,214,.16); }
/* 返回按钮与页面标题是上下两行（按钮在上、标题在下），用 flex 纵向布局把两者间距拉开 */
.page-head { padding: 22px 28px 0; max-width: 1480px; width: 100%; margin: 0 auto; display: flex; flex-direction: column; align-items: flex-start; gap: 16px; }
.topbar-title { font-size: 20px; font-weight: 800; color: var(--navy); letter-spacing: .4px; font-family: var(--font-display); }
/* 全局返回上一页按钮（首页隐藏） */
/* 返回按钮（首页隐藏）。与标题的间距由 .page-head 的 gap 统一控制 */
.topbar-back { display: inline-flex; align-items: center; gap: 5px; margin: 0; padding: 7px 14px; border: 1px solid var(--line); background: var(--bg-2); color: var(--navy); border-radius: 10px; font-size: 13.5px; font-weight: 600; cursor: pointer; transition: all .18s var(--ease); position: relative; }
.topbar-back:hover { background: var(--grad-soft); border-color: var(--blue); color: var(--blue); transform: translateY(-1px); box-shadow: var(--shadow); }
@media (max-width: 760px) { .page-head { gap: 12px; } }

.main { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.topbar-search { position: relative; }
.topbar-search input {
  width: 240px; padding: 9px 16px; border-radius: 999px; background: rgba(255,255,255,.7); border: 1px solid transparent;
  transition: all .26s var(--ease);
}
.topbar-search input:focus { background: #fff; border-color: var(--blue); box-shadow: 0 0 0 4px rgba(91,91,214,.10); }

/* 全系统搜索结果下拉 */
#search-results { position: absolute; top: calc(100% + 9px); right: 0; width: 430px; max-width: 92vw; max-height: 72vh; overflow: auto; background: rgba(255,255,255,.82); backdrop-filter: blur(30px) saturate(170%); -webkit-backdrop-filter: blur(30px) saturate(170%); border: 1px solid rgba(255,255,255,.8); border-radius: 18px; box-shadow: 0 26px 70px rgba(30,27,75,.26); padding: 8px; z-index: 80; display: none; animation: cardFade .26s var(--ease); }
.sr-group-title { font-size: 12px; font-weight: 700; color: var(--text-2); padding: 9px 10px 5px; letter-spacing: .3px; }
.sr-group-title:first-child { padding-top: 4px; }
.sr-item { display: flex; align-items: center; gap: 11px; padding: 10px 12px; border-radius: 12px; cursor: pointer; font-size: 13.5px; transition: background .2s var(--ease); }
.sr-item:hover { background: rgba(91,91,214,.09); }
.sr-ico { width: 30px; height: 30px; border-radius: 10px; flex: 0 0 auto; display: flex; align-items: center; justify-content: center; font-size: 15px; }
.sr-main { flex: 1; min-width: 0; }
.sr-title { font-weight: 700; color: var(--navy); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sr-sub { font-size: 11.5px; color: var(--text-3); margin-top: 1px; }
.sr-empty { padding: 20px; text-align: center; color: var(--text-3); font-size: 13px; }
.user-chip { display: flex; align-items: center; gap: 10px; }
.user-avatar {
  width: 36px; height: 36px; border-radius: 50%; background: var(--grad); color: #fff;
  display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 700;
  box-shadow: 0 4px 12px rgba(91,91,214,.28);
}
.user-meta { line-height: 1.15; }
.user-name { font-size: 13px; font-weight: 700; }
.user-role { font-size: 11px; color: var(--text-3); }
/* 顶栏用户名片右侧的「改密」小按钮 */
.uc-btn {
  margin-left: 2px; padding: 4px 9px; border: 1px solid var(--border); border-radius: 999px;
  background: var(--bg-2); color: var(--text-2); font-size: 11.5px; font-weight: 600; cursor: pointer;
  transition: all .16s; white-space: nowrap;
}
.uc-btn:hover { background: var(--grad); border-color: transparent; color: #fff; box-shadow: 0 4px 12px rgba(91,91,214,.28); }

.content { padding: 22px 28px 48px; max-width: 1480px; width: 100%; margin: 0 auto; }

/* 统一页面头部：渐变竖条 + 标题 + 副标题 + 右侧操作区（高端信息层级） */
.view-head { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin: 2px 0 24px; padding-left: 17px; position: relative; flex-wrap: wrap; }
.view-head::before { content: ''; position: absolute; left: 0; top: 3px; bottom: 3px; width: 5px; border-radius: 99px; background: var(--grad); box-shadow: 0 0 0 4px rgba(91,91,214,.12); }
.vh-left { flex: 1; min-width: 200px; }
.vh-title { font-size: 22px; font-weight: 800; color: var(--navy); letter-spacing: .3px; line-height: 1.4; font-family: var(--font-display); display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.vh-name { display: inline-block; }
.vh-tags { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 6px; }
.vh-tags .tag { font-size: 12px; font-weight: 700; }
.vh-sub { font-size: 13px; color: var(--text-2); margin-top: 8px; line-height: 1.55; }
.vh-sub b { color: var(--blue); font-weight: 700; }
/* 深色模式：驾驶舱标题下的链接（如「所属框架：XXX」）不再用暗蓝，换柔和浅紫 + 虚线下划线 */
body.theme-dark .vh-sub b { color: #aab0ff; }
body.theme-dark .vh-sub a { color: #aab0ff; font-weight: 600; padding-bottom: 1px; border-bottom: 1px dashed rgba(170,176,255,.45); transition: color .18s var(--ease), border-color .18s var(--ease); }
body.theme-dark .vh-sub a:hover { color: #d3d7ff; border-bottom-style: solid; border-bottom-color: rgba(211,215,255,.9); }
/* 「添加附件 → 选择文件」：原生上传控件自带白底按钮，深浅两套统一换成虚线框 + 品牌色按钮 */
input[type="file"] { padding: 8px 10px; border: 1px dashed rgba(30, 41, 80, .22); border-radius: 10px; background: #fbfcfe; color: var(--text); font-size: 13px; cursor: pointer; max-width: 100%; }
input[type="file"]::file-selector-button { background: var(--grad); color: #fff; border: none; border-radius: 8px; padding: 7px 15px; margin-right: 12px; font-weight: 700; font-size: 12.5px; cursor: pointer; box-shadow: 0 6px 16px rgba(91, 91, 214, .24); transition: filter .18s var(--ease); }
input[type="file"]::file-selector-button:hover { filter: brightness(1.08); }
body.theme-dark input[type="file"] { background: rgba(255, 255, 255, .05); border-color: rgba(160, 150, 255, .3); color: #e8eef6; }
body.theme-dark input[type="file"]::file-selector-button { background: linear-gradient(135deg, #4f46e5, #0891b2); }
/* 驾驶舱标题下的「客户名 / 所属框架名」：单独放大加粗，一眼就能看到（原先跟普通说明文字同灰同粗，扫不到） */
.vh-sub b.vh-key,
.vh-sub a.vh-key.vh-link { font-size: 14.5px; font-weight: 800; letter-spacing: .2px; }
/* 字段名「客户：」「所属框架：」一样要加粗（用次级灰，跟后面的「值」形成层次） */
.vh-sub b.vh-lab { font-size: 13.5px; font-weight: 800; letter-spacing: .2px; color: var(--text-2); }
body.theme-dark .vh-sub b.vh-lab { color: #b9c6d6; }
.vh-sub b.vh-key { letter-spacing: .2px; color: var(--navy); }
.vh-sub a.vh-key.vh-link { color: var(--blue); text-decoration: none; padding-bottom: 1px; border-bottom: 1px dashed currentColor; transition: opacity .18s var(--ease); }
.vh-sub a.vh-key.vh-link:hover { opacity: .78; }
body.theme-dark .vh-sub b.vh-key { color: #f2f5fb; }
body.theme-dark .vh-sub a.vh-key.vh-link { color: #aab0ff; }
.vh-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
@media (max-width: 760px) { .vh-title { font-size: 19px; } .view-head { margin-bottom: 18px; } }

/* 悬浮快捷菜单（FAB） */
.fab {
  position: fixed; right: 28px; bottom: 28px; z-index: 70;
  width: 56px; height: 56px; border-radius: 50%; border: none; cursor: pointer;
  background: var(--grad); color: #fff; display: flex; align-items: center; justify-content: center;
  box-shadow: 0 14px 32px rgba(91,91,214,.42); transition: transform .3s var(--ease), box-shadow .3s var(--ease);
}
.fab:hover { transform: translateY(-3px) scale(1.04); box-shadow: 0 18px 40px rgba(91,91,214,.52); }
.fab.open { transform: rotate(45deg); }
.fab-menu {
  position: fixed; right: 28px; bottom: 96px; z-index: 70; min-width: 186px;
  background: rgba(255,255,255,.82); backdrop-filter: blur(30px) saturate(170%);
  border: 1px solid rgba(255,255,255,.8); border-radius: 18px; padding: 8px;
  box-shadow: 0 22px 56px rgba(30,27,75,.24); display: flex; flex-direction: column; gap: 2px;
  animation: fabPop .3s var(--ease);
}
.fab-menu[hidden] { display: none; }
@keyframes fabPop { from { opacity: 0; transform: translateY(10px) scale(.96); } to { opacity: 1; transform: none; } }
.fab-item { display: flex; align-items: center; gap: 11px; padding: 11px 14px; border-radius: 12px; cursor: pointer; font-size: 14px; font-weight: 600; color: var(--text); transition: all .2s var(--ease); }
.fab-item svg { width: 18px; height: 18px; color: var(--blue); }
.fab-item:hover { background: rgba(91,91,214,.08); color: var(--navy); }

/* 项目驾驶舱：板块两栏排版 + 快捷操作分组 */
.pd-grid { columns: 2; column-gap: 18px; margin-top: 18px; }
.pd-grid > * { break-inside: avoid; margin: 0 0 18px; }
.pd-grid .card { margin-top: 0; }
/* 快捷操作：下拉菜单，点击展开，避免满屏按钮 */
.qa-dropdown { position: relative; }
.qa-toggle { padding: 9px 16px; font-size: 13px; border-radius: 11px; background: var(--grad); color: #fff; border-color: transparent; box-shadow: var(--shadow-blue); font-weight: 700; }
.qa-toggle:hover { filter: brightness(1.05); box-shadow: 0 10px 22px rgba(91,91,214,.34); }
.qa-caret { display: inline-block; transition: transform .26s var(--ease); margin-left: 2px; }
.qa-toggle[aria-expanded="true"] .qa-caret { transform: rotate(180deg); }
.qa-menu { position: absolute; top: calc(100% + 8px); right: 0; left: auto; z-index: 60; width: 440px; max-width: 92vw; padding: 16px; background: rgba(255,255,255,.82); backdrop-filter: blur(28px) saturate(160%); -webkit-backdrop-filter: blur(28px) saturate(160%); border: 1px solid rgba(255,255,255,.8); border-radius: 16px; box-shadow: var(--shadow-lg); animation: cardFade .26s var(--ease); }
.qa-menu .qa-group { margin-bottom: 14px; }
.qa-menu .qa-group:last-child { margin-bottom: 0; }
.qa-menu .qa-group-title { font-size: 12px; font-weight: 700; color: var(--text-2); letter-spacing: .3px; margin-bottom: 9px; padding-left: 9px; border-left: 3px solid var(--blue); }
.qa-menu .qa-grid { display: flex; flex-wrap: wrap; gap: 8px; }
.qa-menu .qa-grid .btn { flex: 0 0 auto; }
.qa-menu .qa-grid .btn { margin: 0; padding: 9px 12px; font-size: 12.5px; border-radius: 10px; background: rgba(91,91,214,.05); border-color: rgba(91,91,214,.14); color: var(--navy); justify-content: flex-start; line-height: 1.35; text-align: left; }
.qa-menu .qa-grid .btn:hover { background: rgba(91,91,214,.1); border-color: rgba(91,91,214,.28); transform: translateY(-1px); box-shadow: 0 6px 14px rgba(30,27,75,.08); }
.qa-menu .qa-grid .btn-primary { background: var(--grad); color: #fff; border-color: transparent; box-shadow: var(--shadow-blue); }
.qa-menu .qa-grid .btn-primary:hover { filter: brightness(1.05); box-shadow: 0 10px 22px rgba(91,91,214,.34); }
/* 快捷操作下拉里，所有按钮外观一律统一：
   「+ 新建子项目」（原紫青渐变）和「成果文件校审」（原金底）不再单独突出，
   底色、边框、字色跟旁边其他快捷按钮完全一致（同时保证看得清，不是白底白字）。
   权重说明：全站 .btn-gold 用了 !important，这里必须同样 !important 且权重更高才能压过去；
   :not(:disabled) 保证按钮被禁用时仍显示灰底，不会伪装成可点 */
.qa-menu .qa-grid .btn-gold:not(:disabled):not([disabled]),
.qa-menu .qa-grid .btn-primary:not(:disabled):not([disabled]) {
  background: rgba(255,255,255,.6) !important;
  color: var(--navy) !important;
  border-color: rgba(91,91,214,.14) !important;
  box-shadow: none !important;
  /* 字重要跟旁边其他快捷按钮一样是加粗（600）——这里原来是 inherit，
     继承下来变成 400，导致「+ 新建子项目」比同行按钮细一圈、看着像两种按钮（2026-10-05 修复） */
  font-weight: 600;
}
.qa-menu .qa-grid .btn-gold:not(:disabled):not([disabled]):hover,
.qa-menu .qa-grid .btn-primary:not(:disabled):not([disabled]):hover {
  background: rgba(255,255,255,.9) !important;
  border-color: rgba(91,91,214,.28) !important;
  box-shadow: 0 6px 14px rgba(30,27,75,.08) !important;
  transform: translateY(-1px);
  filter: none;
}
body.theme-dark .qa-menu .qa-grid .btn-gold:not(:disabled):not([disabled]),
body.theme-dark .qa-menu .qa-grid .btn-primary:not(:disabled):not([disabled]) {
  background: rgba(91,91,214,.12) !important;
  color: var(--text) !important;
  border-color: rgba(255,255,255,.1) !important;
}
body.theme-dark .qa-menu .qa-grid .btn-gold:not(:disabled):not([disabled]):hover,
body.theme-dark .qa-menu .qa-grid .btn-primary:not(:disabled):not([disabled]):hover {
  background: rgba(91,91,214,.22) !important;
}
.qa-menu .qa-grid .btn-warn { background: #fff7ec; border-color: #f0c987; color: #b9770b; }
.qa-menu .qa-grid .btn:disabled { background: #f3f5f9; border-color: #e6eaf0; color: var(--text-3); box-shadow: none; transform: none; }

@media (max-width: 980px) {
  .topbar-search { display: none; }
  .topnav-brand-sub { display: none; }
  .pd-grid { columns: 1; }
}
@media (max-width: 760px) {
  .topnav { gap: 10px; padding: 0 14px; height: 60px; }
  .topnav-brand-name { font-size: 15px; }
  .topnav-menu {
    display: none; position: absolute; top: 60px; left: 10px; right: 10px;
    flex-direction: column; align-items: stretch; gap: 2px;
    background: rgba(255,255,255,.86); backdrop-filter: blur(30px) saturate(170%);
    border: 1px solid rgba(255,255,255,.8); border-radius: 16px; padding: 8px;
    box-shadow: var(--shadow-lg); max-height: 72vh; overflow-y: auto;
  }
  .topnav.open .topnav-menu { display: flex; }
  .topnav-link { justify-content: flex-start; }
  .topnav-burger { display: inline-flex; }
  .page-head { padding: 16px 14px 0; }
  .content { padding: 16px 14px 84px; }
  .fab { right: 18px; bottom: 74px; }
  .fab-menu { right: 18px; bottom: 142px; }
  /* 手机：顶部横滑导航与汉堡收起，统一改用底部 Tab；顶栏精简只留品牌 / 主题 / 通知 / 头像 */
  #top-nav { display: none; }
  #nav-btn.hamburger { display: none; }
  .search { display: none; }
  .brand-txt span { display: none; }
  .topbar-in { gap: 8px; padding-right: 8px; }
}

/* ===================== 按钮 ===================== */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px; white-space: nowrap;
  border: 1px solid var(--line); border-radius: 11px; padding: 10px 17px; font-size: 13.5px; font-weight: 600;
  transition: all .26s var(--ease); background: #fff; color: var(--text);
}
.btn svg { width: 18px; height: 18px; flex: 0 0 auto; }
.btn:hover { border-color: #d6d8ee; background: #f4f5fe; transform: translateY(-1px); box-shadow: 0 6px 16px rgba(30,27,75,.07); }
.btn-primary { background: var(--grad); color: #fff; border-color: transparent; box-shadow: var(--shadow-blue); }
.btn-primary:hover { background: var(--grad); filter: brightness(1.08); border-color: transparent; box-shadow: 0 10px 24px rgba(91,91,214,.34); transform: translateY(-1px); }
/* 金底白字对比度太低、根本看不清 → 全站统一改深棕字（AI 复核 / 归档审批 / 佣金发放 / 成果文件校审都走这条）
   注意：ui-b.css 有「浅色按钮统一白底」的全局补丁（权重 0,3,1）会把金底冲掉，
   所以用 `body+X .btn.btn-gold:not(:disabled)`（权重 0,4,1）把金色标识抢回来，:not(:disabled) 保证禁用态仍走灰底 */
.btn-gold { background: linear-gradient(135deg, #f59e0b, #fbbf24); color: #7c2d12; border-color: transparent; box-shadow: 0 8px 20px rgba(245,158,11,.28); }
/* 抢回金底深色字：ui-b.css「浅色按钮统一白底」(0,3,1) 和本文件「深色快捷操作按钮」(0,4,1) 都会压过普通写法，
   这里用 !important 兜底；:not(:disabled) 保证禁用态仍显示灰底，不会伪装成可点 */
.btn-gold:not(:disabled):not([disabled]) {
  background: linear-gradient(135deg, #f59e0b, #fbbf24) !important;
  color: #7c2d12 !important;
  border-color: transparent !important;
  box-shadow: 0 8px 20px rgba(245,158,11,.28);
}
.btn-gold:not(:disabled):not([disabled]):hover { filter: brightness(1.07); transform: translateY(-1px); }
.btn-gold:hover { background: linear-gradient(135deg, #f59e0b, #fbbf24); filter: brightness(1.08); transform: translateY(-1px); }
.btn-danger { background: var(--red); color: #fff; border-color: transparent; box-shadow: 0 8px 20px rgba(226,59,59,.26); }
.btn-danger:hover { background: var(--red); filter: brightness(1.08); transform: translateY(-1px); }
.btn-ghost { background: transparent; border-color: transparent; color: var(--text-2); }
.btn-ghost:hover { background: var(--bg); }
.btn-outline { background: #fff; border-color: var(--blue); color: var(--blue); box-shadow: none; }
.btn-outline:hover { background: var(--blue-bg); border-color: var(--blue); color: var(--blue); transform: translateY(-1px); }
.btn-sm { padding: 7px 13px; font-size: 12.5px; border-radius: 9px; }
.pwd-show-box { display: flex; align-items: center; gap: 10px; background: rgba(91,91,214,.06); border: 1px dashed rgba(91,91,214,.3); border-radius: 10px; padding: 10px 12px; }
.pwd-show-box code { font-size: 18px; font-weight: 700; letter-spacing: 1px; color: var(--navy); flex: 1; user-select: all; }
.btn-block { width: 100%; }
.btn:disabled { opacity: .5; cursor: not-allowed; filter: grayscale(.2); transform: none !important; box-shadow: none !important; }

/* ===================== 卡片 / 统计 ===================== */
.card {
  background: var(--card); border: 1px solid rgba(91,91,214,.1); border-radius: var(--radius);
  box-shadow: 0 1px 2px rgba(30,27,75,.05), 0 16px 38px rgba(30,27,75,.08), inset 0 1px 0 rgba(255,255,255,1);
  padding: 22px; position: relative; transition: box-shadow .3s var(--ease), transform .3s var(--ease), border-color .3s var(--ease);
}
.card + .card { margin-top: 18px; }
@keyframes cardFade { from { opacity: 0; } to { opacity: 1; } }
@keyframes cardRise { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
.content .stat-card { animation: cardRise .5s var(--ease); }
  /* 项目驾驶舱：左侧目录 + 右侧单板块（去卡片墙，更清爽） */
  .cockpit { display: flex; gap: 18px; margin-top: 18px; align-items: flex-start; }
  .cockpit-nav { position: sticky; top: 84px; flex: none; width: 208px; background: rgba(255,255,255,.56); backdrop-filter: blur(26px) saturate(160%); -webkit-backdrop-filter: blur(26px) saturate(160%); border: 1px solid rgba(255,255,255,.72); border-radius: 16px; padding: 10px; box-shadow: var(--shadow); }
  .cockpit-nav .cn-item { display: block; width: 100%; text-align: left; padding: 11px 14px; border-radius: 11px; font-size: 13.5px; font-weight: 600; color: var(--text-2); cursor: pointer; border: none; background: transparent; transition: all .2s var(--ease); }
  .cockpit-nav .cn-item:hover { background: rgba(91,91,214,.08); color: var(--navy); }
  .cockpit-nav .cn-item.active { background: var(--grad); color: #fff; box-shadow: var(--shadow-blue); }
  .cockpit-body { flex: 1; min-width: 0; }
  .cockpit-body .card { margin-top: 0; }
  .cockpit-panel .card { animation: none; }
  .cockpit-panel { animation: cardFade .4s var(--ease); }
  .cockpit-panel[hidden] { display: none; }
  @media (max-width: 980px) {
    .cockpit { flex-direction: column; align-items: stretch; }
    .cockpit-nav { position: static; width: 100%; display: flex; gap: 8px; overflow-x: auto; padding: 8px; }
    .cockpit-nav .cn-item { width: auto; white-space: nowrap; }
  }
.content .stat-card:nth-child(1){animation-delay:.03s}
.content .stat-card:nth-child(2){animation-delay:.07s}
.content .stat-card:nth-child(3){animation-delay:.11s}
.content .stat-card:nth-child(4){animation-delay:.15s}
.content .stat-card:nth-child(5){animation-delay:.19s}
.content .stat-card:nth-child(6){animation-delay:.23s}
.content .stat-card:nth-child(6){animation-delay:.33s}
.dash-greet { font-size: 22px; font-weight: 800; font-family: var(--font-display); background: var(--grad); -webkit-background-clip: text; background-clip: text; color: transparent; letter-spacing: .3px; }
/* 首页玻璃 Hero：与底部玻璃导航同语言，蓝调磨砂 + 受光高光 + 角部光晕，强化科技感与整体协调 */
.dash-hero {
  position: relative; display: flex; align-items: center; justify-content: space-between;
  gap: 18px; flex-wrap: wrap; margin-bottom: 18px; overflow: hidden;
  padding: 24px 26px; border-radius: 22px;
  background: linear-gradient(180deg, rgba(255,255,255,.7) 0%, rgba(255,255,255,.5) 50%, rgba(255,255,255,.4) 100%);
  -webkit-backdrop-filter: blur(34px) saturate(175%); backdrop-filter: blur(34px) saturate(175%);
  border: 1px solid rgba(255,255,255,.7);
  box-shadow: 0 18px 52px rgba(30,27,75,.22), 0 1px 0 rgba(255,255,255,1) inset, 0 -1px 2px rgba(30,27,75,.05) inset;
}
.dash-hero::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: 56%; pointer-events: none; background: linear-gradient(180deg, rgba(255,255,255,.92), rgba(255,255,255,0)); }
.dash-hero > * { position: relative; z-index: 1; }
.dh-left { flex: 1 1 0; min-width: 0; }
.dh-actions { display: flex; gap: 10px; flex-wrap: wrap; align-self: center; }
/* 首页问候区「星座 + 今日运势」：与问候语同列左对齐的一行，无外框 */
.hero-zodiac {
  margin-top: 10px; display: flex; flex-wrap: wrap; align-items: center;
  gap: 8px 12px; padding: 0; border-radius: 0; max-width: 100%;
  background: none; border: none; box-shadow: none;
}
.hz-badge { display: inline-flex; align-items: center; gap: 5px; padding: 4px 12px; border-radius: 999px; font-weight: 800; font-size: 13.5px; color: #fff; background: var(--grad); box-shadow: 0 4px 12px rgba(91,91,214,.28); letter-spacing: .5px; }
.hz-icon { font-size: 15px; line-height: 1; }
.hz-stars { color: #f7a900; font-size: 16px; letter-spacing: 2px; text-shadow: 0 1px 2px rgba(247,169,0,.25); }
.hz-chip { display: inline-flex; align-items: center; gap: 5px; padding: 3px 10px; border-radius: 999px; background: rgba(91,91,214,.07); border: 1px solid rgba(91,91,214,.14); font-size: 12.5px; color: var(--text-2); font-weight: 600; }
.hz-chip b { color: var(--navy); font-weight: 800; }
.hz-dot { width: 11px; height: 11px; border-radius: 50%; box-shadow: 0 0 0 2px rgba(255,255,255,.9), 0 1px 3px rgba(0,0,0,.18); }
.hz-num { display: inline-flex; align-items: center; justify-content: center; min-width: 27px; height: 27px; padding: 0 9px; border-radius: 9px; background: linear-gradient(135deg,#ffe7c2,#ffd49a); color: #8a4b00; font-weight: 800; font-size: 16px; box-shadow: 0 3px 9px rgba(217,119,6,.22); letter-spacing: .5px; line-height: 1; border: 1px solid rgba(217,119,6,.28); }
body.theme-dark .hz-num { background: linear-gradient(135deg,#caa23a,#e0ad42); color: #2a1d05; border-color: rgba(224,173,66,.5); box-shadow: 0 3px 10px rgba(202,162,58,.32); }
.hz-tip { display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto; max-width: 100%; padding: 4px 11px; border-radius: 999px; font-size: 13px; font-weight: 700; color: var(--navy); line-height: 1.4; background: rgba(247,169,0,.08); border: 1px solid rgba(247,169,0,.28); }
.hz-tip-ico { font-size: 14px; line-height: 1; flex: 0 0 auto; }
.hz-tip > span:last-child { overflow-wrap: anywhere; }
body.theme-dark .hz-chip { background: rgba(255,255,255,.08); border-color: rgba(255,255,255,.12); color: rgba(226,232,240,.85); }
body.theme-dark .hz-chip b { color: #fff; }
body.theme-dark .hz-tip { color: #e2ecff; background: rgba(255,255,255,.06); border-color: rgba(247,169,0,.25); }
.card-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; }
.card-title { font-size: 16px; font-weight: 800; color: var(--navy); letter-spacing: .3px; }
.card-sub { font-size: 12px; color: var(--text-3); margin-top: 3px; }
/* 投标佣金：合计金额卡片 */
.bc-totals { display: flex; align-items: stretch; gap: 10px; flex-wrap: wrap; }
.bc-total { background: var(--grad); border-radius: 14px; padding: 10px 16px; min-width: 120px; color: #fff; display: flex; flex-direction: column; justify-content: center; box-shadow: 0 8px 20px rgba(91,91,214,.22); }
.bc-total.ghost { background: transparent; box-shadow: none; border: 1px dashed var(--line); color: var(--text-2); }
.bc-total-num { font-size: 20px; font-weight: 800; letter-spacing: -.6px; font-variant-numeric: tabular-nums; }
.bc-total.ghost .bc-total-num { color: var(--navy); }
.bc-total-lbl { font-size: 11.5px; opacity: .9; margin-top: 2px; }
.bc-total.ghost .bc-total-lbl { opacity: 1; }

/* 首页「最近项目」紧凑列表（与「项目管理」页卡片区分，避免重复；类名 rj-* 避免与提醒弹窗 .rp-* 冲突） */
.rj-list { display: flex; flex-direction: column; }
.rj-item { position: relative; display: flex; align-items: center; gap: 0; padding: 15px 16px 15px 18px; border-bottom: 1px solid var(--line); cursor: pointer; transition: background .2s var(--ease); border-radius: 10px; }
.rj-item:last-child { border-bottom: none; }
.rj-item::before { content: ''; position: absolute; left: 0; top: 14px; bottom: 14px; width: 3px; border-radius: 3px; background: var(--grad); opacity: 0; transition: opacity .2s var(--ease); }
.rj-item:hover { background: rgba(91,91,214,.05); }
.rj-item:hover::before { opacity: 1; }
/* 首页「最近项目」单行三栏：项目名称 / 实施负责人 / 进度，竖向分隔 */
.rj-col { min-width: 0; padding: 0 24px; }
.rj-col:first-child { padding-left: 0; }
.rj-col-name { flex: 1.5; }
.rj-col-owner { flex: 1; border-left: 1px solid var(--line); }
.rj-col-prog { flex: 0 0 180px; border-left: 1px solid var(--line); }
.rj-name { font-weight: 800; font-size: 15px; color: var(--navy); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rj-client { margin-top: 5px; display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text); font-weight: 600; overflow: hidden; }
.rj-client .rj-text { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rj-k { flex: 0 0 auto; font-size: 11px; color: var(--blue); background: rgba(91,91,214,.10); padding: 1px 6px; border-radius: 6px; font-weight: 700; }
.rj-sub { margin-top: 5px; display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text-1); overflow: hidden; }
.rj-label { font-size: 11px; color: var(--text-1); letter-spacing: .06em; margin-bottom: 6px; font-weight: 700; }
.rj-owner-val { font-size: 14px; color: var(--text); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.rj-progress { display: flex; align-items: center; gap: 10px; }
.rj-progress-bar { flex: 0 0 96px; width: 96px; height: 8px; border-radius: 999px; background: var(--bg-2); overflow: hidden; }
.rj-progress-bar i { display: block; height: 100%; border-radius: 999px; background: var(--grad); }
.rj-progress-val { font-size: 13px; font-weight: 800; color: var(--blue); min-width: 40px; text-align: right; font-variant-numeric: tabular-nums; }
/* 首页「最近项目」紧凑列表 + 翻页 */
.rj-pager { display: flex; align-items: center; justify-content: center; gap: 14px; margin-top: 18px; padding-top: 14px; border-top: 1px dashed var(--line); }
.rj-pager-info { font-size: 13px; color: var(--text-3); font-weight: 600; }
@media (max-width: 820px) {
  .rj-item { flex-direction: column; align-items: stretch; gap: 12px; padding-left: 16px; }
  .rj-col { width: 100%; padding: 0; border-left: none; }
}
.grid { display: grid; gap: 18px; align-items: stretch; }
.grid-stats { grid-template-columns: repeat(6, 1fr); gap: 14px; }
.grid-money { grid-template-columns: repeat(4, 1fr); gap: 14px; }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.grid-2 { grid-template-columns: repeat(2, 1fr); }
/* 区块小标题 */
.section-title { font-size: 15px; font-weight: 700; color: var(--text); letter-spacing: .3px; }
/* 今日办公状态卡片内的人数明细 */
.att-list { display: flex; flex-direction: column; gap: 3px; max-height: 92px; overflow: auto; }
.att-row { font-size: 11.5px; color: var(--text-2); line-height: 1.5; }
.att-row b { color: var(--text); font-weight: 600; }
.att-row i { font-style: normal; color: var(--blue); opacity: .85; margin-left: 2px; }
.att-row em { font-style: normal; color: var(--text-3); }
.att-time { font-weight: 600; color: var(--text); font-variant-numeric: tabular-nums; margin-left: 2px; }
/* 首页统计区块：用带强调条的标题把多组卡片清晰分组，避免「满屏卡片」视觉凌乱 */
.dash-section { margin-top: 26px; }
.dash-section-head { display: flex; align-items: center; gap: 10px; margin-bottom: 16px; }
.dash-section-head .ds-bar { width: 4px; height: 17px; border-radius: 3px; background: linear-gradient(180deg, var(--blue), #5b5bd6); flex: 0 0 auto; }
.dash-section-head .ds-title { font-size: 15px; font-weight: 700; color: var(--text); letter-spacing: .3px; }
.dash-section-head .ds-note { font-size: 12px; color: var(--text-3); margin-left: auto; }
@media (max-width: 560px) { .dash-section-head .ds-note { display: none; } }
/* 可点击的板块头（如首页「商机」收起/展开），给轻微 hover 反馈 */
.dash-section-head.clickable { padding: 4px 6px; margin: -4px -6px 16px; border-radius: 10px; transition: background .18s var(--ease); }
.dash-section-head.clickable:hover { background: var(--bg-2); }
.dash-section-head.clickable:hover .ds-title { color: var(--blue); }
/* 收起/展开：隐藏对应容器（首页「商机」折叠依赖此规则） */
.hidden { display: none !important; }
/* 首页「今日办公动态」紧凑横条：小在岗率环 + 三枚扁平人数块，不独占大块、一目了然 */
.att-bar { padding: 11px 14px; display: flex; flex-direction: column; gap: 7px; }
.att-top { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.att-donut-wrap { display: flex; align-items: center; gap: 9px; flex: 0 0 auto; }
.att-donut { flex: 0 0 auto; display: block; }
.att-donut-txt { fill: var(--text-1); font-size: 12px; font-weight: 700; font-family: var(--font-display); font-variant-numeric: tabular-nums; }
.att-donut-cap { display: flex; flex-direction: column; line-height: 1.15; }
.att-donut-cap .adc-label { font-size: 10.5px; color: var(--text-3); margin-bottom: 1px; }
.att-donut-cap .adc-val { font-size: 16px; font-weight: 800; color: var(--navy); font-variant-numeric: tabular-nums; }
.att-pills { display: flex; gap: 9px; flex: 1; flex-wrap: wrap; }
.att-pill { display: flex; align-items: center; gap: 8px; background: var(--bg-2); border: 1px solid var(--border); border-radius: 12px; padding: 6px 10px; min-width: 82px; }
.att-pill-ico { width: 28px; height: 28px; border-radius: 9px; display: flex; align-items: center; justify-content: center; flex: 0 0 auto; }
.att-pill-ico svg { width: 15px; height: 15px; }
.att-pill-tx { display: flex; align-items: baseline; gap: 4px; }
.att-pill-tx b { font-size: 16px; font-weight: 800; color: var(--navy); font-variant-numeric: tabular-nums; }
.att-pill-tx span { font-size: 12px; color: var(--text-2); }
/* 可点击的 pill（外出 / 出差 / 请假）：点开看明细 */
.att-pill-link { cursor: pointer; position: relative; padding-right: 22px; transition: transform .16s, box-shadow .16s, border-color .16s; }
.att-pill-link:hover { border-color: var(--blue); transform: translateY(-1px); box-shadow: 0 4px 12px rgba(91,91,214,.14); }
.att-pill-more { position: absolute; right: 8px; top: 50%; transform: translateY(-50%); font-size: 16px; color: var(--muted); }
.att-pill-link:hover .att-pill-more { color: var(--blue); }
/* 今日外出 / 出差明细弹窗 */
.away-block { margin-bottom: 16px; }
.away-block-title { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 800; color: var(--text); margin-bottom: 8px; }
.away-block-n { font-size: 11.5px; font-weight: 600; color: var(--muted); background: var(--bg-2); border: 1px solid var(--line); border-radius: 999px; padding: 1px 8px; }
.away-block .empty { padding: 10px 0; }
/* 系统设置 · 考勤打卡：免打卡人员勾选 */
.att-exempt-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px 14px; }
.att-exempt-item { display: flex; align-items: center; gap: 7px; font-size: 13px; color: var(--text); cursor: pointer; padding: 5px 8px; border: 1px solid var(--line); border-radius: 10px; background: var(--bg-2); }
.att-exempt-item:hover { border-color: var(--blue); }
.att-exempt-item input { width: 15px; height: 15px; accent-color: var(--blue); flex: 0 0 auto; }
.att-detail-line { font-size: 12px; color: var(--text-2); line-height: 1.5; padding-top: 2px; border-top: 1px dashed var(--line); }
.att-detail-line b { color: var(--text); font-weight: 600; }
/* 首页可点击进入的卡片：光标手型 + 悬停微浮起，提示"可点" */
.card--enter { cursor: pointer; }
.card--enter:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); border-color: color-mix(in srgb, var(--blue) 28%, var(--border)); }
/* 网格内卡片间距由 gap 控制；去掉堆叠才需要的 margin-top，否则第二张卡片会被往下顶、与左侧不等高（并列卡片必须同高） */
.grid > .card + .card,
.section-grid > .card + .card,
.cmp2 > .card + .card,
.ap-grid > .card + .card { margin-top: 0; }
/* 首页「提醒中心」与「OA 办公」并列：两列等高，去掉各自自带的上间距 */
.grid-cards2 { grid-template-columns: repeat(2, 1fr); }
.grid-cards2 > .card,
.grid-cards2 > .reminder-center { margin-top: 0; }
@media (max-width: 980px) { .grid-cards2 { grid-template-columns: 1fr; } }

/* 首页 OA 办公动态：分组胶囊 + 外出 / 请假 / 出差 横向小标签（紧凑不占空间） */
.oa-groups-sm { display: flex; gap: 10px; margin-bottom: 16px; }
.oa-group { flex: 1; text-align: center; padding: 11px; border-radius: 14px; font-size: 13.5px; font-weight: 700; color: #fff; cursor: pointer; background: var(--gc, var(--blue)); box-shadow: 0 8px 18px color-mix(in srgb, var(--gc, var(--blue)) 28%, transparent); transition: transform .26s var(--ease), box-shadow .26s var(--ease); }
.oa-group:hover { transform: translateY(-2px); box-shadow: 0 12px 24px color-mix(in srgb, var(--gc, var(--blue)) 42%, transparent); }
.oa-tags-wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.oa-tags-block { background: var(--bg-2); border: 1px solid var(--border); border-radius: 14px; padding: 14px 16px; }
.oa-tags-label { display: flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 700; color: var(--navy); margin-bottom: 11px; }
.oa-tags-label .tag { margin-left: 2px; }
.oa-ico { width: 24px; height: 24px; border-radius: 8px; display: inline-flex; align-items: center; justify-content: center; flex: none; }
.oa-ico svg { width: 14px; height: 14px; }
.oa-ico.c-blue { background: var(--blue-bg); color: var(--blue); }
.oa-ico.c-amber { background: var(--amber-bg); color: var(--amber); }
.oa-tags { display: flex; flex-wrap: wrap; gap: 8px; }
.oa-tag { display: inline-flex; align-items: center; gap: 4px; font-size: 12.5px; padding: 6px 11px; border-radius: 10px; background: #fff; border: 1px solid var(--border); color: var(--text-2); transition: transform .2s var(--ease), box-shadow .2s var(--ease); }
.oa-tag:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(30,27,75,.08); }
.oa-tag b { color: var(--navy); font-weight: 700; }
.oa-tag i { font-style: normal; color: var(--text-3); font-size: 11.5px; }
.oa-tag em { font-style: normal; color: var(--text-3); font-size: 11.5px; }
.oa-tag-out { border-color: #d9d8fb; background: var(--blue-bg); }
.oa-tag-out b { color: var(--blue); }
.oa-tag-trip { border-color: #c7e7d8; background: #e9f8ef; }
.oa-tag-trip b { color: #15934a; }
.oa-tag-lev { border-color: #f3d9a6; background: var(--amber-bg); }
.oa-tag-lev b { color: #b9770b; }
.oa-tag-empty { font-size: 12.5px; color: var(--text-3); padding: 4px 0; }
@media (max-width: 760px) { .oa-tags-wrap { grid-template-columns: 1fr; } }
/* 通知公告整行卡片 */
.ann-card .ann-list { display: flex; flex-direction: column; gap: 8px; }
.ann-row { display: flex; gap: 10px; align-items: flex-start; padding: 10px 12px; background: var(--bg-2); border: 1px solid var(--border); border-radius: 12px; transition: background .2s var(--ease), border-color .2s var(--ease); }
.ann-row:hover { background: #fff; border-color: #d6e2f2; }
.ann-dot { flex: 0 0 auto; width: 9px; height: 9px; border-radius: 50%; background: var(--grad); margin-top: 6px; box-shadow: 0 0 0 4px rgba(91,91,214,.12); }
.ann-body { flex: 1; min-width: 0; }
.ann-title { font-size: 14px; font-weight: 700; color: var(--navy); }
.ann-meta { font-size: 12px; color: var(--text-3); margin-top: 2px; }
.ann-content { font-size: 12.5px; color: var(--text-2); margin-top: 4px; line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
/* 首页「今日动态」合并行：两张卡片等高、内容垂直居中，避免错位/空荡 */
.att-card-compact { display: flex; flex-direction: column; justify-content: center; }
.att-mini-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 9px; font-size: 14px; font-weight: 800; color: var(--navy); letter-spacing: .3px; }
.att-mini-note { font-size: 11px; color: var(--blue-2); font-weight: 600; cursor: pointer; }
.att-mini-note:hover { text-decoration: underline; }
.grid-2 > .att-card-compact { margin-top: 0; }
/* 商机卡片：复用招标卡片样式，补充已读 / 未读标签 */
.td-opp { cursor: pointer; }
.td-opp.td-read .td-title { color: var(--text-3); }
.td-opp.td-read .tm-score { opacity: .7; }
.td-read-tag { font-size: 11.5px; font-weight: 700; color: var(--text-3); background: var(--bg-2); border: 1px solid var(--border); border-radius: 999px; padding: 2px 9px; }
.td-unread-tag { font-size: 11.5px; font-weight: 700; color: var(--blue); background: rgba(91,91,214,.1); border: 1px solid rgba(91,91,214,.2); border-radius: 999px; padding: 2px 9px; }

.stat-card {
  background: var(--card); border: 1px solid var(--border); border-radius: var(--radius);
  box-shadow: var(--shadow); padding: 12px 14px; position: relative; overflow: hidden; cursor: pointer;
  transition: transform .3s var(--ease), box-shadow .3s var(--ease);
}
.stat-card::after {
  content: ''; position: absolute; right: -30px; bottom: -30px; width: 110px; height: 110px;
  background: var(--grad-soft); border-radius: 50%; opacity: .6; pointer-events: none;
}
.stat-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); }
.stat-label { font-size: 12.5px; color: var(--text-2); display: flex; align-items: center; gap: 6px; font-weight: 500; }
.stat-value { font-size: 22px; font-weight: 800; margin-top: 6px; letter-spacing: -.8px; color: var(--navy); font-family: var(--font-display); font-variant-numeric: tabular-nums; }
.stat-value .unit { font-size: 13px; font-weight: 600; color: var(--text-3); margin-left: 2px; }
.stat-foot { font-size: 11px; color: var(--text-3); margin-top: 5px; }
.stat-ico { position: absolute; right: 12px; top: 12px; width: 32px; height: 32px; border-radius: 10px; display: flex; align-items: center; justify-content: center; box-shadow: 0 6px 14px rgba(91,91,214,.16); }
.stat-ico svg { width: 16px; height: 16px; }
.c-blue { color: var(--blue); } .bg-blue { background: var(--blue-bg); }
.c-gold { color: var(--gold); } .bg-gold { background: #fdf3e2; }
.c-green { color: var(--green); } .bg-green { background: var(--green-bg); }
.c-red { color: var(--red); } .bg-red { background: var(--red-bg); }
.c-navy { color: var(--navy); } .bg-navy { background: #e8eef5; }
.c-purple { color: #7c3aed; } .bg-purple { background: #f1ecfd; }
.c-amber { color: var(--amber); } .bg-amber { background: var(--amber-bg); }
.c-cyan { color: var(--cyan); } .bg-cyan { background: #e3f6fd; }

.remind-badge { display:inline-block; margin: 2px 0 12px; padding: 9px 15px; border-radius: 12px; background: var(--red-bg); color: var(--red); font-size: 13px; font-weight: 600; border: 1px solid #f3cdcd; }
.remind-badge.pending { display: block; background: var(--amber-bg); color: var(--amber); border-color: #f3d9a6; }
.remind-badge.ok { display: block; background: var(--green-bg); color: var(--green); border-color: #bfe6cd; }
.bid-pending-banner { margin-top: 16px; padding: 15px 19px; border-radius: 14px; background: var(--amber-bg); color: var(--amber); font-weight: 700; font-size: 14px; border: 1px solid #f3d9a6; }
.check-block { margin-top: 12px; padding: 13px 15px; border-radius: 12px; background: #fffaf0; border: 1px solid #f3d9a6; }
.check-label { display: flex; align-items: center; gap: 8px; font-size: 13.5px; font-weight: 600; color: var(--navy); cursor: pointer; }
.check-label input { width: 17px; height: 17px; accent-color: var(--green); }

.assign-pending-banner { margin-top: 16px; padding: 15px 19px; border-radius: 14px; background: var(--grad-soft); color: var(--navy); font-weight: 600; font-size: 14px; border: 1px solid #dcdbfb; }
.assign-pending-banner b { color: var(--blue); }

/* 状态提示：紧凑提示条，取代满屏彩色大框 */
.notice-stack { display: flex; flex-direction: column; gap: 8px; margin-top: 14px; }
.notice { display: flex; gap: 11px; align-items: flex-start; padding: 11px 14px; border-radius: 12px; border: 1px solid var(--line); background: rgba(255,255,255,.7); font-size: 13px; line-height: 1.55; }
.notice-ico { flex: 0 0 auto; font-size: 15px; line-height: 1.4; }
.notice-body { flex: 1; min-width: 0; }
.notice-act { margin-top: 8px; }
.notice-red { background: var(--red-bg); border-color: #f0b4b4; color: #c0392b; }
.notice-red .notice-ico { color: #c0392b; }
.notice-amber { background: var(--amber-bg); border-color: #f0d29a; color: #b9770b; }
.notice-amber .notice-ico { color: #b9770b; }
.notice-blue { background: var(--grad-soft); border-color: #dcdbfb; color: var(--navy); }
.notice-blue .notice-ico { color: var(--blue); }
.notice-slate { background: #eef2f7; border-color: #d5deea; color: #4c5170; }
.notice-slate .notice-ico { color: #4c5170; }

.checkbox-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px 14px; padding: 13px 15px; border-radius: 12px; background: var(--bg-2); border: 1px solid var(--border); }
.chk { display: flex; align-items: center; gap: 8px; font-size: 13.5px; color: var(--text); cursor: pointer; }
.chk input { width: 16px; height: 16px; accent-color: var(--blue); }

.bid-step-title { font-size: 13px; font-weight: 700; color: var(--navy); margin: 4px 0 10px; padding-left: 11px; border-left: 3px solid var(--blue); }
.remind-badge.warn-amber { display: block; background: #fff5e6; color: #b9770b; border-color: #f3d29a; }
.remind-banner { padding: 15px 19px; border-radius: 14px; background: #fff5e6; border: 1px solid #f3d29a; }
.remind-banner.warn-amber .rb-title { font-weight: 700; color: #b9770b; font-size: 14px; margin-bottom: 8px; }
.remind-banner .rb-list { display: flex; flex-wrap: wrap; gap: 8px; }
.remind-banner .rb-item { display: inline-block; padding: 6px 12px; border-radius: 999px; background: #fff; border: 1px solid #f0c987; color: #9a6506; font-size: 13px; font-weight: 600; }
.remind-banner.warn-red { background: #fdecec; border-color: #f3b4b4; }
.remind-banner.warn-red .rb-title { color: #c0392b; }
.remind-banner.warn-red .rb-item { background: #fff; border-color: #edb0b0; color: #c0392b; }
.paused-banner { margin-top: 16px; padding: 14px 18px; border-radius: 14px; background: #eef2f7; color: #4c5170; font-weight: 700; font-size: 14px; border: 1px solid #d5deea; }
.overdue-banner { margin-top: 16px; padding: 15px 19px; border-radius: 14px; background: #fdecec; color: #c0392b; font-weight: 700; font-size: 14px; border: 1px solid #f3b4b4; line-height: 1.7; }
.overdue-banner b { color: #a5281b; }
.overdue-banner .btn { font-weight: 600; }

/* 首页提醒中心（Tab 分类） */
.reminder-center { border-radius: 20px; background: rgba(255,255,255,.7); backdrop-filter: blur(10px); border: 1px solid var(--border); box-shadow: var(--shadow); overflow: hidden; }
.dash-section .reminder-center { margin-top: 0; }
.dash-section-head.clickable { cursor: pointer; user-select: none; }
.dash-section-head .btn { flex: none; }
.rc-total { font-size: 12px; font-weight: 700; color: #fff; background: linear-gradient(135deg, #ff8a66, #e5533c); padding: 3px 12px; border-radius: 20px; box-shadow: 0 2px 8px rgba(229,83,60,.32); }
.rc-toggle { margin-left: auto; font-size: 12px; color: var(--text-3); font-weight: 600; }
.reminder-center .rc-body { padding: 14px 18px 18px; }
.reminder-center.rc-collapsed .rc-body { display: none; }
.reminder-center .rc-cat { border-top: 1px dashed #eef1f6; padding: 11px 0; }
.reminder-center .rc-cat:first-child { border-top: none; }
.reminder-center .rc-cat-head { display: flex; align-items: center; gap: 8px; cursor: pointer; user-select: none; padding: 4px 0; }
.reminder-center .rc-dot { width: 9px; height: 9px; border-radius: 50%; flex: none; }
.reminder-center .rc-dot.rc-amber { background: var(--gold); }
.reminder-center .rc-dot.rc-red { background: var(--red); }
.reminder-center .rc-cat-title { font-size: 13px; font-weight: 700; color: var(--navy); }
.reminder-center .rc-cat-count { font-size: 11px; font-weight: 700; color: #fff; background: var(--text-3); border-radius: 20px; padding: 1px 7px; }
.reminder-center .rc-cat-chev { margin-left: auto; font-size: 11px; color: #b06a6a; transition: transform .26s var(--ease); }
.reminder-center .rc-cat.rc-cat-collapsed .rc-cat-chev { transform: rotate(-90deg); }
.reminder-center .rc-cat-body { display: block; padding: 6px 0 2px 17px; }
.reminder-center .rc-cat.rc-cat-collapsed .rc-cat-body { display: none; }
.reminder-center .rc-cat-title.clickable { cursor: pointer; }
.reminder-center .rc-cat-title.clickable:hover { color: var(--blue); text-decoration: underline; }
.reminder-center .rc-tabs { display: flex; flex-wrap: wrap; gap: 8px; padding: 16px 0 12px; }
.reminder-center .rc-tab { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 700; padding: 8px 16px; border-radius: 12px; cursor: pointer; color: var(--text-2); background: #f4f6fa; border: 1px solid transparent; transition: all .26s var(--ease); user-select: none; }
.reminder-center .rc-tab:hover { background: #f1eeff; color: var(--blue); }
.reminder-center .rc-tab.active { color: #fff; background: var(--grad); border-color: transparent; box-shadow: 0 6px 18px rgba(124,58,237,.34); }
.reminder-center .rc-dot-sm { width: 7px; height: 7px; border-radius: 50%; background: var(--c, var(--blue)); flex: none; }
.reminder-center .rc-tab.active .rc-dot-sm { background: #fff; }
.reminder-center .rc-tab-count { font-size: 11px; font-weight: 800; border-radius: 20px; padding: 1px 8px; min-width: 20px; text-align: center; background: #dde4ee; color: var(--text-2); transition: all .26s var(--ease); }
.reminder-center .rc-tab.active .rc-tab-count { background: rgba(255,255,255,.3); color: #fff; }
.reminder-center .rc-panels { padding: 4px 0; }
.reminder-center .rc-panel.hidden { display: none; }
.reminder-center .rc-panel { animation: rc-fade .3s var(--ease); }
@keyframes rc-fade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.reminder-center .rc-line { font-size: 13px; color: var(--text-2); line-height: 1.6; }
.reminder-center .rc-line b { color: var(--navy); font-weight: 800; }
/* 提醒中心每行：与首页「最近项目」(.rj-item) 用同一套排版 —— 行与行之间一条细线分隔，清爽不花哨 */
.reminder-center .rc-line.clickable { position: relative; display: flex; align-items: center; justify-content: space-between; gap: 12px; cursor: pointer; padding: 14px 16px 14px 18px; margin: 0; background: transparent; border: none; border-bottom: 1px solid var(--line); border-radius: 10px; transition: background .2s var(--ease); }
.reminder-center .rc-line.clickable:last-child { border-bottom: none; }
/* 左侧渐变竖条：hover 才亮，跟最近项目一致（逾期 / 临近的常亮，见下方状态规则） */
.reminder-center .rc-line.clickable::before { content: ''; position: absolute; left: 0; top: 12px; bottom: 12px; width: 3px; border-radius: 3px; background: var(--grad); opacity: 0; transition: opacity .2s var(--ease); }
.reminder-center .rc-line.clickable:hover { background: rgba(91,91,214,.05); box-shadow: none; transform: none; }
.reminder-center .rc-line.clickable:hover::before { opacity: 1; }
/* 字体跟「最近项目」对齐：项目名 = .rj-name（15px / 800 / 标题色），正文 = .rj-client（13px / 600 / 正文色） */
.reminder-center .rc-line-main { flex: 1; min-width: 0; font-size: 13px; font-weight: 600; color: var(--text); }
.reminder-center .rc-pname { font-weight: 800; font-size: 15px; color: var(--navy); margin-right: 7px; }
.reminder-center .rc-pname:hover { color: var(--blue); text-decoration: underline; }
.reminder-center .rc-go { font-size: 12px; color: var(--blue); font-weight: 700; opacity: 0; transform: translateX(-5px); transition: all .26s var(--ease); flex: none; white-space: nowrap; }
.reminder-center .rc-line.clickable:hover .rc-go { opacity: 1; transform: none; }
/* 节点状态：逾期/临近不再用左侧色条，保持与其他条目一致的清爽样式 */
/* 逾期 / 临近：改成细线排版后没有左边框可用了，改为左侧竖条常亮来区分状态（逾期红 / 临近琥珀） */
.reminder-center .rc-line.is-overdue::before { background: linear-gradient(180deg, #e23b3b, #b91c1c); opacity: 1; }
.reminder-center .rc-line.is-warning::before { background: linear-gradient(180deg, #f59e0b, #d97706); opacity: 1; }
/* 状态徽标（逾期/临近） */
.reminder-center .rc-state { flex: none; font-size: 11px; font-weight: 800; padding: 2px 9px; border-radius: 99px; white-space: nowrap; margin-right: 2px; }
.reminder-center .rc-state--overdue { color: #b45309; background: transparent; }
.reminder-center .rc-state--warning { color: #b8730a; background: transparent; }
/* 右侧操作区：完成了按钮 + 去处理 收拢成一组 */
.reminder-center .rc-actions { display: flex; align-items: center; gap: 10px; flex: none; }
/* “完成了”按钮（提醒中心页面 / 首页右栏卡片 / 首页今日动态 / 铃铛通知中心 四处共用）：
   清爽浅蓝描边款，不抢眼。尺寸与同行的「项目延期 / 项目暂停 / 延期 / 暂停」按钮完全对齐
   （字号 11.5px、内距 4px 10px、圆角 8px），保证同一行里的按钮一样大、一样高。 */
.rc-done, .rm-done {
  flex: none; align-self: center;
  display: inline-flex; align-items: center; gap: 4px;
  background: rgba(91,91,214,.10); border: 1px solid rgba(91,91,214,.35); color: var(--blue);
  font-weight: 600; font-size: 11.5px; letter-spacing: .2px;
  border-radius: 8px; padding: 4px 10px; white-space: nowrap; cursor: pointer;
  box-shadow: none;
  transition: background .18s var(--ease), border-color .18s var(--ease), color .18s var(--ease);
}
.rc-done::before, .rm-done::before { content: '✓'; font-weight: 800; font-size: 11.5px; line-height: 1; color: var(--blue); }
.rc-done:hover, .rm-done:hover { background: rgba(91,91,214,.18); border-color: rgba(91,91,214,.5); color: #4a48c4; }
.rc-done:active, .rm-done:active { background: rgba(91,91,214,.24); color: #3f3daa; }
/* 铃铛提醒里逾期节点红色强调 */
.rp-item.rp-overdue { border-left: 3px solid transparent; }
#team-node-template { padding: 9px 10px; border: 1px solid var(--border); border-radius: 10px; background: #fff; font-size: 14px; color: var(--navy); }
.reminder-center .rc-note { font-size: 11.5px; color: var(--text-3); margin-top: 10px; line-height: 1.6; padding-top: 11px; border-top: 1px dashed var(--border); }
.sep-title { font-size: 13px; font-weight: 700; color: var(--navy); padding-left: 11px; border-left: 3px solid var(--blue); margin: 4px 0 10px; }
.node-row { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; flex-wrap: wrap; }
.node-row .node-name { flex: 1; min-width: 140px; }
.node-row .node-planned, .node-row .node-actual { width: 150px; }
.node-row .node-done { display: inline-flex; align-items: center; gap: 4px; font-size: 13px; color: var(--text-2); }
.node-delay-btn { margin-left: auto; }
.node-line { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: 10px; background: #f7f9fc; margin-bottom: 6px; transition: background .15s; }
.node-line .node-dot { color: var(--text-3); font-size: 14px; }
.node-line.done .node-dot { color: var(--green); }
.node-line.warning .node-dot { color: var(--amber); }
.node-line.overdue .node-dot { color: var(--red); }
.node-line .node-name2 { font-weight: 600; min-width: 120px; }
.node-line.warning, .node-line.overdue { background: #fff7ec; }
.node-line.overdue { background: #fdecec; }
.node-badge { font-size: 12px; font-weight: 700; padding: 2px 9px; border-radius: 20px; }
.node-badge.warning { background: #fdeccb; color: #b9770b; }
.node-badge.overdue { background: #f6caca; color: #c0392b; }
.node-line .node-delay-btn { margin-left: auto; }
.btn-warn { background: #fff7ec; border: 1px solid #f0c987; color: #b9770b; }
.btn-warn:hover { background: #fdeccb; }
.toggle-btn { padding: 8px 16px; border-radius: 9px; border: 1px solid #d7dee8; background: #fff; color: var(--muted); font-size: 13px; font-weight: 600; cursor: pointer; transition: all .26s var(--ease); }
.toggle-btn.on { background: var(--green); border-color: var(--green); color: #fff; }
.participant-row { display: flex; gap: 8px; margin-bottom: 8px; align-items: center; }
.participant-row input { flex: 1; }
.participant-row .btn-icon { flex: 0 0 auto; width: 34px; padding: 0; line-height: 34px; border-radius: 9px; background: var(--red-bg); color: var(--red); border: 1px solid #f3c9c9; }

.cust-group { background: #fff; border: 1px solid var(--border); border-radius: 14px; padding: 17px 19px; margin-bottom: 16px; box-shadow: var(--shadow); }
.cust-group-title { font-size: 15px; font-weight: 700; color: var(--navy); margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
.cust-group-optional { background: #fafbfd; border-style: dashed; }
.cust-group-optional .cust-group-title { color: var(--text-2); }

/* ===================== 标签 ===================== */
.tag { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; padding: 4px 11px; border-radius: 999px; font-weight: 600; white-space: nowrap; }
.tag-green { background: var(--green-bg); color: var(--green); }
.tag-amber { background: var(--amber-bg); color: var(--amber); }
.tag-red { background: var(--red-bg); color: var(--red); }
/* 原为暗蓝底+暗蓝字（#5b5bd6），深色底上发闷刺眼 → 改紫罗兰系（品牌紫，深浅两套都清爽） */
.tag-blue { background: #e6dfff; color: #6d28d9; }
.tag-gray { background: #eef1f5; color: var(--text-2); }
.tag-gold { background: #fdf3e2; color: var(--gold); }
.tag-cyan { background: #e3f6fd; color: var(--cyan); }
.dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; margin-right: 6px; }
.att-list { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.att-chip { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--blue); background: var(--blue-bg); border: 1px solid #d9d8fb; border-radius: 10px; padding: 6px 10px; text-decoration: none; }
.att-chip:hover { background: #e0ecff; }
.att-chip .att-x { cursor: pointer; color: var(--text-2); font-weight: 700; margin-left: 2px; }
.att-chip .att-x:hover { color: var(--red); }

/* ===================== 项目卡片 ===================== */
.project-card {
  background: var(--card); border: 1px solid var(--border); border-radius: var(--radius);
  box-shadow: var(--shadow); padding: 19px 21px; cursor: pointer; transition: transform .3s var(--ease), box-shadow .3s var(--ease), border-color .3s var(--ease);
  display: flex; flex-direction: column;
}
.project-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); border-color: rgba(91,91,214,.22); }
.pc-renew { font-size: 12px; font-weight: 700; padding: 7px 11px; border-radius: 10px; margin-bottom: 12px; line-height: 1.3; }
.pc-renew-amber { background: #fff6e6; color: #b9770a; border: 1px solid #f3d9a6; }
.pc-renew-red { background: #fdecec; color: #c0392b; border: 1px solid #f3b9b9; }

/* ===== 老项目（从老系统搬过来的历史项目）：统一用「琥珀 / 牛皮纸箱」色系，一眼区别于新项目 ===== */
/* 卡片顶部的状态条：待确认（琥珀）、被驳回（红） */
.pc-legacy-wait { font-size: 12px; font-weight: 700; padding: 7px 11px; border-radius: 10px; margin-bottom: 12px; line-height: 1.3; background: #fff6e6; color: #b9770a; border: 1px solid #f3d9a6; }
.pc-legacy-wait.is-red { background: #fdecec; color: #c0392b; border: 1px solid #f3b9b9; }
/* 卡片上的「📦 老项目」标签 */
.tag-legacy { background: rgba(180,119,10,.12); color: #a8690a; border: 1px solid rgba(180,119,10,.32); font-weight: 700; white-space: nowrap; }
/* 列表页「+ 老项目」按钮：描边款，不抢「新建项目」的主按钮风头 */
.btn-legacy { background: transparent; color: #a8690a; border: 1px solid rgba(180,119,10,.42); font-weight: 700; }
.btn-legacy:hover { background: rgba(180,119,10,.1); border-color: rgba(180,119,10,.62); color: #8a5708; }
/* 老项目卡片整体加一点暖色调边框，扫一眼就分得清新老 */
.project-card.pc-legacy { border-color: rgba(180,119,10,.22); }
.project-card.pc-legacy:hover { border-color: rgba(180,119,10,.45); }
/* 老项目建档弹窗里的说明条 */
.lg-hint { background: rgba(180,119,10,.08); border: 1px solid rgba(180,119,10,.22); }
/* 表单里 4 项必填的小分组标题，颜色跟按钮呼应 */
.req-form .form-group-title { color: var(--navy); }
.pc-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
.pc-name { font-size: 15px; font-weight: 800; color: var(--navy); line-height: 1.35; }
.pc-customer { font-size: 12px; color: var(--text-3); margin-top: 5px; }
/* 「我的项目」标记：部门经理 / 组长本人也是该项目实施人时额外打标 */
.pc-mine { background: rgba(91,91,214,.1) !important; border-color: rgba(91,91,214,.28) !important; font-weight: 700; }
body.theme-dark .pc-mine { background: rgba(129,140,248,.18) !important; border-color: rgba(129,140,248,.34) !important; }
/* 新转入项目：项目名旁的 NEW 标记 */
.pc-new { display: inline-block; margin-left: 7px; padding: 1px 6px; border-radius: 5px; font-size: 10px; font-weight: 800; letter-spacing: .5px; color: #fff; background: linear-gradient(135deg, #ff5a5f, #ff8a3d); box-shadow: 0 2px 6px rgba(255,90,95,.35); vertical-align: middle; animation: pcNewPulse 2.4s ease-in-out infinite; }
@keyframes pcNewPulse { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-1.5px); } }
/* 待办引导条：实施负责人/经营责任人各看各的 */
.pc-newguide { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 9px; padding: 7px 10px; border-radius: 9px; font-size: 12px; background: rgba(79,70,229,.07); border: 1px solid rgba(79,70,229,.18); }
.pc-newguide .ng-label { font-weight: 700; color: var(--blue); white-space: nowrap; }
.pc-newguide .ng-hint { color: var(--text-2); flex: 1 1 120px; min-width: 0; }
.pc-newguide .btn { flex: 0 0 auto; }
.pc-newguide.ng-contract { background: rgba(245,158,11,.08); border-color: rgba(245,158,11,.22); }
.pc-newguide.ng-contract .ng-label { color: #b45309; }
.pc-newguide.ng-initiation { background: rgba(120,120,140,.07); border-color: rgba(120,120,140,.18); }
.pc-newguide.ng-initiation .ng-label { color: var(--text-2); }
/* 首页最近项目里的待办小标 */
.rj-newguide { display: inline-block; margin-top: 4px; padding: 1px 7px; border-radius: 999px; font-size: 10.5px; font-weight: 700; color: #b45309; background: rgba(245,158,11,.12); border: 1px solid rgba(245,158,11,.24); }
body.theme-dark .rj-newguide { color: #f0b866; background: rgba(245,158,11,.16); border-color: rgba(245,158,11,.3); }
/* 项目列表两级控制区：一级=项目类型，二级=数据范围；两者可组合联动，计数互相随对方变化 */
.proj-tabs { display: flex; flex-direction: column; gap: 10px; width: 100%; margin: 0 0 18px; padding: 13px 16px; border-radius: 14px; background: linear-gradient(180deg, rgba(91,91,214,.05), rgba(91,91,214,.018)); border: 1px solid var(--border); }
.ptb-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.ptb-row + .ptb-row { padding-top: 10px; border-top: 1px dashed var(--border); }
/* 维度名做成彩色徽章：尺寸/形状/内边距与右边的 .pill-tab 完全一致，一排看过去才齐整
   （padding 8px 16px + 1px 透明边框 + 相同 line-height = 与「全部」胶囊等高） */
.ptb-label {
  flex: 0 0 auto; padding: 8px 16px; border: 1px solid transparent; border-radius: 999px;
  font-size: 13.5px; font-weight: 800; letter-spacing: .6px; line-height: 1.35;
  color: #fff; white-space: nowrap; text-align: center;
  background: linear-gradient(135deg, #5b5bd6, #7c3aed);
  box-shadow: 0 3px 9px rgba(91,91,214,.3);
}
/* 第二个维度换个颜色，两个维度一眼能分开 */
.ptb-label.lb-rel { background: linear-gradient(135deg, #0d9488, #0891b2); box-shadow: 0 3px 9px rgba(13,148,136,.3); }
.ptb-n { display: inline-block; margin-left: 6px; min-width: 20px; padding: 0 6px; border-radius: 999px; font-size: 11.5px; font-weight: 800; line-height: 17px; text-align: center; background: rgba(91,91,214,.16); color: #4b4bd0; }
.pill-tab.active .ptb-n { background: rgba(255,255,255,.28); color: #fff; }
/* 与上面的徽章严格同高同字号，保证一行里所有胶囊高度一致 */
.ptb-row .pill-tab { font-size: 13.5px; font-weight: 600; line-height: 1.35; }
@media (max-width: 760px) { .ptb-label { padding: 6px 13px; font-size: 12.5px; } }
body.theme-dark .proj-tabs { background: linear-gradient(180deg, rgba(129,140,248,.09), rgba(129,140,248,.03)); border-color: rgba(255,255,255,.1); }
body.theme-dark .ptb-n { background: rgba(129,140,248,.22); color: #b9c0ff; }
body.theme-dark .pill-tab.active .ptb-n { background: rgba(255,255,255,.26); color: #fff; }
body.theme-dark .ptb-label { box-shadow: 0 3px 10px rgba(0,0,0,.35); }
body.theme-dark .ptb-label.lb-rel { box-shadow: 0 3px 10px rgba(0,0,0,.35); }
/* 项目列表两组 Tab（全部/框架/子项目/独立项目 与 数据范围）共用同一套 .pill-tabs 样式，视觉完全一致 */
body.theme-dark .pc-newguide { background: rgba(129,140,248,.12); border-color: rgba(129,140,248,.26); }
body.theme-dark .pc-newguide.ng-contract { background: rgba(245,158,11,.14); border-color: rgba(245,158,11,.3); }
body.theme-dark .pc-newguide.ng-contract .ng-label { color: #f0b866; }
body.theme-dark .pc-newguide .ng-label { color: #aab0ff; }
.pc-owner { font-size: 12px; color: var(--text-3); margin-top: 4px; }
.pc-fin { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--border); }
.pc-fin-item .k { font-size: 11px; color: var(--text-3); }
.pc-fin-item .v { font-size: 15px; font-weight: 700; margin-top: 3px; color: var(--navy); }
/* 财务监督（行政副总）受限视图卡片 */
.pc-restricted { border-style: dashed; border-color: rgba(91,91,214,.35); }
.pc-restricted-tag { margin-top: 12px; font-size: 11px; font-weight: 700; color: #5b5bd6; background: #f1eeff; border: 1px solid #d9d8fb; border-radius: 8px; padding: 6px 10px; align-self: flex-start; }
.pc-ci { align-items: center; }
/* 合同/实施两条线：2x2 交叉矩阵（比一行小方块更饱满） */
.ci-summary { font-size: 13px; color: var(--text-2); margin-bottom: 14px; }
.ci-summary b { color: var(--navy); font-size: 16px; font-weight: 800; }
.ci-summary .c-green { color: var(--green); }
.ci-matrix { display: grid; grid-template-columns: 58px 1fr 1fr; gap: 8px; align-items: stretch; }
.ci-m-corner {}
.ci-m-head { font-size: 12.5px; font-weight: 700; color: var(--text-2); text-align: center; padding: 2px 0 6px; }
.ci-m-rowhead { font-size: 12.5px; font-weight: 700; color: var(--text-2); text-align: center; line-height: 1.25; display: flex; align-items: center; justify-content: center; }
.ci-cell { border-radius: 12px; padding: 14px 8px; text-align: center; display: flex; flex-direction: column; justify-content: center; gap: 5px; transition: transform .2s var(--ease), box-shadow .2s var(--ease); }
.ci-cell:hover { transform: translateY(-3px); box-shadow: var(--shadow); }
.ci-cell b { font-size: 27px; font-weight: 800; line-height: 1; }
.ci-cell span { font-size: 12px; opacity: .82; }
.ci-cell.c-green { background: rgba(34,197,94,.10); color: #15a34a; }
.ci-cell.c-red { background: rgba(239,68,68,.10); color: #dc2626; }
.ci-cell.c-amber { background: rgba(245,158,11,.12); color: #d97706; }
.ci-cell.c-gray { background: rgba(100,116,139,.10); color: #64748b; }
.ci-fw { margin-top: 14px; font-size: 12.5px; color: var(--text-3); background: var(--bg-2); border: 1px dashed var(--border); border-radius: 10px; padding: 9px 12px; }
.ci-fw b { color: var(--navy); font-weight: 800; }
/* 状态块在并排卡片里垂直居中，避免右侧趋势图更高时左侧留白显得没对齐 */
.ci-wrap { display: flex; flex-direction: column; justify-content: center; min-height: 210px; }
/* 让左侧卡片整体变 flex 纵向容器，内部 .ci-wrap 撑满高度并居中（修复"没对齐"） */
.card--fill { display: flex; flex-direction: column; }
.card--fill > .ci-wrap { flex: 1; }
/* 本年 / 上年对比表 */
.yc-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.yc-table th { text-align: right; font-weight: 600; color: var(--text-2); padding: 6px 8px; border-bottom: 1px solid var(--border); }
.yc-table th:first-child, .yc-table td:first-child { text-align: left; }
.yc-table td { padding: 7px 8px; border-bottom: 1px solid var(--line); text-align: right; }
.yc-table tr:last-child td { border-bottom: none; }
.yc-t { color: var(--blue); font-weight: 700; }
.yc-l { color: #e8a33d; font-weight: 600; }
.yc-up { color: var(--green); font-weight: 700; }
.yc-down { color: var(--red); font-weight: 700; }

/* ===== 考勤打卡 ===== */
.att-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.att-date { font-size: 18px; font-weight: 800; color: var(--navy); display: flex; align-items: center; gap: 10px; }
.att-sub { font-size: 13px; color: var(--text-2); margin-top: 5px; }
.att-sub b { color: var(--navy); }
.att-tips { display: flex; flex-direction: column; gap: 10px; padding: 6px 2px; }
.att-tip { font-size: 13px; color: var(--text-2); line-height: 1.65; background: var(--bg-2); border-radius: 12px; padding: 11px 14px; border: 1px solid var(--border); }
.att-tip b { color: var(--navy); }
.att-clock-center { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 18px; padding: 28px 16px; text-align: center; }
.att-row { display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; }
.att-btns { display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; }
.att-big-status { font-size: 22px; font-weight: 800; color: var(--navy); }
.att-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.att-table th { text-align: left; font-weight: 600; color: var(--text-2); padding: 9px 10px; border-bottom: 1px solid var(--border); background: var(--bg-2); }
.att-table td { padding: 9px 10px; border-bottom: 1px solid var(--line); }
.att-table tr:last-child td { border-bottom: none; }
.att-office-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; }
.att-office-grid .form-item { display: flex; flex-direction: column; gap: 6px; margin-bottom: 0; }
.att-office-grid label { font-size: 12.5px; color: var(--text-2); font-weight: 600; }
.att-office-grid .input { width: 100%; }

/* 考勤提醒横幅：全局浮动，横幅 + 浏览器通知 双提醒 */
#att-banner { position: fixed; top: 14px; left: 50%; transform: translateX(-50%); z-index: 9999; display: none; align-items: center; gap: 12px; background: linear-gradient(135deg, #1e1b4b, #3730a3); color: #fff; padding: 12px 16px; border-radius: 14px; box-shadow: 0 12px 32px rgba(15, 39, 68, .28); max-width: 92vw; animation: attBannerIn .35s var(--ease); }
@keyframes attBannerIn { from { opacity: 0; transform: translateX(-50%) translateY(-12px); } to { opacity: 1; transform: translateX(-50%) translateY(0); } }
#att-banner .att-banner-msg { font-size: 14px; font-weight: 600; }
#att-banner .att-banner-btn { white-space: nowrap; }

/* 打卡点地图选点 */
.att-map-block { margin-top: 18px; }
.att-map-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; font-size: 14px; font-weight: 700; color: var(--navy); }
.att-map { border: 1px solid var(--border); border-radius: 14px; overflow: hidden; background: var(--bg-2); }
.att-map-bar { display: flex; gap: 8px; padding: 10px; background: var(--bg-2); border-bottom: 1px solid var(--border); }
.att-map-bar .input { flex: 1; }
.att-map-canvas { width: 100%; height: 340px; }
.att-map-hint { padding: 9px 12px; font-size: 12px; color: var(--text-3); background: var(--bg-2); border-top: 1px solid var(--border); }
.att-map-tip { padding: 18px; font-size: 13px; color: var(--text-2); line-height: 1.7; }
.project-card.pc-terminated { border-left: 3px solid var(--red); background: #fcfcfd; }
.project-card.pc-terminated .pc-name { color: #9aa3b2; }
.project-card.pc-terminated:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); }
.pc-actions { display: flex; align-items: center; gap: 8px; margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--border); }
.pc-actions .muted { color: #9aa3b2; }
.pill-tab-danger { color: var(--red); border-color: #f0c4c4; background: #fff7f7; }
.pill-tab-danger:hover { border-color: var(--red); color: var(--red); }
.pill-tab-danger.active { background: var(--red); color: #fff; border-color: var(--red); }

/* ===================== 进度 / 图表 ===================== */
.progress { height: 9px; background: #eef2f7; border-radius: 99px; overflow: hidden; }
.progress > i { display: block; height: 100%; border-radius: 99px; background: var(--grad); transition: width .6s var(--ease); }
.progress.gold > i { background: linear-gradient(90deg, #f59e0b, #fbbf24); }
.progress.green > i { background: linear-gradient(90deg, #16a34a, #4ade80); }
.legend { display: flex; flex-wrap: wrap; gap: 14px; }
.legend-item { display: flex; align-items: center; gap: 7px; font-size: 12.5px; color: var(--text-2); }
.legend-sq { width: 11px; height: 11px; border-radius: 4px; }

/* ===================== 审批步骤 ===================== */
.steps { display: flex; align-items: flex-start; }
.step { flex: 1; position: relative; text-align: center; }
.step-dot {
  width: 26px; height: 26px; border-radius: 50%; margin: 0 auto; display: flex; align-items: center; justify-content: center;
  background: #eef2f7; color: var(--text-3); font-size: 12px; font-weight: 700; position: relative; z-index: 2; transition: all .3s var(--ease);
}
.step-line { position: absolute; top: 12px; left: 50%; width: 100%; height: 3px; background: #eef2f7; z-index: 1; border-radius: 3px; }
.step:last-child .step-line { display: none; }
.step.done .step-dot { background: var(--green); color: #fff; }
.step.done .step-line { background: var(--green); }
.step.current .step-dot { background: var(--grad); color: #fff; box-shadow: 0 0 0 5px rgba(91,91,214,.18); }
.step.reject .step-dot { background: var(--red); color: #fff; }
/* 审批步骤：主位显示审批人姓名（方便一眼看到是谁审），角色名降为下方小字辅助 */
.step-name { font-size: 12.5px; color: var(--text); font-weight: 600; margin-top: 7px; line-height: 1.3; }
.step-person { font-size: 11px; color: var(--text-3); margin-top: 2px; line-height: 1.3; }
.step-time { font-size: 11px; color: var(--text-3); margin-top: 2px; }
.step-dur { font-size: 10px; color: var(--gold); margin-top: 1px; font-weight: 600; }
.step.current .step-dur { color: var(--blue); }
.ap-progress { background: #f4f8ff; border: 1px solid #dcdefc; border-radius: 10px; padding: 10px 14px; font-size: 13px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ap-progress b { color: var(--navy); }
.ap-urged { font-size: 11px; color: var(--text-3); }
/* 审批中心：列表网格（宽屏两列，提升密度与丰满度） */
.ap-grid { display: grid; grid-template-columns: 1fr; gap: 12px; align-items: stretch; }
@media (min-width: 760px) { .ap-grid { grid-template-columns: 1fr 1fr; gap: 14px; } }

/* 审批卡片：紧凑头部，详情默认折叠，点「查看详情」原地展开 */
/* 2026-10-10 等高改造：卡片内部改成「上中下三段」，摘要区吃掉多余高度(flex:1)，
   底部进度条用 margin-top:auto 顶到底边，这样一排卡片无论内容多少都齐平。 */
.ap-card { padding: 13px 15px; display: flex; flex-direction: column; }
.ap-card-head { margin-bottom: 0; }
.ap-card-top { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
/* 标题最多 2 行，超出省略 —— 防止一条长标题把整行卡片拉高 */
.ap-card-title {
  font-size: 14.5px; font-weight: 700; color: var(--navy); letter-spacing: .2px;
  flex: 1 1 auto; min-width: 70px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  line-height: 1.4;
}
.ap-card-ops { display: flex; gap: 7px; flex: 0 0 auto; margin-left: 4px; }
.ap-card-meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 12px; color: var(--text-3); margin-top: 6px; }
.ap-card-meta b { color: var(--text-2); font-weight: 600; }
.dot-sep { color: var(--line); }
.ap-cc { color: var(--blue); background: #eef3ff; padding: 2px 9px; border-radius: 999px; font-size: 11.5px; }
/* 折叠 / 展开入口 */
.ap-toggle { display: inline-flex; align-items: center; gap: 2px; margin-top: 10px; padding: 3px 2px; font-size: 12.5px; color: var(--blue); font-weight: 600; cursor: pointer; user-select: none; transition: color .2s var(--ease); }
.ap-toggle:hover { color: var(--navy); }
.ap-toggle-arrow { transition: transform .25s var(--ease); font-size: 14px; display: inline-block; }
.ap-toggle.open .ap-toggle-arrow { transform: rotate(90deg); }
.ap-detail { margin-top: 10px; padding-top: 12px; border-top: 1px dashed var(--line); }
.ap-detail > .steps { margin-top: 2px; }

/* 申请详情摘要（始终可见，紧凑，不做大边框）。flex:1 —— 内容少的卡片由这块撑开，保证等高 */
.ap-summary { margin-top: 10px; flex: 1 1 auto; }
.ap-summary-head { font-size: 12px; font-weight: 600; color: var(--text-3); margin-bottom: 5px; }
.ap-summary .ap-dl { gap: 5px 14px; }
.ap-summary .ap-dl-row { font-size: 12.5px; line-height: 1.5; }
.ap-summary .ap-dl-label { flex: 0 0 96px; }
.ap-summary .ap-attach { margin-top: 8px; font-size: 12.5px; }

/* 紧凑审批进度（一行小圆点条，一眼可见走到谁） */
.ap-prog { margin-top: 10px; display: flex; align-items: center; gap: 5px 8px; flex-wrap: wrap; font-size: 12px; }
.ap-prog-label { color: var(--text-3); font-weight: 600; margin-right: 2px; }
.ap-prog-node { display: inline-flex; align-items: center; gap: 3px; color: var(--text-3); }
.ap-prog-node.done { color: var(--green); font-weight: 600; }
.ap-prog-node.reject { color: var(--red); font-weight: 600; }
.ap-prog-node.cur { color: var(--blue); font-weight: 700; }
.ap-prog-arrow { color: var(--line); }
.ap-prog-me { color: var(--blue); font-size: 11px; }
.ap-urged { font-size: 11px; color: var(--text-3); }
/* 卡片底部区：进度条 + 折叠入口 + 审批按钮，统一贴着卡片底边 */
.ap-card-foot { margin-top: auto; }
.ap-foot-pad { height: 30px; }
/* 「还有 N 项，点卡片看完整详情」—— 告诉用户内容被收起来了，不是漏显示 */
.ap-dl-more { margin-top: 6px; font-size: 11.5px; color: var(--blue); opacity: .85; }
/* 审批详情弹窗：关联项目一行，点进去直接进项目驾驶舱 */
.ap-dm-proj {
  display: flex; align-items: center; gap: 8px; margin-top: 10px; padding: 9px 12px;
  background: linear-gradient(90deg, rgba(91,91,214,.07), rgba(91,91,214,.02));
  border: 1px solid rgba(91,91,214,.18); border-radius: 10px; cursor: pointer;
  transition: border-color .2s var(--ease), background .2s var(--ease);
}
.ap-dm-proj:hover { border-color: var(--blue); background: rgba(91,91,214,.1); }
.ap-dm-proj-l { flex: 0 0 auto; font-size: 11.5px; color: var(--text-3); }
.ap-dm-proj-n { flex: 1 1 auto; font-size: 13px; font-weight: 700; color: var(--navy); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ap-dm-proj-go { flex: 0 0 auto; font-size: 12px; font-weight: 600; color: var(--blue); }
body.theme-dark .ap-dm-proj { background: rgba(139,139,255,.1); border-color: rgba(139,139,255,.24); }
body.theme-dark .ap-dm-proj-n { color: #e8e8f5; }

/* 审批意见 */
.ap-comments { margin-top: 12px; font-size: 12.5px; color: var(--text-2); background: #f7f9fc; border-left: 3px solid var(--border); padding: 8px 12px; border-radius: 0 8px 8px 0; }

/* 申请内容面板（默认直接展开，无需点击） */
.ap-content { margin-top: 14px; padding: 14px 16px; background: #fafbff; border: 1px solid var(--border); border-radius: 12px; }
.ap-content-head { font-size: 13px; font-weight: 700; color: var(--navy); margin-bottom: 10px; display: flex; align-items: center; gap: 7px; }
.ap-content-head::before { content: ''; width: 3px; height: 13px; background: var(--grad); border-radius: 2px; }
.ap-dl { display: flex; flex-direction: column; gap: 8px; }
.ap-dl-row { display: flex; gap: 12px; font-size: 13px; line-height: 1.55; }
.ap-dl-row-table { flex-direction: column; gap: 6px; }
.ap-dl-label { flex: 0 0 124px; color: var(--text-3); text-align: right; padding-top: 1px; }
.ap-dl-value { flex: 1; color: var(--text-1); white-space: pre-wrap; word-break: break-word; }
.mini-table { width: 100%; border-collapse: collapse; font-size: 12.5px; background: #fff; border-radius: 8px; overflow: hidden; }
.mini-table th, .mini-table td { border: 1px solid var(--border); padding: 6px 10px; text-align: left; }
.mini-table th { background: #eef3ff; color: var(--navy); font-weight: 600; }
.ap-attach { margin-top: 12px; display: flex; gap: 12px; font-size: 13px; }
.ap-attach-list { display: flex; flex-wrap: wrap; gap: 8px; }
.ap-attach-item { display: inline-block; padding: 4px 12px; background: #fff; border: 1px solid #d9d8fb; border-radius: 999px; color: var(--blue); text-decoration: none; font-size: 12.5px; }
.ap-attach-item:hover { background: #eef3ff; }
.btn-ghost { background: #f4f8ff; border: 1px solid #dcdefc; color: var(--blue); }
.btn-ghost:hover { filter: brightness(1.02); border-color: var(--blue); }

/* 手机端：申请内容标签左对齐、卡片内边距收紧，保持可读性 */
@media (max-width: 560px) {
  .ap-card { padding: 12px 12px; }
  .ap-card-title { font-size: 14px; }
  .ap-card-ops { width: 100%; margin-left: 0; margin-top: 8px; }
  .ap-card-ops .btn { flex: 1; }
  .ap-dl-label { flex: 0 0 92px; text-align: left; }
}
.btn-warn { background: var(--gold); color: #5a3d00; border-color: transparent; box-shadow: 0 8px 18px rgba(247,178,51,.3); }
.btn-warn:hover { filter: brightness(1.04); }
.notif-bell { position: relative; cursor: pointer; margin-right: 6px; }
.notif-bell .dot { position: absolute; top: -4px; right: -4px; background: var(--red); color: #fff; border-radius: 10px; min-width: 18px; height: 18px; padding: 0 5px; font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
.notif-panel { position: absolute; right: 12px; top: 56px; width: 320px; max-height: 420px; overflow: auto; background: #fff; border: 1px solid var(--border); border-radius: 14px; box-shadow: var(--shadow-blue); z-index: 50; padding: 8px; }
.notif-item { padding: 10px 12px; border-bottom: 1px solid var(--line); border-radius: 8px; }
.notif-item:last-child { border-bottom: none; }
.notif-item.unread { background: #f6faff; }
.notif-title { font-size: 13px; font-weight: 700; color: var(--navy); }
.notif-body { font-size: 12px; color: var(--text-2); margin-top: 3px; }
.notif-time { font-size: 11px; color: var(--text-3); margin-top: 4px; }
.cat-chip { display: inline-block; padding: 7px 14px; border: 1px solid var(--border); border-radius: 20px; font-size: 13px; cursor: pointer; background: #fff; transition: all .2s var(--ease); }
.cat-chip:hover { border-color: var(--blue); color: var(--blue); }
.cat-chip.active { background: var(--grad); color: #fff; border-color: transparent; box-shadow: var(--shadow-blue); }
.badge { display: inline-block; padding: 3px 10px; border-radius: 12px; font-size: 12px; font-weight: 700; color: #fff; }
.badge.bg-green { background: var(--green) !important; color: #fff; }
.badge.bg-gold { background: var(--gold) !important; color: #fff; }
.badge.bg-red { background: var(--red) !important; color: #fff; }
.dl-card { border: 1px solid var(--border); border-radius: 14px; padding: 16px; margin-top: 12px; background: #fcfdff; }
.dl-card:first-child { margin-top: 0; }
.ai-groups { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 12px; }
.ai-group { background: #fff; border: 1px solid var(--border); border-radius: 12px; padding: 13px; }
.ai-group-h { font-size: 13px; font-weight: 700; color: var(--navy); margin-bottom: 8px; }
.ai-list { margin: 0; padding-left: 18px; }
.ai-list li { font-size: 12.5px; color: var(--text-2); margin-bottom: 4px; line-height: 1.5; }
.dl-text { white-space: pre-wrap; max-height: 60vh; overflow: auto; font-size: 13px; line-height: 1.7; background: #f8fafc; border: 1px solid var(--border); border-radius: 10px; padding: 14px; }
@keyframes rc-fade2 { from { opacity: 0; } to { opacity: 1; } }

/* ===================== 模态框 ===================== */
.modal-mask { position: fixed; inset: 0; background: rgba(15,31,54,.42); backdrop-filter: blur(3px); z-index: 100; animation: fadeIn .22s var(--ease); }
.modal { position: fixed; top: 0; right: 0; height: 100vh; width: min(720px, 95vw); background: #fff; display: flex; flex-direction: column; box-shadow: -18px 0 60px rgba(30,27,75,.22); animation: drawerIn .32s var(--ease); border-left: 1px solid #eef2f7; }
@keyframes drawerIn { from { transform: translateX(100%); } to { transform: translateX(0); } }
.modal-lg { width: min(1140px, 97vw); }
.modal-md { width: min(800px, 95vw); }
.modal-sm { width: min(580px, 93vw); }
.modal-full { width: 100%; height: 100vh; border-left: none; animation: fadeIn .22s var(--ease); }
.modal-full .modal-body { max-width: 1040px; margin: 0 auto; }
.modal-full .modal-head, .modal-full .modal-foot { padding-left: 32px; padding-right: 32px; }
.modal-head { display: flex; align-items: center; justify-content: space-between; padding: 18px 22px; border-bottom: 1px solid var(--border); flex: 0 0 auto; background: linear-gradient(135deg, rgba(91,91,214,.07), rgba(14,116,144,.04)); }
.modal-title { font-size: 16px; font-weight: 700; color: var(--navy); display: flex; align-items: center; gap: 10px; }
.modal-title::before { content: ''; width: 5px; height: 18px; border-radius: 99px; background: var(--grad); box-shadow: 0 0 0 4px rgba(91,91,214,.12); }
.modal-close { border: none; background: transparent; font-size: 22px; color: var(--text-3); line-height: 1; padding: 4px 8px; border-radius: 8px; transition: all .15s; }
.modal-close:hover { background: var(--bg); color: var(--text); }
.modal-body { padding: 20px 22px; overflow-y: auto; flex: 1 1 auto; }
.modal-foot { padding: 14px 22px; border-top: 1px solid var(--border); display: flex; justify-content: flex-end; gap: 10px; flex: 0 0 auto; background: #fff; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.form-row .full { grid-column: 1 / -1; }
.form-item { margin-bottom: 20px; }
.modal .form-item > label { font-size: 13.5px; font-weight: 600; color: var(--navy); margin-bottom: 8px; display: block; letter-spacing: .2px; }
.modal .form-item input[type=text], .modal .form-item input:not([type]), .modal .form-item input[type=number], .modal .form-item input[type=date], .modal .form-item select, .modal .form-item textarea { width: 100%; padding: 12px 14px; font-size: 14px; color: var(--navy); background: #fbfdff; border: 1px solid #d7dee8; border-radius: 11px; transition: all .2s var(--ease); font-family: inherit; line-height: 1.5; }
.modal .form-item input:focus, .modal .form-item select:focus, .modal .form-item textarea:focus { outline: none; border-color: var(--blue); background: #fff; box-shadow: 0 0 0 4px rgba(91,91,214,.12); }
.modal .form-item textarea { resize: vertical; }
.form-item.featured input { font-size: 16px; font-weight: 700; padding: 14px 16px; background: #fff; }
/* 报价结果选择卡片（大气、比例协调） */
.quote-result-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 20px; }
.qr-card { position: relative; border: 1.5px solid #d7dee8; border-radius: 16px; padding: 22px 18px; cursor: pointer; background: #fbfdff; transition: all .22s var(--ease); overflow: hidden; }
.qr-card:hover { border-color: var(--blue); transform: translateY(-2px); box-shadow: 0 10px 24px rgba(30,27,75,.10); }
.qr-card.selected { border-color: var(--blue); background: linear-gradient(135deg, rgba(91,91,214,.08), rgba(14,116,144,.05)); box-shadow: 0 0 0 4px rgba(91,91,214,.12); }
.qr-card .qr-ico { width: 46px; height: 46px; border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 24px; font-weight: 800; margin-bottom: 12px; }
.qr-card.success .qr-ico { background: rgba(22,163,74,.12); color: #16a34a; }
.qr-card.unsuccess .qr-ico { background: rgba(229,72,77,.12); color: #e5484d; }
.qr-card .qr-title { font-size: 17px; font-weight: 800; color: var(--navy); margin-bottom: 7px; }
.qr-card .qr-desc { font-size: 12.5px; color: var(--text-2); line-height: 1.55; }
.qr-card.selected::after { content: '✓'; position: absolute; top: 14px; right: 16px; width: 22px; height: 22px; border-radius: 99px; background: var(--blue); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700; }
body.theme-dark .qr-card { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.14); }
body.theme-dark .qr-card.selected { background: linear-gradient(135deg, rgba(91,91,214,.18), rgba(14,116,144,.1)); }
body.theme-dark .modal .form-item input, body.theme-dark .modal .form-item select, body.theme-dark .modal .form-item textarea { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.16); color: var(--text); }
body.theme-dark .form-item.featured input { background: rgba(255,255,255,.06); }
.form-group-card { background: #f4f8fd; border: 1px solid #e3edf9; border-radius: 14px; padding: 16px; margin-bottom: 16px; }
.form-group-title, .ini-group-title { font-size: 13.5px; font-weight: 700; color: var(--blue); margin: 0 0 14px; display: flex; align-items: center; gap: 8px; }
.form-group-title::before, .ini-group-title::before { content: ''; width: 4px; height: 14px; border-radius: 3px; background: var(--blue); display: inline-block; }
.modal-hint { font-size: 12.5px; color: #5b6b80; background: #eef5fe; border: 1px solid #d3e6fb; border-radius: 10px; padding: 10px 13px; margin-bottom: 14px; line-height: 1.55; }
.svc-ms { position: relative; }
.svc-ms-box { display: flex; align-items: center; gap: 8px; min-height: 42px; border: 1px solid var(--border); border-radius: 9px; padding: 6px 10px; background: #fff; cursor: pointer; }
.svc-ms-box:hover { border-color: var(--blue); }
.svc-ms-tags { display: flex; flex-wrap: wrap; gap: 6px; flex: 1; }
.svc-ms-ph { color: var(--text-3); font-size: 13px; }
.svc-tag { display: inline-flex; align-items: center; gap: 4px; background: #eeecff; color: #4f46e5; border-radius: 6px; padding: 3px 8px; font-size: 12.5px; }
.svc-tag-x { cursor: pointer; font-size: 13px; line-height: 1; opacity: .7; }
.svc-tag-x:hover { opacity: 1; }
.svc-ms-caret { width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 6px solid var(--text-3); }
.svc-ms-panel { position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 30; background: #fff; border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 12px 32px rgba(30,27,75,.16); padding: 8px; max-height: 240px; overflow-y: auto; }
.svc-ms-opt { display: flex; align-items: center; gap: 8px; padding: 7px 8px; border-radius: 7px; font-size: 13px; cursor: pointer; }
.svc-ms-opt:hover { background: #f4f8fd; }
.svc-ms-opt input { accent-color: var(--blue); }

/* ===================== 提醒设置 + 统一提醒投递 ===================== */
/* 顶栏铃铛按钮 + 红点角标 */
.topbar-icon-btn {
  position: relative; flex: 0 0 auto;
  width: 40px; height: 40px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--border); border-radius: 12px;
  background: #fff; color: var(--navy);
  font-size: 18px; cursor: pointer;
  transition: all .18s var(--ease);
}
.topbar-icon-btn:hover { border-color: var(--blue); color: var(--blue); box-shadow: var(--shadow-blue); transform: translateY(-1px); }
.nb-dot {
  position: absolute; top: -4px; right: -4px;
  min-width: 16px; height: 16px; padding: 0 4px;
  background: var(--red); color: #fff;
  border: 2px solid #fff; border-radius: 99px;
  font-size: 10px; font-weight: 700; line-height: 12px;
  display: inline-flex; align-items: center; justify-content: center;
  box-shadow: 0 2px 6px rgba(226,59,59,.4);
}

/* iOS 风格开关 */
.switch { position: relative; display: inline-block; width: 46px; height: 26px; flex: 0 0 auto; }
.switch input { opacity: 0; width: 0; height: 0; }
.slider { position: absolute; cursor: pointer; inset: 0; background: #cfd8e6; border-radius: 99px; transition: background .25s var(--ease); }
.slider::before { content: ""; position: absolute; height: 20px; width: 20px; left: 3px; top: 3px; background: #fff; border-radius: 50%; box-shadow: 0 2px 5px rgba(30,27,75,.25); transition: transform .25s var(--ease); }
.switch input:checked + .slider { background: var(--grad); }
.switch input:checked + .slider::before { transform: translateX(20px); }

/* 提醒设置弹窗 */
.ns-group-title { font-size: 13px; font-weight: 800; color: var(--navy); margin: 16px 0 10px; padding-left: 11px; border-left: 3px solid var(--blue); }
.ns-group-title:first-child { margin-top: 0; }
.ns-row { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 11px 0; border-bottom: 1px solid var(--line); }
.ns-row:last-of-type { border-bottom: none; }
.ns-info { display: flex; flex-direction: column; gap: 3px; }
.ns-label { font-size: 14px; font-weight: 700; color: var(--text); }
.ns-desc { font-size: 12.5px; color: var(--muted); line-height: 1.45; }
.ns-note { margin-top: 14px; font-size: 12px; color: var(--text-2); line-height: 1.6; background: var(--bg-2); border: 1px solid var(--border); border-radius: 10px; padding: 10px 13px; }

/* 提醒弹窗列表 */
.rp-list { display: flex; flex-direction: column; gap: 10px; }
.rp-item { display: flex; align-items: flex-start; gap: 11px; background: var(--bg-2); border: 1px solid var(--border); border-radius: 13px; padding: 12px 14px; transition: border-color .2s var(--ease), box-shadow .2s var(--ease), transform .2s var(--ease); }
.rp-item:hover { border-color: color-mix(in srgb, var(--blue) 32%, var(--border)); box-shadow: 0 6px 18px rgba(30,27,75,.09); }
.rp-tag { flex: 0 0 auto; align-self: center; font-size: 11.5px; font-weight: 700; color: #fff; background: var(--c, var(--blue)); padding: 4px 10px; border-radius: 99px; white-space: nowrap; }
.rp-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.rp-title { font-size: 14px; font-weight: 700; color: var(--navy); }
.rp-msg { font-size: 13px; color: var(--text-2); line-height: 1.55; }
/* 单条提醒右侧操作区：按钮整体右对齐、垂直居中，解决「忽略 / 完成」等按钮错位 */
.rp-item-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex: 0 0 auto; margin-left: auto; align-self: center; }
.rp-ignore { align-self: center; flex: 0 0 auto; }
.rp-actions { display: flex; justify-content: flex-end; margin-top: 14px; }
/* 提醒条目：已读态 / 未读小圆点 / 单条删除 */
.rp-item { position: relative; }
.rp-unread { flex: 0 0 auto; align-self: center; width: 8px; height: 8px; border-radius: 99px; background: var(--blue); box-shadow: 0 0 0 3px rgba(91,91,214,.14); }
.rp-read { background: #f4f6f9; border-color: #e7ebf1; opacity: .82; }
.rp-read .rp-title { color: var(--text-2); font-weight: 600; }
.rp-read-pill { display: inline-block; margin-left: 6px; font-size: 11px; font-weight: 700; color: #6b7785; background: #e6eaf0; border-radius: 99px; padding: 1px 8px; vertical-align: middle; }
.rp-del { align-self: center; flex: 0 0 auto; color: var(--red); border-color: #f3c9c9; background: #fff; }
.rp-del:hover { background: var(--red); color: #fff; border-color: transparent; }
.rp-hidden-note { display: block; margin-top: 8px; padding: 8px 10px; font-size: 12.5px; color: #8a5a00; background: #fff7e6; border: 1px solid #ffe1a8; border-radius: 8px; }
/* ===== 右栏「提醒中心」待办提醒完整信息列表（替代原来的纯数字药丸） ===== */
.rm-list { display: flex; flex-direction: column; gap: 9px; max-height: 430px; overflow-y: auto; margin: 4px -3px 0; padding: 3px; }
.rm-list::-webkit-scrollbar { width: 7px; }
.rm-list::-webkit-scrollbar-thumb { background: #d6dbe4; border-radius: 99px; }
/* 提醒条目：与首页「最近项目」(.rj-item) 同一套排版 —— 行与行之间一条细线分隔，清爽
   字体也对齐最近项目：标题 = .rj-name（15px / 800 / 标题色），正文 = .rj-client（13px / 600 / 正文色） */
.rm-item { position: relative; display: flex; align-items: flex-start; gap: 10px; background: transparent; border: none; border-bottom: 1px solid var(--line); border-radius: 10px; padding: 13px 14px 13px 16px; cursor: pointer; transition: background .2s var(--ease); }
.rm-item:last-child { border-bottom: none; }
/* 左侧渐变竖条：平时不显示，鼠标移上去才亮（用户要求不要再有任何常亮的颜色竖条） */
.rm-item::before { content: ''; position: absolute; left: 0; top: 12px; bottom: 12px; width: 3px; border-radius: 3px; background: var(--grad); opacity: 0; transition: opacity .2s var(--ease); }
.rm-item:hover { background: rgba(91,91,214,.05); box-shadow: none; transform: none; border-color: transparent; }
.rm-item:hover::before { opacity: 1; }
.rm-tag { flex: 0 0 auto; align-self: flex-start; font-size: 10.5px; font-weight: 700; color: #fff; background: var(--c, var(--blue)); padding: 3px 8px; border-radius: 99px; white-space: nowrap; margin-top: 2px; }
.rm-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
/* 字号与首页「最近项目」(.rj .nm / .rj .cu) 完全一致：标题 13.5px/600，副文本 11px */
.rm-title { font-size: 13.5px; font-weight: 600; color: var(--navy); line-height: 1.4; }
.rm-msg { font-size: 11px; color: var(--text-2); line-height: 1.5; }
/* 提醒中心页面：右侧操作（完成了 / 隐藏 / 恢复） */
.rm-ops { flex: 0 0 auto; display: flex; align-items: center; gap: 6px; align-self: center; }
.rm-act { font-size: 11.5px; font-weight: 600; color: var(--text-2); background: transparent; border: 1px solid var(--line); border-radius: 8px; padding: 4px 10px; cursor: pointer; transition: .18s var(--ease); white-space: nowrap; }
.rm-act:hover { color: var(--blue); border-color: rgba(91,91,214,.4); background: rgba(91,91,214,.07); }
/* 提醒里「项目暂停」这类偏谨慎的操作：琥珀色，和「项目延期」的常规蓝区分开 */
.rm-act.warn { color: #b45309; border-color: rgba(180,83,9,.35); }
.rm-act.warn:hover { color: #8a4506; border-color: rgba(180,83,9,.55); background: rgba(180,83,9,.09); }
.rm-read-pill, .rm-hide-pill { display: inline-block; margin-left: 7px; font-size: 10.5px; font-weight: 700; padding: 1px 7px; border-radius: 99px; vertical-align: 1px; }
.rm-read-pill { color: var(--text-3); background: rgba(100,116,139,.13); }
.rm-hide-pill { color: #b45309; background: rgba(180,83,9,.12); }
/* 已读 / 已隐藏：整行压淡，但字仍然看得清 */
.rm-item.rm-read .rm-title { color: var(--text-2); }
.rm-item.rm-gone { opacity: .62; }
.rm-item.rm-gone:hover { opacity: 1; }
.rm-empty { padding: 34px 10px; text-align: center; font-size: 13px; color: var(--text-3); }
/* 提醒中心页面：顶部统计条 */
.rmp-hero { display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap; padding: 18px 20px; }
.rmp-title { font-size: 18px; font-weight: 800; color: var(--navy); letter-spacing: .3px; }
.rmp-sub { margin-top: 5px; font-size: 12.5px; color: var(--text-2); line-height: 1.5; }
.rmp-sub b { color: var(--text); font-weight: 700; }
.rmp-nums { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.rmp-num { min-width: 84px; padding: 9px 14px; text-align: center; background: rgba(91,91,214,.07); border: 1px solid rgba(91,91,214,.14); border-radius: 12px; }
.rmp-num .v { display: block; font-size: 21px; font-weight: 800; color: var(--navy); line-height: 1.2; }
.rmp-num .l { display: block; margin-top: 2px; font-size: 11px; color: var(--text-2); }
.rmp-num.hot { background: rgba(226,59,59,.08); border-color: rgba(226,59,59,.2); }
.rmp-num.hot .v { color: #dc2626; }
.rmp-bar { padding: 14px 20px; }
.rmp-acts { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.rmp-tip { margin-top: 10px; font-size: 12px; color: var(--text-3); line-height: 1.6; }
.rmp-cats { margin-bottom: 6px; }
.rmp-list { max-height: none; overflow: visible; }
/* 铃铛（手机信息）：单条右侧的 ✕ 删除 */
.rp-x { flex: 0 0 auto; width: 24px; height: 24px; line-height: 1; border: 1px solid var(--line); border-radius: 50%; background: transparent; color: var(--text-3); font-size: 12px; cursor: pointer; transition: .18s var(--ease); }
.rp-x:hover { color: #dc2626; border-color: rgba(226,59,59,.35); background: rgba(226,59,59,.08); }
/* 提醒中心翻页 */
.rm-pager, .rm-pager-in { display: flex; align-items: center; justify-content: center; gap: 10px; padding-top: 8px; margin-top: 6px; border-top: 1px dashed var(--border); font-size: 14px; font-weight: 600; color: var(--text); }
.rm-pager .btn, .rm-pager-in .btn { padding: 4px 13px; font-size: 13px; border-radius: 7px; }
/* 翻页当前页码：醒目电光蓝 + 大号加粗（深浅主题都清晰） */
.pg-cur { font-weight: 800; color: var(--blue); font-size: 19px; padding: 0 4px; }
.theme-dark .pg-cur { color: #aab0ff; }
/* 最近项目翻页：做成醒目的胶囊条，明显加大加粗；去掉 ft 类后此样式才真正生效 */
.pb-pager { display: inline-flex; align-items: center; justify-content: center; gap: 14px; width: fit-content; margin: 16px auto 2px; padding: 8px 20px; background: rgba(91,91,214,.07); border: 1px solid rgba(91,91,214,.22); border-radius: 999px; font-size: 15px; font-weight: 700; color: var(--text); letter-spacing: .3px; }
.pb-pager .btn { padding: 5px 16px; font-size: 15px; border-radius: 9px; font-weight: 700; }
/* 未配置实施人员提示条：没有实施人员就不该有实施进展 / 节点操作 */
.team-warn { font-size: 12.5px; font-weight: 600; color: #b45309; background: rgba(180,83,9,.08); border: 1px solid rgba(180,83,9,.22); border-radius: 9px; padding: 8px 12px; line-height: 1.5; }
body.theme-dark .team-warn { color: #e8b27a; background: rgba(232,178,122,.12); border-color: rgba(232,178,122,.3); }
.theme-dark .pb-pager { background: rgba(124,124,255,.12); border-color: rgba(124,124,255,.3); color: var(--text); }
/* 财务管理：默认只显示第一行，可展开 */
body.view-dashboard .money.collapsed .mc { display: none; }
@media (min-width: 981px) {
  body.view-dashboard .money.collapsed .mc:nth-child(-n+3) { display: block; }
}
@media (max-width: 980px) and (min-width: 461px) {
  body.view-dashboard .money.collapsed .mc:nth-child(-n+2) { display: block; }
}
@media (max-width: 460px) {
  body.view-dashboard .money.collapsed .mc:nth-child(1) { display: block; }
}
body.view-dashboard .money-toggle { margin-top: 12px; text-align: center; font-size: 12.5px; font-weight: 600; color: var(--pb-ind); cursor: pointer; padding: 8px; border-radius: 10px; background: rgba(129,140,248,.08); transition: .15s var(--ease); }
body.view-dashboard .money-toggle:hover { background: rgba(129,140,248,.16); }
.rm-more { margin-top: 10px; text-align: center; font-size: 12.5px; font-weight: 700; color: var(--blue); cursor: pointer; padding: 8px; border-radius: 9px; transition: background .2s var(--ease); }
.rm-more:hover { background: var(--bg-2); }
/* 提醒中心：按类型分页签的紧凑 chip */
.rm-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 2px; }
.rm-tab { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; font-weight: 700; line-height: 1; padding: 6px 9px; border-radius: 9px; cursor: pointer; color: var(--text-2); background: var(--bg-2); border: 1px solid var(--border); transition: all .2s var(--ease); user-select: none; white-space: nowrap; }
.rm-tab:hover { border-color: var(--c, var(--blue)); color: var(--navy); }
.rm-tab.active { color: #fff; background: var(--c, var(--blue)); border-color: transparent; box-shadow: 0 4px 12px color-mix(in srgb, var(--c, var(--blue)) 36%, transparent); }
.rm-tab .rm-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--c, var(--blue)); flex: none; }
.rm-tab.active .rm-dot { background: #fff; }
.rm-tab b { font-size: 10.5px; font-weight: 800; min-width: 16px; text-align: center; padding: 1px 5px; border-radius: 99px; background: color-mix(in srgb, var(--c, var(--blue)) 15%, var(--bg-2)); color: var(--c, var(--blue)); }
.rm-tab.active b { background: rgba(255,255,255,.28); color: #fff; }
.nc-rm-tabs { padding: 2px 0 4px; }
.req-form .form-item > label::after { content: ' *'; color: #e5484d; font-weight: 700; }
.req-form .form-item:has(input[readonly]) > label::after { content: none; }
/* a59：非必填字段（如「备注（选填）」）不显示必填星号 */
.req-form .form-item.optional > label::after { content: none; }
input[readonly] { background: #eef1f5; color: #6b7280; cursor: not-allowed; border-color: #dfe4ea; }
.team-group { border: 1px solid #e5e7eb; border-radius: 12px; padding: 12px 14px; margin-bottom: 12px; background: #fff; }
.team-group-title { font-size: 13px; font-weight: 700; color: #1e1b4b; margin-bottom: 10px; padding-left: 8px; border-left: 3px solid #5b5bd6; }
.team-group-title .req { color: var(--red); margin-left: 3px; font-weight: 800; }
.team-row { align-items: center; }
.team-rows:empty { display: none; }
.team-groups { border-top: 1px dashed #e3e9f2; padding-top: 10px; }
.impl-complete-box { border-top: 1px solid #e3e9f2; margin-top: 14px; padding-top: 12px; }
.impl-complete-title { font-weight: 700; font-size: 14.5px; color: #1f2d3d; }
.impl-complete-sub { margin-top: 2px; }
.team-line { padding: 5px 0; font-size: 13.5px; line-height: 1.6; }
.team-role { font-weight: 700; color: #5b5bd6; margin-right: 4px; }
.team-member { margin-right: 4px; }
.ini-group { margin-bottom: 18px; }
.ini-group:last-child { margin-bottom: 0; }
.ini-group-title { color: var(--navy); border-left-color: var(--navy); }
.field-hint { font-size: 11.5px; color: var(--muted); margin-top: 4px; line-height: 1.4; }
input[list] { background-image: linear-gradient(45deg, transparent 50%, var(--muted) 50%), linear-gradient(135deg, var(--muted) 50%, transparent 50%); background-position: calc(100% - 16px) calc(50% - 2px), calc(100% - 11px) calc(50% - 2px); background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; padding-right: 28px; }

@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes slideUp { from { transform: translateY(18px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }

/* ===================== Toast ===================== */
#toast-root { position: fixed; top: 20px; right: 20px; z-index: 200; display: flex; flex-direction: column; gap: 10px; }
.toast { background: #fff; border-radius: 12px; padding: 12px 18px; box-shadow: var(--shadow-lg); font-size: 13.5px; display: flex; align-items: center; gap: 9px; border-left: 4px solid var(--green); animation: slideIn .36s var(--ease); }
.toast.error { border-left-color: var(--red); }
.toast.info { border-left-color: var(--blue); }
@keyframes slideIn { from { transform: translateX(34px); opacity: 0; } to { transform: translateX(0); opacity: 1; } }

/* ===================== AI 审核面板 ===================== */
.ai-panel { border-radius: 14px; padding: 16px; margin-top: 14px; background: var(--grad-soft); border: 1px solid #d3e6fb; }
.ai-head { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 14px; margin-bottom: 10px; color: var(--navy); }
/* 未复核状态：虚线待办卡片（原来写死 #f4f6fa 白底，深色下很突兀） */
.ai-panel.is-empty { background: rgba(91,91,214,.05); border: 1px dashed rgba(91,91,214,.38); }
.ai-panel.is-empty .ai-head { color: var(--text-2); margin-bottom: 8px; }
.ai-empty-tag { margin-left: auto; font-size: 11.5px; font-weight: 800; padding: 2px 10px; border-radius: 999px; background: rgba(91,91,214,.13); color: var(--blue); }
body.theme-dark .ai-panel.is-empty { background: rgba(129,140,248,.08); border-color: rgba(129,140,248,.34); }
body.theme-dark .ai-empty-tag { background: rgba(129,140,248,.2); color: #aab0ff; }
.ai-score { margin-left: auto; font-size: 26px; font-weight: 800; color: var(--blue); }
.ai-engine { display: inline-block; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 99px; background: var(--grad); color: #fff; margin-left: 6px; vertical-align: middle; }
.ai-engine-rule { background: #8a94a6; }
.switch-row { display: inline-flex; align-items: center; gap: 10px; cursor: pointer; }
.switch-row .switch { position: relative; display: inline-block; width: 46px; height: 26px; flex: 0 0 auto; }
.switch-row .switch input { opacity: 0; width: 0; height: 0; }
.switch-row .slider { position: absolute; cursor: pointer; inset: 0; background: #cfd8e6; border-radius: 99px; transition: background .25s var(--ease); }
.switch-row .slider::before { content: ""; position: absolute; height: 20px; width: 20px; left: 3px; top: 3px; background: #fff; border-radius: 50%; box-shadow: 0 2px 5px rgba(30,27,75,.25); transition: transform .25s var(--ease); }
.switch-row .switch input:checked + .slider { background: var(--grad); }
.switch-row .switch input:checked + .slider::before { transform: translateX(20px); }
.switch-label { font-size: 13px; color: var(--text-2); }
.ai-row { display: flex; gap: 8px; padding: 6px 0; font-size: 13px; align-items: flex-start; }
.ai-row .ico { flex: 0 0 auto; }
.ai-risk-low { background: var(--green-bg); color: var(--green); border: 1px solid #bfe6cd; border-radius: 10px; padding: 10px 12px; }
.ai-risk-mid { background: var(--amber-bg); color: var(--amber); border: 1px solid #f0d29a; border-radius: 10px; padding: 10px 12px; }
.ai-risk-high { background: var(--red-bg); color: var(--red); border: 1px solid #f3b9b9; border-radius: 10px; padding: 10px 12px; }

/* ===================== 空状态 / 其他 ===================== */
.empty { text-align: center; padding: 26px 20px; color: var(--text-3); font-size: 13px; }
.pd-grid .empty, .cockpit-panel .empty { margin: 6px 0; padding: 30px 18px; border: 1px dashed var(--line); border-radius: 14px; background: rgba(255,255,255,.5); }
.muted { color: var(--text-2); }
.small { font-size: 12px; }
.mt8 { margin-top: 8px; } .mt12 { margin-top: 12px; } .mt16 { margin-top: 16px; } .mt20 { margin-top: 20px; }
.mb8 { margin-bottom: 8px; } .mb16 { margin-bottom: 16px; }
.flex { display: flex; align-items: center; gap: 10px; }
.between { justify-content: space-between; }
.wrap { flex-wrap: wrap; }
.mono { font-variant-numeric: tabular-nums; }
.clickable { cursor: pointer; }
.pill-tabs { display: flex; gap: 8px; flex-wrap: wrap; }
.pill-tab { padding: 8px 16px; border-radius: 999px; font-size: 13px; cursor: pointer; color: var(--text-2); background: #fff; border: 1px solid var(--border); transition: all .26s var(--ease); }
.pill-tab:hover { border-color: var(--blue); color: var(--blue); transform: translateY(-1px); }
.pill-tab.active { background: var(--grad); color: #fff; border-color: transparent; box-shadow: 0 6px 16px rgba(91,91,214,.24); }

/* OA 办公分组导航 */
.oa-groups { display: flex; gap: 10px; flex-wrap: wrap; margin: 4px 0 14px; }
.oa-group { font-size: 13px; font-weight: 500; padding: 9px 18px; border-radius: 10px; cursor: pointer; color: var(--text-2); background: #fff; border: 1px solid var(--border); transition: all .2s var(--ease); }
.oa-group:hover { border-color: var(--gc); color: var(--gc); }
.oa-group.active { background: var(--gc); border-color: var(--gc); color: #fff; }
.oa-subtabs { margin-bottom: 16px; }

/* 首页统计周期切换：本月 / 上月 / 本季度 / 上季度 / 本年度 / 上年度 */
.period-tabs { display: inline-flex; flex-wrap: wrap; gap: 6px; background: rgba(255,255,255,.7); border: 1px solid var(--border); border-radius: 999px; padding: 4px; }
.period-tab { padding: 6px 13px; border-radius: 999px; font-size: 12.5px; cursor: pointer; color: var(--text-2); transition: all .2s var(--ease); user-select: none; white-space: nowrap; }
.period-tab:hover { color: var(--blue); background: rgba(91,91,214,.07); }
.period-tab.active { background: var(--grad); color: #fff; box-shadow: 0 6px 14px rgba(91,91,214,.26); }

.section-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; align-items: stretch; }
.cust-invoice-box { background: #f7f9fc; border: 1px solid var(--border); border-radius: 12px; padding: 12px 14px; }
.cust-invoice-box .kv .k { width: 92px; }
.cust-invoice-box .cib-title { font-size: 13.5px; font-weight: 700; color: var(--text); margin-bottom: 8px; letter-spacing: .2px; }
/* 开票登记：受票方信息带入提示条 */
.inv-fill-bar { display: flex; align-items: center; gap: 12px; justify-content: space-between; flex-wrap: wrap; border-radius: 10px; padding: 9px 12px; border: 1px solid transparent; font-size: 12.5px; line-height: 1.55; }
.inv-fill-bar .ifb-main { flex: 1 1 260px; min-width: 0; }
.inv-fill-bar .ifb-t { font-weight: 700; font-size: 13px; margin-bottom: 2px; }
.inv-fill-bar .ifb-d { color: var(--text-2); }
.inv-fill-bar .ifb-d b { color: var(--text); }
.inv-fill-bar.ok { background: rgba(22,163,74,.07); border-color: rgba(22,163,74,.2); }
.inv-fill-bar.ok .ifb-t { color: #15803d; }
.inv-fill-bar.warn { background: rgba(180,83,9,.07); border-color: rgba(180,83,9,.2); }
.inv-fill-bar.warn .ifb-t { color: #b45309; }
.inv-save-cust { display: inline-flex; align-items: center; gap: 7px; margin-top: 10px; font-size: 12.5px; font-weight: 600; color: var(--text-2); cursor: pointer; user-select: none; }
.inv-save-cust input { width: 15px; height: 15px; accent-color: var(--blue); cursor: pointer; }
.req { color: #e5484d; font-weight: 700; }
.kv { display: flex; padding: 8px 0; border-bottom: 1px dashed var(--border); font-size: 13.5px; }
.kv .k { color: var(--text-2); width: 110px; flex: 0 0 auto; }
.kv .v { color: var(--text); font-weight: 500; }

.cmp2 { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; align-items: stretch; }
.cmp-col { border: 1px solid var(--border); border-radius: 14px; overflow: hidden; background: #fff; }
.cmp-h { padding: 9px 15px; font-size: 13px; font-weight: 700; background: #f3f5f9; color: var(--text-2); border-bottom: 1px solid var(--border); }
.cmp-h.cmp-new { background: var(--blue-bg); color: var(--blue); }
.cmp-body { padding: 6px 15px; }
.cmp-body .kv:last-child { border-bottom: none; }

/* ===================== 客户库 ===================== */
.search-box input { width: 250px; border-radius: 999px; }
.cust-card {
  background: #fff; border-radius: var(--radius); box-shadow: var(--shadow);
  padding: 14px 16px; cursor: pointer; border: 1px solid var(--border);
  display: flex; flex-direction: column; gap: 10px; transition: transform .3s var(--ease), box-shadow .3s var(--ease), border-color .3s var(--ease);
}
.cust-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); border-color: rgba(91,91,214,.25); }
.cc-top { display: flex; align-items: flex-start; gap: 12px; }
.cc-logo {
  width: 42px; height: 42px; border-radius: 12px; flex: 0 0 auto;
  background: var(--grad); color: #fff;
  display: flex; align-items: center; justify-content: center; font-size: 18px; font-weight: 800; box-shadow: 0 6px 16px rgba(91,91,214,.26);
}
.cc-logo.lg { width: 56px; height: 56px; font-size: 22px; border-radius: 16px; }
.cc-name { font-size: 15px; font-weight: 800; color: var(--navy); line-height: 1.45; word-break: break-all; }
.cc-meta { font-size: 12px; color: var(--text-3); margin-top: 4px; }
.cc-tip { font-size: 11.5px; color: #92610a; background: var(--amber-bg); border-radius: 10px; padding: 7px 11px; line-height: 1.5; }
.cc-contacts { display: flex; flex-direction: column; gap: 7px; }
.cc-cl-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
.cc-cl-title { font-size: 12.5px; font-weight: 700; color: var(--text-2); }
.cc-used { font-size: 11.5px; font-weight: 400; color: var(--text-3); }
.cc-add { padding: 4px 10px; font-size: 12px; flex: 0 0 auto; }
.cc-none { font-size: 12px; color: var(--text-3); padding: 2px 0; }
.cc-more { font-size: 11.5px; color: var(--text-3); margin-top: 1px; }

.ct-line { display: flex; align-items: center; gap: 8px; padding: 6px 10px; background: #f8fafc; border-radius: 12px; }
.ct-avatar {
  width: 30px; height: 30px; border-radius: 50%; flex: 0 0 auto;
  background: var(--blue-bg); color: var(--blue); display: flex; align-items: center; justify-content: center; font-size: 12.5px; font-weight: 700;
}
.ct-name { font-size: 13.5px; font-weight: 700; }
.ct-title { font-size: 11.5px; color: var(--text-3); margin-left: 6px; font-weight: 400; }
.ct-phone { font-size: 12px; color: var(--text-2); margin-top: 2px; display: flex; align-items: center; gap: 5px; }
.ct-phone svg { width: 12px; height: 12px; flex: 0 0 auto; }
.ct-del { color: var(--text-3); cursor: pointer; font-size: 18px; line-height: 1; padding: 0 4px; }
.ct-del:hover { color: var(--red); }

.cust-tip { margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.tip-line {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  padding: 11px 13px; border-radius: 12px; font-size: 13px; line-height: 1.55;
  border: 1px solid var(--border); background: #fafbfd;
}
.tip-line > div { flex: 1; min-width: 160px; }
.tip-loading { color: var(--text-3); }
.tip-ok { background: var(--green-bg); border-color: rgba(22,163,74,.25); }
.tip-warn { background: var(--amber-bg); border-color: rgba(217,119,6,.25); }
.tip-dup { background: var(--red-bg); border-color: rgba(226,59,59,.25); }

.ct-form { padding: 14px; border: 1px solid var(--border); border-radius: 14px; margin-bottom: 12px; background: #fafbfd; }
.divider { height: 1px; background: var(--border); margin: 16px 0; }
.share-row { padding: 14px 0; border-bottom: 1px solid var(--border); }
.cust-detail-head { display: flex; align-items: center; gap: 14px; }

.rule-list { display: flex; flex-direction: column; gap: 10px; }
.rule-item {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 11px 15px; background: #f8fafc; border-radius: 12px; font-size: 13.5px; border: 1px solid var(--border);
}
.rule-who { font-weight: 700; color: var(--navy); min-width: 140px; }
.rule-arrow { color: var(--text-3); }
.rule-what { color: var(--text-2); }
.nowrap { white-space: nowrap; }

.cl-list { display: flex; flex-direction: column; gap: 14px; }
.cl-item { border: 1px solid var(--border); border-radius: 14px; padding: 14px 16px; background: #fbfcfe; box-shadow: var(--shadow); }
.cl-top { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.cl-date { font-size: 12px; color: var(--text-3); background: #eef2f8; border-radius: 6px; padding: 2px 8px; font-variant-numeric: tabular-nums; }
.cl-title { font-weight: 700; color: var(--navy); font-size: 14.5px; flex: 1; min-width: 120px; }
.cl-content { margin: 8px 0 6px; color: var(--text-2); font-size: 13.5px; line-height: 1.6; white-space: pre-wrap; }
.cl-foot { margin-top: 2px; }
.cl-del { margin-left: auto; }

/* ===== 首页驾驶舱 · 办公 OA 动态 ===== */
.grid-oa { grid-template-columns: repeat(3, 1fr); }
.oa-col {
  background: var(--bg-2); border: 1px solid var(--border);
  border-radius: 16px; padding: 14px 16px; min-height: 96px; transition: all .3s var(--ease);
}
.oa-col:hover { border-color: rgba(91,91,214,.2); }
.oa-col-head { display: flex; align-items: center; gap: 9px; font-weight: 800; color: var(--navy); font-size: 14px; }
.oa-col-head .tag { margin-left: auto; }
.oa-ico { width: 22px; height: 22px; display: inline-flex; }
.oa-ico svg { width: 22px; height: 22px; }
.oa-col-body { margin-top: 12px; display: flex; flex-direction: column; gap: 9px; }
.oa-item { background: #fff; border: 1px solid var(--border); border-radius: 11px; padding: 9px 11px; transition: all .26s var(--ease); }
.oa-item:hover { border-color: rgba(91,91,214,.25); transform: translateY(-1px); }
.oa-item-top { display: flex; align-items: center; gap: 8px; }
.oa-item-top b { font-size: 13.5px; }
.oa-empty { color: var(--text-3); font-size: 13px; text-align: center; padding: 16px 0; }
.oa-ann { background: #fff; border: 1px solid var(--border); border-radius: 11px; padding: 10px 12px; transition: all .26s var(--ease); }
.oa-ann:hover { border-color: rgba(91,91,214,.25); }
.oa-ann-title { font-size: 13.5px; color: var(--navy); font-weight: 700; }
.oa-ann-content {
  margin-top: 5px; color: var(--text-2); font-size: 12.5px; line-height: 1.55;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* 首页 OA 动态与 OA 内部风格统一：按 3 大组着色分组 */
.oa-groups-sm { margin: 4px 0 2px; }
.oa-groups-sm .oa-group { padding: 7px 14px; font-size: 12.5px; }
.oa-grp { margin-top: 16px; }
.oa-grp-head { font-weight: 700; font-size: 14px; color: #fff; background: var(--gc, #5b5bd6); padding: 8px 14px; border-radius: 9px; margin-bottom: 12px; }
.grid-oa2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 720px) { .grid-oa2 { grid-template-columns: 1fr; } }

/* ===================== 项目生命周期时间线 ===================== */
.timeline-card { background: linear-gradient(180deg, #fbfdff, #f6f9ff); }
.timeline { display: flex; align-items: flex-start; position: relative; padding: 14px 4px 6px; }
/* 连接线：改成两端淡出、中间清晰的渐变，比原来的实色灰条更轻盈 */
.timeline::before { content: ''; position: absolute; top: 31px; left: 9%; right: 9%; height: 3px; z-index: 0; border-radius: 3px; background: linear-gradient(90deg, rgba(148,163,184,.18), rgba(148,163,184,.55) 22%, rgba(148,163,184,.55) 78%, rgba(148,163,184,.18)); }
.tl-step { flex: 1; text-align: center; position: relative; z-index: 1; cursor: pointer; padding: 0 4px; transition: transform .26s var(--ease); }
.tl-step:hover { transform: translateY(-2px); }
.tl-dot { width: 36px; height: 36px; border-radius: 50%; margin: 0 auto 8px; display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 14px; background: #f1f5f9; color: #8b98ab; border: 2px solid #e3e9f2; transition: .34s var(--ease); }
/* 未开始的步骤：虚线圈表示「待解锁」，比纯灰圆点更有语义 */
.tl-step.todo .tl-dot { border-style: dashed; }
.tl-step.done .tl-dot { background: var(--green); color: #fff; border-color: var(--green); box-shadow: 0 6px 16px rgba(22,163,74,.28); }
.tl-step.active .tl-dot, .tl-step.current .tl-dot { background: var(--grad); color: #fff; border-color: transparent; box-shadow: 0 6px 16px rgba(91,91,214,.3); }
.tl-step.todo .tl-dot { opacity: .55; }
.tl-label { font-size: 12.5px; font-weight: 600; color: var(--text-2); line-height: 1.3; }
.tl-step.active .tl-label, .tl-step.current .tl-label { color: var(--blue); }
.tl-step.done .tl-label { color: var(--green); }
/* 状态文字原来用最浅的 --text-3 看不清，提亮一档 */
.tl-state { font-size: 11.5px; font-weight: 600; color: var(--text-2); margin-top: 3px; }
.tl-step.current .tl-dot { box-shadow: 0 0 0 5px rgba(91,91,214,.18); animation: tlpulse 1.8s infinite; }
@keyframes tlpulse { 0% { box-shadow: 0 0 0 4px rgba(91,91,214,.28); } 50% { box-shadow: 0 0 0 11px rgba(91,91,214,.03); } 100% { box-shadow: 0 0 0 4px rgba(91,91,214,.28); } }
/* 提示条统一柔和化：半透明渐变底 + 细边框，取代原来的实心色块 + 深黄描边 */
.tl-banner { margin-top: 14px; padding: 12px 15px; border-radius: 13px; background: linear-gradient(135deg, rgba(91,91,214,.10), rgba(91,91,214,.04)); color: var(--blue); border: 1px solid rgba(91,91,214,.26); font-size: 13px; line-height: 1.65; }
.tl-banner.done { background: linear-gradient(135deg, rgba(22,163,74,.10), rgba(22,163,74,.04)); color: #15803d; border-color: rgba(22,163,74,.28); }
/* 提示条不用警示黄（用户嫌土）→ 统一走清爽靛蓝「待办/说明」色 */
.tl-banner.warn { background: linear-gradient(135deg, rgba(91,91,214,.10), rgba(91,91,214,.035)); color: #4338ca; border: 1px solid rgba(91,91,214,.28); font-weight: 600; }
.tl-banner.terminated { background: linear-gradient(135deg, rgba(226,59,59,.10), rgba(226,59,59,.04)); color: #b91c1c; border-color: rgba(226,59,59,.28); }
.tl-banner-warn { margin-top: 8px; padding-top: 8px; border-top: 1px dashed rgba(91,91,214,.3); font-size: 12.5px; font-weight: 500; line-height: 1.65; color: var(--text-2); }
/* 深色：时间线卡片本身也要跟着变，否则是一块浅色白板 */
/* 加 .card 提高权重：否则会被后面的 `body.theme-dark .card` 纯色底压掉，渐变不生效 */
body.theme-dark .card.timeline-card { background: linear-gradient(180deg, rgba(255,255,255,.055), rgba(255,255,255,.02)); }
/* 连接线同样改渐变（原来深色是实色 rgba(255,255,255,.12)） */
body.theme-dark .timeline::before { background: linear-gradient(90deg, rgba(148,163,184,.12), rgba(148,163,184,.34) 22%, rgba(148,163,184,.34) 78%, rgba(148,163,184,.12)); }
body.theme-dark .tl-banner.warn { color: #aab0ff; }
body.theme-dark .tl-banner.done { color: #4ade80; }
body.theme-dark .tl-banner.terminated { color: #fb7185; }
body.theme-dark .tl-dot { border-style: solid; }
.tl-step.partial .tl-dot { background: var(--grad); color: #fff; border-color: transparent; }
.tl-step.partial .tl-label { color: var(--blue); }
.tl-step.partial.tl-step.current .tl-dot { box-shadow: 0 0 0 5px rgba(91,91,214,.18); animation: tlpulse 1.8s infinite; }

.stage-chip { display: inline-block; margin-top: 10px; padding: 4px 11px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.chip-done { background: var(--green-bg); color: var(--green); border: 1px solid #bfe6cd; }
.chip-active { background: var(--blue-bg); color: var(--blue); border: 1px solid #d9d8fb; }
/* 阶段提示胶囊：同样告别警示黄，改清爽靛蓝 */
.chip-warn { background: rgba(91,91,214,.10); color: #4f46e5; border: 1px solid rgba(91,91,214,.28); }
.tl-step.terminated .tl-dot { background: var(--red); color: #fff; border-color: var(--red); box-shadow: 0 6px 16px rgba(226,59,59,.28); }
.tl-step.terminated .tl-label { color: var(--red); }
.tl-step.terminated.tl-step.current .tl-dot { box-shadow: 0 0 0 5px rgba(226,59,59,.18); animation: tlpulse 1.8s infinite; }
.chip-terminated { background: var(--red-bg); color: var(--red); border: 1px solid #f0b4b4; }
.chip-overdue { background: #fdecec; color: #c0392b; border: 1px solid #f3b4b4; }
/* 终止态保留红色（语义需要），但改半透明渐变底，与其他提示条风格统一 */
.tl-banner.terminated { background: linear-gradient(135deg, rgba(226,59,59,.10), rgba(226,59,59,.04)); color: #b91c1c; border: 1px solid rgba(226,59,59,.28); }
.terminated-banner { margin-top: 16px; padding: 15px 19px; border-radius: 14px; background: linear-gradient(135deg, rgba(226,59,59,.10), rgba(226,59,59,.04)); color: #b91c1c; font-weight: 700; font-size: 14px; border: 1px solid rgba(226,59,59,.28); }
.remind-badge.term { display: block; }
button:disabled, .btn:disabled { opacity: .5; cursor: not-allowed; filter: grayscale(.25); }
@media (max-width: 720px) {
  .timeline { flex-wrap: wrap; gap: 10px 0; }
  .timeline::before { display: none; }
  .tl-step { flex: 1 1 30%; }
  .tl-label { font-size: 11.5px; }
}

.archive-action {
  display: flex; align-items: center; gap: 14px; margin: 14px 0 4px; padding: 15px 17px;
  border-radius: 14px; border: 1px solid var(--border); background: #fff;
}
/* 未归档：用户嫌琥珀/黄色突兀 → 统一改成清爽的靛蓝「待办」卡片（不再是警告黄） */
.archive-action.is-unarchived { background: linear-gradient(135deg, rgba(91,91,214,.09) 0%, rgba(91,91,214,.03) 100%); border: 1px solid rgba(91,91,214,.3); box-shadow: 0 4px 16px rgba(91,91,214,.10); }
.archive-action.is-archived { background: linear-gradient(135deg, rgba(22,163,74,.09) 0%, rgba(22,163,74,.03) 100%); border: 1px solid rgba(22,163,74,.3); }
.archive-action.is-pending { background: linear-gradient(135deg, rgba(91,91,214,.10) 0%, rgba(91,91,214,.035) 100%); border: 1px solid rgba(91,91,214,.34); box-shadow: 0 4px 16px rgba(91,91,214,.12); }
.archive-action.is-pending .aa-title { color: var(--blue); }
/* 图标统一做成圆角方块底，比裸 emoji 精致 */
.archive-action .aa-icon { flex: 0 0 auto; width: 46px; height: 46px; border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 23px; line-height: 1; background: rgba(30,41,80,.05); }
.archive-action.is-unarchived .aa-icon { background: rgba(91,91,214,.14); }
.archive-action.is-archived .aa-icon { background: rgba(22,163,74,.15); }
.archive-action.is-pending .aa-icon { background: rgba(91,91,214,.15); }
.archive-action .aa-body { flex: 1 1 auto; min-width: 0; }
.archive-action .aa-title { font-size: 15px; font-weight: 800; color: var(--ink, #0f172a); letter-spacing: .2px; }
.archive-action.is-unarchived .aa-title { color: #4f46e5; }
.archive-action.is-archived .aa-title { color: #15803d; }
/* 深色：琥珀色系整体提亮，避免暗底上的浊黄 */
body.theme-dark .archive-action.is-unarchived { background: linear-gradient(135deg, rgba(129,140,248,.17) 0%, rgba(129,140,248,.05) 100%); border-color: rgba(129,140,248,.34); }
body.theme-dark .archive-action.is-unarchived .aa-title { color: #aab0ff; }
body.theme-dark .archive-action.is-archived .aa-title { color: #4ade80; }
body.theme-dark .archive-action .aa-icon { background: rgba(255,255,255,.06); }
.archive-action .aa-desc { font-size: 12.5px; color: var(--muted); margin-top: 2px; }
.archive-action .btn { flex: 0 0 auto; }
@media (max-width: 720px) {
  .archive-action { flex-wrap: wrap; }
  .archive-action .btn { width: 100%; }
}

/* ===================== 响应式 ===================== */
@media (max-width: 1100px) {
  .grid-oa { grid-template-columns: 1fr; }
  .grid-stats { grid-template-columns: repeat(3, 1fr); }
  .grid-money { grid-template-columns: repeat(2, 1fr); }
  .section-grid { grid-template-columns: 1fr; }
  .cmp2 { grid-template-columns: 1fr; }
  .grid-2 { grid-template-columns: 1fr; }
  .grid-3 { grid-template-columns: 1fr; }
  .ai-groups { grid-template-columns: 1fr; }
}
/* 底部浮窗主导航（全站通用：顶部主导航已移至此） */
.mobile-nav {
  display: flex; position: fixed; bottom: 0; left: 0; right: 0; z-index: 60; overflow-x: auto; overflow-y: hidden;
  scrollbar-width: none; -ms-overflow-style: none;
  background: linear-gradient(180deg, rgba(255,255,255,.68) 0%, rgba(255,255,255,.46) 50%, rgba(255,255,255,.36) 100%); -webkit-backdrop-filter: blur(34px) saturate(175%); backdrop-filter: blur(34px) saturate(175%);
  border-top: 1px solid rgba(255,255,255,.7);
  padding: 7px 0 calc(7px + env(safe-area-inset-bottom));
  box-shadow: 0 -10px 34px rgba(30,27,75,.18), 0 1px 0 rgba(255,255,255,1) inset;
}
.mobile-nav::-webkit-scrollbar { display: none; }
.mobile-nav::before {
  content: ''; position: absolute; left: 0; right: 0; top: 1px; height: 42%;
  pointer-events: none; background: linear-gradient(180deg, rgba(255,255,255,.9), rgba(255,255,255,0));
}
.mn-item {
  flex: 1 0 auto; min-width: 54px; display: flex; flex-direction: column; align-items: center; gap: 3px;
  padding: 5px 2px; font-size: 11px; color: var(--text-3); cursor: pointer; position: relative;
  transition: color .26s var(--ease);
}
.mn-item svg { width: 21px; height: 21px; transition: transform .26s var(--ease); }
.mn-item:hover { color: var(--navy); }
.mn-item.active { color: var(--blue); }
.mn-item.active svg { transform: translateY(-1px); }
.mn-badge { position: absolute; top: 1px; left: 50%; transform: translateX(8px); background: var(--red); color: #fff; font-size: 10px; font-weight: 700; border-radius: 10px; padding: 1px 5px; box-shadow: 0 2px 6px rgba(226,59,59,.4); }
.content { padding-bottom: 92px; }

/* 桌面端：底部导航改为居中悬浮玻璃胶囊（半圆端头+描边），FAB 抬升至其上方 */
@media (min-width: 761px) {
  .mobile-nav {
    display: none; /* 桌面端不用底部 Tab，导航仍走顶部横滑条 */
    left: 50%; right: auto; transform: translateX(-50%); bottom: 20px;
    overflow-x: auto; overflow-y: hidden; max-width: calc(100vw - 32px);
    width: auto; border-radius: 999px; border: 1px solid rgba(255,255,255,.7);
    background: linear-gradient(180deg, rgba(255,255,255,.68) 0%, rgba(255,255,255,.46) 50%, rgba(255,255,255,.36) 100%); -webkit-backdrop-filter: blur(34px) saturate(175%); backdrop-filter: blur(34px) saturate(175%);
    padding: 9px 12px calc(9px + env(safe-area-inset-bottom));
    box-shadow: 0 16px 50px rgba(30,27,75,.26), 0 1px 0 rgba(255,255,255,1) inset, 0 -1px 2px rgba(30,27,75,.06) inset; gap: 2px;
  }
  .mobile-nav::before {
    content: ''; position: absolute; left: 10px; right: 10px; top: 2px; height: 50%;
    border-radius: 999px; pointer-events: none;
    background: linear-gradient(180deg, rgba(255,255,255,.92), rgba(255,255,255,0));
  }
  .mn-item {
    flex: 0 0 auto; flex-direction: row; gap: 7px; padding: 9px 15px;
    font-size: 13px; font-weight: 600; border-radius: 12px; color: var(--text-2);
  }
  .mn-item:hover { color: var(--navy); }
  .mn-item.active { color: var(--blue); font-weight: 700; }
  .mn-item svg { width: 18px; height: 18px; }
  .mn-item.active svg { transform: none; }
  .mn-badge { left: auto; right: 8px; top: 4px; transform: none; }
  .content { padding-bottom: 110px; }
  .fab { bottom: 102px; }
  .fab-menu { bottom: 170px; }
}
/* 深色模式：底部 Tab 玻璃条翻成深色，保持与顶栏一致 */
body.theme-dark .mobile-nav {
  background: linear-gradient(180deg, rgba(28,32,48,.82) 0%, rgba(22,26,40,.66) 50%, rgba(18,21,33,.54) 100%);
  border-top-color: rgba(255,255,255,.1);
  box-shadow: 0 -10px 34px rgba(0,0,0,.45), 0 1px 0 rgba(255,255,255,.06) inset;
}
body.theme-dark .mobile-nav::before { background: linear-gradient(180deg, rgba(255,255,255,.05), rgba(255,255,255,0)); }
body.theme-dark .mn-item { color: var(--text-3); }
body.theme-dark .mn-item:hover { color: var(--navy); }
body.theme-dark .mn-item.active { color: var(--blue); }

@media (max-width: 760px) {
  .sidebar { display: none; }
  .grid-stats { grid-template-columns: repeat(2, 1fr); }
  .grid-money { grid-template-columns: repeat(2, 1fr); }
  .topbar-search { display: none; }
  .search-box { width: 100%; }
  .search-box input { width: 100%; }
  .rule-who { min-width: auto; }
  th, td { padding: 10px 8px; font-size: 12.5px; }
}

/* ===================== 点击粒子 / 涟漪（科技感交互反馈） ===================== */
#fx-layer { position: fixed; inset: 0; pointer-events: none; z-index: 9000; overflow: hidden; }
.fx-particle { position: absolute; width: 6px; height: 6px; border-radius: 50%; pointer-events: none; will-change: transform, opacity; box-shadow: 0 0 16px 2px currentColor, 0 0 7px currentColor; filter: brightness(1.2); }
.fx-ripple { position: absolute; border-radius: 50%; border: 1.5px solid rgba(91,91,214,.55); pointer-events: none; will-change: transform, opacity; box-shadow: 0 0 20px rgba(91,91,214,.42); }
.fx-flash { position: absolute; width: 76px; height: 76px; border-radius: 50%; pointer-events: none; will-change: transform, opacity; filter: blur(2px); mix-blend-mode: screen; background: radial-gradient(circle, rgba(150,190,255,.9) 0%, rgba(91,91,214,.55) 38%, rgba(14,116,144,.3) 60%, transparent 72%); }

/* 触感：按下轻微回弹，过渡更丝滑 */
.btn:active { transform: scale(.95); }
.mn-item:active, .topnav-link:active, .pill-tab:active, .cat-chip:active, .oa-group:active, .tag:active, .cn-item:active, .stat-card:active, .fab:active { transform: scale(.94); }
.card:active { transform: scale(.994); }

/* 视图切换丝滑过渡：整页淡出→淡入；切换期间抑制卡片各自淡入、关闭导航毛玻璃实时模糊，避免卡顿 */
/* 老电脑优化：整页位移淡入会让整个内容区每帧重新合成一次（大面积重绘），
   改成「纯透明度淡入」—— 只走合成层，几乎零成本，观感依然柔和顺滑。 */
.view-enter { animation: viewIn .2s var(--ease) both; will-change: opacity; }
@keyframes viewIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
.view-exit { animation: viewOut .12s var(--ease) both; will-change: opacity; }
@keyframes viewOut {
  from { opacity: 1; }
  to { opacity: 0; }
}
/* 切换期间：抑制卡片各自的入场动画，避免整页淡入时大量卡片同时动画造成掉帧/卡顿；首次进入页面（无 fx-animating）仍保留卡片动画 */
body.fx-animating .stat-card,
body.fx-animating .td-card,
body.fx-animating .cockpit-panel .card,
body.fx-animating .card--enter,
body.fx-animating .oa-group { animation: none !important; }
/* 切换期间：临时关闭导航毛玻璃实时模糊，避免每帧重算造成卡顿（顶部导航 + 移动端底部栏 + 项目侧边栏 全覆盖，否则整页动画时强模糊每帧重算会掉帧） */
body.fx-animating .mobile-nav,
body.fx-animating .topnav,
body.fx-animating .cockpit-nav { -webkit-backdrop-filter: none; backdrop-filter: none; }
body.theme-dark.fx-animating .topnav,
body.theme-dark.fx-animating .mobile-nav,
body.theme-dark.fx-animating .cockpit-nav { -webkit-backdrop-filter: none; backdrop-filter: none; }

/* =====================================================================
   深色主题（body.theme-dark）：深蓝近黑底 + 玻璃面板 + 浅色文字
   切换由顶栏「日/月」按钮 / 登录页浮动按钮触发，偏好存 localStorage
   ===================================================================== */
body.theme-dark {
  --bg: #0d1521;
  --bg-2: #14202f;
  --card: #16212f;
  --border: rgba(255,255,255,.10);
  --line: rgba(255,255,255,.07);
  --text: #e8eef6;
  --text-2: #a7b4c4;
  --text-3: #8b9bb0;
  --muted: #8593a4;
  --navy: #e9eef7;            /* 标题字统一翻成浅色 */
  --green-bg: rgba(22,163,74,.16);
  --amber-bg: rgba(217,119,6,.18);
  --red-bg: rgba(226,59,59,.16);
  --blue-bg: rgba(91,91,214,.20);
  /* 【深色文字色】以前这里只重定义了「底色」，彩色文字仍沿用浅色主题的深值，
     在深底上发闷看不清（典型：子项目卡片「当前：实施进展 X%」胶囊、状态标签）。
     统一提亮成柔和亮色：既看得清，也把深色下的彩色收敛成一套，不再五颜六色。
     ⚠ 少数「实心填充 + 白字」的位置靠后面的补丁单独锁回深色底，别删。 */
  --blue: #aab0ff;
  --green: #4ade80;
  --amber: #fbbf24;
  --red: #ff8a8a;
  --cyan: #5cc6f0;
  --gold: #f0b35a;
  --shadow: 0 1px 2px rgba(0,0,0,.4), 0 10px 28px rgba(0,0,0,.45);
  --shadow-lg: 0 14px 40px rgba(0,0,0,.55);
  --shadow-blue: 0 8px 22px rgba(91,91,214,.35);

  background-color: #0d1521;
  background-image:
    linear-gradient(rgba(255,255,255,.022) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.022) 1px, transparent 1px),
    radial-gradient(70vw 70vw at 88% -8%, rgba(14,116,144,.12) 0%, transparent 60%),
    radial-gradient(78vw 78vw at -10% 112%, rgba(91,91,214,.12) 0%, transparent 60%);
}
/* 流动极光在深色下降低存在感，避免过曝 */
body.theme-dark #bg-aurora::before,
body.theme-dark #bg-aurora::after { opacity: .22; }

/* 顶栏：深色玻璃 */
body.theme-dark .topnav {
  background: linear-gradient(180deg, rgba(22,34,50,.78), rgba(13,21,33,.55)), rgba(8,13,22,.6);
  -webkit-backdrop-filter: blur(56px) saturate(230%); backdrop-filter: blur(56px) saturate(230%);
  border-bottom: 1px solid rgba(255,255,255,.14);
  box-shadow: 0 1px 0 rgba(255,255,255,.1) inset, 0 12px 40px rgba(0,0,0,.5);
}
body.theme-dark .topnav-link:hover { background: rgba(91,91,214,.16); color: #fff; }

/* 主面板卡片：深色玻璃质感 */
body.theme-dark .card {
  background: linear-gradient(180deg, rgba(30,44,62,.82), rgba(20,30,44,.8));
  border: 1px solid rgba(255,255,255,.16);
  box-shadow: 0 1px 2px rgba(0,0,0,.5), 0 18px 46px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.1);
}

/* 玻璃浮层：搜索 / FAB菜单 / 快捷菜单 / 移动端菜单 / 驾驶舱目录 → 统一深色玻璃 */
body.theme-dark #search-results,
body.theme-dark .fab-menu,
body.theme-dark .qa-menu,
body.theme-dark .topnav-menu,
body.theme-dark .cockpit-nav {
  background: rgba(16,24,36,.8);
  -webkit-backdrop-filter: blur(30px) saturate(160%); backdrop-filter: blur(30px) saturate(160%);
  border: 1px solid rgba(255,255,255,.18);
  box-shadow: 0 26px 70px rgba(0,0,0,.6);
}

/* 导航条 / 首页 Hero：深色液态玻璃 */
body.theme-dark .mobile-nav,
body.theme-dark .dash-hero {
  background: linear-gradient(180deg, rgba(30,44,62,.66) 0%, rgba(18,28,42,.54) 55%, rgba(11,18,28,.46) 100%);
  border: 1px solid rgba(255,255,255,.2);
  box-shadow: 0 16px 50px rgba(0,0,0,.55), 0 1px 0 rgba(255,255,255,.16) inset, 0 -1px 2px rgba(0,0,0,.4) inset;
}
body.theme-dark .mobile-nav::before,
body.theme-dark .dash-hero::before {
  background: linear-gradient(180deg, rgba(255,255,255,.24), rgba(255,255,255,0));
}

/* 输入框 / 下拉 / 文本域 */
body.theme-dark input,
body.theme-dark select,
body.theme-dark textarea {
  background: #0f1925; color: var(--text);
  border: 1px solid rgba(255,255,255,.12);
}
body.theme-dark input:focus,
body.theme-dark select:focus,
body.theme-dark textarea:focus { border-color: var(--blue); box-shadow: 0 0 0 4px rgba(91,91,214,.22); }
body.theme-dark .topbar-search input { background: rgba(255,255,255,.08); }
body.theme-dark .topbar-search input:focus { background: rgba(255,255,255,.12); border-color: var(--blue); }

/* 表格 */
body.theme-dark th { background: #12202f; color: var(--text-2); border-bottom-color: rgba(255,255,255,.08); }
body.theme-dark td { border-bottom-color: rgba(255,255,255,.06); }
body.theme-dark tbody tr:hover { background: rgba(255,255,255,.04); }

/* 按钮（默认白底按钮翻深色；主色/金/危险按钮保持彩色） */
body.theme-dark .btn { background: #1a2738; color: var(--text); border-color: rgba(255,255,255,.12); }
body.theme-dark .btn:hover { background: #243349; border-color: rgba(255,255,255,.2); box-shadow: 0 6px 16px rgba(0,0,0,.35); }
body.theme-dark .btn-ghost { color: var(--text-2); }
body.theme-dark .btn-ghost:hover { background: rgba(255,255,255,.06); }
body.theme-dark .toggle-btn { background: rgba(255,255,255,.06); color: var(--text-2); border-color: rgba(255,255,255,.14); }

/* 图标按钮（铃铛等） */
body.theme-dark .topbar-icon-btn { background: rgba(255,255,255,.06); color: var(--text); border-color: rgba(255,255,255,.12); }
body.theme-dark .topbar-icon-btn:hover { border-color: var(--blue); color: #fff; }
body.theme-dark .nb-dot { border-color: #16212f; }

/* 弹窗 */
body.theme-dark .modal { background: #13202e; border-left: 1px solid rgba(255,255,255,.08); box-shadow: -18px 0 60px rgba(0,0,0,.5); }
body.theme-dark .modal-head { background: linear-gradient(135deg, rgba(91,91,214,.18), rgba(14,116,144,.12)); border-bottom-color: rgba(255,255,255,.08); }
body.theme-dark .modal-title { color: var(--text); }
body.theme-dark .notif-panel { background: rgba(16,24,36,.95); border: 1px solid rgba(255,255,255,.1); box-shadow: 0 20px 50px rgba(0,0,0,.55); }

/* 登录页 */
body.theme-dark .login-screen {
  background:
    radial-gradient(circle at 1px 1px, rgba(255,255,255,.05) 1px, transparent 0) 0 0 / 26px 26px,
    linear-gradient(135deg, #0d1521 0%, #0b1320 46%, #0e1a26 100%);
}
body.theme-dark .login-split { background: transparent; border: 0; box-shadow: none; backdrop-filter: none; }
body.theme-dark .login-box { background: rgba(255,255,255,.045); border-color: rgba(255,255,255,.12); box-shadow: 0 24px 60px rgba(0,0,0,.32); }
body.theme-dark .login-box::before, body.theme-dark .login-box::after { border-color: rgba(34,211,238,.42); }
body.theme-dark .login-aside { background:
  radial-gradient(circle at 1px 1px, rgba(255,255,255,.05) 1px, transparent 0) 0 0 / 60px 60px,
  linear-gradient(135deg, #171538 0%, #241f63 45%, #0b2f42 100%); }
/* 登录表单（新版带图标输入框）深色适配：默认写的 .78 白底在深色下太亮，这里换成半透明白 */
/* 深色下自动填充必须铺深色，否则会出现一块白底（浅色那条 inset 是 #fff） */
/* ⚠ 必须加 !important 才能压过 ui-b.css「补丁⑬」：
   `body.theme-dark input:not([type=checkbox]):not([type=radio]){background:#fff;color:#16203a;border:...}`
   那条是当初应反馈「深色下下拉/多选框看不清」而加的全局白底深字，**其他页面仍需要它**，
   但登录页是独立设计的玻璃卡片，套上白块很突兀，所以这里只对登录页开例外：
   背景透明（用外层 .lg-input 的半透明底）、文字转浅色、去掉多余边框。
   权重要害：ui-b.css 是 (0,3,2) 且后加载，普通写法（0,2,2）根本压不过。 */
body.theme-dark .lg-input input {
  background: transparent !important;
  color: #e8eef6 !important;
  border: none !important;
  box-shadow: none !important;
}
body.theme-dark .lg-input input:-webkit-autofill,
body.theme-dark .lg-input input:-webkit-autofill:hover,
body.theme-dark .lg-input input:-webkit-autofill:focus,
body.theme-dark .lg-input input:-webkit-autofill:active {
  -webkit-text-fill-color: #e8eef6 !important;
  -webkit-box-shadow: 0 0 0 1000px #131f2e inset !important;
  transition: background-color 9999s ease-in-out 0s !important;
  caret-color: #e8eef6 !important;
}
body.theme-dark .lg-input { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.14); }
body.theme-dark .lg-input:focus-within { background: rgba(255,255,255,.08); border-color: rgba(129,140,248,.55); box-shadow: 0 0 0 3px rgba(129,140,248,.16); }
body.theme-dark .lg-input svg { color: var(--muted); }
body.theme-dark .lg-input input::placeholder { color: var(--muted); }
body.theme-dark .lg-label { color: var(--text-2); }
body.theme-dark .lg-ck { color: var(--text-2); }
body.theme-dark .lg-row a { color: #67e8f9; }
/* 登录页浮动切换按钮 */
.theme-toggle-float {
  position: fixed; top: 16px; right: 16px; z-index: 120;
  width: 42px; height: 42px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 18px; cursor: pointer;
  background: rgba(30,27,75,.18); border: 1px solid rgba(30,27,75,.2); color: var(--navy);
  box-shadow: 0 6px 18px rgba(0,0,0,.18); transition: all .2s var(--ease);
}
.theme-toggle-float:hover { background: rgba(30,27,75,.28); transform: translateY(-1px); }
body.theme-dark .theme-toggle-float { background: rgba(255,255,255,.1); border-color: rgba(255,255,255,.18); color: #fff; }

/* 通用浅色块 → 深色半透明（覆盖写死的 #fff / 浅灰 / 浅色底） */
body.theme-dark .oa-tag { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.12); color: var(--text-2); }
body.theme-dark .oa-tag-trip { background: rgba(22,163,74,.16); border-color: rgba(22,163,74,.32); }
body.theme-dark .ann-row:hover { background: rgba(255,255,255,.05); }
body.theme-dark .remind-banner { background: rgba(217,119,6,.16); border-color: rgba(217,119,6,.32); }
body.theme-dark .remind-banner.warn-red { background: rgba(226,59,59,.16); border-color: rgba(226,59,59,.32); }
body.theme-dark .remind-banner .rb-item { background: rgba(255,255,255,.1); border-color: rgba(255,255,255,.18); color: var(--text); }
body.theme-dark .paused-banner { background: rgba(255,255,255,.06); color: var(--text-2); border-color: rgba(255,255,255,.1); }
body.theme-dark .overdue-banner { background: rgba(226,59,59,.16); color: #ff9a9a; border-color: rgba(226,59,59,.32); }
body.theme-dark .notice-slate { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.1); color: var(--text-2); }
body.theme-dark .remind-badge.warn-amber { background: rgba(217,119,6,.2); color: #f0b35a; border-color: rgba(217,119,6,.32); }
body.theme-dark .reminder-center .rc-tab { background: rgba(255,255,255,.06); color: var(--text-2); }
body.theme-dark .reminder-center .rc-tab:hover { background: rgba(91,91,214,.18); color: #fff; }
body.theme-dark .reminder-center .rc-tab-count { background: rgba(255,255,255,.1); color: var(--text-2); }
body.theme-dark .reminder-center .rc-line.clickable { background: transparent; border-color: transparent; border-bottom-color: var(--line); }
body.theme-dark .reminder-center .rc-line.clickable:hover { background: rgba(255,255,255,.05); }
body.theme-dark .node-line { background: rgba(255,255,255,.04); }
body.theme-dark .node-line.warning { background: rgba(217,119,6,.16); }
body.theme-dark .node-line.overdue { background: rgba(226,59,59,.16); }
body.theme-dark .btn-warn { background: rgba(217,119,6,.18); border-color: rgba(217,119,6,.36); color: #f0b35a; }
body.theme-dark .btn-warn:hover { background: rgba(217,119,6,.28); }
body.theme-dark .cust-group { background: var(--card); border-color: rgba(255,255,255,.08); }
body.theme-dark .cust-group-optional { background: rgba(255,255,255,.03); }
body.theme-dark .tag-gray { background: rgba(255,255,255,.08); color: var(--text-2); }
body.theme-dark .tag-gold { background: rgba(217,119,6,.16); color: #f0b35a; }
/* 深色：今日办公动态紧凑条 */
body.theme-dark .att-donut-txt { fill: var(--text); }
body.theme-dark .att-donut-cap .adc-val { color: var(--text); }
body.theme-dark .att-pill { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.1); }
body.theme-dark .att-pill-tx b { color: var(--text); }
body.theme-dark .tag-cyan { background: rgba(14,116,144,.16); color: #5cc6f0; }
/* 深色：蓝标签改淡紫（原 #5b5bd6 暗蓝在深底上发闷），子项目/进行中/投标转入等都走这条 */
body.theme-dark .tag-blue { background: rgba(139,92,246,.18); color: #c4b5fd; }
body.theme-dark .att-chip { background: rgba(129,140,248,.14); border-color: rgba(129,140,248,.28); color: #aab0ff; }
body.theme-dark .att-chip:hover { background: rgba(91,91,214,.2); }
body.theme-dark .pc-renew-amber { background: rgba(217,119,6,.16); color: #f0b35a; border-color: rgba(217,119,6,.32); }
body.theme-dark .pc-renew-red { background: rgba(226,59,59,.16); color: #ff9a9a; border-color: rgba(226,59,59,.32); }
/* 老项目（深色） */
body.theme-dark .pc-legacy-wait { background: rgba(217,119,6,.16); color: #f0b35a; border-color: rgba(217,119,6,.32); }
body.theme-dark .pc-legacy-wait.is-red { background: rgba(226,59,59,.16); color: #ff9a9a; border-color: rgba(226,59,59,.32); }
body.theme-dark .tag-legacy { background: rgba(240,179,90,.14); color: #f0b35a; border-color: rgba(240,179,90,.34); }
body.theme-dark .btn-legacy { color: #f0b35a; border-color: rgba(240,179,90,.4); }
body.theme-dark .btn-legacy:hover { background: rgba(240,179,90,.14); border-color: rgba(240,179,90,.62); color: #f7cd85; }
body.theme-dark .project-card.pc-legacy { border-color: rgba(240,179,90,.24); }
body.theme-dark .project-card.pc-legacy:hover { border-color: rgba(240,179,90,.45); }
body.theme-dark .lg-hint { background: rgba(240,179,90,.1); border-color: rgba(240,179,90,.24); color: #e2d3bd; }
body.theme-dark .check-block { background: rgba(217,119,6,.12); border-color: rgba(217,119,6,.3); }
body.theme-dark .bg-gold { background: rgba(217,119,6,.16); }
body.theme-dark .bg-navy { background: rgba(91,91,214,.2); }
body.theme-dark .bg-purple { background: rgba(124,58,237,.18); }
body.theme-dark .bg-cyan { background: rgba(14,116,144,.18); }
body.theme-dark .qa-menu .qa-grid .btn { background: rgba(91,91,214,.12); color: var(--text); }
body.theme-dark .qa-menu .qa-grid .btn:hover { background: rgba(91,91,214,.22); }
body.theme-dark .qa-menu .qa-grid .btn:disabled { background: rgba(255,255,255,.04); color: var(--text-3); }
body.theme-dark .rp-read { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.1); }
body.theme-dark .slider { background: rgba(255,255,255,.18); }

/* 深色补充（第二轮）：周期导航条 / 通用胶囊导航 / OA 分组胶囊 / 提醒中心容器 / 统计卡 */
/* 周期切换「本月·上月·本季度…」与通用胶囊导航：白底翻深色，文字提亮 */
body.theme-dark .period-tabs { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.12); }
body.theme-dark .period-tab { color: var(--text-2); }
body.theme-dark .period-tab:hover { background: rgba(91,91,214,.18); color: #fff; }
body.theme-dark .period-tab.active { background: var(--grad); color: #fff; }
body.theme-dark .pill-tab { background: rgba(255,255,255,.06); color: var(--text-2); border-color: rgba(255,255,255,.12); }
body.theme-dark .pill-tab:hover { border-color: var(--blue); color: #fff; }
body.theme-dark .pill-tab.active { background: var(--grad); color: #fff; }

/* OA 办公动态：分组胶囊（人事考勤 / 行政事务）+ 外出/请假标签 */
body.theme-dark .oa-group { background: rgba(255,255,255,.06); color: var(--text-2); border-color: rgba(255,255,255,.12); }
body.theme-dark .oa-group:hover { border-color: var(--gc); color: var(--gc); }
body.theme-dark .oa-group.active { background: var(--gc); color: #fff; }
body.theme-dark .oa-tag-out { background: rgba(91,91,214,.16); border-color: rgba(91,91,214,.34); }
body.theme-dark .oa-tag-out b { color: #a5b4fc; }
body.theme-dark .oa-tag-lev { background: rgba(217,119,6,.16); border-color: rgba(217,119,6,.34); }
body.theme-dark .oa-tag-lev b { color: #f0b35a; }
body.theme-dark .oa-tag i, body.theme-dark .oa-tag em { color: var(--text-2); }
body.theme-dark .oa-tag-empty { color: var(--text-2); }

/* 提醒中心：白盒子（容器 + 头部）是看不清根因，整体翻深色玻璃 */
body.theme-dark .reminder-center { background: rgba(16,24,36,.84); border-color: rgba(255,255,255,.1); box-shadow: 0 16px 40px rgba(0,0,0,.4); }
body.theme-dark .reminder-center .rc-head { background: linear-gradient(135deg, rgba(255,255,255,.07), rgba(255,255,255,.03)); border-bottom-color: rgba(255,255,255,.08); }
body.theme-dark .rc-toggle { color: var(--text-2); }
body.theme-dark .reminder-center .rc-cat { border-top-color: rgba(255,255,255,.08); }
body.theme-dark .reminder-center .rc-line { color: var(--text-2); }
body.theme-dark .reminder-center .rc-note { color: var(--text-2); }
body.theme-dark .reminder-center .rc-cat-count { background: rgba(255,255,255,.14); color: var(--text); }

/* 统计卡：角落浅蓝光斑改深色；底色与卡片统一；次要文字提亮 */
body.theme-dark .stat-card { background: linear-gradient(180deg, rgba(28,40,56,.95), rgba(20,30,44,.95)); border-color: rgba(255,255,255,.08); }
body.theme-dark .stat-card::after { background: radial-gradient(circle, rgba(91,91,214,.22), transparent 70%); opacity: .5; }
body.theme-dark .stat-foot { color: var(--text-2); }
body.theme-dark .stat-value .unit { color: var(--text-2); }

/* 深色补充（第三轮）：客户库 / 审批中心 遗漏的白底块 → 深色玻璃 */
/* 客户库：客户卡片 + 联系人行 + 查重提示 + 新建表单行 + 规则项 */
body.theme-dark .cust-card {
  background: linear-gradient(180deg, rgba(30,44,62,.82), rgba(20,30,44,.8));
  border-color: rgba(255,255,255,.16);
  box-shadow: 0 1px 2px rgba(0,0,0,.5), 0 18px 46px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.1);
}
body.theme-dark .cust-card:hover { box-shadow: 0 1px 2px rgba(0,0,0,.5), 0 24px 56px rgba(0,0,0,.5); border-color: rgba(91,91,214,.4); }
body.theme-dark .ct-line { background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.06); }
body.theme-dark .cc-tip { color: #f0b35a; }
body.theme-dark .tip-line { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
body.theme-dark .ct-form { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.1); }
body.theme-dark .rule-item { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }

/* 审批中心：进展连线 / 当前审批人条 / 抄送胶囊 / 审批意见 / 申请内容 / 明细表 / 附件 */
body.theme-dark .step-line { background: rgba(255,255,255,.12); }
body.theme-dark .ap-progress { background: rgba(91,91,214,.12); border-color: rgba(91,91,214,.3); }
body.theme-dark .ap-cc { background: rgba(91,91,214,.16); border-color: rgba(91,91,214,.34); color: #c0b9ff; }
body.theme-dark .ap-toggle { color: #8b8bff; }
body.theme-dark .ap-toggle:hover { color: #c0b9ff; }
body.theme-dark .ap-detail { border-top-color: rgba(255,255,255,.12); }
body.theme-dark .ap-summary-head { color: rgba(255,255,255,.5); }
body.theme-dark .ap-prog-label { color: rgba(255,255,255,.5); }
body.theme-dark .ap-prog-node { color: rgba(255,255,255,.55); }
body.theme-dark .ap-prog-node.done { color: #4ade80; }
body.theme-dark .ap-prog-node.reject { color: #f87171; }
body.theme-dark .ap-prog-node.cur { color: #8b8bff; }
body.theme-dark .ap-prog-arrow { color: rgba(255,255,255,.2); }
body.theme-dark .ap-prog-me { color: #8b8bff; }
body.theme-dark .ap-comments { background: rgba(255,255,255,.04); border-left-color: rgba(255,255,255,.12); }
body.theme-dark .ap-content { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
body.theme-dark .mini-table { background: rgba(20,30,44,.6); }
body.theme-dark .mini-table th { background: #12202f; }
body.theme-dark .ap-attach-item { background: rgba(255,255,255,.06); border-color: rgba(91,91,214,.34); color: #c0b9ff; }
body.theme-dark .ap-attach-item:hover { background: rgba(91,91,214,.16); }

/* 深色补充（第四轮）：全站剩余浅色块清零 */
/* 弹窗：底部按钮条（提醒弹窗"我知道了"那条白底就是它）+ 表单分组 + 提示条 */
body.theme-dark .modal-foot { background: transparent; border-top-color: rgba(255,255,255,.08); }
body.theme-dark .form-group-card { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
body.theme-dark .modal-hint { background: rgba(91,91,214,.12); border-color: rgba(91,91,214,.3); color: var(--text-2); }
/* 弹窗内多选 / 下拉面板（服务类型多选等） */
body.theme-dark .svc-ms-box { background: rgba(255,255,255,.05); }
body.theme-dark .svc-tag { background: rgba(91,91,214,.16); color: #c0b9ff; }
body.theme-dark .svc-ms-panel { background: #13202e; border-color: rgba(255,255,255,.12); box-shadow: 0 12px 32px rgba(0,0,0,.5); }
body.theme-dark .svc-ms-opt:hover { background: rgba(91,91,214,.15); }
/* 提醒弹窗列表：已读胶囊 / 删除按钮 */
body.theme-dark .rp-read-pill { background: rgba(255,255,255,.1); color: var(--text-2); }
body.theme-dark .rp-hidden-note { color: #ffcf7a; background: rgba(255,184,0,.12); border-color: rgba(255,184,0,.3); }
body.theme-dark .rp-del { background: rgba(226,59,59,.12); border-color: rgba(226,59,59,.4); }
/* 快捷菜单里的警示按钮 */
body.theme-dark .qa-menu .qa-grid .btn-warn { background: rgba(217,119,6,.18); border-color: rgba(217,119,6,.36); color: #f0b35a; }
/* 项目 / 首页零散浅色块 */
body.theme-dark .notice { background: rgba(255,255,255,.05); }
body.theme-dark .node-badge.warning { background: rgba(217,119,6,.22); color: #f0b35a; }
body.theme-dark .node-badge.overdue { background: rgba(226,59,59,.22); color: #ff9a9a; }
body.theme-dark .pc-restricted-tag { background: rgba(91,91,214,.16); border-color: rgba(91,91,214,.34); color: #c0b9ff; }
body.theme-dark .project-card.pc-terminated { background: rgba(255,255,255,.03); }
body.theme-dark .pill-tab-danger { background: rgba(226,59,59,.14); border-color: rgba(226,59,59,.35); color: #ff9a9a; }
body.theme-dark .progress { background: rgba(255,255,255,.1); }
body.theme-dark .rj-progress-bar { background: rgba(255,255,255,.1); }
body.theme-dark .step-dot { background: rgba(255,255,255,.12); color: var(--text-2); }
/* 通知面板未读项 / 分类胶囊 */
body.theme-dark .notif-item.unread { background: rgba(91,91,214,.08); }
body.theme-dark .cat-chip { background: rgba(255,255,255,.06); }
/* 台账 / 明细卡 */
body.theme-dark .dl-card { background: rgba(255,255,255,.03); border-color: rgba(255,255,255,.08); }
body.theme-dark .ai-group { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
body.theme-dark .dl-text { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
/* 只读输入框 / 团队分组 / 客户开票盒 / 对比列 / 空态 */
body.theme-dark input[readonly] { background: rgba(255,255,255,.06); color: var(--text-2); border-color: rgba(255,255,255,.1); }
body.theme-dark .team-group { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
body.theme-dark .cust-invoice-box { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
body.theme-dark .inv-fill-bar.ok { background: rgba(74,222,128,.1); border-color: rgba(74,222,128,.26); }
body.theme-dark .inv-fill-bar.ok .ifb-t { color: #86efac; }
body.theme-dark .inv-fill-bar.warn { background: rgba(232,178,122,.1); border-color: rgba(232,178,122,.26); }
body.theme-dark .inv-fill-bar.warn .ifb-t { color: #e8b27a; }
body.theme-dark .cmp-col { background: rgba(30,44,62,.6); border-color: rgba(255,255,255,.1); }
body.theme-dark .cmp-h { background: rgba(255,255,255,.06); }
body.theme-dark .pd-grid .empty, body.theme-dark .cockpit-panel .empty { background: rgba(255,255,255,.03); }
/* 系统维护：改动记录 */
body.theme-dark .cl-item { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
body.theme-dark .cl-date { background: rgba(255,255,255,.08); }
/* OA 办公列表项 / 公告行 */
body.theme-dark .oa-item { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
body.theme-dark .oa-ann { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
/* 时间线（本段在文件后半段，会覆盖前面同名规则 —— 改时间线样式时 1490 行附近那组也要同步改） */
body.theme-dark .timeline::before { background: linear-gradient(90deg, rgba(148,163,184,.12), rgba(148,163,184,.34) 22%, rgba(148,163,184,.34) 78%, rgba(148,163,184,.12)); }
body.theme-dark .tl-dot { background: rgba(255,255,255,.08); color: var(--text-2); border-color: rgba(255,255,255,.18); }
body.theme-dark .chip-overdue { background: rgba(226,59,59,.16); color: #ff9a9a; border-color: rgba(226,59,59,.32); }
body.theme-dark .chip-warn { background: rgba(129,140,248,.18); color: #aab0ff; border-color: rgba(129,140,248,.34); }
/* 成果归档操作条（注意：本段在文件后半段，会覆盖前面同名规则 —— 改样式时两处都要同步） */
body.theme-dark .archive-action { background: rgba(255,255,255,.04); }
body.theme-dark .archive-action.is-unarchived { background: linear-gradient(135deg, rgba(129,140,248,.17) 0%, rgba(129,140,248,.05) 100%); border-color: rgba(129,140,248,.34); }
body.theme-dark .archive-action.is-unarchived .aa-title { color: #aab0ff; }
/* 滚动条 / Toast 提示 */
body.theme-dark ::-webkit-scrollbar-thumb { background: rgba(255,255,255,.16); }
body.theme-dark ::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,.28); }
body.theme-dark .toast { background: #1a2738; color: var(--text); box-shadow: 0 14px 40px rgba(0,0,0,.5); }

/* 深色补充（第五轮）：首页商机按钮 / 通知公告 NEW 徽标 → 统一适配深色玻璃 */
body.theme-dark .td-op { background: rgba(255,255,255,.06); color: var(--text-2); border-color: rgba(255,255,255,.14); }
body.theme-dark .td-op:hover { border-color: var(--blue); color: #c0b9ff; }
body.theme-dark .td-op.on { background: rgba(217,119,6,.16); border-color: rgba(217,119,6,.36); color: #f0b35a; }
body.theme-dark .td-op-go { background: var(--blue); border-color: var(--blue); color: #fff; }
body.theme-dark .td-op-go:hover { background: #6366f1; border-color: #6366f1; color: #fff; }
body.theme-dark .ann-new { background: rgba(226,59,59,.22); color: #ff9a9a; border-color: rgba(226,59,59,.42); }

/* 滚动条 */
body.theme-dark ::-webkit-scrollbar-thumb { background: #2a3a4f; }
body.theme-dark ::-webkit-scrollbar-thumb:hover { background: #3a4d66; }

/* ===== 资金往来明细页（a16） ===== */
.ta-right { text-align: right !important; }
.money-detail-card { padding: 18px; }
.md-summary { display: flex; gap: 14px; flex-wrap: wrap; margin-bottom: 16px; }
.md-summary-item { flex: 1; min-width: 150px; background: var(--bg-2); border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; display: flex; flex-direction: column; gap: 4px; }
.md-label { font-size: 12px; color: var(--text-2); }
.md-num { font-size: 24px; font-weight: 700; color: var(--navy); font-variant-numeric: tabular-nums; }
.amt { font-variant-numeric: tabular-nums; font-weight: 600; white-space: nowrap; }
.lk { color: var(--blue); cursor: pointer; font-weight: 600; }
.lk:hover { text-decoration: underline; }
body.theme-dark .lk { color: #aab0ff; }
.table-wrap { overflow-x: auto; border-radius: 10px; border: 1px solid var(--line); }
.tbl tfoot td { font-weight: 700; background: #f7f9fc; border-top: 2px solid var(--line); }
.tbl tfoot .amt { color: var(--red); }

/* 回款账龄分析 */
.ar-summary-card { margin-bottom: 16px; }
.ar-summary-row { display: flex; gap: 14px; flex-wrap: wrap; margin-bottom: 18px; }
.ar-kpi { flex: 1; min-width: 150px; background: var(--bg-2); border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; display: flex; flex-direction: column; gap: 4px; }
.ar-kpi b { font-size: 24px; font-weight: 700; color: var(--navy); font-variant-numeric: tabular-nums; }
.ar-kpi span { font-size: 12px; color: var(--text-2); }
.ar-red-kpi { background: rgba(220,38,38,.08); border-color: rgba(220,38,38,.25); }
.ar-red-kpi b { color: var(--red); }
/* 账龄分桶改成 5 档（0-30 / 31-60 / 61-90 / 91-180 / 180天以上），格子跟着变 5 列 */
.ar-buckets { display: grid; grid-template-columns: repeat(5, 1fr); gap: 14px; }
/* 起算口径切换（按开票日 / 按成果提交日） */
.ar-basis-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; padding-bottom: 12px; border-bottom: 1px dashed var(--border); }
.ar-basis-tabs { flex: none; }
.ar-bucket { background: #fff; border: 1px solid var(--line); border-radius: 12px; padding: 14px; }
.ar-bucket.ar-red { background: rgba(220,38,38,.06); border-color: rgba(220,38,38,.3); }
.ar-bucket-label { font-size: 13px; color: var(--text-2); margin-bottom: 10px; font-weight: 600; }
.ar-bucket.ar-red .ar-bucket-label { color: var(--red); }
.ar-bar-wrap { height: 10px; background: var(--bg-2); border-radius: 6px; overflow: hidden; margin-bottom: 10px; }
.ar-bar { height: 100%; background: linear-gradient(90deg, #5b5bd6, #7c8cf0); border-radius: 6px; transition: width .4s ease; }
.ar-bar-red { background: linear-gradient(90deg, #dc2626, #f05656); }
.ar-bucket-val { font-size: 18px; font-weight: 700; color: var(--navy); font-variant-numeric: tabular-nums; }
.ar-bucket.ar-red .ar-bucket-val { color: var(--red); }
.ar-tag { display: inline-block; padding: 3px 10px; border-radius: 10px; font-size: 12px; font-weight: 600; }
.ar-b0 { background: #e8f0ff; color: #5b5bd6; }
.ar-b1 { background: #fff3e0; color: #d98a00; }
.ar-b2 { background: #fff0e0; color: #d96600; }
.ar-b3 { background: rgba(220,38,38,.12); color: #dc2626; }
.ar-b4 { background: rgba(220,38,38,.2); color: #b91c1c; font-weight: 700; }
.ar-nodes { font-size: 12.5px; color: var(--text-2); max-width: 280px; }

/* 投标复盘看板 */
.br-kpis { margin-bottom: 16px; }
.br-kpi { padding: 16px; text-align: center; }
.br-kpi-num { font-size: 28px; font-weight: 700; color: var(--navy); font-variant-numeric: tabular-nums; }
.br-kpi-lbl { font-size: 12px; color: var(--text-2); margin-top: 4px; }
.c-gold { color: var(--gold) !important; }
.br-donut-wrap { display: flex; align-items: center; gap: 22px; padding: 8px 4px; }
.br-donut-legend { font-size: 14px; color: var(--text); }
.br-donut-legend b { color: var(--navy); font-size: 18px; }
.br-area-list { display: flex; flex-direction: column; gap: 10px; padding: 4px 2px; }
.br-area-row { display: grid; grid-template-columns: 110px 1fr 150px; align-items: center; gap: 10px; }
.br-area-name { font-size: 13px; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.br-area-barwrap { height: 14px; background: var(--bg-2); border-radius: 8px; overflow: hidden; }
.br-area-bar { height: 100%; background: linear-gradient(90deg, #b8860b, #d2a93a); border-radius: 8px; transition: width .4s ease; }
.br-area-num { font-size: 12.5px; color: var(--text-2); text-align: right; }
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }

/* 深色主题适配 */
body.theme-dark .md-summary-item { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.1); }
body.theme-dark .md-num { color: var(--navy); }
body.theme-dark .tbl tfoot td { background: rgba(255,255,255,.05); border-top-color: rgba(255,255,255,.16); }
body.theme-dark .topbar-back { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.16); color: var(--navy); }
body.theme-dark .topbar-back:hover { background: rgba(91,91,214,.16); border-color: var(--blue); }

/* ==================== 工资条（a30） ==================== */
.table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.py-table { width: 100%; border-collapse: collapse; font-size: 13px; min-width: 1520px; }
.py-table th, .py-table td { padding: 10px 10px; text-align: center; vertical-align: middle; white-space: nowrap; border-bottom: 1px solid var(--line); }
.py-table th { color: var(--text-2); font-weight: 700; background: var(--bg-2); position: sticky; top: 0; }
.py-table td:first-child, .py-table th:first-child { text-align: center; }
.py-table tbody tr:hover { background: var(--bg-2); }
.py-assess { text-align: center; }
.input-xs { padding: 6px 8px; font-size: 12.5px; border-radius: 8px; border: 1px solid var(--border); background: #fff; color: var(--text); width: 100%; box-sizing: border-box; }
.py-op { white-space: nowrap; }
.py-edit { text-align: center; -moz-appearance: textfield; appearance: textfield; }
.py-cur { position: relative; display: inline-block; }
.py-cur::before { content: '¥'; position: absolute; left: 7px; top: 50%; transform: translateY(-50%); font-size: 12px; color: var(--muted); pointer-events: none; z-index: 1; }
.py-cur .input { padding-left: 18px; text-align: center; }
.py-edit::-webkit-outer-spin-button, .py-edit::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.modal input[type="number"] { -moz-appearance: textfield; appearance: textfield; }
.modal input[type="number"]::-webkit-outer-spin-button, .modal input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
input.py-ded { color: #e5484d !important; }
body.theme-dark input.py-ded { color: #ff6b6e !important; }
.py-sub { font-size: 11px; color: var(--muted); margin-top: 3px; white-space: nowrap; text-align: center; }
.py-ded-tag { font-size: 11.5px; color: var(--muted); white-space: nowrap; }
.py-link { cursor: pointer; }
/* 工资条：工资总额（自动计算）—— 只读，加粗描金醒目 + 底纹，一眼看出是系统算的、不用手填 */
.py-total-auto { text-align: center; font-weight: 800; font-size: 15px; color: var(--gold, #b45309); background: linear-gradient(90deg, rgba(217,119,6,.10), rgba(217,119,6,.04)); border-color: rgba(217,119,6,.45) !important; cursor: not-allowed; letter-spacing: .3px; }
body.theme-dark .py-total-auto { color: #fbbf24; background: linear-gradient(90deg, rgba(251,191,36,.14), rgba(251,191,36,.05)); border-color: rgba(251,191,36,.4) !important; }
/* 考勤：打卡点坐标校准区块 */
.att-calib-block { background: linear-gradient(135deg, rgba(91,91,214,.07), rgba(91,91,214,.02)); border: 1px dashed rgba(91,91,214,.45); border-radius: 12px; padding: 14px; }
.att-calib { line-height: 1.75; }
.att-calib b { color: var(--text); }
#att-loc { line-height: 1.7; }
.py-link:hover { color: var(--blue); text-decoration: underline; }
.py-total-in { font-weight: 700; text-align: center; border-color: color-mix(in srgb, var(--blue) 35%, var(--border)); }
.ap-group-head { display: flex; align-items: center; gap: 10px; margin: 18px 0 12px; padding: 10px 14px; background: var(--card); border: 1px solid var(--border); border-radius: 12px; }
.ap-group-head .agh-n { font-size: 12.5px; color: var(--muted); flex: 1; }
body.theme-dark .ap-group-head { background: var(--card); border-color: rgba(255,255,255,.08); }
/* 审批中心：一行一个模块，模块后面直接放「一键审批」 */
.ap-mod { padding: 0; overflow: hidden; }
.ap-mod-head { display: flex; align-items: center; gap: 12px; padding: 14px 18px; cursor: pointer; transition: background .18s; }
.ap-mod-head:hover { background: var(--bg-2); }
.ap-mod-arrow { display: inline-block; font-size: 19px; line-height: 1; color: var(--muted); transition: transform .2s; }
.ap-mod-head.open .ap-mod-arrow { transform: rotate(90deg); }
.ap-mod-name { font-size: 15px; font-weight: 800; color: var(--text); }
.ap-mod-n { flex: 1; font-size: 12.5px; color: var(--muted); }
.ap-mod-body { padding: 0 18px 16px; border-top: 1px solid var(--line); }
.ap-mod-body .ap-grid { padding-top: 14px; }
.py-emp-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; padding: 6px 2px 2px; }
.py-big { font-size: 22px; font-weight: 800; color: var(--navy); margin-top: 2px; font-variant-numeric: tabular-nums; }
.py-detail-head { text-align: center; padding: 6px 0 18px; border-bottom: 1px dashed var(--line); margin-bottom: 16px; }
.py-total-label { color: var(--text-2); font-size: 13px; }
.py-total { font-size: 34px; font-weight: 900; color: var(--navy); letter-spacing: .5px; font-variant-numeric: tabular-nums; }
.py-detail-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px 18px; }
.py-detail-item { background: var(--bg-2); border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; }
.py-dv { font-size: 16px; font-weight: 700; color: var(--text); margin-top: 4px; font-variant-numeric: tabular-nums; }
.py-calc-note { margin-top: 16px; padding: 12px 14px; background: rgba(91,91,214,.06); border: 1px solid rgba(91,91,214,.16); border-radius: 12px; font-size: 12.5px; color: var(--text-2); line-height: 1.7; }
.seg { display: inline-flex; background: var(--bg-2); border: 1px solid var(--line); border-radius: 999px; padding: 4px; gap: 4px; }
.seg-btn { border: none; background: transparent; padding: 7px 18px; border-radius: 999px; font-size: 13px; font-weight: 700; color: var(--text-2); cursor: pointer; transition: all .2s; }
.seg-btn.active { background: #fff; color: var(--navy); box-shadow: 0 2px 8px rgba(0,0,0,.08); }
.pill { display: inline-flex; align-items: center; padding: 5px 13px; border-radius: 999px; font-size: 12.5px; font-weight: 700; background: var(--bg-2); color: var(--text-2); border: 1px solid var(--line); }
.pill-amber { background: var(--amber-bg); color: var(--amber); border-color: transparent; }
.pill-green { background: var(--green-bg); color: var(--green); border-color: transparent; }
@media (max-width: 760px) { .py-emp-grid { grid-template-columns: repeat(2, 1fr); } .py-detail-grid { grid-template-columns: repeat(2, 1fr); } }

/* 工资条暗色适配 */
body.theme-dark .py-table th { background: rgba(255,255,255,.05); }
body.theme-dark .py-table tbody tr:hover { background: rgba(255,255,255,.04); }
body.theme-dark .input-xs { background: #13202e; border-color: rgba(255,255,255,.12); color: var(--text); }
body.theme-dark .py-detail-item { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.08); }
body.theme-dark .py-dv { color: var(--text); }
body.theme-dark .py-total { color: #fff; }
body.theme-dark .seg { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.12); }
body.theme-dark .seg-btn.active { background: rgba(91,91,214,.22); color: #fff; }
body.theme-dark .py-calc-note { background: rgba(91,91,214,.1); border-color: rgba(91,91,214,.28); color: var(--text-2); }

/* =====================================================================
   a42 整体视觉精修：科技感 + 流畅度 + 排版清晰（纯增量覆盖，不改旧规则）
   ===================================================================== */

/* 1) 顶部导航：底部一条蓝→青渐变光带（科技感点睛），并柔化投影 */
.topnav::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px;
  background: linear-gradient(90deg, transparent 2%, rgba(91,91,214,.55) 18%, rgba(14,116,144,.75) 50%, rgba(91,91,214,.55) 82%, transparent 98%);
  opacity: .75; pointer-events: none;
}

/* 2) 可点击卡片：hover 微浮起 + 边框泛蓝（把「可点」视觉化，更直觉） */
.card[onclick] { cursor: pointer; }
.card[onclick]:hover {
  transform: translateY(-2px); border-color: rgba(91,91,214,.32);
  box-shadow: 0 2px 4px rgba(30,27,75,.05), 0 22px 46px rgba(30,27,75,.12), 0 0 0 4px rgba(91,91,214,.06), inset 0 1px 0 rgba(255,255,255,1);
}
.card[onclick]:active { transform: translateY(0); transition-duration: .08s; }

/* 3) 按钮：顶部内高光 + 按压反馈，主按钮带微光晕 */
.btn { transition: all .18s var(--ease); position: relative; }
.btn:active { transform: translateY(1px) scale(.985); }
.btn-primary { box-shadow: var(--shadow-blue), inset 0 1px 0 rgba(255,255,255,.28); }
.btn-primary:hover { box-shadow: 0 12px 28px rgba(91,91,214,.38), inset 0 1px 0 rgba(255,255,255,.28); }
.btn-gold { box-shadow: 0 8px 20px rgba(245,158,11,.28), inset 0 1px 0 rgba(255,255,255,.3); }
.btn-danger { box-shadow: 0 8px 20px rgba(226,59,59,.26), inset 0 1px 0 rgba(255,255,255,.22); }

/* 4) 表格：表头更挺拔（加宽字距 + 加粗底线），内容斑马纹极淡、数字等宽 */
th { letter-spacing: .04em; border-bottom: 2px solid #e2e9f3; font-weight: 700; }
tbody tr:nth-child(even) { background: rgba(244,247,252,.55); }
tbody tr:hover { background: #eef5ff; }
td b { font-variant-numeric: tabular-nums; }
body.theme-dark th { border-bottom-color: rgba(255,255,255,.1); }
body.theme-dark tbody tr:nth-child(even) { background: rgba(255,255,255,.02); }
body.theme-dark tbody tr:hover { background: rgba(91,91,214,.1); }

/* 5) 焦点可见环：键盘/点击聚焦时有清晰蓝环（精致且清晰） */
a:focus-visible, button:focus-visible, [onclick]:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible {
  outline: 2px solid rgba(91,91,214,.65); outline-offset: 2px; border-radius: 8px;
}
input:focus-visible, select:focus-visible, textarea:focus-visible { outline: none; } /* 输入框保持原生阴影高亮 */

/* 6) 页头渐变竖条：加光晕，标题层级更醒目 */
.view-head::before { box-shadow: 0 0 12px rgba(91,91,214,.5), 0 0 0 4px rgba(91,91,214,.1); }
.modal-title::before { box-shadow: 0 0 10px rgba(91,91,214,.45), 0 0 0 4px rgba(91,91,214,.1); }

/* 7) 「加载中…」呼吸感 shimmer：不再死气沉沉 */
.empty { position: relative; overflow: hidden; }
.empty::after {
  content: ''; position: absolute; top: 0; bottom: 0; left: -40%; width: 34%;
  background: linear-gradient(100deg, transparent, rgba(91,91,214,.06), transparent);
  animation: emptyShimmer 1.6s var(--ease) infinite; pointer-events: none;
}
@keyframes emptyShimmer { to { left: 120%; } }

/* 8) 标签：统一微立体（内高光） */
.tag { box-shadow: inset 0 1px 0 rgba(255,255,255,.45); }

/* 9) 区块标题竖条与名称：与整体渐变语言一致 */
.dash-section-head .ds-bar { background: var(--grad); box-shadow: 0 0 8px rgba(91,91,214,.4); }

/* 10) 输入控件：hover 时也有反馈，圆角更统一 */
input:not(:focus):hover, select:not(:focus):hover, textarea:not(:focus):hover { border-color: #cfd9e8; }

/* 11) 进度条：光泽渐变 + 微光晕 */
.rj-progress-bar i { background: var(--grad); box-shadow: 0 0 8px rgba(91,91,214,.45); }

/* 12) 弹窗：标题区渐变更通透，圆角与阴影升级 */
.modal { border-top-left-radius: 20px; border-bottom-left-radius: 20px; }
.modal-head { background: linear-gradient(135deg, rgba(91,91,214,.08), rgba(14,116,144,.05)), linear-gradient(180deg, rgba(255,255,255,.9), rgba(255,255,255,.55)); }
body.theme-dark .modal-head { background: linear-gradient(135deg, rgba(91,91,214,.14), rgba(14,116,144,.06)); }

/* 13) 数字展示统一等宽，金额/统计数字更整齐 */
.att-pill-tx b, .py-big, .py-total, .py-dv, .adc-val { font-variant-numeric: tabular-nums; }

/* 14) 尊重系统「减少动效」偏好：无障碍流畅度 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
}

/* =====================================================================
   a43 品牌升级 + 顶部加载进度条 + 卡片光斑动效（设计感加强）
   ===================================================================== */

/* 1) 品牌徽章：内嵌 SVG 图标居中 */
.brand-logo svg { width: 56%; height: 56%; display: block; }
.brand-logo { box-shadow: 0 8px 20px rgba(91,91,214,.32), inset 0 1px 0 rgba(255,255,255,.3), inset 0 -2px 4px rgba(8,30,60,.18); }
.brand-logo.sm { box-shadow: 0 6px 16px rgba(91,91,214,.3), inset 0 1px 0 rgba(255,255,255,.3), inset 0 -2px 4px rgba(8,30,60,.16); }
.brand-logo.lg { border: 1px solid rgba(255,255,255,.35); }

/* 2) 顶部渐变加载进度条（视图切换时扫过，科技感 + 流畅反馈） */
#view-progress {
  position: fixed; top: 0; left: 0; height: 3px; width: 0; z-index: 300;
  background: linear-gradient(90deg, var(--blue), var(--cyan));
  box-shadow: 0 0 12px rgba(91,91,214,.65), 0 1px 3px rgba(14,116,144,.4);
  border-radius: 0 3px 3px 0; opacity: 0; pointer-events: none;
  transition: width .38s var(--ease), opacity .28s ease;
}

/* 3) 统计卡：hover 时右下角光斑微微转动放大，活起来 */
.stat-card::after { transition: transform .5s var(--ease), opacity .4s var(--ease); }
.stat-card:hover::after { transform: rotate(30deg) scale(1.25); opacity: .85; }
.stat-card:hover .stat-value { color: var(--blue-2); }
.stat-value { transition: color .25s var(--ease); }

/* 4) 区块标题：名称加粗升级，行距更清晰 */
.dash-section-head .ds-title { font-size: 15.5px; letter-spacing: .02em; }

/* 5) 深色主题适配新增元素 */
body.theme-dark .stat-card:hover .stat-value { color: #c0b9ff; }
body.theme-dark #view-progress { box-shadow: 0 0 12px rgba(129,140,248,.8); }

/* =====================================================================
   a44 大胆改版 ·「星云青紫」：深空顶栏 + 星云英雄区，年轻活力、与众不同
   ===================================================================== */

/* 0) 品牌主渐变升级：紫罗兰 → 电光蓝 → 极光青，年轻撞色 */
:root {
  --grad: linear-gradient(135deg, #7c3aed 0%, #5b5bd6 52%, #06b6d4 100%);
  --grad-soft: linear-gradient(135deg, #f1ebff 0%, #e3f4f8 100%);
  --nebula-a: #7c3aed;   /* 紫罗兰 */
  --nebula-b: #5b5bd6;   /* 电光蓝 */
  --nebula-c: #06b6d4;   /* 极光青 */
  --deep: #0b1226;       /* 深空底 */
  --deep-2: #141b3a;     /* 深空底 2 */
}

/* 1) 顶栏：深空玻璃（深蓝紫底 + 底部霓虹光带 + 白字），一眼与众不同 */
.topnav {
  background: linear-gradient(135deg, rgba(18,16,48,.92), rgba(32,28,80,.88) 55%, rgba(22,26,74,.9));
  -webkit-backdrop-filter: blur(40px) saturate(160%); backdrop-filter: blur(40px) saturate(160%);
  border-bottom: 1px solid rgba(150,150,255,.16);
  box-shadow: 0 10px 36px rgba(12,10,40,.4);
}
.topnav::after {
  background: linear-gradient(90deg, transparent 2%, rgba(124,58,237,.85) 22%, rgba(6,182,212,.95) 50%, rgba(91,91,214,.85) 78%, transparent 98%);
  opacity: .95; height: 2.5px;
  box-shadow: 0 0 14px rgba(6,182,212,.6);
}
.topnav-brand-name { color: #f2f6ff; }
.topnav-brand-sub { color: rgba(200,200,250,.55); }
.topnav-link { color: rgba(208,208,250,.78); }
.topnav-link:hover { background: rgba(124,92,237,.22); color: #fff; }
.topnav-link.active {
  background: linear-gradient(135deg, #7c3aed, #5b5bd6 55%, #06b6d4);
  color: #fff; box-shadow: 0 6px 22px rgba(124,58,237,.5), 0 0 18px rgba(6,182,212,.35);
}
.topbar-search input { background: rgba(255,255,255,.08); color: #eeecff; border: 1px solid rgba(160,150,255,.14); }
.topbar-search input::placeholder { color: rgba(200,200,250,.45); }
.topbar-search input:focus { background: rgba(255,255,255,.12); border-color: rgba(6,182,212,.6); box-shadow: 0 0 0 4px rgba(6,182,212,.16); }
.topbar-icon-btn { background: rgba(255,255,255,.08); border: 1px solid rgba(160,150,255,.14); }
.topbar-icon-btn:hover { background: rgba(124,92,237,.28); }
.user-name { color: #f2f6ff; }
.user-role { color: rgba(200,200,250,.55); }
.user-avatar { background: linear-gradient(135deg, #7c3aed, #06b6d4); box-shadow: 0 4px 14px rgba(124,58,237,.5); }
.topnav-burger { background: rgba(255,255,255,.08); color: #eeecff; }
#logout-btn { color: rgba(208,208,250,.8); }
#logout-btn:hover { background: rgba(255,255,255,.1); color: #fff; }
.brand-logo { background: linear-gradient(135deg, #7c3aed 0%, #5b5bd6 55%, #06b6d4 100%); box-shadow: 0 6px 18px rgba(124,58,237,.45), 0 0 16px rgba(6,182,212,.3), inset 0 1px 0 rgba(255,255,255,.3); }

/* 2) 首页英雄区：星云卡片（深紫蓝底 + 星点 + 大光晕），撞在浅色内容区上，年轻跳脱 */
.dash-hero {
  background:
    radial-gradient(circle at 1px 1px, rgba(255,255,255,.32) 1px, transparent 0) 0 0 / 26px 26px,
    radial-gradient(90vw 60vh at 108% -30%, rgba(6,182,212,.42) 0%, transparent 55%),
    radial-gradient(70vw 70vh at -14% 130%, rgba(124,58,237,.5) 0%, transparent 58%),
    linear-gradient(120deg, #141033 0%, #262060 48%, #103a55 100%);
  -webkit-backdrop-filter: none; backdrop-filter: none;
  border: 1px solid rgba(150,150,255,.2);
  box-shadow: 0 24px 60px rgba(18,22,64,.5), 0 0 40px rgba(6,182,212,.12) inset;
}
.dash-hero::before { background: linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,0)); }
.dash-greet { background: linear-gradient(120deg, #fff 20%, #9ee7ff 70%, #c9b8ff 100%); -webkit-background-clip: text; background-clip: text; color: transparent; }
.dash-hero .muted.small { color: rgba(205,205,250,.7); }
.dash-hero .dh-actions .btn { background: rgba(255,255,255,.1); border: 1px solid rgba(160,180,255,.25); color: #eeecff; backdrop-filter: blur(6px); }
.dash-hero .dh-actions .btn:hover { background: rgba(255,255,255,.18); border-color: rgba(6,182,212,.55); box-shadow: 0 8px 22px rgba(6,182,212,.25); }
.dash-hero .dh-actions .btn-primary { background: linear-gradient(135deg, #7c3aed, #5b5bd6 55%, #06b6d4); border: none; box-shadow: 0 10px 26px rgba(124,58,237,.5), 0 0 20px rgba(6,182,212,.35), inset 0 1px 0 rgba(255,255,255,.3); }
/* 星座运势行在深色 hero 上 */
.dash-hero .hz-chip { background: rgba(255,255,255,.09); border-color: rgba(160,180,255,.22); color: rgba(216,214,252,.85); }
.dash-hero .hz-chip b { color: #fff; }
.dash-hero .hz-tip { color: #eeecff; background: rgba(247,169,0,.14); border-color: rgba(247,169,0,.4); }

/* 3) 加载进度条：紫青撞色 */
#view-progress { background: linear-gradient(90deg, #7c3aed, #5b5bd6, #06b6d4); box-shadow: 0 0 14px rgba(124,58,237,.7), 0 0 8px rgba(6,182,212,.5); }

/* 4) 统计卡图标 & 区块竖条：跟随紫青渐变 */
.dash-section-head .ds-bar { box-shadow: 0 0 10px rgba(124,58,237,.55); }
.view-head::before { box-shadow: 0 0 14px rgba(124,58,237,.55), 0 0 0 4px rgba(124,58,237,.12); }

/* 5) 深色主题下：英雄区收敛为静谧深蓝，去掉星点网格与紫青光晕，避免花哨 */
body.theme-dark .dash-hero {
  background:
    radial-gradient(70vw 60vh at 108% -30%, rgba(91,91,214,.22) 0%, transparent 55%),
    linear-gradient(120deg, #140f33 0%, #241e5e 50%, #0f2a4a 100%);
  border-color: rgba(150,150,255,.14);
  box-shadow: 0 20px 52px rgba(0,0,0,.5), inset 0 0 30px rgba(91,91,214,.06);
}
body.theme-dark .dash-greet { background: linear-gradient(120deg, #fff 25%, #ddd6fe 80%); -webkit-background-clip: text; background-clip: text; color: transparent; }
/* a44 补丁：顶栏图标按钮在深空底上的配色与 hover 发光 */
.topbar-icon-btn { color: #d7e2fb; }
.topbar-icon-btn:hover { border-color: rgba(6,182,212,.6); color: #fff; box-shadow: 0 6px 18px rgba(6,182,212,.3); transform: translateY(-1px); }

/* =====================================================================
   a45 修复退出按钮 + 深色主题星云化 + 英雄区布局重设计
   ===================================================================== */

/* 1) 修复：退出按钮在深空顶栏上是白底灰字看不清 → 透明玻璃风 */
#logout-btn { background: rgba(255,255,255,.08); border: 1px solid rgba(160,150,255,.18); color: rgba(215,226,250,.85); border-radius: 10px; }
#logout-btn:hover { background: rgba(255,255,255,.14); border-color: rgba(6,182,212,.5); color: #fff; box-shadow: 0 4px 14px rgba(6,182,212,.2); }

/* 2) 深色主题：整屏换「深空蓝」静谧底，去掉网格与紫青光晕，与浅色截然不同但更克制 */
body.theme-dark {
  background-color: #0a0f1f;
  background-image:
    radial-gradient(70vw 60vw at 88% -12%, rgba(91,91,214,.14) 0%, transparent 56%),
    radial-gradient(80vw 80vw at -10% 112%, rgba(14,116,144,.10) 0%, transparent 60%);
}
body.theme-dark .card {
  border-color: rgba(150,150,255,.15);
  box-shadow: 0 1px 2px rgba(0,0,0,.5), 0 14px 34px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.05);
}
body.theme-dark .card[onclick]:hover { border-color: rgba(91,91,214,.5); box-shadow: 0 2px 4px rgba(0,0,0,.5), 0 20px 42px rgba(0,0,0,.55), 0 0 20px rgba(91,91,214,.12); }
body.theme-dark .stat-card::after { background: linear-gradient(135deg, rgba(91,91,214,.16), rgba(14,116,144,.1)); opacity: .8; }
body.theme-dark .topnav::after { opacity: 1; }
body.theme-dark .dash-section-head .ds-bar { box-shadow: 0 0 12px rgba(91,91,214,.55); }

/* 3) 英雄区布局重设计：左问候+按钮、右侧「今日速览」玻璃数字面板 */
.dash-hero { align-items: stretch; }
.dh-left { display: flex; flex-direction: column; justify-content: center; }
.dh-actions { margin-top: 18px; align-self: flex-start; }
.dh-glance { display: flex; gap: 12px; align-items: center; flex: 0 0 auto; }
.dhg-item {
  min-width: 104px; padding: 15px 18px 13px; border-radius: 18px; text-align: center; cursor: pointer;
  background: rgba(255,255,255,.07); border: 1px solid rgba(160,180,255,.22);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
  transition: all .22s var(--ease);
}
.dhg-item:hover { background: rgba(255,255,255,.13); border-color: rgba(6,182,212,.6); transform: translateY(-3px); box-shadow: 0 12px 28px rgba(6,182,212,.28), inset 0 1px 0 rgba(255,255,255,.12); }
.dhg-item:active { transform: translateY(-1px); }
.dhg-item b {
  display: block; font-size: 27px; font-weight: 800; line-height: 1.1; font-variant-numeric: tabular-nums;
  background: linear-gradient(120deg, #fff 25%, #9ee7ff 80%); -webkit-background-clip: text; background-clip: text; color: transparent;
}
.dhg-item span { display: block; margin-top: 5px; font-size: 12px; font-weight: 600; color: rgba(205,205,250,.78); letter-spacing: .04em; }
@media (max-width: 860px) { .dh-glance { width: 100%; } .dhg-item { flex: 1; min-width: 0; } }

/* =====================================================================
   a46 头图收窄 + 速览推广 + 深色动真格 + 浅色撞色柔化
   ===================================================================== */

/* 1) 首页头图收窄：限宽 + 高度收紧，不再铺满整屏 */
.dash-hero { max-width: 1080px; margin-left: auto; margin-right: auto; padding: 22px 26px; }
@media (min-width: 1240px) { .dash-hero { max-width: 1180px; } }

/* 2) 浅色系统：撞色柔化 —— 顶栏回归浅色玻璃（去深空底），保留紫青渐变点缀 */
.topnav {
  background: linear-gradient(180deg, rgba(255,255,255,.8), rgba(255,255,255,.55) 70%, rgba(255,255,255,.4));
  -webkit-backdrop-filter: blur(48px) saturate(200%); backdrop-filter: blur(48px) saturate(200%);
  border-bottom: 1px solid rgba(200,214,240,.55);
  box-shadow: 0 8px 28px rgba(30,27,75,.1);
}
.topnav-brand-name { color: var(--navy); }
.topnav-brand-sub { color: var(--text-3); }
.topnav-link { color: var(--text-2); }
.topnav-link:hover { background: rgba(124,58,237,.1); color: var(--navy); }
.topnav-link.active { color: #fff; }
.topbar-search input { background: rgba(255,255,255,.75); color: var(--text); border: 1px solid transparent; }
.topbar-search input::placeholder { color: var(--text-3); }
.topbar-search input:focus { background: #fff; border-color: var(--blue); box-shadow: 0 0 0 4px rgba(91,91,214,.12); }
.topbar-icon-btn { color: var(--navy); }
.topbar-icon-btn:hover { border-color: rgba(124,58,237,.5); color: #6d28d9; box-shadow: 0 6px 16px rgba(124,58,237,.18); transform: translateY(-1px); }
.user-name { color: var(--text); }
.user-role { color: var(--text-3); }
.topnav-burger { background: rgba(124,58,237,.08); color: var(--navy); }
#logout-btn { background: transparent; border: 1px solid var(--border); color: var(--text-2); }
#logout-btn:hover { background: rgba(124,58,237,.08); border-color: rgba(124,58,237,.4); color: #6d28d9; box-shadow: none; }
.topnav::after { opacity: .5; }

/* 3) 深色系统：这次真的大改 —— 卡片深色玻璃 + 紫青夜光 + 输入控件夜化 + 表格夜光 */
body.theme-dark {
  --card: #101830;
  --bg-2: #0d1428;
  --bg: #070b1c;
  --border: rgba(160,150,255,.13);
  --line: rgba(160,150,255,.1);
  --navy: #eef2ff;
}
body.theme-dark .card {
  background: linear-gradient(160deg, rgba(22,30,58,.92), rgba(13,20,42,.96));
  border-color: rgba(150,150,255,.17);
  box-shadow: 0 1px 2px rgba(0,0,0,.5), 0 18px 42px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.06), inset 0 0 34px rgba(124,58,237,.05);
}
body.theme-dark .modal { background: #101830; border-left-color: rgba(150,150,255,.15); }
body.theme-dark input, body.theme-dark select, body.theme-dark textarea { background: rgba(7,11,28,.6); border-color: rgba(160,150,255,.16); color: var(--text); }
body.theme-dark input:focus, body.theme-dark select:focus, body.theme-dark textarea:focus { border-color: #06b6d4; box-shadow: 0 0 0 4px rgba(6,182,212,.15); }
body.theme-dark th { background: rgba(22,30,58,.8); border-bottom-color: rgba(150,150,255,.22); }
body.theme-dark tbody tr:hover { background: rgba(6,182,212,.08); }
body.theme-dark .topnav {
  background: linear-gradient(135deg, rgba(10,15,34,.95), rgba(16,24,52,.92) 55%, rgba(10,30,58,.94));
  border-bottom: 1px solid rgba(150,150,255,.16);
}
body.theme-dark .topnav::after { opacity: 1; }
body.theme-dark .pill-tab.active { background: linear-gradient(135deg, #7c3aed, #5b5bd6 55%, #06b6d4); border-color: transparent; box-shadow: 0 6px 18px rgba(124,58,237,.45); }
body.theme-dark .empty { color: var(--text-3); }
body.theme-dark .tag { box-shadow: inset 0 1px 0 rgba(255,255,255,.07); }
/* 深色下英雄区光晕更明显，成为视觉焦点 */
body.theme-dark .dash-hero { box-shadow: 0 24px 60px rgba(0,0,0,.6), 0 0 60px rgba(124,58,237,.18), 0 0 90px rgba(6,182,212,.1) inset; }

/* 4) 「今日速览」推广：通用玻璃数字片（任何页面都可复用 .glance-strip） */
.glance-strip { display: flex; gap: 12px; align-items: stretch; flex-wrap: wrap; }
.glance-strip .dhg-item { flex: 1; min-width: 118px; }
/* 浅色页面上的速览片（白玻璃 + 紫青渐变数字） */
.glance-light { display: flex; gap: 12px; align-items: stretch; flex-wrap: wrap; }
.glance-light .dhg-item {
  background: linear-gradient(160deg, rgba(255,255,255,.92), rgba(244,247,252,.8));
  border: 1px solid rgba(91,91,214,.14);
  box-shadow: var(--shadow), inset 0 1px 0 rgba(255,255,255,.9);
}
.glance-light .dhg-item b { background: linear-gradient(120deg, #6d28d9 20%, #5b5bd6 60%, #0891b2 100%); -webkit-background-clip: text; background-clip: text; color: transparent; }
.glance-light .dhg-item span { color: var(--text-2); }
.glance-light .dhg-item:hover { border-color: rgba(6,182,212,.5); box-shadow: 0 14px 30px rgba(6,182,212,.16), inset 0 1px 0 rgba(255,255,255,.9); }

/* a46 补丁：项目页速览片里的金额数字（金额含¥，字号略小）与彩色数字适配 */
.glance-light .dhg-item b.c-gold { background: linear-gradient(120deg, #b45309, #d97706 60%, #f59e0b); -webkit-background-clip: text; background-clip: text; }
.glance-light .dhg-item b.c-green { background: linear-gradient(120deg, #15803d, #16a34a 70%, #22c55e); -webkit-background-clip: text; background-clip: text; }
.glance-light .dhg-item b.c-red { background: none; color: var(--red); -webkit-text-fill-color: initial; }
.glance-light .dhg-item b.c-purple { background: linear-gradient(120deg, #7c3aed, #9333ea 70%, #a855f7); -webkit-background-clip: text; background-clip: text; }
.glance-light .dhg-item b.c-navy { background: linear-gradient(120deg, #312e81, #4f46e5 70%, #5b5bd6); -webkit-background-clip: text; background-clip: text; }
.glance-light .dhg-item b .unit { font-size: 13px; font-weight: 600; }
.glance-light .dhg-item b { font-size: 21px; overflow-wrap: anywhere; }
/* 深色主题：速览片夜化 */
body.theme-dark .glance-light .dhg-item { background: linear-gradient(160deg, rgba(22,30,58,.9), rgba(13,20,42,.95)); border-color: rgba(150,150,255,.18); box-shadow: 0 8px 24px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.06); }
body.theme-dark .glance-light .dhg-item b { background: linear-gradient(120deg, #fff 25%, #9ee7ff 80%); -webkit-background-clip: text; background-clip: text; color: transparent; }
body.theme-dark .glance-light .dhg-item b.c-gold, body.theme-dark .glance-light .dhg-item b.c-green, body.theme-dark .glance-light .dhg-item b.c-purple, body.theme-dark .glance-light .dhg-item b.c-navy { background: linear-gradient(120deg, #fff 25%, #9ee7ff 80%); -webkit-background-clip: text; background-clip: text; }
body.theme-dark .glance-light .dhg-item b.c-red { background: none; color: #ff8f8f; }
body.theme-dark .glance-light .dhg-item span { color: rgba(200,200,250,.75); }

/* =====================================================================
   a47 头图「变薄」：恢复全宽，压扁纵向占用（用户：不是收窄，是缩小厚度）
   ===================================================================== */
.dash-hero { max-width: none; padding: 14px 24px; gap: 14px; }
.dh-actions { margin-top: 12px; }
.hero-zodiac { margin-top: 6px; }
.dash-greet { font-size: 21px; }
.dash-hero .muted.small { margin-top: 4px !important; }
.dhg-item { padding: 10px 16px 9px; border-radius: 15px; }
.dhg-item b { font-size: 24px; }
.dhg-item span { margin-top: 3px; font-size: 11.5px; }
.dash-hero { margin-bottom: 14px; }

/* =====================================================================
   a48 头图柔化：淡紫青晨雾（浅色底 + 深紫青渐变字），不再深空撞色
   ===================================================================== */
.dash-hero {
  background:
    radial-gradient(90vw 60vh at 106% -32%, rgba(6,182,212,.14) 0%, transparent 55%),
    radial-gradient(72vw 70vh at -16% 128%, rgba(124,58,237,.13) 0%, transparent 58%),
    linear-gradient(115deg, #f6f2ff 0%, #f1eeff 46%, #e8f9fc 100%);
  border: 1px solid rgba(124,58,237,.14);
  box-shadow: 0 14px 36px rgba(60,60,140,.1), inset 0 1px 0 rgba(255,255,255,.9);
}
.dash-hero::before { background: linear-gradient(180deg, rgba(255,255,255,.55), rgba(255,255,255,0)); }
.dash-greet { background: linear-gradient(120deg, #5b21b6 15%, #4f46e5 55%, #0891b2 95%); -webkit-background-clip: text; background-clip: text; color: transparent; }
.dash-hero .muted.small { color: #6b7599; }
/* 按钮：主按钮保留紫青渐变，次按钮白底玻璃 */
.dash-hero .dh-actions .btn { background: rgba(255,255,255,.75); border: 1px solid rgba(124,58,237,.2); color: #3d4a7a; backdrop-filter: blur(6px); }
.dash-hero .dh-actions .btn:hover { background: #fff; border-color: rgba(6,182,212,.5); box-shadow: 0 8px 20px rgba(6,182,212,.18); color: #1e293b; }
.dash-hero .dh-actions .btn-primary { background: linear-gradient(135deg, #7c3aed, #5b5bd6 55%, #06b6d4); border: none; color: #fff; }
/* 星座运势行：浅底适配 */
.dash-hero .hz-chip { background: rgba(124,58,237,.07); border-color: rgba(124,58,237,.16); color: #4c5a8a; }
.dash-hero .hz-chip b { color: #312e81; }
.dash-hero .hz-tip { color: #4c5a8a; background: rgba(247,169,0,.08); border-color: rgba(247,169,0,.3); }
/* 速览片：白玻璃（与项目页 glance-light 统一） */
.dh-glance .dhg-item {
  background: rgba(255,255,255,.72); border: 1px solid rgba(124,58,237,.16);
  box-shadow: 0 8px 20px rgba(60,60,140,.08), inset 0 1px 0 rgba(255,255,255,.95);
}
.dh-glance .dhg-item b { background: linear-gradient(120deg, #6d28d9 20%, #5b5bd6 60%, #0891b2 100%); -webkit-background-clip: text; background-clip: text; color: transparent; }
.dh-glance .dhg-item span { color: #5b5f8c; }
.dh-glance .dhg-item:hover { background: #fff; border-color: rgba(6,182,212,.5); box-shadow: 0 12px 26px rgba(6,182,212,.16), inset 0 1px 0 #fff; }
/* 深色主题：头图保持深色星云（与整屏深色协调），文字白色系 */
body.theme-dark .dash-hero {
  background:
    radial-gradient(circle at 1px 1px, rgba(255,255,255,.3) 1px, transparent 0) 0 0 / 26px 26px,
    radial-gradient(90vw 60vh at 108% -30%, rgba(6,182,212,.4) 0%, transparent 55%),
    radial-gradient(70vw 70vh at -14% 130%, rgba(124,58,237,.48) 0%, transparent 58%),
    linear-gradient(120deg, #141033 0%, #262060 48%, #103a55 100%);
  border-color: rgba(150,150,255,.2);
}
body.theme-dark .dash-greet { background: linear-gradient(120deg, #fff 20%, #9ee7ff 70%, #c9b8ff 100%); -webkit-background-clip: text; background-clip: text; }
body.theme-dark .dash-hero .muted.small { color: rgba(205,205,250,.7); }
body.theme-dark .dash-hero .dh-actions .btn { background: rgba(255,255,255,.1); border-color: rgba(160,180,255,.25); color: #eeecff; }
body.theme-dark .dash-hero .dh-actions .btn:hover { background: rgba(255,255,255,.18); }
body.theme-dark .dash-hero .dh-actions .btn-primary { color: #fff; }
body.theme-dark .dash-hero .hz-chip { background: rgba(255,255,255,.09); border-color: rgba(160,180,255,.22); color: rgba(216,214,252,.85); }
body.theme-dark .dash-hero .hz-chip b { color: #fff; }
body.theme-dark .dash-hero .hz-tip { color: #eeecff; background: rgba(247,169,0,.14); border-color: rgba(247,169,0,.4); }
body.theme-dark .dh-glance .dhg-item { background: rgba(255,255,255,.07); border-color: rgba(160,180,255,.22); box-shadow: inset 0 1px 0 rgba(255,255,255,.1); }
body.theme-dark .dh-glance .dhg-item b { background: linear-gradient(120deg, #fff 25%, #9ee7ff 80%); -webkit-background-clip: text; background-clip: text; }
body.theme-dark .dh-glance .dhg-item span { color: rgba(205,205,250,.78); }

/* =====================================================================
   a49 深色主题重做：中性深灰蓝（Linear/GitHub 风），干净克制，去紫去脏
   ===================================================================== */
body.theme-dark {
  --card: #161b26;
  --bg-2: #1a2030;
  --bg: #0d1017;
  --border: rgba(255,255,255,.08);
  --line: rgba(255,255,255,.06);
  --navy: #f1f4f9;
  background-color: #0d1017;
  background-image:
    radial-gradient(60vw 50vw at 100% -10%, rgba(91,91,214,.08) 0%, transparent 55%),
    radial-gradient(70vw 70vw at -15% 110%, rgba(6,182,212,.05) 0%, transparent 60%);
}
/* 卡片：中性纯色 + 细描边，无紫内光 */
body.theme-dark .card {
  background: #161b26;
  border-color: rgba(255,255,255,.08);
  box-shadow: 0 1px 3px rgba(0,0,0,.5), 0 12px 30px rgba(0,0,0,.35);
}
body.theme-dark .card[onclick]:hover { border-color: rgba(6,182,212,.4); box-shadow: 0 2px 4px rgba(0,0,0,.5), 0 16px 36px rgba(0,0,0,.4); }
/* 输入控件：中性深灰 */
body.theme-dark input, body.theme-dark select, body.theme-dark textarea { background: #0f131c; border-color: rgba(255,255,255,.1); }
body.theme-dark input:focus, body.theme-dark select:focus, body.theme-dark textarea:focus { border-color: #6366f1; box-shadow: 0 0 0 3px rgba(59,130,246,.2); }
/* 表格：中性 */
body.theme-dark th { background: #141926; border-bottom-color: rgba(255,255,255,.1); }
body.theme-dark tbody tr:hover { background: rgba(59,130,246,.07); }
/* 顶栏：与整屏同色系深灰 */
body.theme-dark .topnav { background: rgba(13,16,23,.92); border-bottom: 1px solid rgba(255,255,255,.07); box-shadow: 0 8px 24px rgba(0,0,0,.4); }
body.theme-dark .topnav::after { background: linear-gradient(90deg, transparent 2%, rgba(59,130,246,.7) 25%, rgba(6,182,212,.8) 50%, rgba(59,130,246,.7) 75%, transparent 98%); box-shadow: none; opacity: .7; }
body.theme-dark .topbar-search input { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.09); color: #eef2f8; }
body.theme-dark .topbar-search input:focus { background: rgba(255,255,255,.1); }
/* 弹窗 / 侧栏 */
body.theme-dark .modal { background: #161b26; border-left-color: rgba(255,255,255,.08); }
body.theme-dark .cockpit-nav { background: #141926; border-color: rgba(255,255,255,.08); }
/* 头图：深色星云也收柔，去紫留蓝青 */
body.theme-dark .dash-hero {
  background:
    radial-gradient(90vw 60vh at 108% -30%, rgba(6,182,212,.22) 0%, transparent 55%),
    radial-gradient(70vw 70vh at -14% 130%, rgba(91,91,214,.3) 0%, transparent 58%),
    linear-gradient(120deg, #12182b 0%, #17203c 50%, #122a45 100%);
  border-color: rgba(255,255,255,.1);
  box-shadow: 0 18px 44px rgba(0,0,0,.5);
}
/* 速览片与统计卡：中性 */
body.theme-dark .glance-light .dhg-item, body.theme-dark .dh-glance .dhg-item { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.1); box-shadow: 0 6px 18px rgba(0,0,0,.35); }
body.theme-dark .stat-card::after { background: rgba(59,130,246,.08); }
body.theme-dark .stat-card:hover .stat-value { color: #a5b4fc; }
/* 页签 / 标签 / 空态 */
body.theme-dark .pill-tab { background: #1a2030; border-color: rgba(255,255,255,.09); color: var(--text-2); }
body.theme-dark .pill-tab.active { background: linear-gradient(135deg, #5b5bd6, #0891b2); box-shadow: 0 6px 16px rgba(91,91,214,.4); }
body.theme-dark .empty { color: var(--text-3); }

/* a50 回款表单余额提示条 */
.pay-hint { display: flex; gap: 18px; flex-wrap: wrap; padding: 11px 14px; background: linear-gradient(120deg, rgba(124,58,237,.06), rgba(6,182,212,.06)); border: 1px solid rgba(124,58,237,.14); border-radius: 12px; font-size: 13px; color: var(--text-2); }
.pay-hint b { font-variant-numeric: tabular-nums; color: var(--text); }

/* a50 投标保证金卡片 + 客户信息条 */
.deposit-box { margin-top: 12px; padding: 12px 14px; border-radius: 12px; background: linear-gradient(120deg, rgba(245,158,11,.07), rgba(6,182,212,.05)); border: 1px solid rgba(245,158,11,.22); }
.deposit-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.deposit-row strong { font-size: 17px; font-variant-numeric: tabular-nums; color: var(--text); }
.deposit-label { font-size: 12px; font-weight: 700; color: #b45309; letter-spacing: .04em; }
body.theme-dark .deposit-box { background: rgba(245,158,11,.07); border-color: rgba(245,158,11,.25); }
body.theme-dark .deposit-label { color: #fbbf24; }
.bid-cust-strip { margin-bottom: 14px; padding: 10px 14px; border-radius: 10px; background: rgba(91,91,214,.05); border: 1px dashed rgba(91,91,214,.25); font-size: 13px; color: var(--text-2); display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.bid-cust-strip .bid-cust-ico { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; }
.bid-cust-strip .bid-cust-ico svg { width: 16px; height: 16px; display: block; }
body.theme-dark .bid-cust-strip { background: rgba(59,130,246,.08); border-color: rgba(59,130,246,.3); }

/* a50 付款节点（结构化） */
.payplan-chips { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.payplan-chip { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; border-radius: 999px; font-size: 12.5px; background: linear-gradient(120deg, rgba(124,58,237,.08), rgba(91,91,214,.08)); border: 1px solid rgba(124,58,237,.18); color: var(--text); }
.payplan-chip b { color: #6d28d9; font-variant-numeric: tabular-nums; }
.payplan-chip.interval { background: linear-gradient(120deg, rgba(6,182,212,.1), rgba(91,91,214,.08)); border-color: rgba(6,182,212,.3); color: #0e7490; font-weight: 600; }
.payplan-arrow { color: var(--text-3); font-size: 12px; }
body.theme-dark .payplan-chip { background: rgba(124,58,237,.12); border-color: rgba(124,58,237,.3); }
body.theme-dark .payplan-chip b { color: #c4b5fd; }
body.theme-dark .payplan-chip.interval { background: rgba(6,182,212,.1); border-color: rgba(6,182,212,.35); color: #67e8f9; }
.paynode-row { display: grid; grid-template-columns: 1fr 90px 20px 32px; gap: 8px; align-items: center; margin-bottom: 8px; }
.paynode-row .muted { text-align: left; }
.paynode-tools { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 4px; }
.paynode-sum { margin-left: auto; font-size: 13px; font-weight: 700; color: var(--green); font-variant-numeric: tabular-nums; }
.paynode-sum.bad { color: var(--red); }
.payfollow-box { padding: 12px 14px; border-radius: 12px; background: linear-gradient(120deg, rgba(6,182,212,.08), rgba(91,91,214,.06)); border: 1px solid rgba(6,182,212,.25); font-size: 13.5px; color: var(--text-2); display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.payfollow-box b { color: #0e7490; }
body.theme-dark .payfollow-box { background: rgba(6,182,212,.08); border-color: rgba(6,182,212,.3); }
body.theme-dark .payfollow-box b { color: #67e8f9; }

/* a51 权限提示（无操作权时的柔和说明） */
.perm-note { font-size: 12.5px; color: var(--text-3); padding: 5px 11px; border-radius: 999px; background: var(--bg-2); border: 1px dashed var(--line); white-space: nowrap; }
body.theme-dark .perm-note { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); color: var(--text-2); }

/* a52 经营/实施分配信息条 */
.assign-bar { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; padding: 11px 14px; margin-bottom: 14px; border-radius: 12px; background: linear-gradient(120deg, rgba(22,163,74,.07), rgba(6,182,212,.06)); border: 1px solid rgba(22,163,74,.2); font-size: 13px; color: var(--text-2); }
.assign-bar .assign-item b { color: var(--text); font-size: 13.5px; }
.assign-bar .assign-item { color: var(--text-3); font-size: 12.5px; }
.assign-bar .assign-meta { color: var(--text-3); font-size: 12px; margin-left: auto; }
.assign-bar.pending { background: linear-gradient(120deg, rgba(245,158,11,.08), rgba(91,91,214,.05)); border-color: rgba(245,158,11,.25); color: var(--text-2); }
.assign-bar .btn { flex-shrink: 0; }
body.theme-dark .assign-bar { background: rgba(22,163,74,.08); border-color: rgba(22,163,74,.28); }
body.theme-dark .assign-bar.pending { background: rgba(245,158,11,.07); border-color: rgba(245,158,11,.28); }

/* a53 板块头部按钮重排：标题说明占一行放不下时，按钮自动换行到下一行，不再挤到需要横向滚动 */
.card-head { flex-wrap: wrap; gap: 10px 14px; }
.card-head-main { min-width: 240px; flex: 1 1 280px; }
.card-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }
@media (max-width: 960px) { .card-actions { justify-content: flex-start; flex: 1 1 100%; } }

/* ---- 招标信息板块（a66：点选筛选 + 卡片重排）---- */
.td-panel { padding: 18px 20px; }
.td-search-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.td-search-box { position: relative; flex: 1 1 280px; min-width: 240px; display: flex; align-items: center; }
.td-search-ico { position: absolute; left: 14px; font-size: 14px; opacity: .45; pointer-events: none; }
.td-input { width: 100%; font-family: var(--font); font-size: 14.5px; color: var(--text); background: var(--bg-2); border: 1px solid var(--line); border-radius: 12px; padding: 11px 38px; outline: none; transition: border-color .15s ease, box-shadow .15s ease, background .15s ease; }
.td-input::placeholder { color: var(--text-3); }
.td-input:focus { background: #fff; border-color: var(--blue); box-shadow: 0 0 0 3px rgba(91,91,214,.12); }
.td-clear { position: absolute; right: 10px; width: 22px; height: 22px; line-height: 1; border: 0; border-radius: 50%; background: var(--line); color: var(--muted); cursor: pointer; font-size: 12px; }
.td-clear:hover { background: var(--border); color: var(--text); }
.td-go { padding: 11px 24px; font-size: 14.5px; border-radius: 12px; }
.td-filter-groups { margin-top: 16px; display: flex; flex-direction: column; gap: 11px; }
/* 两列网格：左列名（地区/类目/类型…），右列按钮组，下面再跟一行浅色说明。
   之前是 flex 单行，加了说明文字后会挤到一起，改成网格才能对齐。 */
.td-fg { display: grid; grid-template-columns: 40px minmax(0, 1fr); column-gap: 12px; row-gap: 5px; align-items: start; }
.td-fg-label { grid-column: 1; font-size: 13px; color: var(--muted); line-height: 31px; }
.td-fg-items { grid-column: 2; display: flex; flex-wrap: wrap; gap: 8px; }
.td-fg-hint { grid-column: 2; font-size: 11.5px; line-height: 1.5; color: var(--muted); opacity: .85; }
.td-chip { font-family: var(--font); font-size: 13.5px; line-height: 1; padding: 9px 15px; border-radius: 999px; border: 1px solid var(--border); background: var(--bg-2); color: var(--text-2); cursor: pointer; transition: all .15s ease; display: inline-flex; align-items: center; gap: 6px; }
.td-chip:hover { border-color: var(--blue); color: var(--blue); background: var(--blue-bg); }
.td-chip.on { background: var(--navy); border-color: var(--navy); color: #fff; font-weight: 600; }
.td-chip.on:hover { background: var(--navy-2); color: #fff; }
/* 深色模式：--navy 被翻成浅色，激活 chip 若仍白字会变「白底白字」看不清，改为品牌渐变底+白字 */
body.theme-dark .td-chip.on, body.theme-dark .td-chip.on:hover { background: linear-gradient(135deg,#4f46e5,#0891b2); border-color: transparent; color:#fff; }
/* 按钮上的条数角标：一眼看出「施工类 7616 条」被藏了多少 */
.td-chip-n { font-style: normal; font-size: 11px; font-weight: 600; padding: 1px 6px; border-radius: 999px; background: var(--bg-3, rgba(127,127,127,.16)); color: inherit; opacity: .72; }
.td-chip.on .td-chip-n { background: rgba(255,255,255,.22); opacity: .95; }
/* 地区三级联动：省 / 市 / 区 三个下拉一行排开 */
.td-region { grid-column: 2; display: flex; gap: 8px; flex-wrap: wrap; }
.td-sel { font-family: var(--font); font-size: 13px; line-height: 1; padding: 9px 12px; border-radius: 10px; border: 1px solid var(--border); background: var(--bg-2); color: var(--text-1); cursor: pointer; min-width: 132px; max-width: 220px; transition: all .15s ease; }
.td-sel:hover { border-color: var(--blue); color: var(--blue); }
.td-sel:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px var(--blue-bg); }
.td-sel:disabled { opacity: .55; cursor: not-allowed; }
/* 手动打开隐藏类目后，这类标上打的角标（施工类 / 货物采购类 / 低相关…） */
.td-badge-cat { background: #fdf3e3; border-color: #f0d5a8; color: #8a5a12; font-weight: 600; }
body.theme-dark .td-badge-cat { background: rgba(245,158,11,.14); border-color: rgba(245,158,11,.36); color: #fbbf24; }
.td-toolbar { margin-top: 16px; padding-top: 14px; border-top: 1px dashed var(--line); display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
.td-tools { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; }
.td-check { display: inline-flex; align-items: center; gap: 6px; font-size: 13.5px; color: var(--text-2); cursor: pointer; user-select: none; }
.td-check input { width: 15px; height: 15px; accent-color: var(--navy); cursor: pointer; margin: 0; }
.td-reset { color: var(--muted); }
.td-stat { display: flex; align-items: baseline; gap: 9px; margin: 18px 0 12px; flex-wrap: wrap; }
.td-stat-num { font-size: 22px; font-weight: 800; color: var(--navy); }
.td-stat-unit { font-size: 13px; color: var(--muted); }
.td-card { padding: 16px 18px; margin-bottom: 12px; border-left: 3px solid var(--gold); position: relative; transition: box-shadow .16s ease, transform .16s ease; }
.td-card:hover { box-shadow: 0 4px 14px rgba(0,0,0,.09); transform: translateY(-1px); }
.td-row { position: relative; display: flex; align-items: flex-start; gap: 12px; }
.td-title { font-weight: 600; font-size: 15.5px; line-height: 1.55; letter-spacing: .2px; color: var(--text); text-decoration: none; flex: 1; min-width: 0; margin-right: 12px; }
.td-title:hover { color: var(--blue); text-decoration: underline; }
.td-meta { grid-area: meta; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; font-size: 13px; color: var(--muted); }
.td-badge { display: inline-block; padding: 3px 9px; border-radius: 6px; background: var(--bg-2); border: 1px solid var(--border); font-size: 12.5px; color: var(--text-2); }
.td-badge-type { background: var(--blue-bg); border-color: #d9d8fb; color: var(--blue-2); }
.td-badge-live { background: #eafaf0; border-color: #b7ebcd; color: #0f9d58; font-weight: 600; }
.td-card-live { border-left-color: #0f9d58; }
.td-ops { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; justify-content: flex-end; margin-top: 12px; }
.td-op { padding: 7px 13px; border-radius: 9px; border: 1px solid var(--border); background: #fff; font-family: var(--font); font-size: 13px; color: var(--text-2); cursor: pointer; text-decoration: none; transition: all .15s ease; }
.td-op:hover { border-color: var(--blue); color: var(--blue); }
.td-op.on { background: #fff7e6; border-color: var(--gold); color: #b45309; font-weight: 600; }
.td-op-go { background: var(--navy); border-color: var(--navy); color: #fff; }
.td-op-go:hover { background: var(--navy-2); border-color: var(--navy-2); color: #fff; }
.td-read { border-left-color: var(--line); opacity: .66; }
/* 招标页精简改造：核心控件只留一行，其余收进「更多筛选」折叠面板 */
.td-core-row { display: flex; gap: 22px; align-items: flex-start; flex-wrap: wrap; }
.td-core-row .td-fg-hint { display: none; }
.td-tags-row { margin-top: 12px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.td-tag { display: inline-flex; align-items: center; gap: 4px; font-size: 12.5px; line-height: 1; padding: 6px 6px 6px 11px; border-radius: 999px; border: 1px dashed var(--blue); background: var(--blue-bg); color: var(--blue-2); }
.td-tag-x { width: 17px; height: 17px; line-height: 1; border: 0; border-radius: 50%; background: transparent; color: inherit; cursor: pointer; font-size: 11px; opacity: .65; }
.td-tag-x:hover { opacity: 1; background: rgba(91,91,214,.16); }
.td-more-btn { color: var(--muted); }
.td-more-panel { margin-top: 13px; padding-top: 13px; border-top: 1px dashed var(--line); display: flex; flex-direction: column; gap: 11px; }
.td-link-btn { padding: 7px 9px; font-size: 12.5px; color: var(--muted); background: transparent; }
.td-link-btn:hover { color: var(--blue); }
.td-more-wrap { display: flex; justify-content: center; padding: 18px 0 8px; }
.td-more { padding: 10px 26px; font-size: 14px; border-radius: 999px; background: var(--bg-2); border: 1px solid var(--border); color: var(--text-2); }
.td-more:hover { border-color: var(--blue); color: var(--blue); background: var(--blue-bg); }
.td-more:disabled { opacity: .6; cursor: default; }
.td-end { text-align: center; padding: 18px 0 10px; color: var(--text-3); }
.td-direct { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; padding: 10px 14px; background: var(--bg-2); border: 1px dashed var(--border); border-radius: var(--radius-sm); margin-bottom: 12px; }
@media (max-width: 720px) {
  .td-panel { padding: 14px 15px; }
  .td-ops { justify-content: flex-start; }
  .td-fg { grid-template-columns: 1fr; row-gap: 4px; }
  .td-fg-label { grid-column: 1; line-height: 1.4; font-weight: 600; }
  .td-fg-items, .td-fg-hint, .td-region { grid-column: 1; }
  .td-sel { flex: 1 1 132px; min-width: 0; max-width: none; }
  .reminder-center .td-opp-grid { grid-template-columns: 1fr; }
}

/* 系统设置 - 节假日管理 */
.hd-chips { display: flex; flex-wrap: wrap; gap: 8px; padding: 10px; background: var(--bg-2, #f5f7fa); border: 1px dashed var(--border, #e2e8f0); border-radius: 10px; min-height: 44px; }
.hd-chip { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; background: #fff; border: 1px solid var(--border, #e2e8f0); border-radius: 20px; font-size: 13px; cursor: pointer; transition: all .15s; }
.hd-chip:hover { border-color: var(--red, #dc2626); color: var(--red, #dc2626); }
.hd-x { font-weight: 700; opacity: .6; }
.hd-chip:hover .hd-x { opacity: 1; }
.hd-date { padding: 7px 10px; border: 1px solid var(--border, #e2e8f0); border-radius: 8px; font-size: 13px; background: #fff; }

/* 招标商机智能匹配（标找人） */
.tm-filters { margin-bottom: 14px; }
.tm-card { position: relative; display: block; }
.tm-card .td-title { display: block; margin-right: 58px; }
.tm-card .td-meta { margin-top: 6px; }
.tm-card .td-ops { margin-top: 10px; justify-self: start; }
.tm-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.tm-range { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.tm-chip { padding: 6px 12px; border: 1px solid var(--border, #e2e8f0); border-radius: 20px; font-size: 13px; background: #fff; cursor: pointer; transition: all .15s; color: var(--text-2, #64748b); }
.tm-chip:hover { border-color: var(--gold, #b8860b); color: var(--gold, #b8860b); }
.tm-chip.on { background: var(--gold, #b8860b); border-color: var(--gold, #b8860b); color: #fff; font-weight: 600; }
.tm-summary { margin-bottom: 14px; }
.tm-stat-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.tm-stat { background: #fff; border: 1px solid var(--border, #e2e8f0); border-radius: 12px; padding: 14px; text-align: center; }
.tm-stat b { display: block; font-size: 24px; color: var(--gold, #b8860b); font-weight: 700; }
.tm-stat span { font-size: 12px; color: var(--text-2, #64748b); }
.tm-areas { margin-top: 12px; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.tm-areas::before { content: '擅长领域：'; color: var(--text-2, #64748b); font-size: 13px; }
.tm-tag { display: inline-block; padding: 3px 9px; background: var(--bg-2, #f5f7fa); border: 1px solid var(--border, #e2e8f0); border-radius: 16px; font-size: 12px; color: var(--text-2, #64748b); }
.tm-tag-hit { background: rgba(184,134,11,.12); border-color: var(--gold, #b8860b); color: var(--gold, #8a6500); font-weight: 600; }
.tm-score { flex: 0 0 auto; align-self: flex-start; width: 44px; height: 44px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 16px; font-weight: 700; background: var(--bg-2, #f5f7fa); color: var(--text-2, #64748b); border: 2px solid var(--border, #e2e8f0); }
.tm-score small { font-size: 10px; font-weight: 400; margin-left: 1px; }
.tm-score-rec { background: var(--gold, #b8860b); color: #fff; border-color: var(--gold, #b8860b); }
.tm-rec { border-color: var(--gold, #b8860b); box-shadow: 0 2px 12px rgba(184,134,11,.12); }
.tm-badge-rec { background: var(--gold, #b8860b); color: #fff; padding: 2px 8px; border-radius: 10px; font-size: 11px; font-weight: 600; }
.tm-matched { margin: 8px 0 4px; display: flex; flex-wrap: wrap; gap: 6px; }

/* 招标信息库：摘要条 + 翻页 */
.td-summary-strip { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 14px 0 4px; padding: 10px 14px; background: var(--blue-bg, #f1eeff); border: 1px solid #e2e0fb; border-radius: 10px; font-size: 13px; color: var(--text-2, #475569); }
.td-summary-strip b { color: var(--navy, #1e3a5f); font-size: 14px; }
.td-summary-strip .muted { color: var(--muted, #94a3b8); }
.td-pager { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; justify-content: center; margin: 20px 0 8px; padding: 12px; background: var(--bg-2, #f5f7fa); border: 1px solid var(--border, #e2e8f0); border-radius: 12px; }
.td-page-info { font-size: 14px; font-weight: 600; color: var(--text, #1f2937); min-width: 90px; text-align: center; }
.td-jump { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text-2, #64748b); }
.td-jump-input { width: 58px; padding: 6px 8px; border: 1px solid var(--border, #e2e8f0); border-radius: 8px; font-size: 13px; text-align: center; background: #fff; }
.td-badge-constr { background: #fde8e8; border-color: #f5b5b5; color: #c0392b; font-weight: 600; }
.td-card-low { opacity: .7; }
.td-card-low:hover { opacity: 1; }
.td-pager-sm { margin: 12px 0 2px; padding: 8px; }
.td-live-note { margin: 10px 0; padding: 8px 12px; background: #fff7e6; border: 1px solid #f0c987; border-radius: 10px; font-size: 12.5px; color: #b9770b; }
/* 首页商机：紧凑排版（仅作用于首页 reminder-center 内），减少空旷感 */
.reminder-center .td-card { padding: 12px 14px; margin-bottom: 10px; border-radius: 12px; background: var(--card); box-shadow: 0 1px 3px rgba(30,27,75,.05); }
.reminder-center .td-card:hover { box-shadow: 0 4px 14px rgba(0,0,0,.09); }
.reminder-center .td-opp-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.reminder-center .td-opp-grid .td-card { margin-bottom: 0; }
.reminder-center .td-title { font-size: 14px; margin-right: 10px; }
.reminder-center .tm-score { width: 36px; height: 36px; font-size: 14px; flex: 0 0 auto; align-self: flex-start; }
.reminder-center .td-meta { gap: 8px; font-size: 12px; margin-top: 4px; }
.reminder-center .td-ops { margin-top: 8px; }
.reminder-center .td-op { padding: 5px 11px; font-size: 12.5px; }
/* 通知公告：NEW 徽标 */

/* ===================== 周报月报 ===================== */
.rp-wrap { padding: 4px 2px 8px; }
.rp-tabs { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 18px; }
.rp-toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 18px; }
/* 周报/月报 二级切换 */
.rp-tabs-sub { margin-top: 10px; }
.rp-ttab { padding: 7px 20px; border-radius: 999px; font-size: 13px; font-weight: 600; cursor: pointer; color: var(--text-2); background: #fff; border: 1px solid var(--border); transition: all .26s var(--ease); }
.rp-ttab:hover { border-color: var(--blue); color: var(--blue); transform: translateY(-1px); }
.rp-ttab.active { background: var(--grad); color: #fff; border-color: transparent; box-shadow: 0 6px 16px rgba(91,91,214,.24); }
body.theme-dark .rp-ttab { background: rgba(255,255,255,.06); color: var(--text-2); border-color: rgba(255,255,255,.12); }
body.theme-dark .rp-ttab:hover { border-color: var(--blue); color: #fff; }
body.theme-dark .rp-ttab.active { background: var(--grad); color: #fff; border-color: transparent; }
.rp-tip { font-size: 13px; color: var(--blue); background: rgba(91,91,214,.08); border: 1px solid rgba(91,91,214,.18); padding: 7px 12px; border-radius: 999px; }
.rp-section-title { font-size: 15px; font-weight: 800; color: var(--navy); margin: 18px 0 12px; display: flex; align-items: center; gap: 8px; }
.rp-section-title::before { content: ''; width: 4px; height: 16px; border-radius: 99px; background: var(--grad); }
.rp-card { padding: 15px 17px; margin-bottom: 12px; }
.rp-card-head { display: flex; align-items: center; gap: 10px; }
.rp-type { font-weight: 800; font-size: 15px; color: var(--navy); }
.rp-period { font-size: 13px; color: var(--text); font-weight: 600; margin-left: 2px; }
.rp-card-head .rp-badge { margin-left: auto; }
.rp-card-sub { font-size: 12.5px; color: var(--text); opacity: .82; margin-top: 7px; }
.rp-card-foot { font-size: 12px; color: var(--blue); font-weight: 600; margin-top: 8px; }
.rp-badge { display: inline-flex; align-items: center; padding: 3px 11px; border-radius: 999px; font-size: 12px; font-weight: 700; white-space: nowrap; }
.rp-badge.rp-draft { background: #eef1f5; color: #5b6b80; }
.rp-badge.rp-submitted { background: rgba(91,91,214,.12); color: var(--blue); }
.rp-summary { padding: 6px 6px 2px; overflow-x: auto; }
.rp-tbl { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.rp-tbl th { text-align: left; font-weight: 700; color: var(--navy); background: #f6f9fe; padding: 10px 12px; border-bottom: 1px solid var(--line); white-space: nowrap; }
.rp-tbl td { padding: 10px 12px; border-bottom: 1px solid var(--line); color: var(--text); vertical-align: top; }
.rp-tbl tr:last-child td { border-bottom: none; }
.rp-tbl tbody tr:hover { background: rgba(91,91,214,.04); }
.rp-avg { font-weight: 800; color: var(--blue); white-space: nowrap; }
.rp-block { margin-top: 18px; }
.rp-block-title { font-size: 14px; font-weight: 800; color: var(--navy); margin-bottom: 10px; display: flex; align-items: center; gap: 8px; }
.rp-block-title::before { content: ''; width: 4px; height: 15px; border-radius: 99px; background: var(--grad); }
.rp-auto { display: grid; gap: 14px; }
.rp-auto-block { background: #f8fafd; border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; }
.rp-auto-title { font-size: 12.5px; font-weight: 700; color: var(--blue); margin-bottom: 8px; letter-spacing: .02em; }
.rp-auto .rp-tbl th { background: transparent; padding: 7px 10px; font-size: 12.5px; }
.rp-auto .rp-tbl td { padding: 7px 10px; font-size: 12.5px; }
/* 仅作用于周报自动数据区的小绿标（不覆盖提醒中心 .rp-tag 的按类型配色） */
.rp-auto .rp-tag { display: inline-flex; align-items: center; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 700; background: rgba(22,163,74,.12); color: #15803d; }
.rp-tag2 { display: inline-flex; align-items: center; padding: 1px 8px; border-radius: 6px; font-size: 11px; font-weight: 700; background: rgba(91,91,214,.10); color: var(--blue); margin-left: 2px; }
.rp-empty { color: var(--amber, #b9770b); font-size: 12.5px; font-weight: 600; }
.rp-kv { font-size: 13.5px; color: var(--text); }
.rp-kv b { color: var(--navy); font-weight: 800; margin: 0 2px; }
.rp-list { font-size: 13.5px; color: var(--text); line-height: 1.9; }
.rp-hint { font-size: 13px; color: var(--text); opacity: .82; background: #f1f5fb; border: 1px dashed #cdd9ea; border-radius: 10px; padding: 12px 14px; line-height: 1.6; }
.rp-form { display: grid; grid-template-columns: 1fr; gap: 4px; }
.rp-ai { margin-left: 4px; vertical-align: middle; }
.rp-meta { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 6px; }
.rp-meta-item { font-size: 13px; color: var(--text); }
.rp-meta-item b { color: var(--navy); }
.rp-scores .rp-score-card { background: #f8fafd; border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; margin-bottom: 10px; }
.rp-score-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.rp-score-user { font-weight: 700; color: var(--navy); font-size: 14px; }
.rp-role { font-size: 12px; color: var(--text); opacity: .7; font-weight: 600; }
.rp-score-total { font-weight: 800; color: var(--blue); font-size: 15px; }
.rp-si { display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--text); padding: 3px 0; flex-wrap: wrap; }
.rp-si-name { font-weight: 600; min-width: 120px; }
.rp-si-pts { font-weight: 800; font-size: 14px; }
.rp-si-pts.plus { color: #15803d; }
.rp-si-pts.minus { color: #dc2626; }
.rp-si-reason { color: var(--text); opacity: .78; font-size: 12.5px; }
.rp-score-form { background: #f8fafd; border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; margin-top: 10px; }
.rp-score-row { display: grid; grid-template-columns: minmax(140px, 1fr) 70px 90px 1fr; gap: 8px; align-items: center; margin-bottom: 8px; }
.rp-score-row .rp-si-name { font-size: 13px; }
.rp-score-row select, .rp-score-row input { padding: 8px 10px; font-size: 13px; border: 1px solid #d7dee8; border-radius: 9px; background: #fff; color: var(--navy); font-family: inherit; }
.rp-score-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 6px; }
.rp-live { font-size: 14px; color: var(--text); }
.rp-live b { color: var(--blue); font-size: 18px; font-weight: 800; }
.rp-note-inp { width: 100%; min-width: 180px; padding: 7px 10px; font-size: 12.5px; border: 1px solid #d7dee8; border-radius: 8px; background: #fff; color: var(--navy); font-family: inherit; box-sizing: border-box; }
.rp-note-inp::placeholder { color: #93a1b5; }
.rp-chg { color: var(--blue); font-weight: 700; white-space: nowrap; }
.rp-chg b { color: var(--blue); }
.rp-score-comment { margin-top: 10px; }
.rp-score-comment label { display: block; font-size: 12.5px; color: var(--navy); font-weight: 600; margin-bottom: 5px; }
.rp-score-comment textarea { width: 100%; min-height: 64px; padding: 10px 12px; font-size: 13px; border: 1px solid #d7dee8; border-radius: 10px; background: #fff; color: var(--navy); font-family: inherit; resize: vertical; box-sizing: border-box; }
.rp-si-comment { margin-top: 7px; padding: 6px 10px; background: #f4f8ff; border-left: 3px solid var(--blue); border-radius: 6px; font-size: 12.5px; color: var(--navy); }
@media (max-width: 560px) {
  .rp-score-row { grid-template-columns: 1fr 60px 80px; }
  .rp-score-row .rp-si-name { grid-column: 1 / -1; min-width: 0; }
}
.ann-new { display: inline-flex; align-items: center; margin-left: 8px; padding: 1px 7px; border-radius: 999px; font-size: 10.5px; font-weight: 800; letter-spacing: .5px; color: #fff; background: linear-gradient(135deg,#e23b3b,#ff6a5a); border: 1px solid rgba(226,59,59,.5); vertical-align: middle; transform: translateY(-1px); }
/* 商机：关键信息 + 操作合并到同一行（减少横向占用） */
.td-line { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 6px; flex-wrap: wrap; }
.td-keypoints { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }

/* 深色模式：提醒中心（清掉红/琥珀色条，完成按钮改清爽浅蓝） */
body.theme-dark .reminder-center .rc-line.is-overdue { border-left-color: transparent; }
body.theme-dark .reminder-center .rc-line.is-warning { border-left-color: transparent; }
body.theme-dark .reminder-center .rc-state--overdue { color: #e8b27a; background: transparent; }
body.theme-dark .reminder-center .rc-state--warning { color: #fcd34d; background: transparent; }
body.theme-dark .rc-done { background: rgba(124,124,255,.16); border-color: rgba(124,124,255,.45); color: #aab0ff; box-shadow: none; }
body.theme-dark .rc-done:hover { background: rgba(124,124,255,.26); color: #c3c8ff; }
body.theme-dark .rp-item.rp-overdue { border-left-color: transparent; }
body.theme-dark .rm-item { background: transparent; border-color: transparent; border-bottom-color: var(--line); }
body.theme-dark .rm-item:hover { background: rgba(124,124,255,.07); border-color: transparent; border-bottom-color: var(--line); box-shadow: none; }
body.theme-dark .rm-done { background: rgba(124,124,255,.16); border-color: rgba(124,124,255,.45); color: #aab0ff; box-shadow: none; }
body.theme-dark .rm-done:hover { background: rgba(124,124,255,.26); color: #c3c8ff; }
/* 提醒中心页面 / 铃铛：深色下的补充配色 */
body.theme-dark .rm-title { color: #e8edff; }
body.theme-dark .rm-msg { color: #93a0c4; }
body.theme-dark .rm-item.rm-read .rm-title { color: #a8b0c4; }
body.theme-dark .rm-act { color: #aab0ff; border-color: rgba(160,180,255,.22); }
body.theme-dark .rm-act:hover { background: rgba(124,124,255,.14); border-color: rgba(124,124,255,.4); color: #c3c8ff; }
body.theme-dark .rm-act.warn { color: #fbbf24; border-color: rgba(251,191,36,.3); }
body.theme-dark .rm-act.warn:hover { background: rgba(251,191,36,.14); border-color: rgba(251,191,36,.5); color: #fcd34d; }
body.theme-dark .rm-read-pill { color: #93a0c4; background: rgba(255,255,255,.08); }
body.theme-dark .rm-hide-pill { color: #e8b27a; background: rgba(232,178,122,.14); }
body.theme-dark .rmp-title { color: #e8edff; }
body.theme-dark .rmp-sub, body.theme-dark .rmp-tip { color: #93a0c4; }
body.theme-dark .rmp-sub b { color: #cdd6ff; }
body.theme-dark .rmp-num { background: rgba(124,124,255,.12); border-color: rgba(124,124,255,.26); }
body.theme-dark .rmp-num .v { color: #e8edff; }
body.theme-dark .rmp-num .l { color: #93a0c4; }
body.theme-dark .rmp-num.hot { background: rgba(226,59,59,.14); border-color: rgba(226,59,59,.3); }
body.theme-dark .rmp-num.hot .v { color: #fb7185; }
body.theme-dark .rp-x { color: #93a0c4; border-color: rgba(160,180,255,.22); }
body.theme-dark .rp-x:hover { color: #fb7185; border-color: rgba(226,59,59,.4); background: rgba(226,59,59,.14); }
body.theme-dark .rm-more:hover { background: #1b2030; }
body.theme-dark .rm-tab { background: #1b2030; border-color: #2a3142; color: #c2c8d4; }
body.theme-dark .rm-tab:hover { border-color: #3a4256; color: #e6e9ef; }
body.theme-dark .rm-tab.active { color: #fff; }
body.theme-dark .rm-tab b { background: color-mix(in srgb, var(--c) 26%, #1b2030); color: #fff; }

/* ---- 系统设置 · 工资标准表 ---- */
.tbl-nowrap th, .tbl-nowrap td { white-space: nowrap; }
.sc-inp {
  width: 92px; padding: 5px 8px; border: 1px solid var(--line); border-radius: 8px;
  background: var(--bg-2); color: var(--text); font-size: 13px; text-align: right;
}
.sc-inp:focus { outline: none; border-color: var(--blue); background: #fff; box-shadow: 0 0 0 3px rgba(91,91,214,.12); }
.sc-chk { display: inline-flex; align-items: center; gap: 5px; font-size: 12.5px; color: var(--text-2); cursor: pointer; }
.sc-chk input { width: 15px; height: 15px; accent-color: var(--blue); cursor: pointer; }
body.theme-dark .sc-inp { background: #1b2436; border-color: #2c3a52; }
body.theme-dark .sc-inp:focus { background: #111a2b; }

/* ---- 项目详情页头部：编辑 / 删除 项目按钮 ---- */
.pd-act { margin-right: 8px; }
@media (max-width: 720px) { .pd-act { margin-right: 6px; } }

/* ---- 投标报价模块 ---- */
.opp-card { display: flex; flex-direction: column; gap: 8px; }
.opp-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
.opp-name { font-size: 15px; font-weight: 700; color: var(--navy); line-height: 1.35; }
.opp-cust { font-size: 12.5px; color: var(--text-2); }
.opp-fin { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; padding: 10px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.opp-fin .k { font-size: 11.5px; color: var(--text-3); margin-bottom: 2px; }
.opp-fin .v { font-size: 14px; font-weight: 700; color: var(--navy); font-variant-numeric: tabular-nums; }
.opp-res { font-size: 12.5px; padding: 7px 10px; border-radius: 8px; line-height: 1.5; }
.opp-res.ok { background: rgba(34,197,94,.1); color: #15803d; }
.opp-res.no { background: rgba(148,163,184,.14); color: var(--text-2); }
.opp-acts { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 2px; }
body.theme-dark .opp-name, body.theme-dark .opp-fin .v { color: #dce7f7; }
body.theme-dark .opp-res.ok { background: rgba(34,197,94,.16); color: #86efac; }
body.theme-dark .opp-res.no { background: rgba(255,255,255,.06); color: var(--text-2); }

/* ---- 客户经理点选（一个客户可能有多位客户经理） ---- */
/* ---- 系统设置：实施负责人默认 ---- */
.impl-owner-row { display: grid; grid-template-columns: 1fr 220px; gap: 12px; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--line); }
.impl-owner-row:last-of-type { border-bottom: none; }
.io-cat { font-size: 14px; font-weight: 700; color: var(--navy); }
body.theme-dark .io-cat { color: #dce7f7; }

/* ---- 实施负责人多选（立项 / 调整） ---- */
.impl-pick { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.impl-opt {
  display: flex; align-items: center; gap: 7px; cursor: pointer;
  padding: 7px 10px; border-radius: 10px; font-size: 13px; font-weight: 600;
  background: var(--bg-2); border: 1px solid var(--line); color: var(--text); transition: all .15s;
}
.impl-opt:hover { border-color: var(--blue); background: var(--blue-bg); color: var(--blue); }
.impl-opt input { accent-color: var(--blue); width: 15px; height: 15px; cursor: pointer; }
.impl-opt:has(input:checked) { background: var(--blue-bg); border-color: var(--blue); color: var(--blue); }
.impl-opt i { font-style: normal; font-weight: 500; font-size: 11px; color: var(--text-3); }
.impl-opt:has(input:checked) i { color: var(--blue); }

.td-op-bid { background: var(--blue-bg); color: var(--blue); border-color: rgba(91,91,214,.3); font-weight: 600; }
.td-op-bid:hover { background: var(--blue); color: #fff; border-color: var(--blue); }
body.theme-dark .td-op-bid { background: rgba(96,165,250,.16); color: #c4b5fd; }
body.theme-dark .td-op-bid:hover { background: var(--blue); color: #fff; }

.mgr-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.mgr-chip {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  padding: 5px 11px; border-radius: 999px; font-size: 13px; font-weight: 600;
  background: var(--bg-2); color: var(--text);
  border: 1px solid var(--line); transition: all .15s;
}
.mgr-chip:hover { border-color: var(--blue); color: var(--blue); background: var(--blue-bg); }
.mgr-chip.on { background: var(--blue); border-color: var(--blue); color: #fff; box-shadow: 0 2px 8px rgba(91,91,214,.25); }
.mgr-tag { font-size: 10.5px; font-weight: 500; padding: 1px 6px; border-radius: 6px; background: rgba(0,0,0,.07); color: var(--text-3); }
.mgr-tag.main { background: var(--blue-bg); color: var(--blue); }
.mgr-chip.on .mgr-tag { background: rgba(255,255,255,.22); color: #fff; }
body.theme-dark .mgr-chip { background: rgba(255,255,255,.05); color: #dce7f7; }
body.theme-dark .mgr-chip:hover { background: rgba(96,165,250,.16); }
body.theme-dark .mgr-chip.on { background: var(--blue); color: #fff; }
body.theme-dark .mgr-tag { background: rgba(255,255,255,.1); color: var(--text-2); }
body.theme-dark .mgr-tag.main { background: rgba(96,165,250,.2); color: #c4b5fd; }

/* ---- 项目归档清单 ---- */
.ar-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 10px 0 14px; border-bottom: 1px solid var(--line); margin-bottom: 14px; }
.ar-title { font-size: 17px; font-weight: 800; color: var(--navy); }
.ar-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 18px; }
.ar-cell { background: var(--bg-2); border: 1px solid var(--line); border-radius: 10px; padding: 9px 12px; }
.ar-cell .k { font-size: 11.5px; color: var(--text-3); margin-bottom: 3px; }
.ar-cell .v { font-size: 15px; font-weight: 700; color: var(--navy); font-variant-numeric: tabular-nums; }
.ar-sec { margin-bottom: 18px; }
.ar-sec-t { font-size: 13.5px; font-weight: 700; color: var(--navy); padding-left: 9px; border-left: 4px solid var(--blue); margin-bottom: 8px; }
@media (max-width: 640px) { .ar-grid { grid-template-columns: repeat(2, 1fr); } }
body.theme-dark .ar-cell { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.12); }
body.theme-dark .ar-cell .v, body.theme-dark .ar-title, body.theme-dark .ar-sec-t { color: #dce7f7; }

/* ---- 列表通用：排序条 + 分页条 ---- */
.sort-bar {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  margin: 0 0 14px; padding: 8px 12px;
  background: linear-gradient(180deg, rgba(255,255,255,.72), rgba(255,255,255,.45));
  border: 1px solid var(--line); border-radius: 12px;
}
.sort-bar-lbl { font-size: 12px; color: var(--text-3); font-weight: 600; letter-spacing: .04em; }
.sort-btn {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 5px 12px; border-radius: 999px; cursor: pointer; user-select: none;
  font-size: 12.5px; font-weight: 600; color: var(--text-2);
  background: var(--bg-2); border: 1px solid transparent;
  transition: all .22s var(--ease);
}
.sort-btn:hover { color: var(--navy); background: var(--blue-bg); border-color: rgba(91,91,214,.25); }
.sort-btn.active {
  color: #fff; background: linear-gradient(135deg, var(--blue), #7c8cf0);
  border-color: transparent; box-shadow: 0 3px 10px rgba(91,91,214,.28);
}
.sort-arrow { font-size: 11px; line-height: 1; min-width: 8px; text-align: center; }
.pager-bar {
  display: flex; align-items: center; justify-content: center; gap: 14px; flex-wrap: wrap;
  margin-top: 16px; padding: 6px 0 2px;
}
.pager-info { font-size: 12.5px; color: var(--text-3); font-variant-numeric: tabular-nums; }
body.theme-dark .sort-bar { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); }
body.theme-dark .sort-btn { background: rgba(255,255,255,.06); color: var(--text-2); }
body.theme-dark .sort-btn:hover { background: rgba(91,91,214,.18); color: #d9d8fb; }
body.theme-dark .sort-btn.active { background: linear-gradient(135deg, var(--blue), #7c8cf0); color: #fff; }
body.theme-dark .tbl tfoot td { background: rgba(255,255,255,.05); }

/* ---- 导出 / 打印 ---- */
.vp-acts { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
@media print {
  header, .mobile-nav, .fab, .fab-menu, .page-head, .topbar-back, .notif-panel, .modal-mask,
  .vh-actions, .card-actions, .qa-dropdown, .vp-acts, .fab-item,
  .sort-bar, .pager-bar, .search-box, .pill-tabs, .proj-tabs { display: none !important; }
  body, .content, .main { background: #fff !important; }
  .content { padding: 0 !important; max-width: none !important; margin: 0 !important; }
  .card { break-inside: avoid; box-shadow: none !important; border: 1px solid #d8dde6 !important; margin-bottom: 10px !important; }
  .table-wrap { overflow: visible !important; border: none !important; }
  a { text-decoration: none !important; color: inherit !important; }
  .grid, .grid-2, .grid-3 { display: block !important; }
  .grid > * { margin-bottom: 10px; }
}

/* ================= 分配实施人员 · 安排实施节点（2026-10-03） ================= */
.np-tip {
  display: flex; align-items: flex-start; gap: 8px;
  padding: 10px 14px; margin-bottom: 14px; border-radius: 10px;
  background: linear-gradient(135deg, rgba(91,91,214,.10), rgba(124,58,237,.08));
  border: 1px solid rgba(91,91,214,.20);
  font-size: 13px; color: var(--text-2); line-height: 1.7;
}
.node-plan-group { margin-top: 18px; }
.np-sub { font-weight: 400; font-size: 12px; color: var(--text-3); margin-left: 6px; }
.np-tpl { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 10px 0 6px; }
.np-tpl select { flex: 1; min-width: 200px; max-width: 360px; }
.np-period { margin-bottom: 8px; line-height: 1.7; }
.np-head {
  display: grid; grid-template-columns: 1fr 168px 92px; gap: 10px;
  padding: 6px 10px; font-size: 12px; color: var(--text-3); font-weight: 600;
  background: var(--bg-2); border-radius: 8px; margin-bottom: 6px;
}
.np-row {
  display: grid; grid-template-columns: 1fr 168px 92px; gap: 10px; align-items: center;
  padding: 6px 10px; border-radius: 8px; margin-bottom: 6px;
  background: var(--bg-1); border: 1px solid var(--border);
  transition: background .2s var(--ease), border-color .2s var(--ease);
}
.np-row:hover { background: var(--bg-2); border-color: rgba(91,91,214,.28); }
.np-row.np-done { background: rgba(22,163,74,.07); border-color: rgba(22,163,74,.25); }
.np-row .np-idx { position: absolute; margin-left: -20px; font-size: 11px; color: var(--text-3); }
.np-row .np-name {
  width: 100%; padding: 7px 10px; border: 1px solid var(--border); border-radius: 8px;
  background: var(--bg-1); color: var(--text-1); font-size: 13px; font-family: inherit;
}
.np-row .np-name:read-only { background: var(--bg-2); color: var(--text-3); }
.np-row .np-date {
  width: 100%; padding: 7px 10px; border: 1px solid var(--border); border-radius: 8px;
  background: var(--bg-1); color: var(--text-1); font-size: 13px; font-family: inherit;
}
.np-row .np-badge { font-size: 12px; color: var(--green, #16a34a); font-weight: 600; text-align: center; }
.np-row .np-badge.muted { color: var(--text-3); }
.pub-tag {
  display: inline-block; margin-left: 8px; padding: 2px 9px; border-radius: 999px;
  font-size: 11.5px; font-weight: 600; vertical-align: middle;
}
.pub-tag.ok { background: rgba(22,163,74,.12); color: #16a34a; border: 1px solid rgba(22,163,74,.25); }
.pub-tag.warn { background: rgba(232,163,61,.14); color: #b9770b; border: 1px solid rgba(232,163,61,.32); }
/* 系统设置：节点模板默认（项目类型 × 服务类别） */
.nd-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 16px; margin-top: 12px; }
.nd-pt { padding: 14px 16px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-2); }
.nd-pt-title { font-size: 14px; font-weight: 800; color: var(--navy); margin-bottom: 10px; }
.nd-row { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.nd-cat { width: 88px; flex: none; font-size: 13px; color: var(--text-2); font-weight: 600; }
.nd-row select { flex: 1; min-width: 0; }
body.theme-dark .np-tip { background: linear-gradient(135deg, rgba(91,91,214,.16), rgba(124,58,237,.12)); border-color: rgba(91,141,239,.28); color: #c8d4e8; }
body.theme-dark .np-row { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.10); }
body.theme-dark .np-row .np-name, body.theme-dark .np-row .np-date { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.14); color: #e6ecf5; }
body.theme-dark .np-head { background: rgba(255,255,255,.05); color: #a2a5c9; }
body.theme-dark .pub-tag.ok { background: rgba(34,197,94,.16); color: #4ade80; border-color: rgba(34,197,94,.3); }
body.theme-dark .pub-tag.warn { background: rgba(251,191,36,.14); color: #fbbf24; border-color: rgba(251,191,36,.3); }
body.theme-dark .nd-pt { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.10); }
body.theme-dark .nd-pt-title { color: #c0b9ff; }
@media (max-width: 700px) {
  .np-head, .np-row { grid-template-columns: 1fr 130px 62px; }
  .np-row .np-idx { display: none; }
}


/* =====================================================================
   UI 翻新 · 紫青渐变（浅色为主）—— 视觉增强层
   仅做视觉增强，不改变任何布局结构与类名；整段删除即可还原
   ===================================================================== */

/* 滚动条 */
::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: rgba(91,91,214,.26); border-radius: 6px;
  border: 2px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background: rgba(91,91,214,.46); background-clip: padding-box; }

::selection { background: rgba(91,91,214,.18); color: var(--navy); }

/* 卡片：统一过渡与悬浮反馈 */
.card { transition: transform .22s var(--ease), box-shadow .22s var(--ease), border-color .22s var(--ease); }
.card:hover { border-color: rgba(91,91,214,.20); }
.card-title { letter-spacing: .4px; }
.card-head { margin-bottom: 18px; }

/* 统计卡 */
.stat-card { border-radius: 18px; }
.stat-card::after { opacity: .9; }
.stat-ico { box-shadow: 0 6px 14px rgba(91,91,214,.18); }

/* 表格 */
thead th { font-weight: 700; letter-spacing: .3px; color: var(--text-2); }
tbody tr:hover { background: #f2f3fd; }
tbody td { padding-top: 11px; padding-bottom: 11px; }

/* 标签 */
.tag { border-radius: 999px; }

/* 按钮 */
.btn { border-radius: 12px; }
.btn-primary { box-shadow: 0 8px 22px rgba(91,91,214,.26); }
.btn:hover { box-shadow: 0 6px 16px rgba(30,27,75,.08); }

/* 弹窗（右侧抽屉） */
.modal-head { background: linear-gradient(135deg, rgba(91,91,214,.08), rgba(14,116,144,.05)); }
.modal-foot { background: #fff; }
.modal .form-item input:focus, .modal .form-item select:focus, .modal .form-item textarea:focus {
  box-shadow: 0 0 0 4px rgba(91,91,214,.12); }

/* =====================================================================
   全站统一分页条（2026-10-05）
   系统曾并存多套分页样式：.pager-bar（项目/客户/审批/合同/台账/商机主力）、
   .pb-pager（首页最近项目，曾被做成大胶囊 + 19px 大页码，用户嫌"又大又丑"）、
   .rm-pager / .rm-pager-in（提醒中心）、.td-pager（招标，曾带灰底卡片）、
   .rj-pager（旧残留）。现统一成一套克制小号样式，深浅主题一致。
   ===================================================================== */
.pager-bar, .pb-pager, .rm-pager, .rm-pager-in, .td-pager, .rj-pager {
  display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap;
  /* 关键：旧 .pb-pager 靠 width:fit-content + margin:auto 才居中，
     统一后 margin 左右改为 0，必须显式撑满宽度，否则翻页条会靠左 */
  width: 100%;
  margin: 10px 0 2px; padding: 8px 0 2px;
  background: none; border: none; border-radius: 0;
  border-top: 1px dashed var(--border);
  font-size: 12px; font-weight: 600; color: var(--text-3);
}
.pager-bar .btn, .pb-pager .btn, .rm-pager .btn, .rm-pager-in .btn, .td-pager .btn, .rj-pager .btn {
  padding: 3px 11px; font-size: 12px; border-radius: 8px; font-weight: 700;
}
.pager-info, .td-page-info, .rj-pager-info,
.pager-bar > span, .pb-pager > span, .rm-pager > span, .rm-pager-in > span {
  /* 原用最浅的 --text-3，翻页信息看不清；提亮到二级文字色，字号微增，尺寸仍保持克制 */
  font-size: 12.5px; font-weight: 700; color: var(--text-2); font-variant-numeric: tabular-nums;
}
/* 当前页码：小号加粗 + 电光蓝，稍突出但不夸张（原 19px 太大） */
.pg-cur { font-weight: 700; color: var(--blue); font-size: 12.5px; padding: 0 1px; }
.theme-dark .pg-cur { color: #aab0ff; }

/* 搜索框聚焦光晕 */
.topbar-search input:focus { box-shadow: 0 0 0 4px rgba(91,91,214,.12); }

/* 顶栏返回按钮 */
.topbar-back:hover { box-shadow: 0 6px 16px rgba(91,91,214,.18); }

/* 空状态 */
.empty { padding: 34px 20px; }

/* 极光背景换成紫青 */
#bg-aurora::before { background: radial-gradient(circle, rgba(129,140,248,.5), transparent 60%); }
#bg-aurora::after  { background: radial-gradient(circle, rgba(34,211,238,.42), transparent 60%); }

/* 补丁⑱：实施节点模板——清晰编号清单 + 逐条编辑 */
.ntpl-nodes { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.ntpl-nodes li { display: flex; align-items: center; gap: 9px; padding: 6px 10px; border-radius: 10px; background: linear-gradient(120deg, rgba(124,58,237,.07), rgba(91,91,214,.06)); border: 1px solid rgba(124,58,237,.16); font-size: 13.5px; color: var(--text); }
.ntpl-idx { flex: 0 0 auto; width: 22px; height: 22px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; color: #fff; background: linear-gradient(120deg, #7c3aed, #5b5bd6); }
.ntpl-name { font-weight: 600; }
body.theme-dark .ntpl-nodes li { background: rgba(124,58,237,.12); border-color: rgba(124,58,237,.28); }
body.theme-dark .ntpl-idx { background: linear-gradient(120deg, #8b5cf6, #6366f1); }

.ntpl-edit-row { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.ntpl-edit-row .ntpl-idx { flex: 0 0 auto; }
.ntpl-edit-input { flex: 1 1 auto; min-width: 0; }
.ntpl-mv, .ntpl-del { flex: 0 0 auto; padding: 4px 9px; line-height: 1.2; }

/* =====================================================================
   深色主题 · 文字色统一提亮（清爽化）  —— 补丁⑳
   ---------------------------------------------------------------------
   问题根源：深色主题块里只重定义了「底色」变量（--green-bg / --blue-bg / --red-bg…），
   但**文字用**的 --blue / --green / --amber / --red / --cyan / --gold 全都还是浅色主题的值，
   于是深底上出现 #5b5bd6（暗蓝）、#16a34a（暗绿）、#d97706（暗橙）、#0e7490（暗青）这类
   发闷的颜色 —— 既看不清，又显得五颜六色很杂乱（典型：子项目卡片「当前：实施进展 X%」胶囊）。
   做法：在深色主题里把这些变量统一换成柔和的浅色调，全站所有蓝字/绿字/橙字/红字一次性
   变清楚、变统一，不用去改散落各处的 60 多条规则。
   注意：少数「实心填充 + 白字」的位置，填充会跟着变量一起变浅导致白字糊掉，下面单独锁回深色填充。
   ===================================================================== */
body.theme-dark {
  --blue: #aab0ff;
  --blue-2: #8b95f6;
  --cyan: #5cc6f0;
  --green: #4ade80;
  --amber: #f0b35a;
  --red: #fb7185;
  --gold: #f0b35a;
}
/* 实心填充 + 白字：文字色提亮后，这里把填充锁回深色，保证白字仍然清晰 */
body.theme-dark .btn-danger,
body.theme-dark .pill-tab-danger.active,
body.theme-dark .rp-del:hover { background: #dc2626; border-color: #dc2626; color: #fff; }
body.theme-dark .toggle-btn.on,
body.theme-dark .step.done .step-dot,
body.theme-dark .tl-step.done .tl-dot { background: #16a34a; border-color: #16a34a; color: #fff; }
body.theme-dark .step.reject .step-dot,
body.theme-dark .tl-step.terminated .tl-dot { background: #dc2626; border-color: #dc2626; color: #fff; }
body.theme-dark .step.done .step-line { background: #16a34a; }
body.theme-dark .badge.bg-green { background: #16a34a !important; }
body.theme-dark .badge.bg-red { background: #dc2626 !important; }
body.theme-dark .badge.bg-gold { background: #b45309 !important; }
body.theme-dark .nav-badge,
body.theme-dark .notif-bell .dot,
body.theme-dark .mn-badge,
body.theme-dark .reminder-center .rc-dot.rc-red { background: #dc2626; color: #fff; }
body.theme-dark .qr-card.selected::after,
body.theme-dark .td-op-go,
body.theme-dark .mgr-chip.on { background: #4f46e5; border-color: #4f46e5; color: #fff; }
body.theme-dark .td-op-bid:hover { background: #4f46e5; border-color: #4f46e5; color: #fff; }

/* =====================================================================
   深色 · 「实心色块 + 白字」兜底补丁
   上面把 --blue/--green/--red/--gold 等提亮后，凡是拿它们当「实心背景」的位置
   （删除按钮、开关、步骤圆点、红点徽标、选中打勾…）底色会跟着变浅，白字就糊了。
   这里单独把这些锁回深色底，保证白字依然清楚。新增同类写法时记得同步。
   ===================================================================== */
body.theme-dark .btn-danger,
body.theme-dark .btn-danger:hover,
body.theme-dark .pill-tab-danger.active,
body.theme-dark .rp-del:hover,
body.theme-dark .topnav-link .nav-badge,
body.theme-dark .notif-bell .dot { background: #b91c1c; border-color: transparent; color: #fff; }
body.theme-dark .toggle-btn.on,
body.theme-dark .step.done .step-dot,
body.theme-dark .step.done .step-line { background: #15803d; border-color: #15803d; color: #fff; }
body.theme-dark .step.reject .step-dot { background: #b91c1c; border-color: #b91c1c; color: #fff; }
body.theme-dark .badge.bg-green { background: #15803d !important; color: #fff; }
body.theme-dark .badge.bg-red { background: #b91c1c !important; color: #fff; }
body.theme-dark .badge.bg-gold { background: #a16207 !important; color: #fff; }
body.theme-dark .qr-card.selected::after { background: #4f46e5; color: #fff; }
body.theme-dark .reminder-center .rc-dot.rc-red { background: #b91c1c; }
body.theme-dark .reminder-center .rc-dot.rc-amber { background: #d97706; }
/* 逾期胶囊原本是「浅底深字」硬编码，深色下会变成一块突兀的白 → 改成深色半透明 + 亮红字 */
body.theme-dark .chip-overdue { background: rgba(226,59,59,.16); color: #ff9a9a; border-color: rgba(226,59,59,.32); }

/* 深色：提醒中心的小标签是「白字 + 彩色底」，琥珀/浅绿这类亮底配白字偏淡 →
   把底色按 58% 压深（保留原有色相），白字立刻清楚 */
/* 提醒小标签是「白字 + 彩色底」，琥珀 / 亮绿这类亮底配白字只有 2.1 对比度、发虚。
   用 inset 阴影铺满的方式压暗底色：inset 阴影画在背景之上、文字之下，所以只压底不压字，白字立刻清楚。
   （比 color-mix 兼容性更好，且保留原有色相） */
body.theme-dark .rm-tag { box-shadow: inset 0 0 0 100px rgba(6,10,24,.46); }
body.theme-dark .rm-tab.active { box-shadow: inset 0 0 0 100px rgba(6,10,24,.46), 0 4px 12px rgba(0,0,0,.35); }

/* 浅色模式：金色字（#f59e0b）压在浅底 / 浅金底上对比只有 1.9~2.1，属于"能看见但发虚"
   → 文字改用深一档的琥珀棕 #b45309（仍是金色系，对比升到 5+）。只改文字，不动金底按钮 */
body:not(.theme-dark) .tag-gold { color: #b45309; }
body:not(.theme-dark) .c-gold { color: #b45309 !important; }

/* 浅色模式：金色文字（--gold #f59e0b）压在白底 / 浅金底上对比只有 1.9~2.0，属于「能看见但发虚」
   → 金色的「文字」改深一档（#b45309 琥珀棕），对比升到 4.5+；金底按钮等仍用亮金，不受影响 */
body:not(.theme-dark) .c-gold { color: #b45309 !important; }
body:not(.theme-dark) .tag-gold { color: #b45309; }

/* ===== 全部公告页（首页「今日动态 → 全部公告」进来） ===== */
.ann-list { display: flex; flex-direction: column; }
.ann-row { display: flex; align-items: center; gap: 10px; padding: 12px 4px; border-bottom: 1px solid var(--line); cursor: pointer; transition: .18s var(--ease); }
.ann-row:last-child { border-bottom: none; }
.ann-row:hover { background: rgba(91,91,214,.05); }
.ann-row.is-new .ann-t { color: var(--navy); }
.ann-l { flex: 1 1 0; min-width: 0; }
.ann-t { font-size: 14px; font-weight: 600; color: var(--navy); display: flex; align-items: center; gap: 6px; }
.ann-s { font-size: 11.5px; color: var(--text-3); margin-top: 3px; }
.ann-st { color: #b45309; }
.ann-row > .v { font-size: 12px; font-weight: 600; color: var(--blue); white-space: nowrap; }
.ann-content { margin-top: 12px; font-size: 13.5px; line-height: 1.85; color: var(--text-2); white-space: normal; }
/* 首页今日动态里的「全部公告」入口 */
.srow.ann-all { border-top: 1px dashed var(--line); margin-top: 2px; }
.srow.ann-all .all-lb { font-weight: 700; color: var(--blue); }
body.theme-dark .ann-row:hover { background: rgba(124,124,255,.08); }
body.theme-dark .ann-t { color: #e6e9f5; }
body.theme-dark .ann-s { color: #8b93ad; }
body.theme-dark .ann-st { color: #fbbf24; }
body.theme-dark .ann-content { color: #c7cce0; }
body.theme-dark .ann-row > .v { color: #aab0ff; }
body.theme-dark .srow.ann-all .all-lb { color: #aab0ff; }

/* =====================================================================
   系统设置 · 可折叠板块（基础设置）
   每一块「点标题展开 / 收起」，默认收起：收起时只留一行标题 + 数量小标签，
   说明文字跟着一起藏起来，页面才不会一进来就是一大片字。
   ===================================================================== */
.set-sec { background: var(--card); border: 1px solid var(--border); border-radius: 14px; margin-bottom: 12px; overflow: hidden; transition: border-color .18s var(--ease), box-shadow .18s var(--ease); }
.set-sec.is-open { border-color: rgba(91,91,214,.32); box-shadow: 0 6px 18px rgba(91,91,214,.08); }
.set-sec-head { display: flex; align-items: center; gap: 12px; padding: 14px 16px; cursor: pointer; user-select: none; transition: background .18s var(--ease); }
.set-sec-head:hover { background: rgba(91,91,214,.05); }
.set-sec-txt { flex: 1 1 0; min-width: 0; }
.set-sec-title { font-size: 15px; font-weight: 700; color: var(--navy); display: flex; align-items: center; gap: 8px; }
.set-sec-badge { font-size: 11.5px; font-weight: 600; padding: 2px 9px; border-radius: 999px; background: rgba(91,91,214,.1); color: var(--blue); border: 1px solid rgba(91,91,214,.18); white-space: nowrap; }
.set-sec-sub { font-size: 12px; color: var(--text-2); margin-top: 5px; line-height: 1.6; }
/* 收起状态只留标题一行，说明文字藏掉 → 列表更清爽 */
.set-sec:not(.is-open) .set-sec-sub { display: none; }
.set-sec-right { flex: none; display: flex; align-items: center; gap: 8px; }
.set-sec-arrow { flex: none; display: inline-flex; align-items: center; gap: 4px; font-size: 12.5px; font-weight: 700; color: var(--blue); white-space: nowrap; }
.set-sec-arrow i { font-style: normal; font-size: 10px; }
.set-sec-body { display: none; padding: 4px 16px 16px; }
.set-sec.is-open .set-sec-body { display: block; }
/* 顶部提示条：说明 + 全部展开 / 全部收起 */
.set-sec-bar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; justify-content: space-between; padding: 10px 14px; margin-bottom: 14px; background: var(--bg-2); border: 1px solid var(--border); border-radius: 12px; }
.set-sec-bar .ssb-tip { font-size: 12.5px; color: var(--text-2); line-height: 1.6; }
.set-sec-bar .ssb-tip b { color: var(--blue); }
.set-sec-bar .ssb-ops { flex: none; display: flex; gap: 8px; }

body.theme-dark .set-sec.is-open { border-color: rgba(129,140,248,.34); box-shadow: 0 6px 18px rgba(0,0,0,.3); }
body.theme-dark .set-sec-head:hover { background: rgba(124,124,255,.08); }
body.theme-dark .set-sec-title { color: #e6e9f5; }
body.theme-dark .set-sec-sub { color: #9aa3bb; }
body.theme-dark .set-sec-badge { background: rgba(129,140,248,.16); color: #aab0ff; border-color: rgba(129,140,248,.3); }
body.theme-dark .set-sec-arrow { color: #aab0ff; }
body.theme-dark .set-sec-bar { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.1); }
body.theme-dark .set-sec-bar .ssb-tip { color: #9aa3bb; }
body.theme-dark .set-sec-bar .ssb-tip b { color: #aab0ff; }

/* =====================================================================
   用章申请的「用印份数」：− / ＋ 数字加减控件
   （弹窗里 .modal .form-item input 已有统一样式，这里必须用同级选择器才压得住）
   ===================================================================== */
.form-item .num-step { display: inline-flex; align-items: stretch; width: 100%; max-width: 200px; border: 1px solid #d7dee8; border-radius: 11px; overflow: hidden; background: #fff; }
.form-item .num-step .ns-btn { flex: none; width: 42px; border: none; background: var(--bg-2); color: var(--navy); font-size: 18px; font-weight: 700; line-height: 1; cursor: pointer; transition: .16s var(--ease); }
.form-item .num-step .ns-btn:hover { background: rgba(91,91,214,.14); color: var(--blue); }
.modal .form-item .num-step input { width: 100%; min-width: 0; flex: 1 1 auto; padding: 12px 6px; border: none; border-left: 1px solid #d7dee8; border-right: 1px solid #d7dee8; border-radius: 0; background: #fff; text-align: center; font-size: 15px; font-weight: 700; color: var(--navy); -moz-appearance: textfield; }
.modal .form-item .num-step input:focus { box-shadow: none; border-color: #d7dee8; }
.modal .form-item .num-step input::-webkit-outer-spin-button,
.modal .form-item .num-step input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

body.theme-dark .form-item .num-step { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.16); }
body.theme-dark .form-item .num-step .ns-btn { background: rgba(255,255,255,.08); color: #e6e9f5; }
body.theme-dark .form-item .num-step .ns-btn:hover { background: rgba(124,124,255,.2); color: #aab0ff; }
body.theme-dark .modal .form-item .num-step input { background: rgba(255,255,255,.04); color: var(--text); border-left-color: rgba(255,255,255,.16); border-right-color: rgba(255,255,255,.16); }

/* =====================================================================
   AI 审核 / 校审「补充要求」弹窗：快捷短语 + 手写要求
   ===================================================================== */
.ai-req-chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 12px; }
.ai-req-chip { font-size: 12.5px; font-weight: 600; padding: 6px 12px; border-radius: 999px; background: var(--bg-2); border: 1px solid var(--border); color: var(--text-2); cursor: pointer; user-select: none; transition: .16s var(--ease); }
.ai-req-chip:hover { border-color: rgba(91,91,214,.42); color: var(--blue); background: rgba(91,91,214,.08); }
.ai-req-chip.on { background: var(--blue); border-color: var(--blue); color: #fff; box-shadow: 0 4px 12px rgba(91,91,214,.22); }
.ai-req-text { width: 100%; padding: 12px 14px; font-size: 14px; line-height: 1.6; font-family: inherit; color: var(--navy); background: #fbfdff; border: 1px solid #d7dee8; border-radius: 11px; resize: vertical; }
.ai-req-text:focus { outline: none; border-color: var(--blue); background: #fff; box-shadow: 0 0 0 4px rgba(91,91,214,.12); }
/* 审核结果里回显「本次提了什么要求」 */
.ai-req-show { background: rgba(91,91,214,.07); border-radius: 9px; padding: 7px 10px; margin-bottom: 6px; }

body.theme-dark .ai-req-chip { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.14); color: #b9c2d6; }
body.theme-dark .ai-req-chip:hover { background: rgba(124,124,255,.16); border-color: rgba(124,124,255,.42); color: #aab0ff; }
body.theme-dark .ai-req-chip.on { background: #4f46e5; border-color: #4f46e5; color: #fff; }
body.theme-dark .ai-req-text { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.16); color: var(--text); }
body.theme-dark .ai-req-text:focus { border-color: var(--blue); box-shadow: 0 0 0 4px rgba(124,124,255,.18); }
/* 成果文件卡片上的「盖章件」（盖章记录 + 盖章页附件，用户问在哪 → 直接摆出来能下载） */
.dl-seals { margin-top: 10px; padding: 10px 12px; border: 1px dashed var(--border); border-radius: 10px; background: var(--bg-2); }
.dl-seals-h { font-size: 12.5px; font-weight: 700; color: var(--navy); margin-bottom: 6px; }
.dl-seal-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 6px 0; border-top: 1px dashed var(--line); }
.dl-seal-row:first-of-type { border-top: none; }
.dl-seal-no { font-size: 12px; font-weight: 700; color: var(--blue); white-space: nowrap; }
.dl-seal-meta { font-size: 11.5px; color: var(--text-2); }
.dl-seal-atts { margin-left: auto; display: flex; gap: 6px; flex-wrap: wrap; }

body.theme-dark .ai-req-show { background: rgba(129,140,248,.14); }
body.theme-dark .dl-seals { background: rgba(255,255,255,.04); }
body.theme-dark .dl-seals-h { color: #e6e9f5; }
body.theme-dark .dl-seal-meta { color: #9aa3bb; }
body.theme-dark .dl-seal-no { color: #aab0ff; }

/* =====================================================================
   系统设置 → 审批流程（可视化改每一类审批走几关、谁审、谁抄送）
   ===================================================================== */
.apv-chain { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.apv-step { font-size: 12.5px; font-weight: 600; padding: 3px 10px; border-radius: 8px; background: rgba(91,91,214,.08); border: 1px solid rgba(91,91,214,.16); color: var(--navy); white-space: nowrap; }
.apv-arrow { color: var(--text-3); font-size: 12px; }
.apv-step-box { border: 1px solid var(--border); border-radius: 12px; padding: 10px 12px; margin-bottom: 10px; background: var(--bg-2); }
.apv-step-h { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; font-size: 13px; }
.apv-step-ops { display: flex; gap: 6px; flex-wrap: wrap; }
.apv-person { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.apv-person .apv-sel { flex: 1 1 auto; min-width: 0; max-width: 340px; }
.apv-cc { display: flex; gap: 8px; flex-wrap: wrap; }

body.theme-dark .apv-step { background: rgba(129,140,248,.14); border-color: rgba(129,140,248,.28); color: #e6e9f5; }
body.theme-dark .apv-step-box { background: rgba(255,255,255,.04); }
body.theme-dark .apv-arrow { color: #7b849c; }

/* =====================================================================
   审批中心 → 批量审批（原地进入批量模式，勾选后一次性通过）
   ===================================================================== */
.ap-topbar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.ap-topbar-right { margin-left: auto; display: flex; align-items: center; gap: 10px; }
.ap-top-n { display: inline-block; min-width: 20px; padding: 1px 6px; margin-left: 4px; border-radius: 999px; background: rgba(255,255,255,.22); font-size: 11.5px; font-weight: 700; }

.apb-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; flex-wrap: wrap; padding: 16px 20px 12px; border-bottom: 1px solid var(--line); }
.apb-title { font-size: 16px; font-weight: 800; color: var(--text); }
.apb-sub { font-size: 12.5px; color: var(--muted); margin-top: 6px; line-height: 1.7; }
.apb-sub b { color: var(--blue-2); font-weight: 700; }

.apb-bar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 10px 20px; background: var(--bg-2); border-bottom: 1px solid var(--line); }
.apb-all { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; font-weight: 700; color: var(--text-2); cursor: pointer; }
.apb-all input, .apb-cb { width: 16px; height: 16px; accent-color: var(--blue-2); cursor: pointer; }
.apb-count { font-size: 12.5px; color: var(--muted); }
.apb-bar-right { margin-left: auto; display: flex; gap: 8px; }

.apb-list { max-height: 52vh; overflow-y: auto; padding: 6px 20px 12px; }
.apb-row { display: flex; align-items: flex-start; gap: 12px; padding: 11px 12px; margin-top: 8px; border: 1px solid var(--border); border-radius: 12px; background: var(--card); cursor: pointer; transition: border-color .16s, background .16s; }
.apb-row:hover { border-color: rgba(91,91,214,.38); background: var(--bg-2); }
.apb-row.on { border-color: var(--blue-2); background: rgba(91,91,214,.06); }
.apb-row-off { opacity: .62; cursor: not-allowed; background: var(--bg-2); }
.apb-cb { margin-top: 3px; flex: 0 0 auto; }
.apb-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 5px; }
.apb-line1 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.apb-t { font-size: 14px; font-weight: 700; color: var(--text); }
.apb-line2 { font-size: 12px; color: var(--text-3); }
.apb-line2 b { color: var(--text-2); font-weight: 600; }
.apb-line3 { display: flex; gap: 8px; flex-wrap: wrap; font-size: 12px; color: var(--muted); }
.apb-f { padding: 2px 9px; border-radius: 8px; background: var(--bg-2); border: 1px solid var(--line); }
.apb-f b { color: var(--text-3); font-weight: 600; margin-right: 5px; }
.apb-warn { font-size: 12px; color: var(--amber); font-weight: 600; }

.apb-foot { display: flex; align-items: flex-end; gap: 10px; flex-wrap: wrap; padding: 14px 20px; border-top: 1px solid var(--line); }
.apb-foot .form-item { margin-bottom: 0; }
#apb-submit:disabled { opacity: .5; cursor: not-allowed; }

.apb-loading { display: flex; align-items: center; gap: 9px; padding: 14px 20px; font-size: 13px; color: var(--muted); border-top: 1px solid var(--line); }
.apb-spin { width: 15px; height: 15px; border-radius: 50%; border: 2px solid rgba(91,91,214,.25); border-top-color: var(--blue-2); animation: apbspin .8s linear infinite; }
@keyframes apbspin { to { transform: rotate(360deg); } }
.apb-err { padding: 14px 20px; font-size: 13px; color: var(--red); border-top: 1px solid var(--line); }

.apb-rgroup { padding: 12px 20px 4px; }
.apb-rh { font-size: 13px; font-weight: 800; margin-bottom: 8px; }
.apb-rh.ok { color: var(--green); }
.apb-rh.warn { color: var(--amber); }
.apb-rh.bad { color: var(--red); }
.apb-rlist { display: flex; flex-direction: column; gap: 6px; }
.apb-ritem { font-size: 12.5px; padding: 7px 11px; border-radius: 9px; border: 1px solid var(--line); background: var(--bg-2); color: var(--text-2); }
.apb-ritem.ok { border-color: rgba(22,163,74,.28); background: var(--green-bg); }
.apb-ritem.warn { border-color: rgba(217,119,6,.28); background: var(--amber-bg); }
.apb-ritem.bad { border-color: rgba(226,59,59,.28); background: var(--red-bg); }
.apb-rwhy { display: block; margin-top: 3px; font-size: 12px; color: var(--muted); }

@media (max-width: 700px) {
  .apb-list { max-height: none; }
  .ap-topbar-right { margin-left: 0; }
}

body.theme-dark .ap-top-n { background: rgba(255,255,255,.18); }
body.theme-dark .apb-title { color: #eef1fa; }
body.theme-dark .apb-sub { color: #9aa3bb; }
body.theme-dark .apb-sub b { color: #aab0ff; }
body.theme-dark .apb-bar { background: rgba(255,255,255,.04); }
body.theme-dark .apb-all { color: #c9d0e2; }
body.theme-dark .apb-row { background: rgba(255,255,255,.03); }
body.theme-dark .apb-row:hover { background: rgba(255,255,255,.06); }
body.theme-dark .apb-row.on { border-color: #818cf8; background: rgba(129,140,248,.14); }
body.theme-dark .apb-row-off { background: rgba(255,255,255,.02); }
body.theme-dark .apb-t { color: #eef1fa; }
body.theme-dark .apb-line2 { color: #8b94ab; }
body.theme-dark .apb-line2 b { color: #c9d0e2; }
body.theme-dark .apb-line3 { color: #9aa3bb; }
body.theme-dark .apb-f { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.1); }
body.theme-dark .apb-warn { color: #fbbf24; }
body.theme-dark .apb-ritem { background: rgba(255,255,255,.04); color: #c9d0e2; }
body.theme-dark .apb-ritem.ok { background: rgba(22,163,74,.14); }
body.theme-dark .apb-ritem.warn { background: rgba(217,119,6,.14); }
body.theme-dark .apb-ritem.bad { background: rgba(226,59,59,.14); }
body.theme-dark .apb-rwhy { color: #9aa3bb; }

/* =====================================================================
   审批流程 → 两个新维度（按服务类别分设 / 请假按天数·日期分段）
   ===================================================================== */
/* 列表行里的维度概览 chips */
.apv-cats { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 7px; }
.apv-cat { font-size: 11.5px; padding: 2px 9px; border-radius: 8px; background: var(--bg-2); border: 1px dashed var(--border); color: var(--text-3); display: inline-flex; align-items: center; gap: 5px; }
.apv-cat b { font-weight: 700; color: var(--text-2); }
.apv-cat i { font-style: normal; color: var(--text-3); }
.apv-cat.on { background: var(--blue-bg); border: 1px solid rgba(91,91,214,.28); color: var(--navy); }
.apv-cat.on b { color: var(--blue-2); }

/* 编辑弹窗顶部的维度切换条 */
.apv-dim { display: flex; gap: 8px; flex-wrap: wrap; padding: 10px 12px; margin-bottom: 12px; border-radius: 12px; background: var(--bg-2); border: 1px solid var(--line); }
.apv-dim-sub { margin-top: -6px; padding: 8px 12px; background: transparent; border-style: dashed; }
.apv-user-add { width: auto; min-width: 130px; padding: 5px 8px; border: 1px dashed var(--border); border-radius: 999px; font-size: 12.5px; color: var(--text-2); background: var(--card); }
.apv-dot { display: inline-block; width: 7px; height: 7px; margin-left: 5px; border-radius: 50%; background: var(--gold); vertical-align: 1px; }

/* 服务类别编辑主体顶部说明 */
.apv-cat-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; padding: 9px 12px; margin-bottom: 12px; border-radius: 10px; background: rgba(245,158,11,.08); border: 1px solid rgba(245,158,11,.24); font-size: 12.5px; color: var(--text-2); }
.apv-cat-bar b { color: var(--amber); }

/* 请假规则列表 */
.apv-rules { margin-bottom: 12px; }
.apv-rule { display: flex; align-items: center; gap: 10px; padding: 9px 12px; margin-top: 8px; border: 1px solid var(--border); border-radius: 11px; background: var(--card); cursor: pointer; transition: border-color .16s, background .16s; }
.apv-rule:hover { border-color: rgba(91,91,214,.35); }
.apv-rule.on { border-color: var(--blue-2); background: rgba(91,91,214,.06); }
.apv-rule-no { flex: 0 0 auto; width: 22px; height: 22px; border-radius: 50%; background: var(--bg-2); border: 1px solid var(--border); color: var(--text-2); font-size: 12px; font-weight: 800; display: flex; align-items: center; justify-content: center; }
.apv-rule.on .apv-rule-no { background: var(--blue-2); border-color: var(--blue-2); color: #fff; }
.apv-rule-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.apv-rule-cond { font-size: 13px; color: var(--text); }
.apv-rule-chain { font-size: 12px; color: var(--muted); }
.apv-rule-ops { display: flex; gap: 5px; }

/* 当前规则的条件编辑区 */
.apv-rule-edit { border: 1px solid var(--border); border-radius: 12px; padding: 12px 14px; background: var(--bg-2); }
.apv-re-h { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; font-size: 13px; margin-bottom: 8px; }
.apv-re-h b { color: var(--text); }
.apv-conds { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.apv-cond { display: inline-flex; align-items: center; gap: 6px; padding: 7px 12px; border-radius: 10px; border: 1px solid var(--border); background: var(--card); font-size: 12.5px; color: var(--text-2); cursor: pointer; }
.apv-cond.on { border-color: var(--blue-2); background: rgba(91,91,214,.06); }
.apv-cond input[type="checkbox"] { width: 15px; height: 15px; accent-color: var(--blue-2); }
.apv-cond-n { width: 56px; padding: 3px 7px; border: 1px solid var(--border); border-radius: 7px; font-size: 12.5px; color: var(--text); background: var(--card); }
.apv-cond-d { width: 76px; padding: 3px 7px; border: 1px solid var(--border); border-radius: 7px; font-size: 12.5px; color: var(--text); background: var(--card); }

body.theme-dark .apv-cat { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); color: #9aa3bb; }
body.theme-dark .apv-cat b { color: #c9d0e2; }
body.theme-dark .apv-cat.on { background: rgba(129,140,248,.14); border-color: rgba(129,140,248,.34); color: #e6e9f5; }
body.theme-dark .apv-cat.on b { color: #aab0ff; }
body.theme-dark .apv-dim { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.09); }
body.theme-dark .apv-cat-bar { background: rgba(245,158,11,.1); border-color: rgba(245,158,11,.3); color: #c9d0e2; }
body.theme-dark .apv-cat-bar b { color: #fbbf24; }
body.theme-dark .apv-rule { background: rgba(255,255,255,.03); }
body.theme-dark .apv-rule.on { border-color: #818cf8; background: rgba(129,140,248,.13); }
body.theme-dark .apv-rule-no { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.14); color: #c9d0e2; }
body.theme-dark .apv-rule-cond { color: #eef1fa; }
body.theme-dark .apv-rule-chain { color: #9aa3bb; }
body.theme-dark .apv-rule-edit { background: rgba(255,255,255,.03); border-color: rgba(255,255,255,.1); }
body.theme-dark .apv-re-h b { color: #eef1fa; }
body.theme-dark .apv-cond { background: rgba(255,255,255,.04); border-color: rgba(255,255,255,.12); color: #c9d0e2; }
body.theme-dark .apv-cond.on { border-color: #818cf8; background: rgba(129,140,248,.12); }
body.theme-dark .apv-cond-n, body.theme-dark .apv-cond-d { background: rgba(255,255,255,.06); border-color: rgba(255,255,255,.14); color: #eef1fa; }

/* 审批详情弹窗（点击审批卡片打开，覆盖所有审批类型：投标/报价、立项、合同、开票、行政OA…） */
.ap-detail-modal { display: flex; flex-direction: column; gap: 16px; }
.ap-dm-meta { color: var(--muted, #8a91a5); font-size: 13px; }
.ap-dm-sec { background: rgba(120,130,160,.06); border: 1px solid rgba(120,130,160,.16); border-radius: 10px; padding: 12px 14px; }
.ap-dm-sec-t { font-weight: 600; font-size: 13px; margin-bottom: 8px; opacity: .92; }
.ap-dm-tip { margin-bottom: 12px; padding: 9px 12px; border-radius: 10px; font-size: 13px; font-weight: 600;
  background: linear-gradient(135deg, rgba(91,91,214,.12), rgba(124,58,237,.10));
  border: 1px solid rgba(91,91,214,.28); color: var(--blue, #4f46e5); }
.ap-dm-tip.muted { background: rgba(120,130,160,.08); border-color: rgba(120,130,160,.18); color: var(--muted, #8a91a5); font-weight: 500; }

/* 通知中心 / 提醒列表：可点击直达的条目右侧给一个「去处理 ›」，让人一眼知道这条能点 */
.rp-go, .rm-go { flex: 0 0 auto; align-self: center; margin-left: auto; font-size: 12px; font-weight: 600;
  color: var(--blue, #4f46e5); background: rgba(91,91,214,.10); border: 1px solid rgba(91,91,214,.22);
  border-radius: 999px; padding: 3px 10px; white-space: nowrap; transition: all .18s var(--ease); }
.rp-item:hover .rp-go, .rm-item:hover .rm-go { background: rgba(91,91,214,.18); border-color: rgba(91,91,214,.4); transform: translateX(2px); }
.rp-item.rp-clickable:hover { border-color: color-mix(in srgb, var(--blue) 42%, var(--border)); transform: translateY(-1px); }
body.theme-dark .rp-go, body.theme-dark .rm-go { color: #a5b4fc; background: rgba(124,124,255,.16); border-color: rgba(124,124,255,.34); }
body.theme-dark .ap-dm-tip { background: linear-gradient(135deg, rgba(124,124,255,.18), rgba(167,139,250,.14)); border-color: rgba(124,124,255,.4); color: #c7d2fe; }

/* =====================================================================
   流畅模式 / 打字减负（col110，老电脑优化）
   ⚡ 流畅模式（顶栏 ⚡ 或 系统设置→提醒设置）：卸掉所有常驻重特效，功能不变
   ===================================================================== */
/* ① 背景极光：两个 72vmax 光斑 + blur(46px) + 永久无限动画 —— 老电脑头号杀手，直接不画 */
.perf-lite #bg-aurora { display: none !important; }
/* ② 全站毛玻璃 / 过渡 / 入场动画 / will-change 合成层：一律卸掉
      （用 !important 保证压过前面所有同权重规则，含深色主题里的写法） */
.perf-lite *,
.perf-lite *::before,
.perf-lite *::after {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  animation-duration: .01ms !important;
  animation-delay: 0ms !important;
  animation-iteration-count: 1 !important;
  transition-duration: .01ms !important;
  transition-delay: 0ms !important;
  will-change: auto !important;
}
/* ③ 点击粒子层：不显示（initFx 在流畅模式下也根本不会创建元素） */
.perf-lite #fx-layer { display: none !important; }
/* ④ 毛玻璃卸掉后，原本靠模糊"托底"的半透明面板会发透 → 补一层实色，保证文字照样清晰 */
.perf-lite .topnav,
.perf-lite .cockpit-nav,
.perf-lite .qa-menu,
.perf-lite #search-results,
.perf-lite .notif-panel,
.perf-lite .fab-menu { background: var(--bg-2) !important; }
.perf-lite .modal-mask { background: rgba(15,31,54,.52) !important; }

/* 打字 / 输入中（不管开不开流畅模式都生效）：
   表单都在弹窗里，每敲一个字都会让全屏遮罩重算一次模糊 —— 打字时先把它关掉，背景动画也暂停 */
body.is-typing .modal-mask { backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }
body.is-typing #bg-aurora::before,
body.is-typing #bg-aurora::after { animation-play-state: paused !important; }
/* 切到别的标签页 / 最小化时，背景动画也别在后台空转 */
body.page-hidden #bg-aurora::before,
body.page-hidden #bg-aurora::after { animation-play-state: paused !important; }

/* 顶栏「流畅模式」按钮：开启时点亮，一眼看得出状态 */
.iconbtn#perf-toggle-btn.on { background: linear-gradient(135deg, rgba(91,91,214,.18), rgba(14,116,144,.14)); border-color: rgba(91,91,214,.42); color: var(--blue); }
body.theme-dark .iconbtn#perf-toggle-btn.on { background: linear-gradient(135deg, rgba(124,124,255,.26), rgba(34,211,238,.18)); border-color: rgba(124,124,255,.5); color: #a5b4fc; }

/* =====================================================================
   手机端适配（col94）：弹窗全屏 + 表单堆叠
   ⚠ 必须放在文件末尾：上面 .modal / .modal-lg 等基础样式都在前面，
   同等权重靠「后来居上」才能盖过去（放前面会被基础规则压住失效）
   ===================================================================== */
@media (max-width: 760px) {
  /* 弹窗：右侧抽屉改为整屏铺满（100dvh 兼容手机地址栏高度） */
  .modal, .modal-lg, .modal-md, .modal-sm {
    width: 100vw; height: 100vh; height: 100dvh;
    border-left: none; border-radius: 0;
    animation: fadeIn .22s var(--ease);
  }
  .modal-head, .modal-foot { padding-left: 14px; padding-right: 14px; }
  .modal-body { padding: 14px 14px 24px; }
  /* 表单两列 → 单列堆叠（.form-item 自带 margin-bottom，间距不受影响） */
  .form-row { grid-template-columns: 1fr; gap: 0; }
  /* 底部按钮窄屏放不下时换行并拉满，方便拇指点按 */
  .modal-foot { flex-wrap: wrap; }
  .modal-foot .btn { flex: 1 1 auto; justify-content: center; }
  /* iOS 键盘弹出时聚焦小字号输入框会自动放大页面：输入字号 ≥16px 可避免 */
  .modal .form-item input, .modal .form-item select, .modal .form-item textarea { font-size: 16px; }
  /* 网格子项允许收缩（min-width:auto 会让长内容把 grid 撑出屏幕，典型：系统维护双列卡片） */
  .grid > *, .grid-2 > *, .grid-3 > * { min-width: 0; }
}

/* =====================================================================
   知了标讯接入 UI + 招标卡片「完整信息」展示（2026-10-10）
   ===================================================================== */
/* --- 知了标讯配置弹窗 --- */
.zlbx-head { display: flex; gap: 14px; align-items: flex-start; margin-bottom: 14px; }
.zlbx-logo { flex: 0 0 auto; width: 52px; height: 52px; border-radius: 14px; display: flex; align-items: center; justify-content: center;
  font-weight: 800; font-size: 17px; color: #fff; letter-spacing: 1px;
  background: linear-gradient(135deg, #4f46e5, #0891b2); box-shadow: 0 8px 20px rgba(79,70,229,.28); }
.zlbx-intro { min-width: 0; }
.zlbx-t { font-size: 14px; font-weight: 700; color: var(--text); margin-bottom: 4px; }
.zlbx-bal { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; padding: 12px 14px; border-radius: 12px; margin-bottom: 14px;
  background: linear-gradient(135deg, rgba(16,185,129,.10), rgba(6,182,212,.08)); border: 1px solid rgba(16,185,129,.28); }
.zlbx-bal-bad { background: var(--bg-2); border-color: var(--line); }
.zlbx-bal .zbx { display: inline-flex; align-items: baseline; gap: 4px; }
.zlbx-bal .k { font-size: 11px; color: var(--text-3); }
.zlbx-bal .v { font-size: 18px; font-weight: 800; color: var(--green); }
.zlbx-bal .u { font-size: 11px; color: var(--text-3); }
.zlbx-last { font-size: 12px; color: var(--text-2); padding: 8px 12px; border-radius: 10px; background: var(--bg-2); margin-top: 10px; }
.zlbx-preview { margin-top: 12px; max-height: 320px; overflow-y: auto; }
.zlbx-pv-head { font-size: 12px; font-weight: 700; color: var(--text-2); margin-bottom: 8px; }
.zlbx-pv-item { padding: 9px 12px; border-radius: 10px; background: var(--bg-2); margin-bottom: 7px; border: 1px solid var(--line); }
.zpv-t { font-size: 12.5px; font-weight: 600; color: var(--text); line-height: 1.45; word-break: break-all; }
.zpv-m { font-size: 11px; color: var(--text-3); margin-top: 3px; display: flex; flex-wrap: wrap; gap: 6px; }

/* --- 首页「商机 · 标找人」条目（2026-10-12 重做排版）---
   单行结构：左边「标题一行 + 信息一行（地区 · 日期 · 招标人 · 金色金额）」，
   右边只留一个竖直居中的「匹配分」胶囊。金额不再挂在分数下面，没金额时右侧也不空一块。 */
.lead-row { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: 10px;
  cursor: pointer; transition: background .16s var(--ease); }
.lead-row:hover { background: var(--bg-2); }
.lead-row + .lead-row { box-shadow: 0 -1px 0 var(--line); }
.lead-row .lr-main { flex: 1; min-width: 0; }
.lead-row .lr-title { font-size: 13px; font-weight: 600; color: var(--text); line-height: 1.45;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lead-row .lr-new { display: inline-block; margin-left: 6px; padding: 0 5px; border-radius: 4px;
  font-size: 9.5px; font-weight: 800; letter-spacing: .3px; color: #fff; vertical-align: 1px;
  background: linear-gradient(135deg, #f43f5e, #fb923c); }
.lead-row .lr-meta { margin-top: 3px; font-size: 11.5px; color: var(--text-3); line-height: 1.5;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lead-row .lr-meta .lr-money { margin-left: 6px; font-size: 12px; font-weight: 700; color: var(--gold); }
.lead-row .lr-score { flex: none; display: inline-flex; align-items: baseline; gap: 2px;
  padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 800; white-space: nowrap;
  background: rgba(100,116,139,.14); color: var(--text-2); }
.lead-row .lr-score.hot { background: linear-gradient(135deg, rgba(79,70,229,.16), rgba(6,182,212,.14)); color: var(--blue); }
.lead-row .lr-score i { font-style: normal; font-size: 10px; font-weight: 600; opacity: .65; }
/* 手机端：间距收紧即可，结构不变 */
@media (max-width: 760px) {
  .lead-row { gap: 8px; padding: 9px 10px; }
  .lead-row .lr-title { font-size: 12.5px; }
}

/* --- 招标卡片「完整信息」行（金额 / 招标人 / 代理 / 截止 / 编号 / 行业 / 中标） --- */
.td-rich { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; margin-top: 8px; font-size: 12px; }
.td-rich > span { display: inline-flex; align-items: center; gap: 4px; min-width: 0; }
.td-rich .tr-money { font-weight: 800; color: var(--gold); }
.td-rich .tr-caller { color: var(--text-2); max-width: 42%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.td-rich .tr-agency { color: var(--text-3); max-width: 36%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.td-rich .tr-dl { font-weight: 700; color: #f43f5e; }
.td-rich .tr-no { font-size: 11px; }
.td-rich-sub { margin-top: 4px; font-size: 11.5px; }
.td-rich-sub .tr-ind { color: var(--cyan); }
.td-rich .tr-win, .td-rich-sub .tr-win { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 60%; }

/* =====================================================================
   审批中心 · 卡片等高（2026-10-10，手机端）
   手机上一列一张卡，天然不会像桌面那样被 grid 拉齐，内容多的高、内容少的矮，
   滚下来高低错落很难看。这里做三件事：
   1）标题固定最多 2 行；2）进度条不换行、超宽横滑（保住一行高）；
   3）卡片设最小高度，摘要区吃掉余量 —— 再配 JS equalizeApCards() 按最高的一张拉平。
   注意：媒体查询必须放在文件末尾，否则会被后面同权重的 .ap-* 基础规则盖掉。
   ===================================================================== */
@media (max-width: 760px) {
  .ap-card { padding: 12px 13px; min-height: 208px; }
  .ap-card-title { font-size: 14px; min-height: 2.8em; }
  .ap-card-meta { font-size: 11.5px; margin-top: 5px; gap: 6px; }
  /* 一行放不下就横滑，绝不换行 —— 换一次行卡片就高一块 */
  .ap-prog { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; padding-bottom: 1px; }
  .ap-prog::-webkit-scrollbar { display: none; }
  .ap-prog-node { white-space: nowrap; }
  .ap-prog-label { white-space: nowrap; }
  .ap-summary .ap-dl-row { font-size: 12px; }
  .ap-summary .ap-dl-label { flex: 0 0 84px; }
  .ap-card-ops { width: 100%; margin-left: 0; margin-top: 0; }
  .ap-card-ops .btn { flex: 1; min-height: 34px; }
  .ap-foot-pad { height: 34px; }
  .ap-dl-more { font-size: 11px; }
}

/* =====================================================================
   大圆打卡按钮（2026-10-10）：按移动端方案把「上班/下班打卡」做成 158px 大圆，
   带实时时钟，一眼就是打卡机的感觉。手机/桌面通用，手机上不缩水。
   ===================================================================== */
.att-clock-btn {
  width: 158px; height: 158px; border-radius: 50%; border: none; cursor: pointer;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
  background: linear-gradient(135deg, #6d28d9 0%, #5b5bd6 55%, #0891b2 100%);
  color: #fff; position: relative;
  box-shadow: 0 18px 40px rgba(91, 91, 214, .38), inset 0 1px 0 rgba(255, 255, 255, .28);
  transition: transform .2s var(--ease), box-shadow .2s var(--ease), filter .2s var(--ease);
  -webkit-tap-highlight-color: transparent;
}
.att-clock-btn:hover { transform: translateY(-3px); box-shadow: 0 24px 50px rgba(91, 91, 214, .46), inset 0 1px 0 rgba(255, 255, 255, .28); filter: brightness(1.05); }
.att-clock-btn:active { transform: scale(.95); }
.att-clock-btn.off { background: linear-gradient(135deg, #0e7490 0%, #0891b2 55%, #16a34a 100%); box-shadow: 0 18px 40px rgba(8, 145, 178, .36), inset 0 1px 0 rgba(255, 255, 255, .28); }
.att-clock-btn b { font-size: 19px; font-weight: 800; letter-spacing: 2px; }
.att-clock-time { font-size: 27px; font-weight: 800; font-variant-numeric: tabular-nums; letter-spacing: 1px; line-height: 1.1; }
.att-clock-hint { font-size: 11px; opacity: .78; letter-spacing: 1px; }
/* 呼吸光圈：提醒「该打卡了」 */
.att-clock-btn::after {
  content: ''; position: absolute; inset: -7px; border-radius: 50%;
  border: 2px solid rgba(91, 91, 214, .35); animation: attPulse 2.2s ease-out infinite; pointer-events: none;
}
.att-clock-btn.off::after { border-color: rgba(8, 145, 178, .35); }
@keyframes attPulse {
  0% { transform: scale(.94); opacity: .9; }
  70% { transform: scale(1.12); opacity: 0; }
  100% { transform: scale(1.12); opacity: 0; }
}
body.theme-dark .att-clock-btn { box-shadow: 0 18px 40px rgba(0, 0, 0, .5), inset 0 1px 0 rgba(255, 255, 255, .18); }
@media (prefers-reduced-motion: reduce) { .att-clock-btn::after { animation: none; } }

/* ============ 体检（2026-10-11）新增 ============ */
/* 审批链「找不到审批人」告警：以前这一环会被静默跳过，现在必须显式亮出来 */
.ap-gap-tag {
  display: inline-flex; align-items: center; gap: 3px; flex: none;
  padding: 2px 9px; border-radius: 999px; font-size: 11.5px; font-weight: 800; letter-spacing: .3px;
  color: #92400e; background: #fff7e6; border: 1px solid #fcd9a5;
}
body.theme-dark .ap-gap-tag { color: #fcd34d; background: rgba(217, 119, 6, .16); border-color: rgba(252, 211, 77, .38); }

.ap-gap-warn {
  margin: 0 0 12px; padding: 12px 14px; border-radius: 12px;
  background: linear-gradient(135deg, #fff8ed, #fffdf8);
  border: 1px solid #fbd9a4; box-shadow: 0 4px 14px rgba(217, 119, 6, .10);
}
.ap-gap-warn .ap-gap-t { font-size: 13.5px; font-weight: 800; color: #b45309; margin-bottom: 5px; }
.ap-gap-warn .ap-gap-b { font-size: 12.5px; line-height: 1.65; color: var(--t2, #5a6178); }
.ap-gap-warn .ap-gap-b b { color: #b45309; }
body.theme-dark .ap-gap-warn {
  background: linear-gradient(135deg, rgba(217, 119, 6, .14), rgba(217, 119, 6, .06));
  border-color: rgba(252, 211, 77, .34); box-shadow: none;
}
body.theme-dark .ap-gap-warn .ap-gap-t { color: #fcd34d; }
body.theme-dark .ap-gap-warn .ap-gap-b { color: var(--t2, #c8cfe0); }
body.theme-dark .ap-gap-warn .ap-gap-b b { color: #fcd34d; }

/* 节假日设置：年度覆盖提示条 */
.hd-note {
  margin-bottom: 14px; padding: 13px 16px; border-radius: 13px;
  border: 1px solid var(--line, #e6e9f2); background: #f7f9ff;
}
.hd-note.warn {
  border-color: #fbd9a4; background: linear-gradient(135deg, #fff8ed, #fffdf8);
  box-shadow: 0 4px 14px rgba(217, 119, 6, .10);
}
.hd-note.ok { border-color: rgba(22, 163, 74, .32); background: linear-gradient(135deg, #f2fdf6, #fbfefc); }
.hd-note-t { font-size: 14px; font-weight: 800; color: var(--navy, #1e1b4b); margin-bottom: 4px; }
.hd-note.warn .hd-note-t { color: #b45309; }
.hd-note.ok .hd-note-t { color: #15803d; }
.hd-note-b { font-size: 12.5px; line-height: 1.7; color: var(--t2, #5a6178); }
.hd-note-b b { color: #b45309; }
body.theme-dark .hd-note { background: rgba(255, 255, 255, .04); }
body.theme-dark .hd-note.warn { background: linear-gradient(135deg, rgba(217, 119, 6, .14), rgba(217, 119, 6, .05)); border-color: rgba(252, 211, 77, .34); }
body.theme-dark .hd-note.ok { background: linear-gradient(135deg, rgba(22, 163, 74, .14), rgba(22, 163, 74, .05)); border-color: rgba(74, 222, 128, .3); }
body.theme-dark .hd-note-t { color: var(--t1, #e8ecf6); }
body.theme-dark .hd-note.warn .hd-note-t { color: #fcd34d; }
body.theme-dark .hd-note.ok .hd-note-t { color: #6ee7a8; }
body.theme-dark .hd-note-b { color: var(--t2, #c8cfe0); }
body.theme-dark .hd-note-b b { color: #fcd34d; }

/* ==========================================================================
   手机端「查看为主」模式（col122）
   定位：手机上只看 + 搜，不做复杂新建与编辑；
        仅保留三个操作：外出申请、请假申请、上下班打卡。
   只在 ≤760px 生效，桌面端零影响。
   ⚠ 必须放文件末尾：基础规则在中部，同权重后位覆盖，写前面会被压住失效。
   ========================================================================== */
@media (max-width: 760px) {

  /* ---------------------------------------------------------------
     一、隐藏「新建 / 编辑 / 删除 / 批量 / 设置」类入口
     做法：按 onclick 函数名精准隐藏（只藏入口，不动弹窗内的保存按钮——
     入口没了弹窗自然打不开，也就不会误伤外出 / 请假 / 打卡的提交按钮）。
     --------------------------------------------------------------- */
  /* 新建 / 编辑 */
  [onclick*="goNewProject"], [onclick*="openNewCustomer"], [onclick*="openOppForm"],
  [onclick*="openEditContract"], [onclick*="openInitiation"], [onclick*="openBid("],
  [onclick*="openClient("], [onclick*="openNodeTplEdit"], [onclick*="openAddUser"],
  [onclick*="openAddDept"], [onclick*="openAddGroup"], [onclick*="openAddContact"],
  [onclick*="openAddChangelog"], [onclick*="createProject"], [onclick*="createSubProject"],
  [onclick*="createLegacyProject"], [onclick*="editTenderSource"], [onclick*="editLedger"],
  [onclick*="openBidCommissionForm"], [onclick*="editTenderSource"],
  /* 删除 */
  [onclick*="delProject"], [onclick*="confirmDelProject"], [onclick*="confirmDelContract"],
  [onclick*="deleteOpp"], [onclick*="delTenderSource"], [onclick*="delBidCommission"],
  [onclick*="delUser"], [onclick*="delDept"], [onclick*="delGroup"], [onclick*="delNodeTpl"],
  [onclick*="delContact"], [onclick*="delChangelog"], [onclick*="removeHoliday"],
  [onclick*="bellClearList"],
  /* 表单内「添加一行 / 添加节点」 */
  [onclick*="addParticipantRow"], [onclick*="addPayNodeRow"], [onclick*="addTeamRow"],
  [onclick*="addNodePlanRow"], [onclick*="addNodeRow"], [onclick*="addHoliday"],
  [onclick*="addContactRow"],
  /* 批量操作（小屏误触风险高，手机上取消） */
  [onclick*="apBatchOpen"], [onclick*="apBatchExit"], [onclick*="apBatchAll"],
  [onclick*="apBatchDone"], [onclick*="apBatchSubmit"],
  /* 其他写操作 */
  [onclick*="returnSeal"], [onclick*="applyUseCustomer"], [onclick*="doApprove("],
  [onclick*="saveAttExempt"], [onclick*="saveAttOffice"], [onclick*="saveTenderSource"],
  [onclick*="saveRates"], [onclick*="saveSalaryCfg"], [onclick*="saveSalaryEntry"],
  [onclick*="saveCats"], [onclick*="saveHolidays"], [onclick*="saveNodeDefaults"],
  [onclick*="saveNodeTpl"], [onclick*="saveNotifySettings"], [onclick*="saveAssignees"],
  [onclick*="saveApprovalChain"], [onclick*="saveImplOwner"], [onclick*="saveProgress"],
  [onclick*="saveDeliverable"], [onclick*="saveInvoice"], [onclick*="saveCollection"],
  [onclick*="saveCost"], [onclick*="saveLoan"], [onclick*="saveReimbursement"],
  [onclick*="saveLedger"], [onclick*="saveBid"], [onclick*="saveBidAssign"],
  [onclick*="saveOppToProject"], [onclick*="saveOppResult"], [onclick*="saveTeam"],
  [onclick*="saveEditProject"], [onclick*="saveEditContract"], [onclick*="saveClient"],
  [onclick*="saveGeneric"], [onclick*="saveOA"], [onclick*="saveSeal"],
  [onclick*="submitPauseProject"], [onclick*="submitDelay"], [onclick*="submitImplComplete"],
  [onclick*="submitArchiveApproval"], [onclick*="submitDeliverableReview"],
  [onclick*="submitDeliverableSeal"], [onclick*="submitInvoice"], [onclick*="submitCollection"],
  [onclick*="submitLoan"], [onclick*="submitReimbursement"], [onclick*="submitCost"],
  [onclick*="submitProgress"], [onclick*="submitSupplement"], [onclick*="submitBidApproval"],
  [onclick*="submitContractApproval"], [onclick*="submitNewCustomer"],
  [onclick*="submitCustomerInvoice"], [onclick*="submitBidSubmit"], [onclick*="submitBidChange"],
  [onclick*="submitBidResult"], [onclick*="submitQuoteResult"], [onclick*="submitBidCommission"],
  [onclick*="submitDept"], [onclick*="submitGroup"], [onclick*="submitEditUser"],
  [onclick*="submitContact"] {
    display: none !important;
  }

  /* ---------------------------------------------------------------
     二、移动端排版规范（方案：触控 ≥44px、卡片圆角、单列、小字清晰）
     --------------------------------------------------------------- */
  /* 触控达标：主按钮至少 44px 高 */
  .btn { min-height: 44px; }
  /* 小字不小于 12.5px */
  .small { font-size: 12.5px; }
  /* 卡片：手机上统一观感（不做大改，避免影响已精修的页面） */
  .card { border-radius: var(--radius, 18px); }
  /* 弹窗底部按钮吸底：滚到哪都能点（外出 / 请假 / 打卡 的表单都用得上） */
  .modal-foot {
    position: sticky; bottom: 0; z-index: 2;
    display: flex; gap: 10px; align-items: center;
    padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
    background: var(--card, #fff); border-top: 1px solid var(--line, #eaebf5);
  }
  .modal-foot .btn { flex: 1 1 auto; min-height: 48px; }

  /* ---------------------------------------------------------------
     三、企业微信 / 小程序内置浏览器适配
     - 底部安全区（iPhone 圆角 + 微信底部工具栏）
     - 禁止微信里字体被系统缩放影响排版
     --------------------------------------------------------------- */
  body { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
  .content { padding-bottom: calc(92px + env(safe-area-inset-bottom)); }
  .mobile-nav { padding-bottom: calc(7px + env(safe-area-inset-bottom)); }
}

/* ==========================================================================
   手机端统一升级（移动端界面方案落地 · col122）
   只在 ≤760px 生效，桌面端零影响。
   ⚠ 必须放在 styles.css 文件末尾：基础规则在文件中部，同权重后位覆盖，
   写在前面的媒体查询会被后面的普通规则压住失效（col94 踩过的坑）。
   ========================================================================== */
@media (max-width: 760px) {

  /* ---------- 1) 底部 Tab：5 项均分，触控区按方案加大 ---------- */
  .mobile-nav { overflow-x: hidden; padding-top: 6px; }
  .mn-item {
    min-width: 0; min-height: 52px; padding: 7px 2px 5px;
    font-size: 12px; gap: 4px; justify-content: center;
  }
  .mn-item svg { width: 23px; height: 23px; }

  /* ---------- 2) 「我的」页（底部 Tab 只放 5 项，其余模块收在这里） ---------- */
  .mn-profile { display: flex; align-items: center; gap: 14px; }
  .mn-av {
    flex: 0 0 auto; width: 50px; height: 50px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    color: #fff; font-size: 20px; font-weight: 800;
    background: var(--grad); box-shadow: var(--shadow-blue);
  }
  .mn-pf-txt { min-width: 0; }
  .mn-pf-name { font-size: 17px; font-weight: 800; color: var(--text); }
  .mn-pf-sub { margin-top: 3px; font-size: 12.5px; color: var(--text-2); }
  .mn-sec-t { margin-bottom: 12px; font-size: 13px; font-weight: 800; color: var(--text-2); }
  .mn-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
  .mn-grid-item {
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 7px;
    min-height: 80px; padding: 10px 4px; border-radius: var(--radius-sm);
    background: var(--bg-2); border: 1px solid var(--line); cursor: pointer;
    transition: transform .2s var(--ease);
  }
  .mn-grid-item:active { transform: scale(.96); }
  .mn-gi-ico { display: flex; color: var(--blue); }
  .mn-gi-ico svg { width: 22px; height: 22px; }
  .mn-gi-t { font-size: 12.5px; line-height: 1.3; text-align: center; color: var(--text); }
  .mn-list { display: flex; flex-direction: column; }
  .mn-li {
    display: flex; align-items: center; justify-content: space-between;
    min-height: 48px; padding: 0 2px; font-size: 14.5px; color: var(--text);
    border-bottom: 1px solid var(--line); cursor: pointer;
  }
  .mn-li:last-child { border-bottom: 0; }
  .mn-li .v { color: var(--text-3); font-size: 15px; }
  .mn-li.danger { color: var(--red); }

  /* ---------- 3) 触控达标：方案要求可点元素 ≥44px，防小屏点不中 ---------- */
  .btn { min-height: 44px; }
  .view-head .vh-actions .btn { min-height: 40px; }

  /* ---------- 4) 弹窗底部操作栏吸底：审批详情滚到哪都能批 ---------- */
  .modal-foot {
    display: flex; gap: 10px; align-items: center;
    position: sticky; bottom: 0; z-index: 2;
    padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
    background: var(--card); border-top: 1px solid var(--line);
  }
  .modal-foot .btn { flex: 1 1 auto; min-height: 48px; }

  /* ---------- 5) 小字可读性：手机上一律不低于 12.5px ---------- */
  .small { font-size: 12.5px; }

  /* ---------- 6) 深色主题配套（变量已随主题切换，这里只补硬编码处） ---------- */
  body.theme-dark .mn-grid-item { background: rgba(255, 255, 255, .05); }
  body.theme-dark .mn-li { border-color: rgba(255, 255, 255, .09); }
}

/* =====================================================================
   手机首页组件（2026-10-11 晚，沿用昨天 col122 的变量规范）
   全部走 --card / --text / --line / --grad 等主题变量，深浅主题都自适应，
   绝不硬编码颜色（硬编码会在浅色主题下变成一块块深色，发花看不清）。
   ⚠ 放在文件末尾，压住中部的基础规则
   ===================================================================== */
@media (max-width: 760px) {
  /* 清晰度：卸掉极光光斑与全屏毛玻璃（保留主题自己的背景色） */
  #bg-aurora, .aurora, .fx-layer { display: none !important; }
  body::before, body::after { display: none !important; }
  body { background-image: none !important; }
  .topbar, .mobile-nav, .modal, .card, .panel { backdrop-filter: none !important; -webkit-backdrop-filter: none !important; }

  /* 手机首页容器 */
  .m-home { padding: 14px 14px 8px; }

  /* 欢迎头：用主题渐变，白字保证可读 */
  .m-head { padding: 18px 18px 20px; border-radius: var(--radius); margin-bottom: 14px; background: var(--grad); box-shadow: var(--shadow-lg); }
  .m-head-g { font-size: 22px; font-weight: 800; color: #fff; }
  .m-head-s { margin-top: 6px; font-size: 12.5px; color: rgba(255, 255, 255, .88); }

  /* 打卡卡 */
  .m-clock { display: flex; align-items: center; gap: 12px; padding: 16px; border-radius: var(--radius); margin-bottom: 14px; min-height: 78px; background: var(--card); border: 1px solid var(--line); box-shadow: var(--shadow); }
  .m-clock-l { flex: 1; min-width: 0; }
  .m-clock-t { font-size: 16px; font-weight: 800; color: var(--text); }
  .m-clock-s { margin-top: 4px; font-size: 12.5px; color: var(--text-2); }
  .m-clock-btn { flex: 0 0 auto; min-width: 68px; height: 52px; border: 0; border-radius: var(--radius-sm); font-size: 15px; font-weight: 800; color: #fff; cursor: pointer; background: var(--grad); box-shadow: var(--shadow-blue); }
  .m-clock-btn.ok { background: var(--green); box-shadow: none; }
  .m-clock-btn[disabled] { opacity: .6; }

  /* 待办三宫格 */
  .m-todo { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 16px; }
  .m-todo-i { padding: 14px 8px; border-radius: var(--radius-sm); min-height: 80px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; background: var(--card); border: 1px solid var(--line); cursor: pointer; }
  .m-todo-n { font-size: 24px; font-weight: 800; color: var(--text); line-height: 1.1; }
  .m-todo-l { font-size: 11.5px; color: var(--text-2); }
  .m-todo-i.hot { border-color: var(--blue); background: var(--blue-bg); }
  .m-todo-i.hot .m-todo-n { color: var(--blue); }
  .m-todo-i.warn { border-color: var(--red); background: var(--red-bg); }
  .m-todo-i.warn .m-todo-n { color: var(--red); }

  /* 区块标题 */
  .m-sec { display: flex; align-items: baseline; justify-content: space-between; margin: 2px 2px 10px; }
  .m-sec-t { font-size: 14.5px; font-weight: 800; color: var(--text); }
  .m-sec-m { font-size: 12.5px; color: var(--blue); }

  /* 经营概览 2×2：卡片统一主题色，只有数字带颜色 */
  .m-kpi { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; margin-bottom: 18px; }
  .m-kpi-i { padding: 14px 14px 15px; border-radius: var(--radius); background: var(--card); border: 1px solid var(--line); box-shadow: var(--shadow); }
  .m-kpi-v { font-size: 19px; font-weight: 800; color: var(--text); line-height: 1.25; word-break: break-all; }
  .m-kpi-l { margin-top: 5px; font-size: 11.5px; color: var(--text-2); }
  .m-kpi-i.k-gold .m-kpi-v { color: var(--gold); }
  .m-kpi-i.k-green .m-kpi-v { color: var(--green); }
  .m-kpi-i.k-blue .m-kpi-v { color: var(--blue); }
  .m-kpi-i.k-purple .m-kpi-v { color: var(--blue-2); }

  /* 快捷入口 4 列 */
  .m-quick { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 18px; }
  .m-quick-i { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; padding: 12px 4px; border-radius: var(--radius-sm); min-height: 76px; cursor: pointer; background: var(--card); border: 1px solid var(--line); }
  .m-quick-i svg { width: 20px; height: 20px; color: var(--blue); }
  .m-quick-i span { font-size: 11.5px; color: var(--text); text-align: center; line-height: 1.3; }
  .m-quick-i:active { transform: scale(.97); }

  /* 最近项目：整宽竖向卡片（横滑在小屏露不全，改成一整条一条地看） */
  .m-projs { display: flex; flex-direction: column; gap: 10px; }
  .m-proj { width: 100%; padding: 14px; border-radius: var(--radius); background: var(--card); border: 1px solid var(--line); box-shadow: var(--shadow); cursor: pointer; }
  .m-proj-n { font-size: 14.5px; font-weight: 700; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .m-proj-c { margin-top: 3px; font-size: 12px; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .m-bar { margin: 10px 0 8px; height: 6px; border-radius: 99px; background: var(--bg-2); overflow: hidden; }
  .m-bar i { display: block; height: 100%; border-radius: 99px; background: var(--grad); }
  .m-proj-f { display: flex; justify-content: space-between; font-size: 11.5px; color: var(--text-3); }
  .m-none { padding: 22px; text-align: center; font-size: 13px; color: var(--text-3); background: var(--card); border: 1px dashed var(--line); border-radius: var(--radius); }
}

/* col310 弹窗堆叠：上层遮罩去 blur 调淡，避免两层全屏 blur 叠加掉帧（低性能设备） */
.modal-mask ~ .modal-mask { background: rgba(15,31,54,.25); backdrop-filter: none; }

/* --- 审批详情重排（2026-10-13）：短字段两列网格 / 长文整块 / 金额突出 / 附件可点 --- */
.adt3-hero{padding:16px 20px}
.adt3-hero-title{line-height:1.55;margin:6px 0}
.adt3-hero-sub{margin-top:8px;line-height:1.65}
.adt3-hero-meta{margin-top:9px;line-height:1.6}
.adt3-hero-top{margin-bottom:6px}
.adt3-main .ap-dl-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 28px}
.adt3-main .ap-dl-grid .ap-dl-row{flex-direction:column;gap:5px}
.adt3-main .ap-dl-grid .ap-dl-label{flex:none;text-align:left;font-size:12.5px;color:var(--text-3,#94a3b8)}
.adt3-main .ap-dl-grid .ap-dl-value{font-size:14px;font-weight:500;color:var(--text-1,#1e293b);line-height:1.65;white-space:pre-wrap;word-break:break-word}
.adt3-main .ap-dl-money .ap-dl-value{font-size:19px;font-weight:700;color:var(--gold,#b8860b)}
.adt3-main .ap-dl-row-full{display:flex;flex-direction:column;gap:6px;margin-top:18px}
.adt3-main .ap-dl-row-full>.ap-dl-label{flex:none;text-align:left;font-size:12.5px;color:var(--text-3,#94a3b8)}
.adt3-main .ap-dl-row-full>.ap-dl-value{background:var(--bg,#f8fafc);border:1px solid var(--line,#e5e7eb);border-radius:10px;padding:12px 14px;font-size:14px;line-height:1.8;white-space:pre-wrap;word-break:break-word;max-height:280px;overflow:auto}
.adt3-main .ap-attach{margin-top:18px;flex-direction:column;gap:8px}
.adt3-main .ap-attach-item{display:inline-flex;align-items:center;max-width:100%;padding:6px 14px}
.adt3-main .ap-attach-item.is-dead{color:var(--muted,#94a3b8);border-style:dashed}
.adt3-main .ap-bd{background:var(--panel-bg,#fff);border:1px solid var(--line,#e5e7eb);border-radius:10px;padding:4px 16px}
.adt3-main .ap-bd-row{display:flex;justify-content:space-between;align-items:baseline;gap:16px;padding:11px 0;font-size:14px;border-bottom:1px solid #e3e6f0}
.adt3-main .ap-bd-row:nth-child(even){background:var(--bg,#f8fafc);margin:0 -16px;padding-left:16px;padding-right:16px}
.adt3-main .ap-bd-row:last-child{border-bottom:none}
.adt3-main .ap-bd-name{color:var(--text-1,#1e293b)}
.adt3-main .ap-bd-amt{font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.adt3-main .ap-bd-sum{padding-top:12px;margin-top:2px;border-top:2px solid #d9d8fb;font-weight:700}
.adt3-main .ap-bd-sum .ap-bd-amt{font-size:16px;color:var(--gold,#b8860b)}
@media(max-width:720px){.adt3-main .ap-dl-grid{grid-template-columns:1fr}}
.adt3-main .ap-attach{margin-top:8px}
.adt3-main .ap-attach .ap-dl-label{flex:none;text-align:left;font-size:12.5px;color:var(--text-3,#94a3b8)}

/* 通知中心：未读白底紫边加粗、已读压灰；消息分类签间距 */
.nc-msg-cats{margin-bottom:12px}
.rp-item:not(.rp-read){background:var(--panel-bg,#fff);border-color:var(--line,#dcdbfb)}
.rp-item:not(.rp-read) .rp-title{font-weight:700}
.rp-item.rp-read{opacity:.55}
.rp-item.rp-read:hover{opacity:.85}

/* 提交审批成功明卡 */
.apd-box{display:flex;flex-direction:column;gap:10px}
.apd-title{font-size:15px;font-weight:700;color:var(--navy,#1e293b);line-height:1.5}
.apd-wait{font-size:14.5px;color:var(--text-1,#1e293b);background:var(--blue-bg,#eef0ff);border:1px solid var(--line,#dcdbfb);border-radius:10px;padding:10px 14px;line-height:1.6}
.apd-role{font-size:12px;color:var(--text-3,#94a3b8);background:var(--bg,#f1f5f9);border-radius:8px;padding:1px 7px;margin-left:4px}
.apd-tip{font-size:12.5px;color:var(--text-3,#94a3b8);line-height:1.6}
.ct-edit{cursor:pointer;color:var(--text-3,#9398b8);font-size:13px;padding:2px 6px;border-radius:6px}
.ct-edit:hover{color:var(--blue,#5b5bd6);background:var(--blue-bg,#eef0ff)}
/* 顶栏改小字面包屑：不再与页面大标题重复（2026-10-13 拍板） */
.topbar-title{font-size:12.5px;font-weight:400;color:var(--text-3,#9398b8);letter-spacing:0;font-family:inherit}
.topbar-title b{color:var(--navy,#1e1b4b);font-weight:700}
.topbar-title .tb-sep{margin:0 6px}

/* ============ 2026-10-14 toast 美化：图标徽章+类别牌+倒计时条+可手关 ============ */
.toast.t2{position:relative;border-left:none;padding:11px 13px 14px;align-items:flex-start;overflow:hidden;gap:11px;background:rgba(255,255,255,.94);backdrop-filter:blur(8px);border:1px solid var(--line,#eef0f4);min-width:260px;max-width:380px}
.t2-ico{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:16px;flex:none}
.t2-g{background:var(--green-bg,#ecfdf5)}.t2-r{background:var(--red-bg,#fef2f2)}.t2-b{background:var(--blue-bg,#eff6ff)}.t2-y{background:var(--amber-bg,#fffbeb)}.t2-v{background:var(--purple-bg,#f5f3ff)}
.t2-bd{flex:1;min-width:0}
.t2-tt{display:flex;align-items:center;gap:6px;line-height:1.2}
.t2-tag{font-size:10.5px;font-weight:600;border-radius:5px;padding:1px 7px;letter-spacing:1px}
.t2-tag-g{background:var(--green-bg,#d1fae5);color:var(--green,#047857)}.t2-tag-r{background:var(--red-bg,#fee2e2);color:var(--red,#b91c1c)}
.t2-tag-b{background:var(--blue-bg,#dbeafe);color:var(--blue,#1d4ed8)}.t2-tag-y{background:var(--amber-bg,#fef3c7);color:var(--amber,#b45309)}
.t2-tag-v{background:var(--purple-bg,#ede9fe);color:var(--purple,#6d28d9)}
.t2-mm{font-size:12.5px;color:var(--text-2,#6b7280);margin-top:4px;line-height:1.55;word-break:break-all}
.t2-x{color:var(--text-3,#c4c9d4);font-size:13px;flex:none;cursor:pointer;padding:2px 4px}
.t2-x:hover{color:var(--text-1,#374151)}
.t2-bar{position:absolute;left:0;bottom:0;height:3px;border-radius:2px;width:100%;transition-property:width;transition-timing-function:linear}
.t2-bar-g{background:var(--green,#22c55e)}.t2-bar-r{background:var(--red,#ef4444)}.t2-bar-b{background:var(--blue,#3b82f6)}
.t2-bar-y{background:var(--amber,#f59e0b)}.t2-bar-v{background:var(--purple,#8b5cf6)}

/* 2026-10-14 首页「今日动态」：双列网格人卡（全显不折叠）、整组可点、在岗率进度条 */
.att-sum{display:flex;justify-content:space-between;align-items:baseline;font-size:12px;color:var(--text-3,#9398b8)}
.att-sum .t b{font-size:16px;color:var(--text,#191a2e)}
.att-sum .r{font-size:13px;font-weight:700;color:var(--blue,#5b5bd6)}
.att-meter{height:6px;border-radius:99px;background:var(--bg-2,#f8f9fd);margin:6px 0 10px;overflow:hidden}
.att-meter i{display:block;height:100%;border-radius:99px;background:var(--grad,linear-gradient(135deg,#5b5bd6 0%,#0e7490 100%));transition:width .6s}
.att-group{padding:8px 6px;margin:0 -6px;border-radius:12px;position:relative}
.att-group-link{cursor:pointer;padding-right:24px}
.att-group-link:hover{background:var(--bg-2,#f8f9fd)}
.att-group-link::after{content:'›';position:absolute;right:10px;top:8px;color:var(--text-3,#9398b8);font-size:14px}
.att-tag{display:inline-block;font-size:11px;font-weight:700;padding:3px 10px;border-radius:999px;margin-bottom:6px;white-space:nowrap}
.att-tag.trip{background:rgba(30,27,75,.07);color:var(--navy,#1e1b4b)}
.att-tag.out{background:rgba(91,91,214,.1);color:var(--blue,#5b5bd6)}
.att-tag.leave{background:rgba(217,119,6,.12);color:var(--amber,#d97706)}
.att-people{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.att-people .p{display:flex;align-items:center;gap:6px;padding:5px 8px;border-radius:10px;background:var(--bg-2,#f6f7fc)}
.att-people .p i{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:6px;background:var(--grad,linear-gradient(135deg,#5b5bd6,#0e7490));color:#fff;font-style:normal;font-size:11px;font-weight:700;flex:none}
.att-people .p .p-nt{display:flex;flex-direction:column;line-height:1.25;font-size:12px;font-weight:600;color:var(--text,#191a2e)}
.att-people .p .p-time{font-style:normal;font-size:10px;font-weight:400;color:var(--text-3,#9398b8)}

/* 2026-10-14 档案中心：统计卡 */
.arch-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}
.arch-stats .stat{background:var(--card,#fff);border:1px solid var(--line,#eaebf5);border-radius:14px;padding:12px 14px}
.arch-stats .stat .k{font-size:11px;color:var(--text-3,#9398b8)}
.arch-stats .stat .v{font-size:20px;font-weight:800;margin-top:2px;color:var(--text,#191a2e)}
.arch-stats .stat .s{font-size:11px;color:var(--text-3,#9398b8);margin-top:2px}
@media (max-width:760px){.arch-stats{grid-template-columns:repeat(2,1fr)}}
