/* ============================================================
   hrx 设计令牌与全局样式
   颜色取自线上产品截图采样：顶栏 #317254、主按钮 #52B07E、
   侧栏选中态 #E8F7F0。整体走"柔和商务 + 轻 soft UI"。
   浅色为默认，:root[data-theme="dark"] 覆盖同一组令牌。
   ============================================================ */

:root {
  /* 品牌 */
  --brand-deep:    #2E6A4E;
  --brand-deep-2:  #35785A;
  --primary:       #35A46E;
  --primary-hover: #2E9263;
  --primary-press: #27804F;
  --primary-soft:  #E8F7F0;
  --primary-line:  #BCE3D1;

  /* 语义色 */
  --success: #35A46E;
  --warning: #E08B2C;
  --danger:  #D9534F;
  --info:    #3E7BB6;

  /* 中性 */
  --page:      #F4F6F5;
  --surface:   #FFFFFF;
  --surface-2: #FAFBFA;
  --raised:    #FFFFFF;
  --border:    #E5E9E7;
  --border-2:  #EFF2F0;
  --text:      #1F2A24;
  --text-2:    #5A6A61;
  --text-3:    #8A968F;
  --text-on-brand: #FFFFFF;

  /* 间距阶梯（4/8 制） */
  --sp-1: 4px;  --sp-2: 8px;  --sp-3: 12px; --sp-4: 16px;
  --sp-5: 20px; --sp-6: 24px; --sp-8: 32px; --sp-10: 40px;

  /* 圆角与阴影：三档，不再更多 */
  --r-sm: 6px; --r-md: 10px; --r-lg: 14px;
  --sh-1: 0 1px 2px rgba(31, 42, 36, .05);
  --sh-2: 0 2px 10px rgba(31, 42, 36, .07);
  --sh-3: 0 8px 28px rgba(31, 42, 36, .12);

  /* 层级 */
  --z-header: 100; --z-sidebar: 90; --z-dropdown: 800;
  --z-overlay: 1000; --z-toast: 1100;

  --header-h: 52px;
  --sidebar-w: 208px;

  color-scheme: light;
}

:root[data-theme="dark"] {
  --brand-deep:    #14261E;
  --brand-deep-2:  #1B3329;
  --primary:       #45BE84;
  --primary-hover: #56CB93;
  --primary-press: #37A570;
  --primary-soft:  #17362A;
  --primary-line:  #255843;

  --page:      #0F1613;
  --surface:   #16201B;
  --surface-2: #1A2620;
  --raised:    #1E2C25;
  --border:    #2A3A32;
  --border-2:  #22302A;
  --text:      #E6EDE9;
  --text-2:    #A3B2AA;
  --text-3:    #74857C;
  --text-on-brand: #E6EDE9;

  --sh-1: 0 1px 2px rgba(0, 0, 0, .3);
  --sh-2: 0 2px 10px rgba(0, 0, 0, .35);
  --sh-3: 0 8px 28px rgba(0, 0, 0, .5);

  color-scheme: dark;
}

* { box-sizing: border-box; }

/* hidden 必须能盖住组件自己的 display。
   浏览器默认样式里 [hidden]{display:none} 优先级极低，
   任何 .alert{display:flex} 都会把它顶掉，结果是一条空的错误条常驻页面。 */
[hidden] { display: none !important; }

html, body, #app {
  height: 100%;
  margin: 0;
}

body {
  background: var(--page);
  color: var(--text);
  font: 14px/1.6 -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
        "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;
  -webkit-font-smoothing: antialiased;
}

a { color: var(--primary); text-decoration: none; }
a:hover { color: var(--primary-hover); }

button, input, select, textarea { font: inherit; color: inherit; }

:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
  border-radius: var(--r-sm);
}

.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ---------- 登录页 ---------- */

.login {
  /* dvh 让移动端浏览器地址栏收起时也不会出现半屏空白 */
  min-height: 100dvh;
  display: grid;
  place-items: center;
  padding: var(--sp-6);
  background:
    radial-gradient(1100px 520px at 12% -10%, var(--primary-soft), transparent 62%),
    radial-gradient(900px 460px at 108% 112%, var(--primary-soft), transparent 58%),
    var(--page);
}

.login-card {
  width: min(100%, 396px);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  box-shadow: var(--sh-3);
  padding: var(--sp-8);
}

.login-brand {
  display: flex; align-items: center; gap: var(--sp-3);
  margin-bottom: var(--sp-6);
}

.login-brand .mark {
  width: 40px; height: 40px; border-radius: var(--r-md);
  background: linear-gradient(135deg, var(--primary), var(--brand-deep-2));
  color: #fff; display: grid; place-items: center;
  font-weight: 700; font-size: 17px; letter-spacing: .5px;
}

.login-brand h1 { margin: 0; font-size: 18px; font-weight: 650; }
.login-brand p  { margin: 2px 0 0; font-size: 12px; color: var(--text-3); }

/* ---------- 表单 ---------- */

.field { margin-bottom: var(--sp-4); }

.field > label {
  display: block; margin-bottom: 6px;
  font-size: 13px; color: var(--text-2);
}

.field .req { color: var(--danger); margin-left: 2px; }

.input {
  width: 100%;
  padding: 9px 12px;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  transition: border-color .15s, box-shadow .15s;
}

.input:hover { border-color: var(--primary-line); }

.input:focus {
  outline: none;
  border-color: var(--primary);
  box-shadow: 0 0 0 3px var(--primary-soft);
}

.input[aria-invalid="true"] { border-color: var(--danger); }

.field-error {
  margin-top: 5px; font-size: 12px; color: var(--danger);
  display: flex; align-items: center; gap: 4px;
}

/* ---------- 按钮 ---------- */

.btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: 6px; padding: 8px 16px; min-height: 34px;
  border: 1px solid var(--border);
  border-radius: var(--r-sm);
  background: var(--surface);
  color: var(--text);
  cursor: pointer;
  transition: background .15s, border-color .15s, color .15s, transform .06s;
  white-space: nowrap;
}

.btn:hover:not(:disabled) { border-color: var(--primary-line); color: var(--primary); }
.btn:active:not(:disabled) { transform: translateY(1px); }
.btn:disabled { opacity: .55; cursor: not-allowed; }

.btn-primary {
  background: var(--primary);
  border-color: var(--primary);
  color: #fff;
  box-shadow: var(--sh-1);
}
.btn-primary:hover:not(:disabled) {
  background: var(--primary-hover); border-color: var(--primary-hover); color: #fff;
}
.btn-primary:active:not(:disabled) { background: var(--primary-press); }

.btn-block { width: 100%; }
.btn-ghost { background: transparent; border-color: transparent; color: var(--text-2); }
.btn-ghost:hover:not(:disabled) { background: var(--border-2); color: var(--text); }
.btn-sm { min-height: 28px; padding: 4px 10px; font-size: 13px; }

.spinner {
  width: 14px; height: 14px; border-radius: 50%;
  border: 2px solid rgba(255,255,255,.45);
  border-top-color: #fff;
  animation: spin .7s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* ---------- 应用骨架 ---------- */

.app { height: 100dvh; display: flex; flex-direction: column; overflow: hidden; }

.header {
  position: sticky; top: 0; z-index: var(--z-header);
  height: var(--header-h);
  display: flex; align-items: center; gap: var(--sp-4);
  padding: 0 var(--sp-4);
  background: var(--brand-deep);
  color: var(--text-on-brand);
}

.header .logo {
  display: flex; align-items: center; gap: var(--sp-2);
  font-weight: 650; letter-spacing: .3px; flex: none;
}

.header .logo .mark {
  width: 26px; height: 26px; border-radius: 7px;
  background: rgba(255,255,255,.16);
  display: grid; place-items: center; font-size: 13px;
}

.nav { display: flex; gap: 2px; overflow-x: auto; scrollbar-width: none; flex: 1; min-width: 0; }
.nav::-webkit-scrollbar { display: none; }

.nav a {
  padding: 6px 12px; border-radius: var(--r-sm);
  color: rgba(255,255,255,.82); white-space: nowrap;
  position: relative;
}
.nav a:hover { background: rgba(255,255,255,.10); color: #fff; }
.nav a[aria-current="page"] { color: #fff; font-weight: 600; }
.nav a[aria-current="page"]::after {
  content: ""; position: absolute; left: 12px; right: 12px; bottom: -1px;
  height: 2px; background: #fff; border-radius: 2px;
}

.header-right { display: flex; align-items: center; gap: var(--sp-2); flex: none; }

.icon-btn {
  width: 32px; height: 32px; display: grid; place-items: center;
  border: 0; border-radius: var(--r-sm); cursor: pointer;
  background: transparent; color: rgba(255,255,255,.85);
}
.icon-btn:hover { background: rgba(255,255,255,.12); color: #fff; }

/* 账号按钮：圆形头像 + 名称（窄屏只留头像） */
.avatar {
  display: inline-flex; align-items: center; gap: 8px; height: 36px; padding: 2px 10px 2px 2px;
  border: 0; border-radius: 999px; cursor: pointer; background: transparent; color: #fff;
  max-width: 180px; transition: background .15s;
}
.avatar:hover, .avatar[aria-expanded="true"] { background: rgba(255,255,255,.12); }
.avatar-face {
  flex: none; width: 32px; height: 32px; border-radius: 50%;
  display: grid; place-items: center; overflow: hidden;
  background: rgba(255,255,255,.22); box-shadow: inset 0 0 0 1px rgba(255,255,255,.28);
  font-size: 12px; font-weight: 600; line-height: 1; white-space: nowrap;
}
.avatar-face .ic { width: 17px; height: 17px; }
.avatar-name {
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 13px; color: rgba(255,255,255,.9);
}
@media (max-width: 1100px) {
  .avatar { padding: 2px; }
  .avatar-name { display: none; }
}

.body { flex: 1; display: flex; min-height: 0; }
@media (max-width: 1024px) { .body { overflow: auto; } }

.sidebar {
  width: var(--sidebar-w); flex: none;
  background: var(--surface);
  border-right: 1px solid var(--border);
  padding: var(--sp-3) var(--sp-2);
  overflow-y: auto;
}

.side-group { margin-bottom: var(--sp-2); }

.side-group > .group-title {
  display: flex; align-items: center; gap: 6px;
  padding: 6px 10px; font-size: 12px; color: var(--text-3);
  letter-spacing: .3px;
}

.side-link {
  display: block; padding: 7px 10px; margin: 1px 0;
  border-radius: var(--r-sm); color: var(--text-2);
  font-size: 13px;
}
.side-link:hover { background: var(--border-2); color: var(--text); }
.side-link[aria-current="page"],
.side-link[aria-current="page"]:hover {
  background: var(--primary-soft); color: var(--primary); font-weight: 600;
}

.main { flex: 1; min-width: 0; min-height: 0; padding: var(--sp-5); overflow-x: hidden; }
.body > .main { display: flex; flex-direction: column; }
.main > * { min-height: 0; }

.page-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: var(--sp-4); margin-bottom: var(--sp-4); flex-wrap: wrap;
}
.page-head h2 { margin: 0; font-size: 18px; font-weight: 650; }
.page-head p  { margin: 4px 0 0; color: var(--text-3); font-size: 13px; }
.page-head h2 .crumb-fav { margin-left: 8px; vertical-align: 2px; font-size: 12px; font-weight: 400; }
.page-actions:empty { display: none; }

/* 页面骨架的纵向节奏：标题 → Tab → 筛选 → 内容，各段之间同一个间距 */
.page-head + .page-tabs { margin-top: calc(var(--sp-4) * -1 + var(--sp-2)); }
.page-tabs { margin-bottom: var(--sp-4); }

.filter-bar { margin-bottom: var(--sp-4); gap: var(--sp-2) var(--sp-3); }
.filter-bar:empty { display: none; }
.filter-bar .filter-kw { width: 350px; max-width: 100%; flex: none; }
.filter-bar select.input { width: auto; min-width: 160px; max-width: 220px; }
.filter-bar input.input[type=date], .filter-bar input.input[type=month] { width: 160px; }
@media (max-width: 768px) {
  .filter-bar .filter-kw { width: 100%; flex: 1 1 100%; }
  .filter-bar select.input { flex: 1 1 160px; max-width: none; }
}

/* ---------- 卡片与统计 ---------- */

.card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-md);
  box-shadow: var(--sh-1);
}

.card-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: var(--sp-3) var(--sp-4);
  border-bottom: 1px solid var(--border-2);
}
.card-head h3 { margin: 0; font-size: 14px; font-weight: 600; }
.card-body { padding: var(--sp-4); }

.stat-row {
  display: grid; gap: var(--sp-3);
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  margin-bottom: var(--sp-4);
}

.stat {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-md);
  padding: var(--sp-3) var(--sp-4);
}
.stat .label { font-size: 12px; color: var(--text-3); }
.stat .value {
  font-size: 22px; font-weight: 650; margin-top: 2px;
  font-variant-numeric: tabular-nums;
}
.stat .value .unit { font-size: 12px; font-weight: 400; color: var(--text-3); margin-left: 3px; }

/* ---------- 表格 ---------- */

.table-wrap { overflow-x: auto; }

table.data { width: 100%; border-collapse: collapse; font-size: 13px; }
table.data th, table.data td {
  padding: 10px 12px; text-align: left; white-space: nowrap;
  border-bottom: 1px solid var(--border-2);
}
table.data th { color: var(--text-2); font-weight: 600; background: var(--surface-2); }
table.data tbody tr:hover { background: var(--primary-soft); }

/* ---------- 状态块 ---------- */

.state {
  padding: var(--sp-8) var(--sp-4);
  text-align: center; color: var(--text-3);
}
.state .state-icon { font-size: 28px; opacity: .5; }
.state h4 { margin: var(--sp-3) 0 4px; color: var(--text-2); font-size: 14px; font-weight: 600; }
.state p { margin: 0; font-size: 13px; }
.state .actions { margin-top: var(--sp-4); }

.skeleton {
  background: linear-gradient(90deg, var(--border-2) 25%, var(--border) 37%, var(--border-2) 63%);
  background-size: 400% 100%;
  animation: shimmer 1.3s ease-in-out infinite;
  border-radius: var(--r-sm);
}
@keyframes shimmer { 0% { background-position: 100% 0; } 100% { background-position: 0 0; } }

.alert {
  display: flex; gap: var(--sp-2); align-items: flex-start;
  padding: 10px 12px; border-radius: var(--r-sm);
  font-size: 13px; margin-bottom: var(--sp-4);
  border: 1px solid transparent;
}
.alert-error   { background: color-mix(in srgb, var(--danger) 10%, transparent);
                 border-color: color-mix(in srgb, var(--danger) 30%, transparent); color: var(--danger); }
.alert-warning { background: color-mix(in srgb, var(--warning) 12%, transparent);
                 border-color: color-mix(in srgb, var(--warning) 32%, transparent); color: var(--warning); }
.alert-info    { background: var(--primary-soft); border-color: var(--primary-line); color: var(--primary); }

.tag {
  display: inline-flex; align-items: center; padding: 1px 8px;
  border-radius: 999px; font-size: 12px;
  background: var(--primary-soft); color: var(--primary);
  border: 1px solid var(--primary-line);
}
.tag-muted { background: var(--border-2); color: var(--text-3); border-color: var(--border); }

/* ---------- 下拉 ---------- */

.menu-pop {
  position: absolute; right: var(--sp-4); top: calc(var(--header-h) - 4px);
  min-width: 188px; z-index: var(--z-dropdown);
  background: var(--raised); border: 1px solid var(--border);
  border-radius: var(--r-md); box-shadow: var(--sh-3);
  padding: var(--sp-1); color: var(--text);
}
.menu-pop .who { padding: 8px 10px; border-bottom: 1px solid var(--border-2); margin-bottom: var(--sp-1); }
.menu-pop .who strong { display: block; font-size: 13px; }
.menu-pop .who span { font-size: 12px; color: var(--text-3); }
.menu-pop button {
  display: block; width: 100%; text-align: left;
  padding: 8px 10px; border: 0; background: transparent;
  border-radius: var(--r-sm); cursor: pointer; font-size: 13px;
}
.menu-pop button:hover { background: var(--border-2); }

/* ---------- 遮罩对话框 ---------- */

.overlay {
  position: fixed; inset: 0; z-index: var(--z-overlay);
  background: rgba(15, 22, 19, .45);
  display: grid; place-items: center; padding: var(--sp-4);
}
.dialog {
  width: min(100%, 420px);
  background: var(--surface); border-radius: var(--r-lg);
  box-shadow: var(--sh-3); padding: var(--sp-6);
}
.dialog h3 { margin: 0 0 var(--sp-2); font-size: 16px; }
/* 带栅格表单或详情表格的弹窗要宽一些：420px 里塞一张八列的考核表，
   列会被挤成两行，评语框只剩一个字的宽度 */
.dialog:has(.form-grid) { width: min(100%, 640px); }
.dialog:has(.detail) { width: min(100%, 1040px); }
.dialog:has(.hnca-frame) { width: min(100%, 1100px); }
.hnca-frame { width: 100%; height: min(72vh, 820px); border: 1px solid var(--line, #e5e7eb); border-radius: var(--r-md, 8px); background: #fff; }
.hnca-bar { display: flex; gap: var(--sp-2); align-items: center; flex-wrap: wrap; margin-bottom: var(--sp-2); }
.dialog .hint { margin: 0 0 var(--sp-5); color: var(--text-3); font-size: 13px; }
.dialog .actions {
  display: flex; gap: var(--sp-2); justify-content: flex-end;
  margin-top: var(--sp-5); align-items: center; flex-wrap: wrap;
}
.dialog .actions-left { display: flex; gap: var(--sp-2); margin-right: auto; }

/* ---------- 提示条 ---------- */

.toasts {
  position: fixed; top: calc(var(--header-h) + 12px); right: var(--sp-4);
  z-index: var(--z-toast); display: flex; flex-direction: column; gap: var(--sp-2);
}
.toast {
  background: var(--raised); border: 1px solid var(--border);
  border-left: 3px solid var(--primary);
  border-radius: var(--r-sm); box-shadow: var(--sh-2);
  padding: 10px 14px; font-size: 13px; min-width: 220px;
  animation: slide-in .18s ease-out;
}
.toast.error { border-left-color: var(--danger); }
@keyframes slide-in { from { opacity: 0; transform: translateX(12px); } }

/* ---------- 工作台：一屏显示，不滚动 ---------- */

/* 工作台要求"一屏显示完，不出现滚动"：
   main 收缩为定高容器，页头与统计条占自然高度，剩余高度全部给卡片区。 */
.desk-page {
  display: flex; flex-direction: column;
  height: 100%; min-height: 0;
}

/* 行高用 minmax(0, 1fr) 均分可用高度：卡片数量由用户自己定，
   写死行数会在多放两张卡时把整页顶出滚动条，而评审意见明确要求首页一屏显示完。 */
.desk {
  display: grid; gap: var(--sp-3);
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-auto-rows: minmax(0, 1fr);
  flex: 1; min-height: 0;
}
.desk > * { min-height: 0; overflow: auto; }
.desk .span-2 { grid-column: 1 / -1; }
.form-grid .span-2 { grid-column: 1 / -1; }

.quick-grid {
  display: grid; gap: var(--sp-2);
  grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
}
.quick {
  display: flex; flex-direction: column; align-items: center; gap: 6px;
  padding: var(--sp-3) var(--sp-2); border-radius: var(--r-md);
  border: 1px solid transparent; color: var(--text-2); font-size: 12px;
  text-align: center; cursor: pointer; background: transparent;
}
.quick:hover { background: var(--primary-soft); border-color: var(--primary-line); color: var(--primary); }
.quick .ico { font-size: 20px; }

.timeline { list-style: none; margin: 0; padding: 0; }
.timeline li {
  display: flex; gap: var(--sp-3); padding: 9px 0;
  border-bottom: 1px dashed var(--border-2); font-size: 13px;
}
.timeline li:last-child { border-bottom: 0; }
.timeline .when { color: var(--text-3); flex: none; font-variant-numeric: tabular-nums; }

/* ---------- 导航：顶栏按领域、侧栏按模块 ---------- */

.header .logo { color: inherit; }
.header .logo:hover { color: #fff; }
.nav-toggle { flex: none; margin-left: -6px; font-size: 16px; }
.nav a { display: inline-flex; align-items: center; gap: 6px; }
.nav-ico { width: 14px; text-align: center; font-size: 13px; opacity: .75; }
.nav a[aria-current="page"] .nav-ico { opacity: 1; }

.search-btn {
  display: inline-flex; align-items: center; gap: 8px;
  height: 32px; min-width: 188px; padding: 0 6px 0 10px;
  border: 1px solid rgba(255,255,255,.18); border-radius: var(--r-sm);
  background: rgba(255,255,255,.08); color: rgba(255,255,255,.82); cursor: pointer;
}
.search-btn:hover { background: rgba(255,255,255,.14); color: #fff; }
.search-ico { font-size: 15px; line-height: 1; }
.search-ph { flex: 1; text-align: left; font-size: 13px; }

kbd {
  font: 11px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  padding: 3px 5px; border-radius: 4px;
  border: 1px solid var(--border); background: var(--surface-2); color: var(--text-2);
}
.search-btn kbd { background: rgba(255,255,255,.12); border-color: rgba(255,255,255,.22); color: rgba(255,255,255,.8); }

.todo-pill {
  display: inline-flex; align-items: center; gap: 3px;
  height: 26px; padding: 0 10px; border-radius: 999px;
  background: #fff; color: var(--brand-deep); font-size: 12px; white-space: nowrap;
}
.todo-pill:hover { color: var(--brand-deep); box-shadow: 0 0 0 3px rgba(255,255,255,.25); }
.todo-pill strong { color: var(--danger); }
:root[data-theme="dark"] .todo-pill { background: var(--primary); color: #fff; }
:root[data-theme="dark"] .todo-pill strong { color: #fff; }

.sidebar { display: flex; flex-direction: column; }

.side-favs:empty { display: none; }
.side-favs { margin-bottom: 6px; padding-bottom: 4px; border-bottom: 1px dashed var(--border); }

.side-mod-head {
  width: 100%; display: flex; align-items: center; gap: 8px;
  padding: 8px 10px; border: 0; border-radius: var(--r-sm);
  background: transparent; color: var(--text); cursor: pointer;
  font-size: 13.5px; font-weight: 600; text-align: left;
}
.side-mod-head:hover { background: var(--border-2); }
.side-mod-ico { width: 18px; flex: none; text-align: center; color: var(--text-3); }
.side-mod.is-active > .side-mod-head .side-mod-ico { color: var(--primary); }
.side-mod-name { flex: 1; min-width: 0; }
.side-mod-arrow { width: 14px; height: 14px; flex: none; color: var(--text-3); transition: transform .15s ease; }
.side-mod.is-open > .side-mod-head .side-mod-arrow { transform: rotate(180deg); }
.side-mod.is-active > .side-mod-head { color: var(--primary); }
.side-mod-link[aria-current="page"] {
  background: var(--primary-soft); color: var(--primary);
  box-shadow: inset 3px 0 0 var(--primary);
}
.side-mod-link[aria-current="page"]:hover { background: var(--primary-soft); }
.side-mod > .side-mod-body {
  display: none; margin: 0 0 6px 18px; padding-left: 6px;
  border-left: 1px solid var(--border-2);
}
.side-mod.is-open > .side-mod-body { display: block; }
.side-mod-body .side-group { margin-bottom: 4px; }
.side-mod-body .group-title { padding: 6px 10px 2px; font-size: 11.5px; }

.side-link { display: flex; align-items: center; gap: 6px; }
.side-link-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.side-link-meta { font-size: 11px; color: var(--text-3); }
.side-link.is-planned { color: var(--text-3); }
.side-badge {
  flex: none; padding: 0 5px; border-radius: 4px; line-height: 16px;
  border: 1px dashed var(--border); color: var(--text-3);
  font-size: 10.5px; font-weight: 400; white-space: nowrap;
}
.side-flow {
  display: block; margin: 4px 0 6px; padding: 6px 10px;
  border-radius: var(--r-sm); font-size: 12.5px;
  background: color-mix(in srgb, var(--primary-soft) 55%, transparent); color: var(--primary);
}
.side-flow:hover, .side-flow[aria-current="page"] { background: var(--primary-soft); }
.side-flow[aria-current="page"] { font-weight: 600; }

html.nav-collapsed .sidebar { display: none; }
.nav-scrim { display: none; }

/* 面包屑 */
.crumbs {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
  margin: -6px 0 var(--sp-3); font-size: 12.5px; color: var(--text-3);
}
.crumb-trail { display: flex; flex-wrap: wrap; align-items: center; min-width: 0; }
.crumb + .crumb::before { content: "/"; margin: 0 6px; color: var(--border); }
.crumb-here { color: var(--text-2); }
.crumb-fav {
  flex: none; padding: 2px 6px; border: 0; border-radius: var(--r-sm);
  background: transparent; color: var(--text-3); cursor: pointer; font-size: 12.5px;
}
.crumb-fav:hover { background: var(--border-2); color: var(--text); }
.crumb-fav.on { color: var(--warning); }

/* ---------- 流程步骤条 ---------- */

/* 放在页头之上、像一组标签页：把一条流程涉及的几个页面串成一个整体，
   说明区可收起（偏好记在本地），收起后只占一行。 */
.flowbar {
  margin-bottom: var(--sp-4); overflow: hidden;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-md); box-shadow: var(--sh-1);
}
.flowbar-head {
  display: flex; align-items: center; gap: var(--sp-3); padding: 8px 12px;
  border-bottom: 1px solid var(--border-2);
  background: linear-gradient(90deg, var(--primary-soft), transparent 72%);
}
.flowbar.is-collapsed .flowbar-head { border-bottom: 0; }
.flowbar.is-collapsed .flowbar-body { display: none; }
.flowbar-name {
  flex: none; display: inline-flex; align-items: center; gap: 6px;
  font-weight: 650; color: var(--text); white-space: nowrap;
}
.flowbar-name:hover { color: var(--primary); }
.flowbar-ico {
  width: 22px; height: 22px; border-radius: 6px; display: grid; place-items: center;
  background: var(--primary); color: #fff; font-size: 12px;
}
.flowbar-pos { flex: none; font-size: 12px; color: var(--text-3); white-space: nowrap; }

.fsteps {
  list-style: none; margin: 0; padding: 0; flex: 1; min-width: 0;
  display: flex; align-items: center; overflow-x: auto; scrollbar-width: thin;
}
.fstep { flex: none; display: flex; align-items: center; }
.fstep + .fstep::before { content: ""; width: 16px; height: 1px; margin: 0 4px; background: var(--border); }
.fstep.is-before + .fstep::before { background: var(--primary-line); }
.fstep a {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 3px 10px 3px 3px; border-radius: 999px;
  color: var(--text-2); font-size: 13px; white-space: nowrap;
}
.fstep a:hover { background: var(--border-2); color: var(--text); }
.fstep-n {
  width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center;
  border: 1px solid var(--border); background: var(--surface); color: var(--text-3);
  font-size: 11.5px; font-weight: 600;
}
.fstep.is-before .fstep-n { border-color: var(--primary-line); color: var(--primary); }
.fstep.is-current a { background: var(--primary-soft); color: var(--primary); font-weight: 600; }
.fstep.is-current .fstep-n { background: var(--primary); border-color: var(--primary); color: #fff; }
.fstep-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--text-3); }
.fstep-dot.is-ok { background: var(--success); }
.fstep-dot.is-todo { background: var(--warning); }
.fstep-dot.is-bad { background: var(--danger); }

.flowbar-toggle {
  flex: none; padding: 4px 6px; border: 0; border-radius: var(--r-sm);
  background: transparent; color: var(--text-3); cursor: pointer; font-size: 12px; white-space: nowrap;
}
.flowbar-toggle:hover { background: var(--border-2); color: var(--text); }
.flowbar-body {
  display: flex; align-items: flex-end; justify-content: space-between; flex-wrap: wrap;
  gap: var(--sp-3) var(--sp-4); padding: 10px 14px 12px;
}
.flowbar-tip { flex: 1 1 420px; min-width: 0; font-size: 13px; color: var(--text-2); }
.flowbar-tip p { margin: 0; }
.flowbar-tip p + p { margin-top: 4px; }
.flowbar-label {
  display: inline-block; margin-right: 8px; padding: 0 6px; border-radius: 4px;
  line-height: 18px; font-size: 11.5px; background: var(--primary-soft); color: var(--primary);
}
.flowbar-done { color: var(--text-3); }
.flowbar-done .flowbar-label, .wz-done .flowbar-label { background: var(--border-2); color: var(--text-3); }
.flowbar-tag { margin-left: 8px; }
.flowbar-nav { display: flex; flex-wrap: wrap; gap: var(--sp-2); }

/* ---------- 流程向导页 ---------- */

.flow-sec { margin-bottom: var(--sp-6); }
.flow-sec-title { margin: 0 0 var(--sp-3); font-size: 14px; font-weight: 600; color: var(--text-2); }
.flow-grid { display: grid; gap: var(--sp-3); grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }
.flow-card {
  display: flex; flex-direction: column; gap: 8px; padding: var(--sp-4);
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md);
  box-shadow: var(--sh-1); color: var(--text);
  transition: border-color .15s, box-shadow .15s, transform .15s;
}
.flow-card:hover { color: var(--text); border-color: var(--primary-line); box-shadow: var(--sh-2); transform: translateY(-1px); }
.flow-card-head { display: flex; align-items: center; gap: 8px; }
.flow-card-head strong { flex: 1; font-size: 15px; }
.flow-card-ico {
  width: 30px; height: 30px; border-radius: 8px; display: grid; place-items: center;
  background: var(--primary-soft); color: var(--primary);
}
.flow-card-desc { margin: 0; font-size: 12.5px; line-height: 1.6; color: var(--text-3); }
.flow-chain {
  list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; row-gap: 2px;
  font-size: 12px; color: var(--text-2);
}
.flow-chain li + li::before { content: "→"; margin: 0 6px; color: var(--text-3); }
.flow-card-foot { display: flex; gap: 6px; margin-top: auto; padding-top: 4px; }

.guide-ico {
  display: inline-grid; place-items: center; width: 28px; height: 28px; margin-right: 8px;
  border-radius: 8px; background: var(--primary); color: #fff; font-size: 14px; vertical-align: -4px;
}

.wizard { list-style: none; margin: 0; padding: 0; max-width: 960px; }
.wz-step { display: flex; gap: var(--sp-3); }
.wz-rail { flex: none; width: 32px; display: flex; flex-direction: column; align-items: center; }
.wz-rail::after { content: ""; flex: 1; width: 2px; margin: 4px 0; background: var(--border); }
.wz-step:last-child .wz-rail::after { display: none; }
.wz-n {
  width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center; flex: none;
  border: 1px solid var(--primary-line); background: var(--primary-soft); color: var(--primary); font-weight: 650;
}
.wz-card {
  flex: 1; min-width: 0; margin-bottom: var(--sp-3); padding: 12px 16px;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md);
}
.wz-head { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.wz-title { font-size: 15px; }
.wz-where { margin-left: auto; font-size: 12px; color: var(--text-3); }
.wz-todo { margin: 6px 0 4px; font-size: 13px; color: var(--text-2); }
.wz-done { margin: 0 0 8px; font-size: 12.5px; color: var(--text-3); }
.wz-ops { display: flex; justify-content: flex-end; }

.nearby { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px; }

/* ---------- 全局搜索 ---------- */

.cmdk-overlay {
  position: fixed; inset: 0; z-index: var(--z-overlay);
  display: flex; justify-content: center; align-items: flex-start;
  padding: 12vh var(--sp-4) var(--sp-4);
  background: rgba(15, 22, 19, .45);
}
.cmdk {
  width: min(640px, 100%); max-height: 72vh; overflow: hidden;
  display: flex; flex-direction: column;
  background: var(--raised); border: 1px solid var(--border);
  border-radius: var(--r-lg); box-shadow: var(--sh-3);
}
.cmdk-head { padding: 12px; border-bottom: 1px solid var(--border-2); }
.cmdk-input { padding: 10px 12px; font-size: 15px; }
.cmdk-list { list-style: none; margin: 0; padding: 6px; flex: 1; overflow-y: auto; }
.cmdk-sec { padding: 8px 10px 4px; font-size: 11.5px; color: var(--text-3); }
.cmdk-item {
  display: flex; align-items: center; gap: 10px; padding: 8px 10px;
  border-radius: var(--r-sm); cursor: pointer;
}
.cmdk-item[aria-selected="true"] { background: var(--primary-soft); }
.cmdk-kind {
  flex: none; padding: 0 6px; border-radius: 4px; line-height: 18px; font-size: 11px;
  background: var(--border-2); color: var(--text-2);
}
.cmdk-kind.is-flow { background: var(--primary); color: #fff; }
.cmdk-name { font-weight: 600; white-space: nowrap; }
.cmdk-trail {
  margin-left: auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font-size: 12px; color: var(--text-3);
}
.cmdk-empty { padding: 24px; text-align: center; color: var(--text-3); }
.cmdk-foot {
  display: flex; gap: var(--sp-4); padding: 8px 12px;
  border-top: 1px solid var(--border-2); font-size: 12px; color: var(--text-3);
}

@media (max-width: 1360px) {
  .search-btn { min-width: 0; }
  .search-ph, .search-btn kbd { display: none; }
}
@media (max-width: 1180px) {
  .logo-text { display: none; }
  .nav-ico { display: none; }
}
@media (max-width: 768px) {
  .todo-pill { display: none; }
  .flowbar-head { flex-wrap: wrap; }
  .fsteps { order: 3; flex-basis: 100%; }
  .crumb-trail .crumb:not(.crumb-here) { display: none; }
  .crumb-trail .crumb-here::before { content: none; }
  .crumbs:not(:has(.crumb-here)):not(:has(.crumb-fav)) { display: none; }
  .wz-where { margin-left: 0; flex-basis: 100%; }
  .cmdk-trail { display: none; }
}

/* ---------- 补全页面：通用小件 ---------- */

.nowrap { white-space: nowrap; }
.ellipsis, .cell-clip { max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tag-sm { font-size: 11px; padding: 0 6px; margin: 1px 4px 1px 0; }
.actions-row { display: flex; gap: var(--sp-2); margin-top: var(--sp-4); flex-wrap: wrap; }
.toolbar-row { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; margin-bottom: var(--sp-3); }
.toolbar-row .input { width: auto; }
.grid-2 { display: grid; gap: var(--sp-4); grid-template-columns: repeat(2, minmax(0, 1fr)); margin-bottom: var(--sp-4); }
.grid-2 > .card { margin: 0; }
.kv-wide { grid-template-columns: 120px 1fr; row-gap: 8px; }
.filter-grid { display: grid; gap: 0 var(--sp-3); grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
.page-head .toolbar .picker { min-width: 260px; }

/* 表头排序 */
th.th-sort { cursor: pointer; user-select: none; white-space: nowrap; }
th.th-sort:hover { color: var(--primary); }
th.th-sort.is-sorted { color: var(--primary); }
.stat-bar-cell { min-width: 180px; }

/* 左侧列表选择（字典、角色、报表） */
.list-pick {
  display: flex; flex-direction: column; align-items: flex-start; gap: 2px; width: 100%;
  padding: 8px 10px; margin-bottom: 2px; border: 1px solid transparent; border-radius: var(--r-sm);
  background: transparent; color: var(--text); text-align: left; cursor: pointer;
}
.list-pick:hover { background: var(--border-2); }
.list-pick.is-active { background: var(--primary-soft); border-color: var(--primary-line); }
.list-pick.is-active strong { color: var(--primary); }
.split-aside .input { margin-bottom: var(--sp-2); }

/* 开关 */
.switch { position: relative; display: inline-block; width: 34px; height: 20px; cursor: pointer; }
.switch input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.switch-track {
  position: absolute; inset: 0; border-radius: 999px; background: var(--border); transition: background .15s;
}
.switch-track::after {
  content: ""; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%;
  background: #fff; box-shadow: var(--sh-1); transition: transform .15s;
}
.switch input:checked + .switch-track { background: var(--primary); }
.switch input:checked + .switch-track::after { transform: translateX(14px); }
.switch input:focus-visible + .switch-track { outline: 2px solid var(--primary); outline-offset: 2px; }

/* 职级卡片 */
.rank-card { margin-bottom: var(--sp-4); }
.rank-card .card-head h3 { display: flex; align-items: center; gap: 8px; }

/* 数据权限 */
.scope-opts { display: grid; gap: var(--sp-2); grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }
.scope-opt {
  display: flex; gap: 10px; align-items: flex-start; padding: 10px 12px; cursor: pointer;
  border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface);
}
.scope-opt > span { display: flex; flex-direction: column; gap: 2px; }
.scope-opt.is-on { border-color: var(--primary); background: var(--primary-soft); }
.scope-opt input { accent-color: var(--primary); margin-top: 3px; }
.dept-checks {
  margin-top: var(--sp-3); max-height: 320px; overflow: auto; padding: 4px 12px;
  border: 1px solid var(--border-2); border-radius: var(--r-md);
}
.dept-checks .check-line { margin-top: 6px; }

/* 运行配置 */
.db-result { margin-top: var(--sp-3); padding: 10px 12px; border-radius: var(--r-md); font-size: 13px; }
.db-result.ok { background: var(--primary-soft); border: 1px solid var(--primary-line); }
.db-result.bad { background: color-mix(in srgb, var(--danger) 8%, transparent); border: 1px solid color-mix(in srgb, var(--danger) 30%, transparent); }
.db-result .hint { margin: 6px 0 0; }
pre.cmd {
  margin: 6px 0 10px; padding: 8px 12px; overflow-x: auto;
  background: var(--surface-2); border: 1px solid var(--border-2); border-radius: var(--r-sm);
  font: 12.5px/1.6 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; white-space: pre;
}
.guide-steps ol { margin: var(--sp-2) 0; padding-left: 1.4em; }
.guide-steps li { margin-bottom: var(--sp-2); font-size: 13px; }
.guide-steps li code, .guide-steps p code { font-size: 12px; }

/* 员工档案库 */
.upload-row { display: grid; gap: 0 var(--sp-3); grid-template-columns: 200px 1fr 1fr auto; align-items: end; }
.upload-row .btn { margin-bottom: var(--sp-4); }
.archive-cats { display: grid; gap: var(--sp-2); grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }
.archive-cat { border: 1px solid var(--border-2); border-radius: var(--r-md); padding: 10px 12px; }
.archive-cat-head { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
.archive-file { display: flex; align-items: center; gap: 6px; font-size: 13px; padding: 4px 0; border-top: 1px dashed var(--border-2); }
.archive-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 万能人事表格：屏幕上是一张纸，打印时只剩这张纸 */
.tpl.is-active { border-color: var(--primary); background: var(--primary-soft); }
button.tpl { text-align: left; cursor: pointer; font: inherit; color: inherit; }
.print-sheet {
  max-width: 820px; margin: 0 auto; padding: 32px 40px; background: #fff; color: #111;
  border: 1px solid var(--border); box-shadow: var(--sh-1); font-size: 14px;
}
.ps-title { text-align: center; margin-bottom: 12px; }
.ps-company { font-size: 13px; color: #555; letter-spacing: 2px; }
.ps-title h2 { margin: 4px 0 0; font-size: 22px; letter-spacing: 6px; }
.ps-meta { display: flex; justify-content: flex-end; gap: 6px; align-items: baseline; margin-bottom: 12px; font-size: 13px; }
.ps-section { margin-bottom: 14px; }
.ps-section-title { font-weight: 700; border-left: 4px solid #333; padding-left: 8px; margin-bottom: 8px; }
.ps-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 28px; }
.ps-cell { display: flex; align-items: baseline; gap: 4px; min-width: 0; }
.ps-cell.ps-wide { grid-column: 1 / -1; flex-wrap: wrap; }
.ps-label { flex: none; color: #333; }
.ps-line { flex: 1; min-width: 60px; min-height: 22px; border-bottom: 1px solid #333; padding: 0 4px; font-weight: 600; }
.ps-short { flex: none; width: 140px; display: inline-block; }
.ps-lines { flex-basis: 100%; }
.ps-lines .ps-line { display: block; height: 28px; }
.ps-box { font-size: 18px; }
.ps-footer { margin: 18px 0 0; font-size: 13px; }
.ps-sign { display: flex; flex-wrap: wrap; gap: 16px 32px; margin-top: 28px; }
.ps-sign > div { display: flex; align-items: baseline; gap: 4px; min-width: 200px; }

@media print {
  .header, .sidebar, .crumbs, .flowbar, .no-print, .toasts, .nav-scrim { display: none !important; }
  .app, .body, .main { display: block; height: auto; overflow: visible; padding: 0; background: #fff; }
  .main > div > .card { border: 0; box-shadow: none; }
  .card-body { padding: 0; }
  .print-sheet { border: 0; box-shadow: none; padding: 0; max-width: none; }
}

@media (max-width: 1024px) {
  .grid-2 { grid-template-columns: 1fr; }
  .upload-row { grid-template-columns: 1fr; }
}
@media (max-width: 768px) {
  .ps-grid { grid-template-columns: 1fr; }
  .print-sheet { padding: 16px; }
}

/* ---------- 电子合同 · 签章通道 ---------- */
.ca-layout { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: var(--sp-5); align-items: start; }
.ca-layout > div > .card + .card, .ca-layout > div > .card { margin-bottom: var(--sp-4); }
.ca-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sp-3); margin-bottom: var(--sp-4); }
.ca-card {
  position: relative; display: flex; gap: var(--sp-3); align-items: flex-start; text-align: left;
  padding: var(--sp-4); border: 1.5px solid var(--border); border-radius: var(--r-lg);
  background: var(--surface); color: var(--text); cursor: pointer; font: inherit;
  transition: border-color .15s, box-shadow .15s, transform .15s;
}
.ca-card:hover:not(:disabled) { border-color: var(--primary-line); box-shadow: var(--sh-2); transform: translateY(-1px); }
.ca-card.is-active { border-color: var(--primary); background: var(--primary-soft); box-shadow: 0 0 0 3px var(--primary-soft); }
.ca-card:disabled { cursor: default; }
.ca-card-badge {
  flex: none; width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center;
  background: linear-gradient(135deg, var(--primary), var(--brand-deep-2)); color: #fff; font-weight: 700;
}
.ca-card-main { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.ca-card-main .small:last-child { color: var(--text-2); line-height: 1.55; }
.ca-card-cur { position: absolute; top: 10px; right: 10px; }
.ca-compare { table-layout: fixed; width: 100%; }
.ca-compare th:first-child, .ca-compare td:first-child { width: 28%; }
table.data.ca-compare td { white-space: normal; word-break: break-word; vertical-align: top; }
.switch-line { display: inline-flex; align-items: center; gap: var(--sp-2); cursor: pointer; margin: var(--sp-2) 0; }
.callout {
  margin: var(--sp-3) 0; padding: var(--sp-3) var(--sp-4); border-radius: var(--r-md);
  background: var(--surface-2); border: 1px dashed var(--primary-line); font-size: 13px; color: var(--text-2);
}
.callout ol { margin: 6px 0 0; padding-left: 20px; line-height: 1.7; }
.verify-box { margin: var(--sp-3) 0; padding: var(--sp-3) var(--sp-4); border-radius: var(--r-md); border: 1px solid var(--border); }
.verify-box.ok { background: var(--primary-soft); border-color: var(--primary-line); }
.verify-box.bad { background: color-mix(in srgb, var(--danger) 8%, var(--surface)); border-color: color-mix(in srgb, var(--danger) 30%, var(--border)); }
.verify-head { display: flex; align-items: center; gap: var(--sp-2); margin-bottom: var(--sp-2); }
.verify-icon {
  width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; color: #fff; font-size: 13px;
  background: var(--success);
}
.verify-box.bad .verify-icon { background: var(--danger); }
.ec-file { display: flex; gap: var(--sp-4); align-items: flex-start; padding: var(--sp-3); border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface-2); }
.ec-file-icon {
  flex: none; width: 44px; height: 54px; border-radius: 6px; display: grid; place-items: center;
  background: linear-gradient(160deg, #E5534B, #B8322B); color: #fff; font-size: 12px; font-weight: 700; letter-spacing: .5px;
  box-shadow: var(--sh-1);
}
.ec-file-main { flex: 1; min-width: 0; }
.ec-file-main .actions-row { margin-top: var(--sp-2); }
.drop-zone {
  display: flex; flex-direction: column; align-items: center; gap: 6px; padding: var(--sp-10) var(--sp-4);
  border: 2px dashed var(--border); border-radius: var(--r-lg); background: var(--surface); cursor: pointer;
  text-align: center; transition: border-color .15s, background .15s; margin-bottom: var(--sp-4);
}
.drop-zone:hover, .drop-zone.is-over { border-color: var(--primary); background: var(--primary-soft); }
.drop-icon { font-size: 28px; color: var(--primary); }
.visually-hidden { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
@media (max-width: 900px) {
  .ca-layout { grid-template-columns: 1fr; }
  .ca-cards { grid-template-columns: 1fr; }
}

/* ---------- 图标与视觉细节 ---------- */
/* main 是纵向 flex 且子项 min-height:0：页面一长，步骤条（overflow:hidden）会被压扁裁掉 */
.body > .main > .flowbar, .body > .main > .crumbs { flex: none; }

.ic { display: inline-grid; place-items: center; width: 16px; height: 16px; flex: none; line-height: 0; }
.ic svg { width: 100%; height: 100%; display: block; }

/* 顶栏 */
.header { background: linear-gradient(100deg, var(--brand-deep) 0%, var(--brand-deep-2) 60%, color-mix(in srgb, var(--brand-deep-2) 80%, var(--primary)) 100%); box-shadow: 0 1px 0 rgba(0,0,0,.06), 0 4px 16px rgba(20, 40, 30, .08); }
.header .logo .mark { background: linear-gradient(140deg, rgba(255,255,255,.28), rgba(255,255,255,.1)); box-shadow: inset 0 0 0 1px rgba(255,255,255,.2); }
.nav-ico.ic { width: 16px; height: 16px; font-size: 0; opacity: .78; }
.nav a:hover .nav-ico, .nav a[aria-current="page"] .nav-ico { opacity: 1; }
.icon-btn .ic { width: 18px; height: 18px; }
.search-ico.ic { width: 15px; height: 15px; }

/* 侧栏 */
.side-mod-ico.ic { width: 17px; height: 17px; }
.side-link-ico { width: 16px; height: 16px; color: var(--text-3); transition: color .15s; }
.side-link { gap: 8px; transition: background .12s, color .12s; }
.side-link:hover .side-link-ico { color: var(--text-2); }
.side-link[aria-current="page"] { position: relative; box-shadow: inset 3px 0 0 var(--primary); }
.side-link[aria-current="page"] .side-link-ico { color: var(--primary); }
.side-link.is-planned .side-link-ico { opacity: .5; }
.side-flow { display: flex; align-items: center; gap: 8px; }
.side-flow .side-link-ico { color: var(--primary); }

/* 页头图标 */
.ph-ico {
  display: inline-grid; place-items: center; width: 32px; height: 32px; margin-right: 10px;
  border-radius: 10px; vertical-align: -8px; color: var(--primary);
  background: linear-gradient(140deg, var(--primary-soft), color-mix(in srgb, var(--primary-soft) 35%, var(--surface)));
  box-shadow: inset 0 0 0 1px var(--primary-line);
}
.ph-ico .ic { width: 18px; height: 18px; }
.flowbar-ico .ic { width: 14px; height: 14px; }
.flow-card-ico .ic { width: 17px; height: 17px; }
.guide-ico .ic { width: 16px; height: 16px; }
.quick .ico { width: 38px; height: 38px; border-radius: 11px; display: grid; place-items: center;
  background: var(--primary-soft); color: var(--primary); transition: transform .15s, background .15s; }
.quick .ico .ic { width: 19px; height: 19px; }
.quick:hover .ico { transform: translateY(-1px); background: var(--primary); color: #fff; }

/* 卡片、统计与表格 */
.card { transition: box-shadow .15s, border-color .15s; }
.card-head h3 { display: flex; align-items: center; gap: 8px; }
.card-head h3::before {
  content: ""; width: 3px; height: 14px; border-radius: 2px; background: var(--primary); opacity: .85;
}
.kpi { position: relative; overflow: hidden; transition: transform .15s, box-shadow .15s, border-color .15s; }
.kpi::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--primary); opacity: .7;
}
.kpi-warn::before { background: var(--warning); }
.kpi-bad::before { background: var(--danger); }
.kpi-click:hover { transform: translateY(-1px); box-shadow: var(--sh-2); }
table.data th { font-size: 12.5px; letter-spacing: .2px; }
table.data tbody tr { transition: background .1s; }
.btn-primary { background: linear-gradient(180deg, color-mix(in srgb, var(--primary) 88%, #fff), var(--primary)); }
.btn-primary:hover:not(:disabled) { background: var(--primary-hover); }
.btn { transition: background .12s, border-color .12s, box-shadow .12s, color .12s; }
.btn:focus-visible { box-shadow: 0 0 0 3px var(--primary-soft); }
.main { background:
  radial-gradient(1200px 360px at 100% -120px, color-mix(in srgb, var(--primary-soft) 70%, transparent), transparent 70%); }

/* ---------- 版本升级 ---------- */
.up-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--sp-4); align-items: start; }
.up-layout > div > .card { margin-bottom: var(--sp-4); }
.up-ver { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; margin-bottom: 4px; }
.up-ver strong { font-size: 18px; font-variant-numeric: tabular-nums; }
.up-ver-big strong { font-size: 24px; color: var(--primary); }
.up-notes {
  margin: var(--sp-3) 0 0; padding: var(--sp-3); max-height: 220px; overflow: auto; white-space: pre-wrap;
  background: var(--surface-2); border: 1px solid var(--border-2); border-radius: var(--r-sm); font: inherit; font-size: 13px;
}
.up-overlay { position: fixed; inset: 0; z-index: var(--z-overlay); display: grid; place-items: center;
  background: color-mix(in srgb, var(--page) 70%, transparent); backdrop-filter: blur(2px); }
.up-overlay-card { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 28px 36px;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-lg); box-shadow: var(--sh-3); }
.up-spinner { width: 34px; height: 34px; border-radius: 50%; border: 3px solid var(--primary-soft);
  border-top-color: var(--primary); animation: up-spin .8s linear infinite; }
@keyframes up-spin { to { transform: rotate(360deg); } }
table.data td.wrap { white-space: normal; min-width: 220px; }
@media (max-width: 900px) { .up-layout { grid-template-columns: 1fr; } }

/* ---------- 响应式 ---------- */

@media (max-width: 1024px) {
  /* 窄屏放弃"一屏不滚动"，改为纵向排列并允许滚动，否则卡片会被压扁到不可读 */
  .desk { grid-template-columns: 1fr; grid-template-rows: none; }
  .desk-page { height: auto; }
  .app { height: auto; }
}

@media (max-width: 768px) {
  /* 窄屏的侧栏是抽屉：由顶栏 ☰ 拉出，点页面或选中链接后收回。
     以前是一条横向滚动的链接带，模块一多就找不到东西。 */
  .sidebar {
    position: fixed; top: var(--header-h); bottom: 0; left: 0;
    width: min(300px, 84vw); z-index: var(--z-dropdown);
    transform: translateX(-100%); transition: transform .2s ease-out;
    box-shadow: var(--sh-3);
  }
  html.nav-collapsed .sidebar { display: flex; }
  html.nav-open .sidebar { transform: none; }
  html.nav-open .nav-scrim {
    display: block; position: fixed; inset: var(--header-h) 0 0 0;
    background: rgba(15, 22, 19, .35); z-index: calc(var(--z-dropdown) - 1);
  }
  .main { padding: var(--sp-3); }
  .menu-pop { right: var(--sp-2); left: var(--sp-2); }
  .stat-row { grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); }
}

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

/* ---------- 组织树 ---------- */

.tree { list-style: none; margin: 0; padding: 0; }

.tree-row {
  display: flex; align-items: center; gap: var(--sp-2);
  width: 100%; padding: 7px 10px; border: 0; background: transparent;
  border-radius: var(--r-sm); cursor: pointer; text-align: left;
  color: var(--text-2); font-size: 13px;
}
.tree-row:hover { background: var(--border-2); color: var(--text); }
.tree-row.is-active { background: var(--primary-soft); color: var(--primary); font-weight: 600; }

.tree-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tree-count { color: var(--text-3); font-size: 12px; font-variant-numeric: tabular-nums; flex: none; }
.tree-row.is-active .tree-count { color: var(--primary); }

/* ---------- 左右分栏 ---------- */

.split {
  display: grid; gap: var(--sp-3);
  grid-template-columns: minmax(220px, 300px) 1fr;
  align-items: start;
}
.split-aside { max-height: calc(100vh - 220px); overflow: auto; }

/* ---------- 描述列表 ---------- */

.kv {
  display: grid; grid-template-columns: 96px 1fr;
  gap: var(--sp-2) var(--sp-4); margin: 0;
}
.kv dt { color: var(--text-3); font-size: 13px; }
.kv dd { margin: 0; font-size: 13px; word-break: break-word; }

/* ---------- 工具条与分页 ---------- */

.toolbar { display: flex; gap: var(--sp-2); align-items: center; flex-wrap: wrap; }
/* 筛选控件默认会被 flex 拉到很宽，把一行筛选条撑成一列。
   限宽后它们才会真的排成一条。 */
.page-head .toolbar select.input { width: auto; min-width: 110px; max-width: 170px; }
.page-head .toolbar input.input  { width: auto; max-width: 220px; }
.page-head .toolbar .picker { max-width: 240px; }

.pager {
  display: flex; align-items: center; gap: var(--sp-2);
  justify-content: flex-end; margin-top: var(--sp-3); flex-wrap: wrap;
}
.pager .muted { color: var(--text-3); font-size: 13px; margin-right: auto; }

/* 企业印章：华测签章系统的印章与证书 */
.ec-cert { border-radius: var(--r-lg); }
.ec-cert-head {
  display: flex; align-items: flex-start; justify-content: space-between; gap: var(--sp-3);
  padding: var(--sp-6) var(--sp-6) 0;
}
.ec-cert-head h3 { margin: 0; font-size: 16px; font-weight: 600; }
.ec-cert-head p { margin: 6px 0 0; color: var(--text-3); font-size: 13px; }
.ec-cert-body { padding: var(--sp-5) var(--sp-6) var(--sp-6); }
.ec-cert-tools { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; margin-bottom: var(--sp-5); }
.ec-cert-tools .input, .ec-cert-tools .btn { height: 44px; }
.ec-cert-tools select.input { width: auto; min-width: 168px; }
.ec-cert-search { position: relative; width: 260px; max-width: 100%; }
.ec-cert-search .input {
  width: 100%; padding-right: 36px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23667085' stroke-width='2.4' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='6.5'/%3E%3Cpath d='m20 20-4.2-4.2'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center;
}
.ec-cert-tools .btn { padding: 0 var(--sp-4); }
.ec-cert-total { margin-left: auto; color: var(--text-3); font-size: 13px; }
.ec-cert-table th { padding-top: 14px; padding-bottom: 14px; }
.ec-cert-table td { padding-top: 18px; padding-bottom: 18px; }
.ec-cert-table td strong { display: block; font-size: 14px; }
.ec-cert-table td .small { margin-top: 4px; }
.ec-cert-sn { max-width: 130px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ec-cert-empty { text-align: center; padding: var(--sp-6) var(--sp-4) !important; }
.ec-cert-empty > * + * { margin-left: var(--sp-3); }
.ec-cert-link { color: var(--primary); }
.ec-cert-pager { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; margin-top: var(--sp-5); }
.ec-cert-pager .muted { margin-right: auto; color: var(--text-3); font-size: 13px; }
.ec-cert-pager .ec-cert-page { min-width: 32px; justify-content: center; }
.ec-cert-pager .ec-cert-page.on { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }
.ec-cert-pager select.input { width: auto; }

table.data td.num { text-align: right; font-variant-numeric: tabular-nums; }
table.data td.ops { white-space: nowrap; }

@media (max-width: 900px) {
  .split { grid-template-columns: 1fr; }
  .split-aside { max-height: 320px; }
  .kv { grid-template-columns: 1fr; gap: 2px var(--sp-2); }
  .kv dd { margin-bottom: var(--sp-2); }
}

/* ---------- 列选择器 ---------- */

.col-picker {
  max-height: 46vh; overflow: auto;
  border: 1px solid var(--border); border-radius: var(--r-sm);
  padding: var(--sp-2);
}

.col-group + .col-group { margin-top: var(--sp-3); }

.col-group-title {
  font-size: 12px; color: var(--text-3); padding: 2px 4px var(--sp-1);
  position: sticky; top: calc(var(--sp-2) * -1); background: var(--surface);
}

.col-items {
  display: grid; gap: 2px var(--sp-2);
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
}

.col-item {
  display: flex; align-items: center; gap: 6px;
  padding: 5px 6px; border-radius: var(--r-sm);
  font-size: 13px; cursor: pointer;
}
.col-item:hover { background: var(--border-2); }
.col-item input { accent-color: var(--primary); }

/* ---------- 表单栅格 ---------- */

.form-grid {
  display: grid; gap: 0 var(--sp-4);
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

/* 发起人事异动：每项「调整前 → 调整后」 */
.tf-section { font-size: 13px; color: var(--text-2); margin: 2px 0 6px; }
.tf-grid {
  display: grid; gap: var(--sp-3) var(--sp-4);
  grid-template-columns: repeat(2, minmax(0, 1fr));
  margin-bottom: var(--sp-4);
}
.tf-item-title { font-size: 13px; color: var(--text-2); margin-bottom: 4px; }
.tf-pair {
  display: grid; align-items: center; gap: 2px 8px;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1.2fr);
}
.tf-cap { font-size: 11px; color: var(--text-3, var(--text-2)); opacity: .8; }
.tf-before {
  min-height: 36px; padding: 0 10px; display: flex; align-items: center;
  border: 1px solid var(--border); border-radius: 6px;
  background: var(--surface-2); color: var(--text-2); font-size: 13px;
  overflow: hidden; white-space: nowrap; text-overflow: ellipsis;
}
.tf-arrow { color: var(--text-2); font-size: 14px; }
.tf-pair > .input, .tf-pair > .picker { min-width: 0; }
@media (max-width: 640px) { .tf-grid { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 560px) {
  .form-grid { grid-template-columns: 1fr; }
  .col-items { grid-template-columns: 1fr; }
}

/* ---------- 导入问题列表 ---------- */

.issue-list {
  max-height: 30vh; overflow: auto; margin-top: var(--sp-3);
  border: 1px solid var(--border); border-radius: var(--r-sm);
}

.issue {
  display: flex; gap: var(--sp-2); align-items: baseline;
  padding: 6px 10px; font-size: 12px;
  border-bottom: 1px solid var(--border-2);
}
.issue:last-child { border-bottom: 0; }
.issue-row { color: var(--text-3); flex: none; font-variant-numeric: tabular-nums; }
.issue-col {
  flex: none; padding: 0 6px; border-radius: 4px;
  background: var(--border-2); color: var(--text-2);
}

.hint { color: var(--text-3); font-size: 12px; margin: 4px 0 0; }
.muted { color: var(--text-3); font-size: 12px; }

/* ---------- 标签页 ---------- */

.tabs {
  display: flex; gap: 2px; margin-bottom: var(--sp-3);
  border-bottom: 1px solid var(--border); flex-wrap: wrap;
}

.tab {
  padding: 8px 14px; border: 0; background: transparent; cursor: pointer;
  color: var(--text-2); font-size: 13px; border-radius: var(--r-sm) var(--r-sm) 0 0;
  position: relative;
}
.tab:hover { background: var(--border-2); color: var(--text); }
.tab.is-active { color: var(--primary); font-weight: 600; }
.tab.is-active::after {
  content: ""; position: absolute; left: 10px; right: 10px; bottom: -1px;
  height: 2px; background: var(--primary); border-radius: 2px;
}

table.data tr.clickable { cursor: pointer; }

.tag-warn { background: color-mix(in srgb, var(--warning) 14%, transparent);
            color: var(--warning); border-color: color-mix(in srgb, var(--warning) 34%, transparent); }
.tag-bad  { background: color-mix(in srgb, var(--danger) 12%, transparent);
            color: var(--danger); border-color: color-mix(in srgb, var(--danger) 32%, transparent); }

/* ---------- 模板库 ---------- */

.tpl-grid {
  display: grid; gap: var(--sp-2);
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}

.tpl {
  text-align: left; padding: var(--sp-3); cursor: pointer;
  border: 1px solid var(--border); border-radius: var(--r-md);
  background: var(--surface); color: var(--text);
  transition: border-color .15s, background .15s;
}
.tpl:hover:not(:disabled) { border-color: var(--primary-line); background: var(--primary-soft); }
.tpl:disabled { opacity: .5; cursor: not-allowed; }
.tpl-name { font-weight: 600; font-size: 14px; margin-bottom: 4px; }
.tpl-desc {
  font-size: 12px; color: var(--text-3); line-height: 1.5;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* ---------- 审批详情 ---------- */

.ap-detail { max-height: 64vh; overflow: auto; padding-right: 4px; }
.ap-status-row { display: flex; gap: var(--sp-3); align-items: center; flex-wrap: wrap; margin-bottom: var(--sp-4); }
.ap-sub { margin: var(--sp-5) 0 var(--sp-2); font-size: 13px; color: var(--text-2); }
.ap-sub:first-of-type { margin-top: 0; }

/* ---------- 流程进度 ---------- */

.flow { list-style: none; margin: 0; padding: 0 0 0 var(--sp-4); }

.flow-node { position: relative; padding: 0 0 var(--sp-4) var(--sp-4); }
.flow-node:last-child { padding-bottom: 0; }
.flow-node::before {
  content: ""; position: absolute; left: 4px; top: 14px; bottom: -2px;
  width: 2px; background: var(--border);
}
.flow-node:last-child::before { display: none; }

.flow-dot {
  position: absolute; left: 0; top: 5px;
  width: 10px; height: 10px; border-radius: 50%;
  background: var(--border); border: 2px solid var(--surface);
}
.flow-node.is-done .flow-dot { background: var(--primary); }
.flow-node.is-current .flow-dot {
  background: var(--warning);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--warning) 25%, transparent);
}

.flow-name { display: flex; gap: var(--sp-2); align-items: center; font-size: 13px; font-weight: 600; }
.flow-people { display: flex; flex-direction: column; gap: 2px; margin-top: 4px; font-size: 12px; }
.flow-person { color: var(--text-2); }

code.pw {
  display: inline-block; padding: 4px 10px;
  background: var(--primary-soft); color: var(--primary);
  border: 1px solid var(--primary-line); border-radius: var(--r-sm);
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 15px; letter-spacing: 1px; user-select: all;
}
table.data code { font-size: 12px; color: var(--text-3); }
.input:disabled { background: var(--surface-2); color: var(--text-3); cursor: not-allowed; }

/* ---------- 员工关系 ---------- */

/* 概览卡片行。用 auto-fit 而不是固定列数：卡片数量随页面不同（合同页 2 个、
   工作台可能 4 个），写死列数会在少卡片时留下大片空白。 */
/* 上限 220px：卡片数量少的时候不该被拉成横贯全屏的大色块，
   那会让"2 个待办"显得比整张表格还重要。 */
.kpi-row { display: grid; gap: var(--sp-3); margin-bottom: var(--sp-4);
  grid-template-columns: repeat(auto-fit, minmax(160px, 220px)); justify-content: start; }
.kpi-row:empty { display: none; margin: 0; }

.kpi {
  display: block; text-align: left; padding: var(--sp-4);
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-lg); font: inherit; color: inherit;
}
.kpi-click { cursor: pointer; }
.kpi-click:hover { border-color: var(--primary-line); background: var(--primary-soft); }
.kpi-value { font-size: 24px; font-weight: 650; line-height: 1.2; font-variant-numeric: tabular-nums; }
.kpi-label { margin-top: 2px; font-size: 13px; color: var(--text-2); }
.kpi-hint { margin-top: 2px; font-size: 12px; color: var(--text-3); }
.kpi-warn .kpi-value { color: var(--warning); }
.kpi-bad .kpi-value { color: var(--danger); }

/* 员工搜索选择器 */
.picker { position: relative; }
.picker-list {
  position: absolute; z-index: 30; left: 0; right: 0; top: calc(100% + 4px);
  max-height: 240px; overflow-y: auto;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--r-md); box-shadow: var(--shadow-2);
}
.picker-item {
  display: block; width: 100%; text-align: left; padding: 8px var(--sp-3);
  background: transparent; border: 0; font: inherit; color: inherit; cursor: pointer;
}
.picker-item:hover { background: var(--primary-soft); }

/* 「原 → 新」单元格 */
.change { display: inline-flex; align-items: center; gap: 2px; flex-wrap: wrap; }
.change .arrow { color: var(--text-3); }

.check-line {
  display: flex; align-items: center; gap: var(--sp-2);
  margin-top: var(--sp-3); font-size: 13px; color: var(--text-2); cursor: pointer;
}
.checkbox { width: 15px; height: 15px; accent-color: var(--primary); }

.small { font-size: 12px; }
/* 已撤销 / 已作废的行整体压暗，但不隐藏 —— 它们仍是审计线索 */
.row-muted td { opacity: .55; }

/* 任职时间轴 */
.jr-line { list-style: none; margin: 0; padding: 0 0 0 var(--sp-4); }
.jr-item { position: relative; padding: 0 0 var(--sp-5) var(--sp-5); border-left: 2px solid var(--border-2); }
.jr-item:last-child { border-left-color: transparent; padding-bottom: 0; }
.jr-dot {
  position: absolute; left: -7px; top: 4px; width: 12px; height: 12px;
  border-radius: 50%; background: var(--border); border: 2px solid var(--surface);
}
.jr-item.current .jr-dot {
  background: var(--primary);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 22%, transparent);
}
.jr-head { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; font-size: 13px; }
.jr-meta { display: flex; flex-wrap: wrap; gap: var(--sp-2) var(--sp-4); margin-top: 6px; font-size: 13px; }
.meta-item { color: var(--text-2); }

/* ---------- 工作台自定义面板 ---------- */

.desk-card .card-head { gap: var(--sp-2); }
/* 工作台的卡片被网格压得很矮，空态要收紧，否则图标和标题会被截掉一半 */
.desk-card .state { padding: var(--sp-3) var(--sp-2); }
.desk-card .state .state-icon { font-size: 20px; }
.desk-card .state h4 { margin: var(--sp-2) 0 2px; }
.desk-card .stat-row { margin: 0; }
.desk-edit .desk-card {
  cursor: grab; border-style: dashed; border-color: var(--primary-line);
}
.desk-edit .desk-card:active { cursor: grabbing; }
.desk-card.dragging { opacity: .45; }
.desk-card.drop-target { outline: 2px solid var(--primary); outline-offset: -2px; }

/* 卡片内的小型统计块 */
.mini-kpi { display: grid; gap: var(--sp-2); grid-template-columns: repeat(2, minmax(0, 1fr)); }
.mini-kpi-item {
  display: flex; flex-direction: column; gap: 2px; padding: var(--sp-3);
  background: var(--surface-2); border: 1px solid var(--border-2);
  border-radius: var(--r-md); font: inherit; color: inherit;
  text-align: left; cursor: pointer;
}
.mini-kpi-item:hover { border-color: var(--primary-line); background: var(--primary-soft); }
.mini-kpi-value { font-size: 20px; font-weight: 650; font-variant-numeric: tabular-nums; }
.mini-kpi-item.warn .mini-kpi-value { color: var(--warning); }
.mini-kpi-label { font-size: 12px; color: var(--text-2); }
.mini-kpi-hint { font-size: 11px; color: var(--text-3); }

.mini-list { list-style: none; margin: 0; padding: 0; }
.mini-list li {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2);
  padding: 7px 0; border-bottom: 1px dashed var(--border-2); font-size: 13px;
}
.mini-list li:last-child { border-bottom: 0; }
.mini-link {
  background: transparent; border: 0; padding: 0; font: inherit; color: var(--primary);
  cursor: pointer; text-align: left;
}
.mini-link:hover { text-decoration: underline; }

.panel-list { display: flex; flex-direction: column; }
.panel-row {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
  padding: 9px 0; border-bottom: 1px dashed var(--border-2);
}
.panel-row:last-child { border-bottom: 0; }
.panel-name { display: flex; align-items: center; gap: var(--sp-2); cursor: pointer; font-size: 13px; }
.panel-ops { display: flex; gap: 4px; flex: none; }
.panel-sep {
  margin-top: var(--sp-3); padding-top: var(--sp-3); border-top: 1px solid var(--border);
  font-size: 12px; color: var(--text-3);
}
.panel-off .panel-name strong { color: var(--text-3); font-weight: 500; }

/* ---------- 考勤假期 ---------- */

/* 出勤日选择：七个圆点比七个复选框更快读懂 */
.day-picker { display: flex; gap: 6px; flex-wrap: wrap; }
.day-btn {
  width: 34px; height: 34px; border-radius: 50%;
  border: 1px solid var(--border); background: var(--surface);
  color: var(--text-2); font: inherit; font-size: 13px; cursor: pointer;
}
.day-btn:hover { border-color: var(--primary-line); }
.day-btn.on {
  background: var(--primary); border-color: var(--primary);
  color: #fff; font-weight: 600;
}

/* 司龄阶梯：一行一档 */
.tier-box { display: flex; flex-direction: column; gap: var(--sp-2); align-items: flex-start; }
.tier-row { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
.tier-row .input { width: auto; }

/* 多选下拉在表单里默认会被拉到很宽 */
.field select[multiple] { width: 100%; min-height: 110px; }

/* ---------- 薪酬 ---------- */

/* 金额列：等宽数字 + 右对齐，一列数字才对得齐，核对时眼睛不用来回找 */
.money { font-variant-numeric: tabular-nums; }
table.data td.num, table.data th.num { text-align: right; font-variant-numeric: tabular-nums; }

/* 工资表列多，行距收紧一点才装得下 */
.data-dense th, .data-dense td { padding-top: 6px; padding-bottom: 6px; font-size: 13px; }
.row-active > td { background: var(--primary-soft); }
.row-bad > td { background: color-mix(in srgb, var(--danger) 7%, transparent); }
.row-total > td { border-top: 2px solid var(--border); background: var(--surface-2); }

/* 工资表里可直接点改的单元格 */
.cell-edit {
  background: transparent; border: 1px dashed var(--border);
  border-radius: var(--r-sm); padding: 2px 6px;
  font: inherit; font-variant-numeric: tabular-nums; color: inherit; cursor: pointer;
}
.cell-edit:hover { border-color: var(--primary); background: var(--primary-soft); }
/* 手工改过的值要看得出来——它在重算时不会被覆盖 */
.cell-edit.manual {
  border-style: solid; border-color: var(--warning);
  background: color-mix(in srgb, var(--warning) 12%, transparent);
}

/* 公式编辑器的变量芯片：点一下插到光标处，比照着抄名字靠谱 */
.formula-help {
  display: flex; flex-direction: column; gap: var(--sp-2);
  padding: var(--sp-3); margin-top: var(--sp-2);
  background: var(--surface-2); border: 1px solid var(--border-2);
  border-radius: var(--r-md);
}
.chip {
  display: inline-block; margin: 2px 4px 2px 0; padding: 2px 8px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 999px; font: inherit; font-size: 12px; color: var(--text-2); cursor: pointer;
}
.chip:hover { border-color: var(--primary-line); background: var(--primary-soft); color: var(--primary); }
code.fn {
  display: inline-block; margin: 2px 6px 2px 0; font-size: 12px; color: var(--text-3);
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.err-text { color: var(--danger); }

/* 工资条 */
.slip-head { display: flex; align-items: center; gap: var(--sp-2); margin-bottom: var(--sp-3); }
.slip-cols { display: grid; gap: var(--sp-4); grid-template-columns: repeat(2, minmax(0, 1fr)); }
.slip-cols h4, .tax-explain h4 { margin: 0 0 var(--sp-2); font-size: 13px; color: var(--text-2); }
.slip-total {
  display: flex; gap: var(--sp-5); flex-wrap: wrap;
  margin-top: var(--sp-3); padding-top: var(--sp-3); border-top: 1px solid var(--border);
  font-size: 13px;
}
.slip-total .net strong { color: var(--primary); font-size: 16px; }
.tax-explain {
  margin-top: var(--sp-4); padding: var(--sp-3);
  background: var(--surface-2); border: 1px solid var(--border-2); border-radius: var(--r-md);
}

/* 工资项多选 */
.col-grid {
  display: grid; gap: 4px; max-height: 260px; overflow-y: auto;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
}

/* 社保：横条图。零依赖前端里，一个画得准的横条比引一个图表库更值 */
.bars { display: flex; flex-direction: column; gap: 6px; }
.bar-row { display: flex; align-items: center; gap: var(--sp-2); font-size: 13px; }
.bar-label { flex: 0 0 96px; color: var(--text-2); }
.bar-track {
  flex: 1 1 auto; height: 14px; min-width: 60px;
  background: var(--surface-2); border-radius: 999px; overflow: hidden;
}
.bar-fill { height: 100%; background: var(--primary); border-radius: 999px; }
.bar-value {
  flex: 0 0 120px; text-align: right;
  font-variant-numeric: tabular-nums; font-weight: 600;
}
.bar-row .muted { flex: 0 0 72px; text-align: right; }

/* 已选员工的标签串 */
.chips { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
.chips .chip { cursor: default; display: inline-flex; align-items: center; gap: 4px; }
.chip-x {
  border: 0; background: none; cursor: pointer; color: var(--text-3);
  font-size: 14px; line-height: 1; padding: 0 2px;
}
.chip-x:hover { color: var(--danger); }

.check-inline { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; }
.form-sub { margin: var(--sp-3) 0 var(--sp-2); font-size: 13px; color: var(--text-2); }
table.data.compact th, table.data.compact td { padding: 4px 8px; font-size: 12px; }
table.data.compact .input { padding: 2px 6px; height: 26px; font-size: 12px; }

/* 招聘：进度条、待办卡、周视图、职位卡 */
.mini-bar { display: flex; align-items: center; gap: 6px; min-width: 110px; }
.mini-bar .bar-track { height: 8px; flex: 1 1 auto; min-width: 40px; }
.mini-bar .small { flex: none; color: var(--text-3); font-variant-numeric: tabular-nums; }
.bar-fill.bar-done { background: var(--success, var(--primary)); }
.bar-fill.bar-zero { background: var(--border-2); }

.todo-row {
  display: grid; gap: var(--sp-3); margin-bottom: var(--sp-3);
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
}
.todo-card {
  display: flex; flex-direction: column; gap: 2px; align-items: flex-start;
  padding: var(--sp-3); text-align: left; cursor: pointer;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md);
  font: inherit; color: var(--text);
}
.todo-card:hover { border-color: var(--primary-line); }
.todo-card strong { font-size: 22px; font-variant-numeric: tabular-nums; }
.todo-hot strong { color: var(--danger); }

.week-grid {
  display: grid; gap: 6px; margin-top: var(--sp-2);
  grid-template-columns: repeat(7, minmax(0, 1fr));
}
@media (max-width: 900px) {
  .week-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.week-col {
  min-height: 92px; padding: 6px;
  background: var(--surface-2); border: 1px solid var(--border-2); border-radius: var(--r-sm);
}
.week-today { border-color: var(--primary-line); background: var(--primary-soft); }
.week-head { display: flex; align-items: baseline; gap: 2px; margin-bottom: 4px; }
.iv-card {
  display: flex; flex-direction: column; align-items: flex-start; gap: 1px;
  width: 100%; margin-bottom: 4px; padding: 4px 6px; cursor: pointer; text-align: left;
  background: var(--surface); border: 1px solid var(--border); border-left: 3px solid var(--primary);
  border-radius: var(--r-sm); font: inherit; font-size: 12px; color: var(--text);
}
.iv-card:hover { border-color: var(--primary-line); }
.iv-card.iv-done { border-left-color: var(--border-2); opacity: 0.7; }

.job-cards {
  display: grid; gap: var(--sp-3);
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
}
.job-card {
  padding: var(--sp-3); background: var(--surface-2);
  border: 1px solid var(--border-2); border-radius: var(--r-md);
}
.job-card-head { display: flex; justify-content: space-between; gap: var(--sp-2); align-items: baseline; }
.job-card p { margin: var(--sp-2) 0 0; color: var(--text-2); }

/* 候选人详情 */
.detail { max-height: 62vh; overflow-y: auto; }
.kv-inline { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; font-size: 13px; }
pre.resume {
  max-height: 220px; overflow: auto; margin: 0; padding: var(--sp-3);
  background: var(--surface-2); border: 1px solid var(--border-2); border-radius: var(--r-sm);
  font-size: 12px; white-space: pre-wrap; word-break: break-word;
}
.input.static { background: var(--surface-2); color: var(--text-2); }

/* 绩效：等级徽标与迷你走势 */
.grade {
  display: inline-flex; align-items: center; gap: 2px;
  min-width: 26px; padding: 1px 7px; justify-content: center;
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: var(--r-sm); font-size: 12px; font-weight: 600; color: var(--text);
}
.grade-top { background: var(--primary-soft); border-color: var(--primary-line); color: var(--primary); }
.grade-low { background: color-mix(in srgb, var(--danger) 10%, transparent); border-color: var(--danger); color: var(--danger); }
.grade-lock { font-size: 10px; font-weight: 400; color: var(--text-3); }

.spark { display: inline-flex; align-items: flex-end; gap: 2px; height: 20px; }
.spark-bar { width: 5px; background: var(--primary); border-radius: 1px; opacity: 0.75; }
.spark-bar:last-child { opacity: 1; }

/* 电子合同：印章预览与等宽编号 */
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.seal-img { width: 40px; height: 40px; object-fit: contain; }
.seal-lg { width: 120px; height: 120px; }

/* ============================================================
   AI 员工助手
   问答页是这个模块唯一给"员工"看的页面，所以它要像聊天窗口，
   而不像后台表单：左边对话、右边常见问题，输入框永远在手边。
   ============================================================ */

.chat-wrap {
  display: grid; gap: var(--sp-4);
  grid-template-columns: minmax(0, 1fr) 260px;
  align-items: start;
}
@media (max-width: 900px) { .chat-wrap { grid-template-columns: 1fr; } }

.chat-thread {
  display: flex; flex-direction: column; gap: var(--sp-3);
  min-height: 320px; max-height: 54vh; overflow-y: auto;
  padding-right: var(--sp-2);
}

.chat-msg { display: flex; gap: var(--sp-2); align-items: flex-start; }
.chat-msg.chat-me { flex-direction: row-reverse; }

.chat-avatar {
  flex: 0 0 30px; width: 30px; height: 30px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--primary-soft); color: var(--primary);
  border: 1px solid var(--primary-line);
  font-size: 11px; font-weight: 600;
}
.chat-me .chat-avatar { background: var(--surface-2); color: var(--text-2); border-color: var(--border); }

.chat-bubble {
  max-width: 78%; padding: var(--sp-3) var(--sp-4);
  background: var(--surface-2); border: 1px solid var(--border-2);
  border-radius: var(--r-md); font-size: 13px; line-height: 1.7;
}
.chat-me .chat-bubble {
  background: var(--primary-soft); border-color: var(--primary-line);
}

.chat-head { display: flex; align-items: center; gap: var(--sp-2); margin-bottom: 4px; }
.chat-text { margin: 0; white-space: pre-wrap; word-break: break-word; }
/* 来源说明必须比答案弱一档：它是解释，不是答案本身 */
.chat-note {
  margin: 6px 0 0; padding-top: 6px; border-top: 1px dashed var(--border);
  font-size: 12px; color: var(--text-3);
}

.chat-refs { margin-top: 6px; font-size: 12px; }
.chat-refs > summary { cursor: pointer; color: var(--text-2); }
.ref-item {
  margin-top: 6px; padding: var(--sp-2);
  background: var(--surface); border: 1px solid var(--border-2); border-radius: var(--r-sm);
}
.ref-title { display: flex; flex-wrap: wrap; gap: var(--sp-2); align-items: baseline; }
.ref-snip { margin: 4px 0 0; color: var(--text-2); white-space: pre-wrap; word-break: break-word; }

.chat-fb { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); margin-top: 8px; }

.chat-input-row { display: flex; gap: var(--sp-2); align-items: flex-start; margin-top: var(--sp-3); }
.chat-input-row .input { flex: 1 1 auto; }
textarea.chat-input { resize: vertical; min-height: 52px; }

.hot-list { display: flex; flex-direction: column; gap: 6px; align-items: stretch; }
.hot-list .hot-q { cursor: pointer; text-align: left; }

.try-out { margin-top: var(--sp-3); max-height: 42vh; overflow-y: auto; }

/* ============================================================
   人事仪表盘
   两列网格、卡片可拖拽——和工作台同一套手势，但卡片库完全不重叠：
   工作台回答"我今天要处理什么"，看板回答"公司现在是什么状况"。
   ============================================================ */

.dash-grid {
  display: grid; gap: var(--sp-4);
  grid-template-columns: repeat(2, minmax(0, 1fr));
  align-items: start;
}
.dash-grid .span-2 { grid-column: 1 / -1; }
@media (max-width: 900px) { .dash-grid { grid-template-columns: 1fr; } }

.dash-edit .dash-card { cursor: grab; outline: 1px dashed var(--border); }
.dash-card.dragging { opacity: .45; }
.dash-card.drop-target { outline: 2px solid var(--primary); }

.dash-kpis {
  display: grid; gap: var(--sp-3);
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
}
.dash-kpi {
  padding: var(--sp-3); border: 1px solid var(--border-2);
  border-radius: var(--r-md); background: var(--surface-2);
  text-align: left; font: inherit; color: inherit;
}
.dash-kpi.kpi-click { cursor: pointer; }
.dash-kpi.kpi-click:hover { border-color: var(--primary-line); background: var(--primary-soft); }
.dash-kpi-value { font-size: 26px; font-weight: 650; line-height: 1.2; font-variant-numeric: tabular-nums; }
.dash-kpi-label { margin-top: 2px; font-size: 13px; color: var(--text-2); }
.dash-kpi-hint { margin-top: 2px; font-size: 12px; color: var(--text-3); }
.dash-kpi.kpi-good .dash-kpi-value { color: var(--success); }
.dash-kpi.kpi-warn .dash-kpi-value { color: var(--warning); }
.dash-kpi.kpi-bad  .dash-kpi-value { color: var(--danger); }

.dash-rows { display: flex; flex-direction: column; gap: var(--sp-2); }
.dash-row {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
  padding: var(--sp-2) 0; border-bottom: 1px solid var(--border-2); font-size: 13px;
}
.dash-row:last-child { border-bottom: 0; }

/* 口径说明。一个解释不清怎么来的数字，迟早会让人不再信任整个页面 */
.dash-note { margin-top: var(--sp-3); padding-top: var(--sp-2); border-top: 1px dashed var(--border); }

/* 报告老板 */
.report-head { display: flex; align-items: center; gap: var(--sp-2); margin-bottom: var(--sp-2); }
.report-head h3 { margin: 0; }
.report-summary { margin: 0 0 var(--sp-2); font-size: 15px; line-height: 1.8; }
.report-line { margin: 0 0 6px; font-size: 13px; line-height: 1.8; color: var(--text-2); }

.findings { display: flex; flex-direction: column; gap: var(--sp-3); }
.finding {
  padding: var(--sp-3); border: 1px solid var(--border-2);
  border-left: 3px solid var(--border); border-radius: var(--r-sm);
  background: var(--surface-2);
}
.finding-风险 { border-left-color: var(--danger); }
.finding-提醒 { border-left-color: var(--warning); }
.finding-亮点 { border-left-color: var(--success); }
.finding-head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); }
.finding-detail { margin: 6px 0 0; font-size: 13px; line-height: 1.7; color: var(--text-2); }
.finding-action { margin: 4px 0 0; font-size: 12px; line-height: 1.7; color: var(--text-3); }

/* ============================================================
   培训学习
   评审意见是"打薄压缩"，所以这几页刻意没有花哨的组件：
   一张表 + 一个对话框能说清的事，不值得再造一套 UI。
   ============================================================ */

/* 题库/试卷的分段切换 */
.seg { display: inline-flex; gap: 0; margin-bottom: var(--sp-3); }
.seg-btn {
  padding: 6px 16px; font-size: 13px; cursor: pointer;
  background: var(--surface); color: var(--text-2);
  border: 1px solid var(--border); border-right-width: 0;
}
.seg-btn:first-child { border-radius: var(--r-sm) 0 0 var(--r-sm); }
.seg-btn:last-child { border-radius: 0 var(--r-sm) var(--r-sm) 0; border-right-width: 1px; }
.seg-btn.on { background: var(--primary-soft); color: var(--primary); border-color: var(--primary-line); }

/* 出题时的选项行 */
.opt-row { display: flex; align-items: center; gap: var(--sp-2); margin-bottom: 6px; }
.opt-row .input { flex: 1 1 auto; }
.col-grid.tall { max-height: 320px; }

/* 报表里的迷你进度条 */
.bar-track.mini { display: inline-block; width: 56px; height: 8px; vertical-align: middle; margin-right: 6px; }
.bad-text { color: var(--danger); }

/* 学员端答题 */
.exam-q {
  padding: var(--sp-3); margin-bottom: var(--sp-3);
  border: 1px solid var(--border-2); border-radius: var(--r-sm); background: var(--surface-2);
}
.exam-q-head { display: flex; gap: var(--sp-2); align-items: baseline; margin-bottom: var(--sp-2); }
.exam-q-opts { display: flex; flex-direction: column; gap: 6px; }
.exam-rule {
  padding: var(--sp-2) var(--sp-3); margin-bottom: var(--sp-3);
  background: var(--primary-soft); border: 1px solid var(--primary-line);
  border-radius: var(--r-sm); font-size: 12px; color: var(--text-2);
}
.exam-item { padding: var(--sp-2) 0; border-bottom: 1px solid var(--border-2); font-size: 13px; }
.exam-item:last-child { border-bottom: 0; }
.exam-item.wrong { color: var(--danger); }

/* 工作台「我的学习」卡片里的任务行 */
.desk-list { display: flex; flex-direction: column; gap: 6px; margin-top: var(--sp-2); }
.desk-row {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2);
  padding: 6px 0; border-bottom: 1px solid var(--border-2); font-size: 13px;
}
.desk-row:last-child { border-bottom: 0; }
.desk-row-right { display: flex; align-items: center; gap: var(--sp-2); flex: 0 0 auto; }

/* ============================================================
   行政管理
   ============================================================ */

/* 证明正文：按纸面排版，打印出来就是这个样子 */
pre.cert-body {
  padding: var(--sp-5) var(--sp-6); line-height: 2.1; font-size: 14px;
  background: var(--surface); border: 1px solid var(--border);
}

/* 问卷：评分题 */
.rate-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.rate-dot {
  width: 34px; height: 34px; border-radius: 50%; cursor: pointer;
  background: var(--surface); border: 1px solid var(--border);
  color: var(--text-2); font-size: 13px;
}
.rate-dot.on { background: var(--primary); border-color: var(--primary); color: #fff; }
.rate-dot:disabled { cursor: default; opacity: .6; }

/* 问卷编辑：一道题一块 */
.sv-qedit {
  padding: var(--sp-3); margin-bottom: var(--sp-3);
  border: 1px solid var(--border-2); border-radius: var(--r-sm); background: var(--surface-2);
}
.sv-stat { margin-top: var(--sp-4); }
.sv-texts { max-height: 180px; overflow-y: auto; margin-top: 6px; }
.sv-text {
  margin: 0 0 4px; padding: 6px var(--sp-2); font-size: 13px; color: var(--text-2);
  background: var(--surface-2); border-radius: var(--r-sm);
}

/* ---------- 员工姓名下钻 ---------- */

.emp-link {
  padding: 0; border: 0; background: none; cursor: pointer;
  font: inherit; font-weight: 600; color: var(--primary); text-align: left;
}
.emp-link:hover { color: var(--primary-hover); text-decoration: underline; }

/* ---------- 右侧抽屉 ---------- */

.side-panel-overlay {
  position: fixed; inset: 0; z-index: calc(var(--z-overlay) - 10);
  background: rgba(15, 22, 19, .32);
  display: flex; justify-content: flex-end;
}
.side-panel {
  width: min(100%, 560px); height: 100%;
  display: flex; flex-direction: column;
  background: var(--surface); box-shadow: var(--sh-3);
  animation: side-panel-in .18s ease-out;
}
@keyframes side-panel-in { from { transform: translateX(24px); opacity: 0; } to { transform: none; opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .side-panel { animation: none; } }
.side-panel-head {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
  padding: var(--sp-4) var(--sp-5); border-bottom: 1px solid var(--border-2);
}
.side-panel-head h3 { margin: 0; font-size: 16px; }
.side-panel-x {
  width: 32px; height: 32px; border: 0; border-radius: var(--r-sm);
  background: transparent; color: var(--text-3); font-size: 20px; cursor: pointer;
}
.side-panel-x:hover { background: var(--border-2); color: var(--text); }
.side-panel-body { flex: 1; min-height: 0; overflow-y: auto; padding: var(--sp-4) var(--sp-5); }
.side-panel-foot {
  display: flex; align-items: center; justify-content: flex-end; gap: var(--sp-2);
  padding: var(--sp-3) var(--sp-5); border-top: 1px solid var(--border-2);
}
.side-panel-note { margin-right: auto; font-size: 12.5px; }

.emp-head { display: flex; align-items: center; gap: var(--sp-3); margin-bottom: var(--sp-4); }
.emp-avatar .avatar-face {
  width: 44px; height: 44px; font-size: 15px;
  background: var(--primary-soft); color: var(--primary); box-shadow: inset 0 0 0 1px var(--primary-line);
}
.emp-head-main { min-width: 0; }
.emp-head-name { display: flex; align-items: center; gap: var(--sp-2); font-size: 16px; }
.emp-head-name .tag { margin: 0; }
.emp-sec { padding-top: var(--sp-3); margin-top: var(--sp-3); border-top: 1px dashed var(--border); }
.emp-sec h4 { margin: 0 0 var(--sp-2); font-size: 13px; color: var(--text-2); }
.side-panel-body .alert { margin-bottom: var(--sp-3); }

/* ---------- 侧栏单页模块 / 提示 ---------- */

a.side-mod-head { text-decoration: none; }
.field-note { margin: 4px 0 0; font-size: 12px; color: var(--text-3); line-height: 1.5; }
.field-note.is-warn { color: var(--warning); }
.toast.warn { border-left-color: var(--warning); }

/* ---------- 岗位职级 / 员工标签 ---------- */

.tag-btn { padding: 0; border: 0; background: none; cursor: pointer; }
.tag-btn .tag { margin: 0; }
.tag-btn:hover .tag { text-decoration: underline; }
.range-pair { display: flex; align-items: center; gap: var(--sp-2); }
.range-pair select { flex: 1; min-width: 0; }
.pos-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-2); margin: var(--sp-3) 0 var(--sp-2); }
.pos-stat { padding: var(--sp-3); border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--surface-2); text-align: center; }
.pos-stat-num { font-size: 22px; font-weight: 600; line-height: 1.2; }
.pos-stat-label { font-size: 12px; color: var(--text-3); }
.pos-stat.is-warn .pos-stat-num { color: var(--warning); }
.pos-stat.is-bad .pos-stat-num { color: var(--danger); }
.pos-staff-title { margin: var(--sp-4) 0 var(--sp-2); font-size: 14px; }
.tag-checks { display: flex; flex-wrap: wrap; gap: var(--sp-2) var(--sp-3); min-height: 32px; align-items: center; }
.tag-check { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; }
.tag-check .tag { margin: 0; }
.emp-tags { display: flex; flex-wrap: wrap; gap: 4px; margin: calc(-1 * var(--sp-2)) 0 var(--sp-3); }

/* ---------- 组织架构：搭建引导 ---------- */

.org-guide-slot:empty { display: none; }
.org-guide { padding: var(--sp-3) var(--sp-4); margin-bottom: var(--sp-4); }
.org-guide-head { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; }
.org-guide-head strong { font-size: 14px; }
.org-guide-bar {
  flex: 1; min-width: 120px; max-width: 360px; height: 6px;
  border-radius: 3px; background: var(--border-2); overflow: hidden;
}
.org-guide-bar > span { display: block; height: 100%; background: var(--primary); border-radius: 3px; transition: width .3s; }
.org-guide-pct { font-size: 12.5px; color: var(--primary); font-weight: 600; min-width: 36px; }
.org-guide-head .btn { margin-left: auto; }
.org-guide-steps {
  list-style: none; margin: var(--sp-3) 0 0; padding: 0;
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sp-3);
}
.org-guide.is-folded .org-guide-steps { display: none; }
.org-guide-steps li {
  display: flex; align-items: center; gap: var(--sp-2);
  padding: var(--sp-2) var(--sp-3); border: 1px solid var(--border-2); border-radius: var(--r-sm);
  background: var(--surface-2);
}
.org-guide-no {
  flex: none; width: 22px; height: 22px; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 600; background: var(--border-2); color: var(--text-2);
}
.org-guide-steps li.is-done .org-guide-no { background: var(--primary); color: var(--text-on-brand); }
.org-guide-txt { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
.org-guide-txt .muted { font-size: 12px; }
.org-guide-step-pct { font-size: 12px; color: var(--text-3); }
@media (max-width: 960px) { .org-guide-steps { grid-template-columns: 1fr; } }

/* ---------- 组织架构：组织树 ---------- */

.org-split { grid-template-columns: minmax(260px, 340px) 1fr; }
.org-split > .split-aside { max-height: none; overflow: visible; }
.org-tree-tools .input { width: 100%; margin-bottom: var(--sp-2); }
.org-tree-ops { display: flex; align-items: center; gap: 2px; flex-wrap: wrap; margin-bottom: var(--sp-2); }
.org-match { flex: 1; min-width: 0; font-size: 12px; }
.org-tree-scroll { max-height: calc(100vh - 330px); min-height: 200px; overflow: auto; margin: 0 calc(-1 * var(--sp-2)); }
.org-tree { list-style: none; margin: 0; padding: 0; }
.org-tree-row { display: flex; align-items: center; gap: 2px; border-radius: var(--r-sm); margin: 1px var(--sp-2); }
.org-tree-row:hover { background: var(--border-2); }
.org-tree-row.is-active { background: var(--primary-soft); box-shadow: inset 3px 0 0 var(--primary); }
.org-tree-row.is-active .org-tree-name { color: var(--primary); font-weight: 600; }
.org-tree-row.is-cur { outline: 1px dashed var(--warning); outline-offset: -1px; }
.org-tree-row.is-off .org-tree-name { color: var(--text-3); }
.org-tog {
  flex: none; width: 22px; height: 22px; border: 0; border-radius: 4px;
  background: transparent; color: var(--text-3); cursor: pointer; font-size: 12px;
}
.org-tog:hover { background: var(--border); color: var(--text); }
.org-tog.is-leaf { cursor: default; }
.org-tree-main {
  flex: 1; min-width: 0; display: flex; align-items: center; gap: 6px;
  padding: 6px 6px 6px 2px; border: 0; background: transparent; cursor: pointer;
  text-align: left; font: inherit; font-size: 13px; color: var(--text);
}
.org-tree-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.org-tree-leader { flex: none; font-size: 12px; color: var(--text-3); }
.org-tree-count { margin-left: auto; flex: none; font-size: 12px; color: var(--text-3); font-variant-numeric: tabular-nums; }
.org-tree mark, .oc-node mark {
  background: color-mix(in srgb, var(--warning) 28%, transparent); color: inherit; border-radius: 2px; padding: 0 1px;
}

/* ---------- 组织架构：详情 ---------- */

.org-detail-head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--sp-3); flex-wrap: wrap; }
.org-detail-head h3 { margin: 0 0 4px; font-size: 17px; }
.org-detail-tags .tag { margin: 0 4px 0 0; }
.org-stats {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--sp-2);
  margin: var(--sp-4) 0;
}
.org-stat {
  display: flex; flex-direction: column; align-items: flex-start; gap: 2px;
  padding: var(--sp-3); border: 1px solid var(--border-2); border-radius: var(--r-sm);
  background: var(--surface-2); cursor: pointer; text-align: left; font: inherit;
  transition: border-color .12s, background .12s;
}
.org-stat:hover { border-color: var(--primary-line); background: var(--primary-soft); }
.org-stat-v { font-size: 20px; font-weight: 600; color: var(--text); font-variant-numeric: tabular-nums; }
.org-stat-k { font-size: 12px; color: var(--text-3); }
.org-stat.is-warn .org-stat-v { color: var(--warning); }
.org-stat.is-bad .org-stat-v { color: var(--danger); }
.org-kv { grid-template-columns: 88px 1fr; }
.org-chips { display: flex; flex-wrap: wrap; gap: 4px; }
.org-chip {
  padding: 1px 8px; border: 1px solid var(--border); border-radius: 999px;
  background: var(--surface); color: var(--primary); font: inherit; font-size: 12.5px; cursor: pointer;
}
.org-chip:hover { border-color: var(--primary-line); background: var(--primary-soft); }
.org-detail .field-note { margin-top: var(--sp-4); }
.side-panel .org-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 960px) {
  .org-split { grid-template-columns: 1fr; }
  .org-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ---------- 组织架构：架构图 ---------- */

.oc-card { overflow: hidden; }
.oc-bar {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); flex-wrap: wrap;
  padding: var(--sp-2) var(--sp-3); border-bottom: 1px solid var(--border-2);
}
.oc-legend { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-3); }
.oc-dot { width: 10px; height: 10px; border-radius: 3px; margin-left: 6px; }
.oc-dot.is-company { background: var(--brand-deep); }
.oc-dot.is-unit { background: var(--primary); }
.oc-dot.is-dept { background: var(--surface); box-shadow: inset 0 0 0 1.5px var(--primary-line); }
.oc-tools { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.oc-sep { width: 1px; height: 18px; background: var(--border); margin: 0 4px; }
.oc-zoom { min-width: 44px; text-align: center; font-size: 12.5px; color: var(--text-2); font-variant-numeric: tabular-nums; }
.oc-viewport {
  position: relative; overflow: hidden; height: max(460px, calc(100vh - 380px));
  background:
    radial-gradient(circle, var(--border) 1px, transparent 1px) 0 0 / 20px 20px,
    var(--surface-2);
  cursor: grab; touch-action: none; user-select: none;
}
.oc-viewport:focus-visible { outline: 2px solid var(--primary-line); outline-offset: -2px; }
.oc-viewport.is-dragging { cursor: grabbing; }
.oc-stage { position: absolute; left: 0; top: 0; width: max-content; transform-origin: 0 0; padding: 4px 16px 24px; }

.oc-tree, .oc-tree ul {
  --oc-line: color-mix(in srgb, var(--primary) 45%, var(--border));
  list-style: none; margin: 0; padding: 0;
  display: flex; justify-content: center;
}
.oc-tree ul { position: relative; padding-top: 22px; }
.oc-tree li { position: relative; padding: 22px 10px 0; display: flex; flex-direction: column; align-items: center; }
.oc-tree > li { padding-top: 0; }
/* 父→子连接线：竖线从父节点底边中心落到横线，横线横跨兄弟节点，再竖线落到每个子节点中心；统一 2px */
.oc-tree ul::before {
  content: ""; position: absolute; top: 0; left: 50%; height: 22px;
  margin-left: -1px; border-left: 2px solid var(--oc-line);
}
.oc-tree li::before, .oc-tree li::after {
  content: ""; position: absolute; top: 0; height: 22px; width: 50%;
  border-top: 2px solid var(--oc-line);
}
.oc-tree li::before { right: 50%; }
.oc-tree li::after { left: 50%; margin-left: -1px; border-left: 2px solid var(--oc-line); }
.oc-tree li:first-child::before, .oc-tree li:last-child::after { border: 0 none; }
.oc-tree li:last-child::before { border-right: 2px solid var(--oc-line); margin-right: -1px; border-top-right-radius: 6px; }
.oc-tree li:first-child::after { border-top-left-radius: 6px; }
.oc-tree li:only-child::before { display: none; }
.oc-tree li:only-child::after { border-top: 0; border-radius: 0; }
.oc-tree > li::before, .oc-tree > li::after { display: none; }

.oc-cell { position: relative; display: flex; flex-direction: column; align-items: center; }
.oc-node {
  display: flex; flex-direction: column; align-items: flex-start; gap: 2px;
  min-width: 150px; max-width: 200px; padding: 8px 12px;
  border: 1px solid var(--border); border-radius: var(--r-sm);
  background: var(--surface); box-shadow: var(--sh-1);
  font: inherit; text-align: left; color: var(--text); cursor: pointer;
  transition: border-color .12s, box-shadow .12s;
}
.oc-node:hover { border-color: var(--primary); box-shadow: var(--sh-2); }
.oc-node:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.oc-node.is-company { border-top: 3px solid var(--brand-deep); background: var(--primary-soft); }
.oc-node.is-unit { border-top: 3px solid var(--primary); }
.oc-node.is-dept { border-top: 3px solid var(--primary-line); }
.oc-node.is-off { opacity: .6; border-style: dashed; }
.oc-type { font-size: 11px; color: var(--text-3); }
.oc-name { font-size: 13.5px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.oc-node.is-company .oc-name { font-size: 14.5px; }
.oc-leader, .oc-num { font-size: 12px; color: var(--text-2); }
.oc-num em { font-style: normal; }
.oc-num .is-bad { color: var(--danger); }
.oc-tog {
  position: absolute; left: 50%; bottom: -10px; transform: translateX(-50%); z-index: 1;
  min-width: 20px; height: 20px; padding: 0 5px; border: 1px solid var(--primary-line); border-radius: 10px;
  background: var(--surface); color: var(--primary); font-size: 11.5px; line-height: 18px; cursor: pointer;
}
.oc-tog:hover { background: var(--primary-soft); }
.oc-cell:has(> .oc-tog) { margin-bottom: 10px; }
.oc-cell:has(> .oc-tog) + ul { padding-top: 12px; }
.oc-cell:has(> .oc-tog) + ul::before { height: 12px; }

/* ---------- 员工中心：详情抽屉 / 花名册 / 档案资料 ---------- */

.side-panel.is-wide { width: min(100%, max(640px, 60vw), 1100px); }
@media (max-width: 760px) { .side-panel.is-wide { width: 100%; } }
.emp-tabs { position: sticky; top: calc(-1 * var(--sp-4)); z-index: 2; background: var(--surface); margin: 0 0 var(--sp-3); }
.emp-pane { min-height: 200px; }
.emp-pane[hidden] { display: none; }

.tag-info { background: color-mix(in srgb, var(--info) 12%, transparent); color: var(--info);
  border-color: color-mix(in srgb, var(--info) 30%, transparent); }

.flow-items { display: grid; gap: var(--sp-2); }
.flow-item {
  display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap;
  padding: 10px 12px; border: 1px solid var(--border-2); border-radius: var(--r-md);
  background: var(--surface-2);
}
.flow-item strong { margin-right: auto; }
.flow-item .tag { margin: 0; }

.job-timeline li { align-items: flex-start; }

.archive-toolbar {
  display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap;
  margin-bottom: var(--sp-3);
}
.archive-toolbar .alert { margin: 0; flex: 1; min-width: 220px; }
.archive-cat.is-missing { border-color: color-mix(in srgb, var(--danger) 35%, var(--border)); background: color-mix(in srgb, var(--danger) 4%, transparent); }
.archive-cat-up { margin-left: auto; }
.archive-file { display: flex; align-items: center; gap: 6px; padding: 4px 0; border-top: 1px dashed var(--border-2); }
.archive-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* "更多"下拉 */
.more-wrap { display: inline-block; }
.more-menu {
  position: fixed; z-index: var(--z-dropdown); min-width: 128px; padding: 4px;
  background: var(--raised); border: 1px solid var(--border); border-radius: var(--r-md); box-shadow: var(--sh-3);
  display: flex; flex-direction: column;
}
.more-menu button {
  text-align: left; padding: 7px 12px; border: 0; border-radius: var(--r-sm);
  background: none; color: var(--text); font: inherit; font-size: 13px; cursor: pointer; white-space: nowrap;
}
.more-menu button:hover:not(:disabled) { background: var(--primary-soft); color: var(--primary); }
.more-menu button.is-danger { color: var(--danger); }
.more-menu button.is-danger:hover { background: color-mix(in srgb, var(--danger) 10%, transparent); color: var(--danger); }
.more-menu button:disabled { color: var(--text-3); cursor: not-allowed; }

/* 花名册：可点的统计卡、高级筛选、条件标签、冻结列 */
.stat-btn { font: inherit; text-align: left; cursor: pointer; transition: border-color .12s, background .12s; }
.stat-btn:hover { border-color: var(--primary-line); }
.stat-btn.is-active { border-color: var(--primary); background: var(--primary-soft); box-shadow: inset 0 0 0 1px var(--primary); }
.roster-filter { margin-bottom: var(--sp-3); }
.roster-filter .input:first-child { max-width: 220px; }
.adv-filter {
  border: 1px solid var(--border-2); border-radius: var(--r-md); background: var(--surface-2);
  padding: var(--sp-3) var(--sp-4); margin-bottom: var(--sp-3);
}
.adv-filter[hidden] { display: none; }
.adv-grid { display: grid; gap: var(--sp-2) var(--sp-4); grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.adv-grid .field { margin: 0; }
.adv-actions { display: flex; justify-content: flex-end; gap: var(--sp-2); margin-top: var(--sp-3); }
.date-range { display: flex; align-items: center; gap: 6px; }
.date-range .input { min-width: 0; }
.filter-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-bottom: var(--sp-3); }
.filter-chips[hidden] { display: none; }
.filter-chip {
  display: inline-flex; align-items: center; gap: 2px; padding: 2px 4px 2px 10px; font-size: 12.5px;
  border: 1px solid var(--primary-line); border-radius: 999px; background: var(--primary-soft); color: var(--text);
}
.filter-chip .chip-x { border: 0; background: none; cursor: pointer; font-size: 15px; line-height: 1; padding: 0 4px; color: var(--text-3); }

.table-sticky table.data th.sticky-l, .table-sticky table.data td.sticky-l {
  position: sticky; left: 0; z-index: 1; background: var(--surface); box-shadow: inset -1px 0 0 var(--border-2);
}
.table-sticky table.data th.sticky-r, .table-sticky table.data td.sticky-r {
  position: sticky; right: 0; z-index: 1; background: var(--surface); box-shadow: inset 1px 0 0 var(--border-2);
}
.table-sticky table.data th.sticky-l, .table-sticky table.data th.sticky-r { background: var(--surface-2); z-index: 2; }
.table-sticky table.data tr:hover td.sticky-l, .table-sticky table.data tr:hover td.sticky-r { background: var(--surface-2); }
.is-busy { opacity: .55; pointer-events: none; transition: opacity .15s; }

.readonly-field { display: flex; align-items: center; gap: var(--sp-2); min-height: 34px; flex-wrap: wrap; }
.readonly-field .tag { margin: 0; }
.import-summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: var(--sp-2); margin: var(--sp-3) 0; }
.import-summary > div { border: 1px solid var(--border-2); border-radius: var(--r-md); padding: 8px 10px; display: flex; flex-direction: column; }
.import-summary strong { font-size: 18px; }
.import-summary span { font-size: 12px; color: var(--text-3); }
.import-summary .is-bad strong { color: var(--danger); }
.hint-list { margin: 6px 0 0; padding-left: 18px; font-size: 12.5px; color: var(--text-3); line-height: 1.7; }

/* 入转调离 */
.handover-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px var(--sp-4); margin-bottom: var(--sp-2); }
.change-list { display: grid; gap: 2px; font-size: 13px; min-width: 180px; white-space: nowrap; }
.warn-text { color: var(--warning); }

/* 档案资料：缺少材料分析 */
.archive-analysis {
  width: 100%; border: 1px solid var(--border); border-radius: var(--r-lg); background: var(--surface);
  padding: var(--sp-3) var(--sp-4);
}
.kpi-row > .archive-analysis { grid-column: 1 / -1; }
.archive-analysis-head { display: flex; align-items: baseline; gap: var(--sp-3); margin-bottom: var(--sp-2); }
.archive-analysis .kpi-row { margin: 0; }
.kpi.is-active { border-color: var(--primary); background: var(--primary-soft); box-shadow: inset 0 0 0 1px var(--primary); }
.top-missing { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: var(--sp-3); }
.miss-chip {
  display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; font: inherit; font-size: 12.5px;
  border: 1px solid color-mix(in srgb, var(--warning) 35%, var(--border)); border-radius: 999px;
  background: color-mix(in srgb, var(--warning) 8%, transparent); color: var(--text); cursor: pointer;
}
.miss-chip strong { color: var(--warning); }
.miss-chip:hover, .miss-chip.is-active { border-color: var(--warning); background: color-mix(in srgb, var(--warning) 18%, transparent); }
/* 列表页最后一列是操作时冻结在右侧，窄屏横向滚动也能直接操作 */
.table-wrap table.data td.ops:last-child,
.table-wrap table.data:has(td.ops:last-child) th:last-child {
  position: sticky; right: 0; z-index: 1; background: var(--surface); box-shadow: inset 1px 0 0 var(--border-2);
}
.table-wrap table.data:has(td.ops:last-child) th:last-child { background: var(--surface-2); }

/* ---------- 列表筛选行（员工记录、合同列表共用） ---------- */

.list-filters {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2);
  padding-bottom: var(--sp-3); margin-bottom: var(--sp-3); border-bottom: 1px solid var(--border-2);
}
.list-filters .input { width: auto; }
.list-filters .rec-emp .input { width: 200px; }
.list-filters .date-range .input { width: 140px; }
.spacer { flex: 1 1 auto; }
.state-actions { display: inline-flex; gap: var(--sp-2); flex-wrap: wrap; justify-content: center; }
.tab-count {
  display: inline-block; min-width: 18px; margin-left: 6px; padding: 0 6px; border-radius: 999px;
  font-size: 11px; line-height: 18px; text-align: center; background: var(--border-2); color: var(--text-2);
}
.tab.is-active .tab-count { background: var(--primary-soft); color: var(--primary); }
.row-muted-soft td { color: var(--text-2); }
.num-link {
  padding: 0; border: 0; background: none; font: inherit; color: var(--primary); cursor: pointer;
  text-decoration: underline; text-decoration-style: dotted; text-underline-offset: 3px;
}
.num-link:hover { color: var(--primary-hover); text-decoration-style: solid; }

/* 沟通记录：附件、锁定 */
.talk-attach { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); }
.talk-files { display: flex; flex-wrap: wrap; gap: 4px; }
.talk-files .chip { display: inline-flex; align-items: center; gap: 4px; }
.talk-file-links { display: inline-flex; flex-wrap: wrap; gap: 2px; }
.talk-file-links .btn { max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding-left: 4px; padding-right: 4px; }
.talk-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin-top: 2px; }
.talk-ops { display: inline-flex; gap: 2px; margin-left: 4px; }
.talk-locked { color: var(--text-3); }

/* ---------- 合同设置：四步配置条 ---------- */

.ec-setup { margin-bottom: var(--sp-4); }
.ec-setup-head { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; }
.ec-steps { display: flex; flex: 1 1 auto; gap: var(--sp-2); margin: 0; padding: 0; list-style: none; flex-wrap: wrap; }
.ec-step a {
  display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-radius: var(--r-md);
  border: 1px solid var(--border); background: var(--surface); color: var(--text); text-decoration: none;
}
.ec-step a:hover { border-color: var(--primary-line); }
.ec-step.is-current a { border-color: var(--primary); background: var(--primary-soft); }
.ec-step + .ec-step::before { content: "→"; color: var(--text-3); align-self: center; margin-right: var(--sp-2); }
.ec-step { display: flex; }
.ec-step-n {
  width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center;
  font-size: 12px; background: var(--border-2); color: var(--text-2);
}
.ec-step.is-current .ec-step-n { background: var(--primary); color: var(--text-on-brand); }
.ec-step-t { font-weight: 600; font-size: 13px; }
.ec-step-st { font-size: 12px; color: var(--text-3); }
.ec-step-st.is-ok { color: var(--success); }
.ec-step-st.is-todo { color: var(--warning); }
.ec-setup-guide { display: flex; align-items: center; gap: var(--sp-3); margin-top: var(--sp-3); }
.ec-setup-guide > span { flex: 1; }

/* 合同包编辑：可选模板 / 已选（可排序） */
.pk-editor { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-4); margin-top: var(--sp-3); }
.pk-editor .input { width: 100%; }
.pk-pool {
  margin-top: var(--sp-2); max-height: 260px; overflow-y: auto; border: 1px solid var(--border);
  border-radius: var(--r-sm); padding: 4px;
}
.pk-item { display: flex; align-items: center; gap: 6px; padding: 6px; border-radius: var(--r-sm); cursor: pointer; }
.pk-item:hover { background: var(--primary-soft); }
.pk-chosen { margin: var(--sp-2) 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 4px; }
.pk-row {
  display: flex; align-items: center; gap: 6px; padding: 4px 6px; border: 1px solid var(--border);
  border-radius: var(--r-sm); background: var(--surface);
}
.pk-row.is-invalid { border-color: color-mix(in srgb, var(--danger) 40%, var(--border)); }
.pk-n {
  width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center; flex: none;
  font-size: 12px; background: var(--primary-soft); color: var(--primary);
}
.pk-name { flex: 1; min-width: 0; display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; overflow: hidden; }
@media (max-width: 720px) { .pk-editor { grid-template-columns: 1fr; } }

/* ---------- 人事分析 ---------- */

.ana-filters {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2) var(--sp-3);
  padding: var(--sp-3); margin-bottom: var(--sp-3);
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md);
}
.ana-org { width: 350px; flex: none; }
.ana-org-input { width: 350px; padding-right: 28px; }
.ana-org-x {
  position: absolute; right: 6px; top: 50%; transform: translateY(-50%);
  border: 0; background: none; color: var(--text-3); cursor: pointer; font-size: 16px; line-height: 1;
}
.ana-org-x:hover { color: var(--text); }
.ana-org .picker-list { max-height: 320px; }
.picker-empty { padding: 8px 12px; }
.ana-f { display: inline-flex; align-items: center; gap: 6px; }
.ana-f .input { width: auto; }
.ana-f input[type="date"] { width: 136px; }
.ana-f-l { font-size: 12px; color: var(--text-3); }
.ana-scope { margin: 0 0 var(--sp-2); }
.ana-kpis { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); }
.ana-grid { display: grid; gap: var(--sp-3); grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); margin-top: var(--sp-3); }
.ana-card { margin: 0; }
.ana-host > .card { margin-bottom: var(--sp-3); }
.ana-bars .bar-label { flex-basis: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bar-row.bar-click {
  width: 100%; border: 0; background: none; font: inherit; color: inherit; cursor: pointer;
  padding: 2px 4px; border-radius: var(--r-sm); text-align: left;
}
.bar-row.bar-click:hover { background: var(--primary-soft); }
.ana-rank { margin: 0; padding-left: 20px; display: flex; flex-direction: column; gap: 6px; }
.ana-rank li { display: flex; align-items: baseline; gap: 4px; }
.ana-rank-n { margin-left: auto; font-variant-numeric: tabular-nums; }
.ana-trend { display: flex; gap: var(--sp-3); align-items: flex-end; height: 170px; }
.ana-trend-col { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; height: 100%; }
.ana-trend-bars { flex: 1; width: 100%; display: flex; align-items: flex-end; justify-content: center; gap: 4px; }
.ana-tb { width: 16px; min-height: 2px; border-radius: 4px 4px 0 0; }
.ana-tb.is-in, .ana-legend .is-in { background: var(--primary); }
.ana-tb.is-out, .ana-legend .is-out { background: var(--warning); }
.ana-legend { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--text-2); }
.ana-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; margin-left: 6px; }
.ana-glossary dt { font-weight: 600; }
.report-pills { display: grid; gap: var(--sp-2); grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); margin-bottom: var(--sp-3); }
.report-pill {
  display: flex; flex-direction: column; gap: 2px; text-align: left; padding: var(--sp-3);
  border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface); cursor: pointer; font: inherit; color: inherit;
}
.report-pill:hover { border-color: var(--primary-line); }
.report-pill.is-active { border-color: var(--primary); background: var(--primary-soft); }
@media (max-width: 720px) { .ana-org, .ana-org-input { width: 100%; } }

/* ---------- 组织树选择器（查询用多选 / 录入用单选） ---------- */
.dept-tree-picker{position:relative;min-width:220px;max-width:360px;flex:0 1 260px}
.dept-tree-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;cursor:pointer;background:var(--surface);white-space:nowrap;overflow:hidden}
.dept-tree-trigger>span:first-child{overflow:hidden;text-overflow:ellipsis}
.dept-tree-chevron{width:14px;height:14px;flex:none;color:var(--text-3)}
.dept-tree-panel{position:absolute;z-index:var(--z-dropdown);top:calc(100% + 6px);left:0;width:min(390px,86vw);padding:10px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--raised);box-shadow:var(--sh-3)}
.dept-tree-search{width:100%;margin-bottom:8px}
.dept-tree-list{max-height:340px;overflow:auto;padding:2px}
.dept-tree-row-wrap{display:block;padding-left:calc(var(--depth,0) * 20px)}
.dept-tree-row{width:100%;min-height:34px;display:flex;align-items:center;gap:6px;padding:6px 8px;border:0;border-radius:6px;background:transparent;color:var(--text);font:inherit;text-align:left;cursor:pointer}
.dept-tree-row:hover{background:var(--surface-2)}
.dept-tree-row.is-selected{background:var(--primary-soft);color:var(--primary);font-weight:600}
.dept-tree-row.is-disabled{color:var(--text-3)}
.dept-tree-all{margin-bottom:3px}
.dept-tree-arrow{width:20px;height:20px;display:grid;place-items:center;flex:none;padding:0;border:0;background:none;color:var(--text-3);cursor:pointer;border-radius:4px}
.dept-tree-arrow:hover{background:var(--border-2);color:var(--text)}
.dept-tree-arrow svg{width:14px;height:14px}
.dept-tree-space{width:20px;flex:none}
.dept-tree-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dept-tree-count{margin-left:auto;color:var(--text-3);font-size:12px;font-variant-numeric:tabular-nums}
.dept-tree-multi .dept-tree-trigger{display:flex;align-items:center;gap:8px}
.dept-tree-multi-count{margin-left:auto;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--primary-soft);color:var(--primary);font-size:11px;line-height:18px;text-align:center}
.dept-tree-multi-foot{position:sticky;bottom:0;display:flex;align-items:center;gap:8px;padding:10px 8px 6px;background:var(--surface);border-top:1px solid var(--border-2)}
.dept-tree-multi-foot .muted{margin-right:auto}
.dept-tree-multi-count:empty{display:none}
.dept-tree-multi .dept-tree-trigger>.ic{flex:none;color:var(--text-3)}
.dept-tree-trigger>.ic svg{width:14px;height:14px}
.dept-tree-row:disabled{cursor:not-allowed}
.dept-tree-multi-more{color:var(--primary);font-weight:600;margin-left:2px;cursor:help}
@media(max-width:900px){.dept-tree-picker{min-width:190px;max-width:100%;flex:1 1 230px}}
.dept-tree-picker.ana-org{flex:none;width:350px;max-width:100%}

/* 侧栏留白分组：高频业务 / 组织基础 / 分析 / 配置 */
.side-mod.nav-section-gap{margin-top:9px;padding-top:9px;border-top:1px solid var(--border-2)}
.side-mod.nav-config-bottom{margin-top:14px;padding-top:10px;border-top:1px solid var(--border-2)}

/* 待办 */
.todo-center-list{display:flex;flex-direction:column;gap:12px;margin-top:12px}
.todo-card{display:grid;grid-template-columns:44px minmax(0,1fr) 120px;gap:14px;align-items:start;border:1px solid var(--border);border-radius:12px;padding:16px;background:var(--surface);cursor:pointer;transition:.15s ease}
.todo-card:hover,.todo-card:focus-visible{border-color:var(--primary-line);box-shadow:0 6px 18px rgba(20,70,50,.06)}
.todo-card.is-done{opacity:.86}
.todo-card-icon{width:40px;height:40px;border-radius:10px;background:var(--primary-soft);display:grid;place-items:center;color:var(--primary)}
.todo-card-icon svg{width:21px;height:21px}
.todo-card-title{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:7px}
.todo-card-meta{display:flex;gap:18px;flex-wrap:wrap;font-size:12px;color:var(--text-3)}
.todo-card-main p{margin:8px 0 0}
.todo-card-state{display:flex;flex-direction:column;gap:7px;align-items:flex-end}
.todo-filter{display:grid!important;grid-template-columns:minmax(280px,520px) 180px auto;gap:10px!important;align-items:center}
.todo-filter>.input{width:100%;max-width:none!important}
.todo-filter>.btn{justify-self:start}
.todo-detail{display:flex;flex-direction:column;gap:16px}
.todo-detail-hero{display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:12px;align-items:center;padding-bottom:14px;border-bottom:1px solid var(--border-2)}
.todo-detail-hero>div:nth-child(2){display:flex;flex-direction:column;gap:4px;min-width:0}
.todo-detail-hero strong{font-size:17px}
.todo-kv{grid-template-columns:110px minmax(0,1fr) 110px minmax(0,1fr)}
.todo-detail-items{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.todo-detail-item{display:flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--border-2);border-radius:9px;background:var(--surface-2)}
.todo-detail-item .ic{color:var(--primary)}
@media(max-width:1100px){.todo-card{grid-template-columns:40px 1fr}.todo-card-state{grid-column:2;align-items:flex-start;flex-direction:row}}
@media(max-width:1050px){.todo-filter{grid-template-columns:minmax(220px,1fr) 160px auto}}
@media(max-width:720px){.todo-filter{grid-template-columns:1fr}.todo-kv{grid-template-columns:92px 1fr}.todo-detail-items{grid-template-columns:1fr}.todo-detail-hero{grid-template-columns:40px 1fr}}

/* 员工设置 */
.emp-setting-tabs{margin:0 0 12px}
.emp-setting-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:14px;align-items:start}
.emp-setting-groups{position:sticky;top:68px;padding:10px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface)}
.emp-setting-group-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 4px 10px;border-bottom:1px solid var(--border-2);margin-bottom:6px}
.emp-setting-group{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 10px;border:0;border-radius:7px;background:transparent;color:var(--text-2);font:inherit;text-align:left;cursor:pointer}
.emp-setting-group:hover{background:var(--surface-2);color:var(--text)}
.emp-setting-group.is-active{background:var(--primary-soft);color:var(--primary);font-weight:600}
.emp-setting-fields{margin:0;min-width:0}
.emp-setting-fields .data code{white-space:nowrap}
@media(max-width:900px){.emp-setting-layout{grid-template-columns:1fr}.emp-setting-groups{position:static}}
.dialog:has(.registration-template-preview){width:min(94vw,980px);max-height:90vh;overflow:hidden}
.dialog:has(.registration-template-preview) form{display:flex;flex-direction:column;min-height:0;max-height:calc(90vh - 92px)}
.registration-template-preview{display:flex;flex-direction:column;gap:18px;min-width:0;overflow-y:auto;overflow-x:hidden;padding:2px 4px 2px 0}
.registration-template-preview-group{min-width:0}
.registration-template-preview-group-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 9px}
.registration-template-preview-group h4{margin:0}
.registration-template-preview-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 14px;min-width:0}
.registration-template-preview-field{display:flex;justify-content:space-between;gap:12px;align-items:center;min-width:0;padding:12px 14px;border:1px solid var(--border-2);border-radius:8px;background:var(--surface-2)}
.registration-template-preview-label{display:flex;gap:4px;min-width:0;align-items:center}
.registration-template-preview-label>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.registration-template-preview-type{flex:0 0 auto;white-space:nowrap}
.registration-template-form{display:flex;flex-direction:column;gap:14px}
.dialog:has(.registration-template-form-v1019){width:min(96vw,1000px);max-height:92vh;overflow:auto}
.registration-template-editor-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.registration-template-editor-toolbar>div:first-child{display:flex;align-items:center;gap:8px}
.registration-template-editor-body{border:1px solid var(--border);border-radius:9px;overflow:hidden}
.registration-template-editor-group+.registration-template-editor-group{border-top:1px solid var(--border)}
.registration-template-editor-group-head{display:flex;justify-content:space-between;gap:12px;padding:10px 12px;background:var(--surface-2)}
.registration-template-editor-row{display:grid;grid-template-columns:minmax(220px,1fr) 130px 150px auto;gap:12px;align-items:center;padding:10px 12px;border-top:1px solid var(--border-2)}
.registration-template-editor-name{display:flex;align-items:center;gap:6px;min-width:0}
.registration-template-editor-name strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.registration-template-editor-ops{display:flex;gap:4px;justify-content:flex-end;white-space:nowrap}
.enterprise-form-list-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin:0 0 14px}
.enterprise-form-list-head h3{margin:0 0 4px}
.enterprise-form-table .data th:last-child,.enterprise-form-table .data td:last-child{min-width:180px}
.enterprise-form-ops{white-space:nowrap}
@media(max-width:760px){.registration-template-preview-fields,.registration-template-editor-row{grid-template-columns:1fr}.registration-template-editor-ops{justify-content:flex-start}.enterprise-form-list-head{flex-direction:column;align-items:stretch}}

/* 花名册：序号列、工龄排序、员工表单分组 Tab */
.dialog:has(.employee-form-tabbed){width:min(94vw,780px);max-height:88vh;overflow:hidden}
.dialog:has(.employee-form-tabbed) form{display:flex;flex-direction:column;min-height:0}
.employee-form-tabbed{min-height:0;display:flex;flex-direction:column}
.employee-form-tabs{display:flex;gap:28px;border-bottom:1px solid var(--border);margin:2px 0 20px;padding:0 2px;flex:none}
.employee-form-tab{border:0;background:transparent;padding:10px 4px 11px;color:var(--text-2);cursor:pointer;position:relative;font-weight:600}
.employee-form-tab:hover{color:var(--primary)}
.employee-form-tab.is-active{color:var(--primary)}
.employee-form-tab.is-active::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--primary);border-radius:2px}
.employee-form-pane{max-height:52vh;overflow:auto;padding:2px 4px 8px}
.employee-form-pane[hidden]{display:none!important}
@media(max-width:700px){.employee-form-tabs{gap:14px}}
.roster-seq-v10119{width:54px;min-width:54px;max-width:54px;text-align:center!important;color:var(--text-3);font-variant-numeric:tabular-nums}
.roster-sortable-v10123{white-space:nowrap}
.roster-sort-btn-v10123{border:0;background:transparent;color:inherit;font:inherit;font-weight:600;cursor:pointer;padding:0;white-space:nowrap}
.roster-sort-btn-v10123:hover{color:var(--primary)}

/* ---------- 入转调离（与原型对齐） ---------- */
.automation-callout {display:flex;align-items:center;gap:16px;padding:14px 16px;margin-bottom:14px;border:1px solid #b7e7d1;background:#f0fbf6;border-radius:10px;color:#237a57
}
.automation-callout span {color:#5d766c;font-size:13px
}
.biz-status-tabs {display:flex;gap:4px;border-bottom:1px solid var(--border);margin:-4px 0 16px;overflow-x:auto
}
.biz-status-tab {border:0;background:transparent;color:var(--text-2);padding:10px 16px 11px;cursor:pointer;position:relative;white-space:nowrap;font-weight:600
}
.biz-status-tab:hover {color:var(--primary)
}
.biz-status-tab.is-active {color:var(--primary)
}
.biz-status-tab.is-active::after {content:"";position:absolute;left:10px;right:10px;bottom:-1px;height:2px;background:var(--primary)
}
.biz-status-count {display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;margin-left:6px;border-radius:10px;background:var(--border-2);font-size:12px;color:var(--text-3)
}
.biz-status-tab.is-active .biz-status-count {background:var(--primary-soft);color:var(--primary)
}
.section-title {display:flex;align-items:center;gap:8px;margin:0 0 14px;font-size:15px
}
.term-line {display:flex;align-items:center;gap:10px;min-height:46px;flex-wrap:wrap
}
.term-label {width:205px;color:var(--text-2)
}
.term-line>.input {width:112px;flex:none
}
.radio-line {display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap
}
.radio-line input {accent-color:var(--primary)
}
.settings-divider {height:1px;background:var(--border);margin:22px 0
}
@media(max-width:700px) {
  .term-label {width:100%
}
  .term-line {align-items:flex-start
}
}
.select-head,
.select-cell { width: 44px; min-width: 44px; max-width: 44px; text-align: center !important; padding-left: 8px !important; padding-right: 8px !important;
}
.select-cell { position: relative;
}
.select-cell .row-index { display: inline-block; min-width: 20px; color: var(--text-3); font-variant-numeric: tabular-nums;
}
.select-cell .row-select { display: none; margin: 0 auto;
}
.data tbody tr:hover .select-cell .row-index,
.select-cell.is-selected .row-index { display: none;
}
.data tbody tr:hover .select-cell .row-select,
.select-cell.is-selected .row-select { display: inline-block;
}
.select-cell.is-selected { background: color-mix(in srgb, var(--primary-soft) 45%, transparent);
}
.selected-pill {
  display: inline-flex; align-items: center; gap: 4px; height: 30px; padding: 0 10px;
  border: 1px solid color-mix(in srgb, var(--primary) 45%, var(--border)); border-radius: 6px;
  color: var(--primary); background: var(--primary-soft); cursor: pointer; font-weight: 600;
}
.column-check-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 18px; min-width: 420px;
}
.radio-line { display: flex; align-items: center; gap: 8px; margin: 12px 0; cursor: pointer;
}
.radio-line input { width: 16px; height: 16px;
}
.validation-list { display: grid; gap: 8px; margin-top: 12px; max-height: 220px; overflow: auto;
}
.validation-item { display: flex; justify-content: space-between; gap: 16px; padding: 9px 10px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface-2);
}
.notice-ok { border-color: color-mix(in srgb, var(--primary) 30%, var(--border)); background: var(--primary-soft); color: var(--primary);
}
.import-panel h4 { margin: 12px 0 8px;
}
.upload-box {
  margin-top: 14px; min-height: 150px; border: 1px dashed var(--border); border-radius: 8px;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;
  background: var(--surface-2); text-align: center; padding: 18px;
}
.upload-box .input[type="file"] { width: min(420px, 100%); background: var(--surface);
}
.upload-icon { font-size: 38px; color: #2588ed; line-height: 1;
}
html.compact-onboard .data th,
html.compact-onboard .data td { padding-top: 7px; padding-bottom: 7px;
}
@media (max-width: 900px) {
  .column-check-grid { grid-template-columns: 1fr; min-width: 0;
}
}
.onboard-list-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  min-height: 46px;
  border-bottom: 1px solid var(--border-2);
}
.onboard-list-head .biz-status-tabs { border-bottom: 0; min-width: 0;
}
.onboard-list-tools {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 2px;
  flex-wrap: wrap;
  padding-right: 4px;
}
.onboard-list-tools .btn { white-space: nowrap;
}
.onboard-list-tools .is-active-filter {
  color: var(--primary);
  background: var(--primary-soft);
  border-color: var(--primary-line);
}
.side-panel-head-right { display: flex; align-items: center; justify-content: flex-end; gap: 10px; min-width: 0;
}
.side-panel-head-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap;
}
.pending-emp-sec { border-top: 0; margin-top: 0; padding-top: 4px;
}
@media (max-width: 980px) {
  .onboard-list-head { align-items: flex-start; flex-direction: column;
}
  .onboard-list-tools { width: 100%; justify-content: flex-start;
}
  .side-panel-head-right { width: 100%; justify-content: space-between;
}
  .side-panel-head-actions { justify-content: flex-start;
}
}
.dialog:has(.registration-dialog-v1018) {width:min(94vw,820px);max-height:88vh;overflow:auto
}
.registration-dialog-v1018 {display:flex;flex-direction:column;gap:14px;min-width:0
}
.registration-selected {display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border:1px solid var(--border-2);border-radius:8px;background:var(--surface-2)
}
.registration-selected .muted {min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap
}
.registration-resend {padding:2px 0
}
.registration-entry-preview {min-height:250px;border:1px solid var(--border);border-radius:10px;background:#fafcfb;padding:18px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px
}
.registration-qr {width:190px;height:190px;image-rendering:pixelated
}
.registration-link-row {width:min(100%,680px);display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center
}
.registration-link-row .input {font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px
}
@media(max-width:760px) {
  .registration-link-row {grid-template-columns:1fr
}
  .registration-selected {flex-direction:column
}
}
.biz-status-tabs {overflow-x:auto;overflow-y:hidden;scrollbar-width:none
}
.biz-status-tabs::-webkit-scrollbar {width:0;height:0;display:none
}
.lifecycle-actionbar {display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px;padding:0 2px
}
.btn-danger-soft {color:#c24141;border-color:#efc7c7;background:#fffafa
}
.btn-danger-soft:hover {background:#fff1f1
}
.dialog:has(.onboard-handle-tabbed) {width:min(94vw,860px);max-height:88vh;overflow:hidden
}
.dialog:has(.onboard-handle-tabbed) form {display:flex;flex-direction:column;min-height:0;max-height:calc(88vh - 76px)
}
.onboard-handle-tabbed {display:flex;flex-direction:column;min-height:0
}
.onboard-handle-tabs {display:flex;gap:4px;border-bottom:1px solid var(--border);margin:-2px 0 16px;flex:0 0 auto;overflow-x:auto;overflow-y:hidden
}
.onboard-handle-tab {border:0;background:transparent;padding:10px 16px;color:var(--muted);cursor:pointer;white-space:nowrap;border-bottom:2px solid transparent;font:inherit
}
.onboard-handle-tab.is-active {color:var(--primary);font-weight:600;border-bottom-color:var(--primary)
}
.onboard-handle-pane {min-height:260px;max-height:52vh;overflow-y:auto;overflow-x:hidden;padding:2px 2px 10px
}
.onboard-handle-pane[hidden] {display:none!important
}
.onboard-handle-pane .form-grid {grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 18px
}
.onboard-handle-pane .form-stack {display:flex;flex-direction:column;gap:16px
}
@media(max-width:720px) {
  .onboard-handle-pane .form-grid {grid-template-columns:1fr
}
  .dialog:has(.onboard-handle-tabbed) {width:96vw
}
  .onboard-handle-tab {padding-inline:12px
}
}
.btn.icon-only {width:34px;height:34px;padding:0;display:inline-grid;place-items:center
}
.btn.icon-only .ic {width:16px;height:16px
}
.registration-batch-summary {display:flex;align-items:center;gap:10px;flex-wrap:wrap;width:100%;padding-bottom:10px;border-bottom:1px solid var(--border)
}
.registration-batch-summary .btn {margin-left:auto
}
.registration-person-grid {display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;width:100%
}
.registration-person-card {border:1px solid var(--border);border-radius:10px;background:var(--surface);padding:14px;display:flex;flex-direction:column;align-items:center;gap:10px;min-width:0
}
.registration-person-card.is-link {align-items:stretch
}
.registration-person-head {width:100%;display:flex;justify-content:space-between;gap:8px;align-items:center
}
.registration-person-qr {padding:8px;background:#fff;border-radius:8px;border:1px solid #e8ecea
}
.registration-person-qr canvas {display:block;max-width:190px;height:auto
}
.registration-person-actions {display:flex;gap:8px;flex-wrap:wrap;justify-content:center
}
@media(max-width:1100px) {
  .registration-person-grid {grid-template-columns:1fr
}
}
.table-tool-btn {position:relative;width:34px;height:34px;padding:0;display:inline-grid;place-items:center;border-radius:8px
}
.table-tool-btn .ic {width:17px;height:17px
}
.table-tool-btn .tool-count {position:absolute;right:-2px;top:-3px;min-width:15px;height:15px;padding:0 4px;border-radius:999px;background:var(--primary);color:#fff;font-size:10px;line-height:15px;text-align:center;border:2px solid var(--surface)
}
.onboard-list-tools .table-tool-btn {margin-left:2px
}
.pending-upload-head {display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin:8px 0 14px
}
.pending-upload-head h4 {margin:0 0 4px
}
.registration-entry-preview-v10115 {align-items:stretch;justify-content:flex-start;max-height:560px;overflow:auto;background:var(--surface-2)
}
.registration-share-card {align-items:stretch
}
.registration-share-grid {display:grid;grid-template-columns:220px minmax(0,1fr);gap:18px;align-items:center;width:100%
}
.registration-share-main {min-width:0;display:flex;flex-direction:column;gap:9px
}
.registration-share-main .registration-link-row {width:100%;display:block
}
.registration-share-main .registration-link-row .input {width:100%
}
.registration-share-main .registration-person-actions {justify-content:flex-start
}
.registration-batch-summary>div:first-child {display:flex;flex-direction:column;gap:3px
}
@media(max-width:760px) {
  .pending-upload-head {flex-direction:column;align-items:stretch
}
  .registration-share-grid {grid-template-columns:1fr
}
  .registration-share-grid .registration-person-qr {justify-self:center
}
}
.status-link-v10117 {
  appearance:none;border:0;background:transparent;padding:0;cursor:pointer;font:inherit;
}
.status-link-v10117.tag {padding:3px 9px;border:1px solid var(--primary-line);background:var(--primary-soft);border-radius:999px;color:var(--primary)
}
.status-link-v10117.tag-muted {padding:3px 9px;border:1px solid var(--border);background:var(--border-2);border-radius:999px;color:var(--text-3)
}
.status-link-v10117:hover {box-shadow:0 0 0 2px rgba(43,149,99,.12)
}
.btn-danger-soft {border-color:#f1b7b3;color:#b42318;background:#fff7f6
}
.btn-danger-soft:hover {background:#ffebe9
}
.lifecycle-search-v10118 {
  display:grid;grid-template-columns:minmax(180px,280px) 36px;align-items:center;
  border:1px solid var(--border);border-radius:8px;background:var(--surface);overflow:hidden;margin-right:6px;
}
.lifecycle-search-input-v10118 {border:0!important;border-radius:0!important;box-shadow:none!important;min-width:0;height:34px;padding-right:4px
}
.lifecycle-search-btn-v10118 {width:36px;height:34px;border:0;background:transparent;color:var(--text-2);display:grid;place-items:center;cursor:pointer
}
.lifecycle-search-btn-v10118:hover {color:var(--primary);background:var(--primary-soft)
}
.lifecycle-search-btn-v10118 .ic {width:17px;height:17px
}
.lifecycle-actionbar {row-gap:8px
}
.lifecycle-actionbar .btn {white-space:nowrap
}
.dialog:has(.registration-share-detail-v10118) {width:min(92vw,720px);max-height:88vh;overflow:auto
}
.registration-share-detail-v10118 {display:flex;flex-direction:column;gap:18px;min-width:0
}
.share-detail-head-v10118 {display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding-bottom:14px;border-bottom:1px solid var(--border-2)
}
.share-detail-head-v10118 strong {font-size:17px
}
.share-detail-status-v10118 {display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end
}
.share-detail-section-v10118 {display:flex;flex-direction:column;gap:10px
}
.share-detail-label-v10118 {font-weight:600;color:var(--text-2)
}
.share-detail-link-v10118 {display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center
}
.share-detail-link-v10118 .input {min-width:0;width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px
}
.share-detail-actions-v10118 {display:flex;align-items:center;gap:10px;flex-wrap:wrap
}
.share-detail-qr-section-v10118 {display:flex;flex-direction:column;align-items:center;gap:10px;padding:18px;border:1px solid var(--border-2);border-radius:12px;background:var(--surface-2)
}
.share-detail-qr-v10118 {padding:10px;background:#fff
}
.share-detail-meta-v10118 {display:grid;grid-template-columns:100px minmax(0,1fr) 100px minmax(0,1fr);gap:10px 16px;margin:0;padding:14px 16px;border:1px solid var(--border-2);border-radius:10px
}
.share-detail-meta-v10118 dt {color:var(--text-3)
}
.share-detail-meta-v10118 dd {margin:0;color:var(--text)
}
@media(max-width:1050px) {
  .onboard-list-head {align-items:flex-start;flex-direction:column
}
  .onboard-list-tools {width:100%;justify-content:flex-start
}
  .lifecycle-search-v10118 {grid-template-columns:minmax(160px,1fr) 36px;width:min(100%,360px)
}
}
@media(max-width:680px) {
  .share-detail-head-v10118 {flex-direction:column
}
  .share-detail-status-v10118 {justify-content:flex-start
}
  .share-detail-link-v10118 {grid-template-columns:1fr
}
  .share-detail-meta-v10118 {grid-template-columns:88px 1fr
}
}
.table-tool-btn {color:var(--text-2,#46544d)!important;border:1px solid transparent
}
.table-tool-btn:hover {color:var(--primary,#2f9d6d)!important;background:var(--primary-soft,#edf8f2)!important;border-color:var(--primary-line,#c8e9d8)
}
.onboard-list-tools {flex:0 0 auto;flex-wrap:nowrap;min-width:0
}
.onboard-list-tools .lifecycle-search-v10118 {flex:0 1 360px
}
@media(max-width:1050px) {
  .onboard-list-tools {flex-wrap:wrap
}
}
.filter-panel-v1020 {display:flex;flex-direction:column;gap:14px;min-width:0
}
.filter-mode-v1020 {display:flex;align-items:center;gap:14px;padding-bottom:10px;border-bottom:1px solid var(--border-2)
}
.filter-one-col-v1020 {display:grid;grid-template-columns:1fr;gap:12px
}
.filter-advanced-v1020 {display:grid;grid-template-columns:1fr;gap:12px;padding-top:4px
}
.filter-panel-v1020 .field {margin:0
}
.filter-panel-v1020 .date-range {display:grid;grid-template-columns:1fr auto 1fr;gap:8px;align-items:center
}
.filter-remember-v1020 {margin-top:4px;padding-top:10px;border-top:1px solid var(--border-2)
}
.side-panel:has(.filter-panel-v1020) {width:min(100%,430px)
}
@media(max-width:760px) {
  .filter-panel-v1020 .date-range {grid-template-columns:1fr
}
}
.onboard-material-board {display:grid;gap:10px
}
.onboard-material-row {display:grid;grid-template-columns:minmax(170px,1fr) minmax(260px,1.6fr) auto;gap:12px;align-items:center;padding:11px 12px;border:1px solid var(--line);border-radius:9px;background:var(--panel)
}
.onboard-material-title {display:flex;align-items:center;gap:10px;min-width:0
}
.onboard-material-title select {max-width:115px
}
.onboard-material-meta {min-width:0;overflow:hidden
}
.onboard-material-meta strong {display:inline-block;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom
}
.onboard-material-actions {display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end
}
.handover-item-v10122 {display:grid;grid-template-columns:1fr 140px;gap:12px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--panel)
}
@media(max-width:900px) {
  .onboard-material-row {grid-template-columns:1fr
}
  .onboard-material-actions {justify-content:flex-start
}
}
.onboard-history-filter-v10123 {display:flex;align-items:center;gap:6px;white-space:nowrap
}
.onboard-history-range-v10123 {min-width:112px;height:36px
}
@media(max-width:1360px) {
  .onboard-history-filter-v10123 .muted {display:none
}
  .onboard-history-range-v10123 {min-width:104px
}
}
.reg-public { min-height: 100vh; background: var(--surface-2); padding: 32px 16px 48px; }
.reg-public-card { max-width: 720px; margin: 0 auto; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 24px 28px; box-shadow: 0 6px 24px rgba(15, 40, 28, .06); }
.reg-public-head { border-bottom: 1px solid var(--border-2); padding-bottom: 14px; margin-bottom: 8px; }
.reg-public-head h2 { margin: 0 0 4px; font-size: 20px; }
.reg-public-sec { margin-top: 18px; }
.reg-public-sec { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 16px; }
.reg-public-sec h4 { grid-column: 1 / -1; margin: 0; font-size: 14px; color: var(--text-2); }
.reg-public-sec .field { margin: 0; }
.reg-public-ro input, .reg-public-ro select { background: var(--surface-2); color: var(--text-3); }
.reg-public-submit { margin-top: 24px; display: flex; justify-content: flex-end; gap: 8px; }
@media (max-width: 640px) {
  .reg-public { padding: 0; }
  .reg-public-card { border-radius: 0; border: 0; padding: 18px 16px; }
  .reg-public-sec { grid-template-columns: 1fr; }
  .reg-public-submit .btn { flex: 1; }
}

/* 员工签署链接 */
.esign-public .reg-public-sec > :not(h4) { grid-column: 1 / -1; }
.esign-public .kv { margin: 12px 0; }
.esign-public-body { max-height: 46vh; overflow: auto; white-space: pre-wrap; font-size: 14px; line-height: 1.7; }
.esign-agree { display: flex; gap: 8px; align-items: flex-start; font-size: 14px; cursor: pointer; }
.esign-agree input { margin-top: 3px; }
.esign-public-acts { margin-top: 20px; display: flex; gap: 8px; justify-content: flex-end; flex-wrap: wrap; }
@media (max-width: 640px) {
  .esign-public-acts { flex-direction: column-reverse; }
  .esign-public-acts .btn { width: 100%; justify-content: center; }
}
.h5-step { display: flex; gap: 12px; padding: 12px 0; border-bottom: 1px dashed var(--border-2); }
.h5-step-no { flex: none; width: 24px; height: 24px; border-radius: 50%; background: var(--primary-soft, #e6f4ec); color: var(--primary, #1f7a4d); display: grid; place-items: center; font-weight: 600; font-size: 13px; }
.h5-step-main { flex: 1; min-width: 0; }
.h5-step-main p { margin: 4px 0 8px; }

/* ---------- 合同管理：签约主体 / 合同规则 / 合同提醒（与原型对齐） ---------- */
.ec-setup-stack{display:grid;gap:14px}
.dialog:has(.v101-rule-form){width:min(92vw,820px);max-height:90vh;overflow:auto}
.v101-hr-task .kv-wide{grid-template-columns:110px 1fr}
.v101-rule-filters {
  display:flex !important; align-items:center; gap:10px; flex-wrap:nowrap !important;
  width:100%; margin:0 0 14px; padding:0;
}
.v101-rule-filters > input.input {
  box-sizing:border-box; width:350px !important; min-width:220px; max-width:350px !important;
  flex:0 1 350px !important;
}
.v101-rule-filters > select.input {
  box-sizing:border-box; width:180px !important; min-width:145px; max-width:180px !important;
  flex:0 0 180px !important;
}
.v101-rule-filters > button { flex:0 0 auto; white-space:nowrap; }
@media (max-width:880px) {
  .v101-rule-filters {flex-wrap:wrap !important;}
  .v101-rule-filters > input.input {max-width:100% !important;flex:1 1 300px !important;}
  .v101-rule-filters > select.input {flex:1 1 160px !important;}
}
.v1013-simple-table th,.v1013-simple-table td{white-space:normal;vertical-align:middle}
.v1013-simple-form .form-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
@media(max-width:680px){.v1013-simple-form .form-grid{grid-template-columns:1fr}}
.contract-term-card{padding:4px 0 2px}
.compact-kv{grid-template-columns:150px 1fr;max-width:720px}
.dialog:has(.company-form-scroll-v10117){width:min(94vw,820px);max-height:84vh;overflow:hidden;padding-bottom:0}
.dialog:has(.company-form-scroll-v10117) form{display:flex;flex-direction:column;min-height:0;max-height:calc(84vh - 70px)}
.dialog:has(.company-form-scroll-v10117) .company-form-scroll-v10117{overflow-y:auto;min-height:0;padding-right:8px}
.dialog:has(.company-form-scroll-v10117) .actions{flex:0 0 auto;background:var(--surface);padding:12px 0 16px;margin-top:8px;border-top:1px solid var(--border-2)}

/* 审批设置 */
.approval-node-index{width:26px;height:26px;border-radius:50%;background:var(--primary-soft);color:var(--primary);display:grid;place-items:center;font-weight:700;font-size:12px}
.approval-setting-summary-v10117{display:grid;grid-template-columns:repeat(3,minmax(160px,1fr));gap:12px;margin:12px 0 16px}
.approval-setting-summary-v10117>div{background:var(--card,#fff);border:1px solid var(--line,#e6ece8);border-radius:12px;padding:16px 18px;display:flex;align-items:baseline;gap:10px}
.approval-setting-summary-v10117 strong{font-size:24px;color:var(--text,#1f2d27)}
.approval-setting-summary-v10117 span{color:var(--muted,#74817b)}
.approval-path-cell-v10117{min-width:300px;line-height:1.6;color:var(--text-2,#46544d)}
.approval-stepper-v10117{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin:4px 0 16px}
.approval-step-v10117{border:1px solid var(--line,#dfe7e2);background:var(--card,#fff);border-radius:12px;padding:12px 14px;display:flex;align-items:center;gap:9px;cursor:pointer;color:var(--muted,#718078);text-align:left}
.approval-step-v10117>span{display:inline-flex;width:26px;height:26px;border-radius:50%;align-items:center;justify-content:center;background:var(--surface-2,#f1f5f3);font-size:12px;font-weight:700}
.approval-step-v10117.is-active{border-color:rgba(47,157,109,.55);box-shadow:0 0 0 2px rgba(47,157,109,.08);color:var(--primary,#2f9d6d)}
.approval-step-v10117.is-active>span,.approval-step-v10117.is-done>span{background:var(--primary,#2f9d6d);color:#fff}
.approval-editor-card-v10117{min-height:460px}
.approval-editor-title-v10117{display:flex;align-items:center;gap:12px;padding-bottom:14px;margin-bottom:16px;border-bottom:1px solid var(--line,#e6ece8)}
.approval-editor-title-v10117 h3{margin:0;font-size:18px}.approval-editor-title-v10117 p{margin:4px 0 0}
.approval-config-section{display:flex;flex-direction:column;gap:16px}
.approval-config-tip{display:flex;align-items:flex-start;gap:8px;background:rgba(47,157,109,.07);border:1px solid rgba(47,157,109,.18);border-radius:10px;padding:11px 13px;color:var(--text-2,#4a5c54);line-height:1.55}
.approval-config-tip svg{width:17px;height:17px;margin-top:2px;flex:0 0 auto;color:var(--primary,#2f9d6d)}
.approval-flow-builder-v10117{display:flex;flex-direction:column;gap:12px}
.approval-node-card-v10117{border:1px solid var(--line,#dfe7e2);background:var(--card,#fff);border-radius:12px;padding:16px}
.approval-node-card-head{display:flex;align-items:center;gap:10px;margin-bottom:14px}.approval-node-card-head strong{flex:1}.approval-node-card-head .danger{color:#d75b5b}
.approval-responsibility-line{margin-top:10px;padding:10px 12px;background:var(--surface-2,#f6f9f7);border-radius:8px}
.approval-timeout-grid{max-width:420px}
.approval-editor-footer-v10117{position:sticky;bottom:0;z-index:3;background:rgba(255,255,255,.96);backdrop-filter:blur(8px);border-top:1px solid var(--line,#e6ece8);padding:14px 0 4px;margin-top:14px;display:flex;align-items:center;justify-content:space-between}
.approval-preview-summary-v10117{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:4px 0 18px}
.approval-preview-summary-v10117>div{border:1px solid var(--line,#e4ebe7);border-radius:10px;padding:12px}.approval-preview-summary-v10117 span,.approval-preview-summary-v10117 strong{display:block}.approval-preview-summary-v10117 strong{margin-top:6px}
.approval-preview-path-v10117{max-width:680px;margin:0 auto 18px}.approval-preview-node-v10117{display:flex;align-items:flex-start;gap:12px;border:1px solid rgba(47,157,109,.24);background:rgba(47,157,109,.05);border-radius:12px;padding:14px 16px}.approval-preview-node-v10117>div{display:flex;flex-direction:column;gap:4px}.approval-preview-arrow{text-align:center;display:block;color:var(--primary,#2f9d6d);padding:5px 0}
.notice-danger{background:#fff3f3!important;border-color:#f2b9b9!important;color:#a83d3d!important}
@media(max-width:1100px){.approval-stepper-v10117{grid-template-columns:1fr 1fr}.approval-setting-summary-v10117,.approval-preview-summary-v10117{grid-template-columns:1fr}.approval-node-card-v10117 .form-grid{grid-template-columns:1fr}}

/* 员工服务：我的人事 */
.self-tabs-v1020{margin-bottom:14px}
.self-emp-card-v1020{display:grid;grid-template-columns:48px minmax(0,1fr) auto;gap:12px;align-items:center;padding:14px 16px;margin-bottom:14px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.self-emp-card-v1020 .avatar-face{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--primary-soft);color:var(--primary);font-weight:700}
.self-form-card-v1020{max-width:980px}
.self-form-card-v1020 h3{margin:0 0 8px}
.self-form-head-v1020{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;margin-bottom:14px}
.self-form-head-v1020 p{margin:0;max-width:680px}
.self-form-actions-v1020{display:flex;justify-content:flex-end;gap:10px;margin-top:18px;padding-top:14px;border-top:1px solid var(--border-2)}
.self-detail-v1020{display:flex;flex-direction:column;gap:14px}
.self-app-summary-v1020{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid var(--border-2)}
.self-app-summary-v1020 strong{font-size:17px}
.timeline li.self-step-current strong{color:var(--primary)}
.timeline li.self-step-failed strong{color:var(--danger)}
.timeline li.self-step-waiting{opacity:.7}
@media(max-width:760px){.self-emp-card-v1020{grid-template-columns:44px 1fr}.self-emp-card-v1020>.tag{grid-column:2;justify-self:start}.self-form-head-v1020{flex-direction:column}}

/* 角色权限（V1.03.2）：页面入口与操作权限合并配置 */
.rp { font-size: 13px; line-height: 1.5; color: var(--text); }
.rp input[type="checkbox"] { width: 13px; height: 13px; flex: 0 0 13px; margin: 2px 0 0; accent-color: var(--primary); }
.rp-btn { border: 1px solid var(--border); background: var(--surface); color: var(--text); border-radius: 6px; padding: 5px 9px; font-size: 12px; min-height: 29px; cursor: pointer; white-space: nowrap; }
.rp-btn:hover { border-color: #b8d8c7; }
.rp-btn:disabled { opacity: .6; cursor: not-allowed; }
.rp-btn.primary { background: var(--primary); color: #fff; border-color: var(--primary); }
.rp-btn.sm { padding: 4px 7px; font-size: 11px; min-height: 25px; }
.rp-search { height: 32px; border: 1px solid var(--border); border-radius: 7px; padding: 5px 9px; font-size: 12px; min-width: 210px; background: var(--surface); color: var(--text); outline-color: var(--primary); }
.rp-notice { padding: 10px 13px; background: #eaf6f0; border: 1px solid #d0eadc; border-radius: 8px; color: #438565; margin-bottom: 14px; }
.rp-card { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 14px; }
.rp-card-head { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 14px; }
.rp-card-head p { color: var(--text-3); margin: 5px 0; }
.rp-table { width: 100%; border-collapse: collapse; background: var(--surface); }
.rp-table th, .rp-table td { padding: 12px 10px; border-bottom: 1px solid var(--border-2); text-align: left; white-space: nowrap; }
.rp-table th { font-size: 12px; color: var(--text-2); font-weight: 600; background: var(--surface-2); }
.rp-ops { display: flex; gap: 6px; }
.rp-tag { display: inline-block; border-radius: 15px; padding: 2px 8px; background: #eef5f1; color: var(--primary); font-size: 11px; }
.rp-tag.gray { background: #f1f3f2; color: var(--text-3); }
.rp-empty { padding: 20px; text-align: center; color: var(--text-3); }
.rp-muted { color: var(--text-3); }

.side-panel-overlay:has(.rp-drawer) { top: var(--header-h); }
.side-panel.rp-drawer { width: min(1020px, 82vw); }
.rp-drawer .side-panel-head { height: 58px; flex: none; padding: 0 22px; border-bottom-color: var(--border); }
.rp-drawer .side-panel-head h3 { font-size: 15px; font-weight: 650; }
.rp-drawer .side-panel-body { padding: 14px 22px 22px; }
.rp-drawer .side-panel-foot { padding: 12px 22px; gap: 9px; border-top-color: var(--border); }
.rp-pane { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 12px; margin: 0 0 10px; }
.rp-pane h3 { font-size: 13px; margin: 0 0 8px; color: var(--text-2); }
.rp-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px 14px; }
.rp-field { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.rp-field.wide { grid-column: 1 / -1; }
.rp-field label { color: var(--text-2); font-size: 12px; }
.rp-field input, .rp-field textarea { width: 100%; min-width: 0; border: 1px solid var(--border); border-radius: 7px; padding: 7px 9px; font: inherit; font-size: 13px; background: var(--surface); color: var(--text); outline-color: var(--primary); }
.rp-field input:disabled { background: var(--surface-2); color: var(--text-3); }
.rp-field textarea { height: 48px; min-height: 48px; max-height: 48px; resize: none; }
.rp-switchrow { display: flex; align-items: center; gap: 8px; margin-top: 8px; color: var(--text-2); }
.rp-hint { color: var(--text-3); margin: -4px 0 13px; }
.rp-scope-wrap { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
.rp-scope-select { width: min(280px, 100%); height: 32px; padding: 4px 8px; font-size: 12px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface); color: var(--text); outline-color: var(--primary); }
.rp-scope-desc { font-size: 12px; color: var(--text-3); }
.rp-alert-warn { padding: 7px 10px; margin: 8px 0; border-radius: 7px; font-size: 12px; background: #fff6e9; border: 1px solid #f3dfbf; color: #956522; }
.rp-tools { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 8px 0; }
.rp-toolrow { margin: 10px 0; }
.rp-tools .rp-search { flex: 1; min-width: 180px; }
.rp-spacer { margin-left: auto; color: var(--text-3); white-space: nowrap; }
.rp-check { display: flex; align-items: flex-start; gap: 8px; min-width: 0; cursor: pointer; }
.rp-dept-list { display: grid; grid-template-columns: 1fr; gap: 5px 14px; max-height: 230px; overflow: auto; border: 1px solid var(--border); border-radius: 8px; padding: 10px; }
.rp-dept { padding: 4px 0; }
.rp-dept.inherited { color: var(--text-3); }
.rp-dept input:disabled { opacity: .58; cursor: not-allowed; }
.rp-modules { display: grid; gap: 8px; }
.rp-module { border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
.rp-module-head { display: flex; align-items: center; gap: 10px; padding: 7px 9px; background: var(--surface-2); }
.rp-module-head .rp-check { flex: 1; }
.rp-module-summary { margin-left: auto; color: var(--text-3); font-size: 11px; white-space: nowrap; }
.rp-module-body { padding: 6px 9px 8px; border-top: 1px solid var(--border-2); }
.rp-group + .rp-group { border-top: 1px dashed var(--border); margin-top: 8px; padding-top: 8px; }
.rp-group-title { color: var(--text-2); font-size: 11px; font-weight: 650; margin-bottom: 6px; }
.rp-page-grid { display: grid; grid-template-columns: 1fr; gap: 3px 14px; }
.rp-perm-page { border: 1px solid var(--border); border-radius: 7px; margin: 5px 0; overflow: hidden; background: var(--surface); }
.rp-perm-head { display: flex; align-items: center; gap: 8px; padding: 6px 9px; min-height: 38px; }
.rp-perm-head:hover { background: #fbfcfb; }
.rp-perm-access { min-width: 200px; flex: 1; gap: 6px; }
.rp-page-copy { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.rp-page-copy strong { font-size: 12px; font-weight: 550; }
.rp-perm-actions { border-top: 1px solid var(--border-2); background: #fcfdfc; padding: 6px 9px 8px; }
.rp-action-list { display: flex; flex-wrap: wrap; gap: 5px 6px; padding-left: 21px; }
.rp-action { display: flex; align-items: flex-start; gap: 6px; min-width: 145px; flex: 0 1 250px; max-width: 100%; padding: 5px 7px; border: 1px solid var(--border); border-radius: 5px; background: var(--surface); cursor: pointer; }
.rp-action:hover { border-color: #b8d8c7; }
.rp-action-copy { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.rp-action-copy strong { font-size: 11px; font-weight: 550; }
.rp [hidden] { display: none !important; }
:root[data-theme="dark"] .rp-notice { background: color-mix(in srgb, var(--primary) 12%, var(--surface)); border-color: color-mix(in srgb, var(--primary) 28%, var(--surface)); color: var(--primary); }
:root[data-theme="dark"] .rp-tag { background: color-mix(in srgb, var(--primary) 16%, var(--surface)); }
:root[data-theme="dark"] .rp-tag.gray { background: var(--border-2); }
:root[data-theme="dark"] .rp-alert-warn { background: color-mix(in srgb, var(--warning) 12%, var(--surface)); border-color: color-mix(in srgb, var(--warning) 30%, var(--surface)); color: var(--warning); }
:root[data-theme="dark"] .rp-perm-head:hover, :root[data-theme="dark"] .rp-perm-actions { background: var(--surface-2); }
:root[data-theme="dark"] .rp-btn:hover, :root[data-theme="dark"] .rp-action:hover { border-color: var(--primary-line); }
@media (max-width: 900px) {
  .side-panel.rp-drawer { width: 100vw; }
  .rp-search { min-width: 160px; }
  .rp-perm-head { align-items: flex-start; flex-wrap: wrap; }
  .rp-perm-access { min-width: 100%; }
  .rp-action { min-width: 135px; flex: 1 1 160px; }
}
@media (max-width: 640px) { .rp-form { grid-template-columns: 1fr; } }

/* 批量发起审批结果：汇总 + 可滚动的逐条明细 */
.dialog:has(.batch-result) { width: min(96vw, 1040px); max-height: 90vh; overflow: auto; }
.batch-result-stats { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px; margin-bottom: 12px; }
.batch-result-stat { display: flex; flex-direction: column; gap: 4px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface-2); }
.batch-result-stat strong { font-size: 18px; }
.batch-result-table { max-height: 52vh; overflow: auto; border: 1px solid var(--border); border-radius: 7px; }
.batch-result-table td { white-space: normal; word-break: break-all; }
.dialog:has(.batch-precheck) { width: min(96vw, 640px); }
.batch-precheck .validation-item strong { flex: none; white-space: nowrap; }
.batch-result-ops { display: flex; gap: 4px; flex-wrap: wrap; }
.ap-history { display: grid; gap: 10px; }
.ap-history-item { border: 1px solid var(--border); border-radius: 7px; padding: 10px 12px; background: var(--surface-2); }
.ap-history-head { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 6px; }
.ap-history-actions { display: flex; gap: 6px; margin-bottom: 6px; }
.ap-history-snap { border: 1px dashed var(--border); border-radius: 6px; padding: 8px 10px; margin-bottom: 8px; background: var(--surface); }
.dialog:has(.ap-history-dialog) { width: min(96vw, 640px); max-height: 88vh; overflow: auto; }
