:root{
  --bg:#f5f7fb;
  --card:#ffffff;
  --line:#e6ebf2;
  --text:#1f2937;
  --sub:#6b7280;
  --primary:#2563eb;
  --danger:#dc2626;
  --ok:#16a34a;
  --warn:#d97706;
  --sidebar:#0f172a;
  --sidebarText:#cbd5e1;
  --sidebarActive:#ffffff;
  --shadow:0 8px 28px rgba(15,23,42,.08);
}
*{box-sizing:border-box}
body{margin:0;font-family:"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;color:var(--text);background:var(--bg)}
.container{max-width:1200px;margin:0 auto;padding:14px}
.w-full{width:100%}
.hidden{display:none !important}
.text-center{text-align:center}
.ml-auto{margin-left:auto}
.cursor-pointer{cursor:pointer}
.grid-col-full{grid-column:1/-1}
.modal-md{max-width:720px}
.row-vertical-start{flex-direction:column;align-items:flex-start}
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px;margin-bottom:12px}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.input,select{height:36px;line-height:34px;border:1px solid var(--line);border-radius:8px;padding:0 10px;background:#fff;vertical-align:middle}
.btn{height:36px;line-height:34px;border:1px solid var(--line);background:#fff;border-radius:8px;padding:0 12px;cursor:pointer;color:var(--text);display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;white-space:nowrap;min-width:72px}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff;min-width:64px}
.btn.status-on{background:#16a34a;border-color:#16a34a;color:#fff;min-width:72px}
.btn.status-off{background:#dc2626;border-color:#dc2626;color:#fff;min-width:72px}
.btn.subtle{background:#f8fafc;color:var(--sub)}
.btn:disabled{opacity:.6;cursor:not-allowed}
.btn:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.msg{font-size:13px;color:var(--sub);word-break:break-all}
table{width:100%;border-collapse:collapse}
th,td{padding:8px;border-bottom:1px solid var(--line);text-align:left;font-size:13px;vertical-align:middle}
thead th{position:sticky;top:0;background:#f8fafc;z-index:1}
tbody tr:hover{background:#f8fbff}
.table-empty{text-align:center;color:var(--sub);padding:22px 8px !important;background:#fbfdff}
pre{margin:0;background:#0f172a;color:#d1d5db;border-radius:8px;padding:10px;overflow:auto;max-height:320px}
.toast{position:fixed;right:16px;bottom:16px;min-width:220px;max-width:420px;background:#111827;color:#fff;padding:10px 12px;border-radius:8px;opacity:0;transform:translateY(8px);transition:all .2s ease;z-index:9999}
.toast.show{opacity:.95;transform:translateY(0)}
.toast.ok{background:#166534}
.toast.err{background:#991b1b}
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.35);display:none;align-items:center;justify-content:center;z-index:10000;padding:16px}
.modal-mask.show{display:flex}
.modal{width:min(980px,100%);background:#fff;border-radius:12px;border:1px solid var(--line);max-height:80vh;overflow:hidden;display:flex;flex-direction:column}
.modal.modal-lg{width:min(1100px,100%);max-height:86vh}
.modal-hd{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.modal-bd{padding:12px 14px;overflow:auto;flex:1;min-height:0}
.modal-title{font-weight:700}
.modal-close{border:1px solid var(--line);background:#fff;border-radius:8px;height:28px;width:28px;padding:0;cursor:pointer;font-size:18px;line-height:1;display:inline-flex;align-items:center;justify-content:center}
.dialog-mask{
  position:fixed;inset:0;z-index:12000;
  background:rgba(15,23,42,.42);
  display:flex;align-items:center;justify-content:center;
  padding:16px;
}
.dialog-panel{
  width:min(460px,100%);
  background:#fff;
  border:1px solid var(--line);
  border-radius:10px;
  box-shadow:0 18px 40px rgba(15,23,42,.22);
  overflow:hidden;
}
.dialog-hd{padding:14px 16px 10px;border-bottom:1px solid var(--line);background:#fcfdff}
.dialog-title{margin:0;font-size:16px;font-weight:600;letter-spacing:-.01em;color:var(--text)}
.dialog-bd{padding:14px 16px 10px}
.dialog-text{margin:0;color:var(--text);font-size:14px;line-height:1.6;white-space:pre-wrap}
.dialog-input{margin-top:12px}
.dialog-form{display:flex;flex-direction:column;gap:8px}
.dialog-error{min-height:18px;font-size:12px;color:var(--danger)}
.dialog-ft{
  display:flex;justify-content:flex-end;gap:8px;
  padding:12px 16px 14px;border-top:1px solid var(--line);
  background:#fff;
}
.container.narrow{max-width:1080px}
.row.space-between{justify-content:space-between}
.mt-0{margin-top:0}
.mt-8{margin-top:8px}
.mb-8{margin-bottom:8px}
.overflow-auto{overflow:auto}
.page-title{font-size:18px;font-weight:600;margin:0 0 12px}
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:18px;background:
  radial-gradient(1100px 520px at 20% 20%, rgba(37,99,235,.12), transparent 60%),
  radial-gradient(900px 420px at 80% 30%, rgba(96,165,250,.14), transparent 60%),
  var(--bg)}
.login-panel{width:min(1080px,94vw);display:grid;grid-template-columns:minmax(0,1fr) 420px;gap:20px;align-items:stretch}
.login-panel > .login-brand,
.login-panel > .login-card{
  height:100%;
  margin-bottom:0;
}
.login-brand{
  display:flex;flex-direction:column;justify-content:space-between;gap:18px;
  padding:28px;border:1px solid var(--line);border-radius:14px;
  background:rgba(255,255,255,.74);backdrop-filter:saturate(165%) blur(10px);box-shadow:var(--shadow)
}
.login-brand-head{display:flex;gap:12px;align-items:flex-start}
.login-logo{width:44px;height:44px;border-radius:14px;display:flex;align-items:center;justify-content:center;overflow:hidden;flex:0 0 44px}
.login-logo-img{width:40px;height:40px;max-width:100%;max-height:100%;object-fit:contain;display:block}
.login-brand-meta{flex:1 1 auto;min-width:0}
.login-title{font-weight:900;font-size:32px;letter-spacing:-.4px;line-height:1.2}
.login-sub{font-size:14px;color:#64748b;margin-top:4px}
.login-brand-body{display:flex;flex-direction:column;gap:10px}
.login-brand-line{font-size:14px;color:#475569;line-height:1.65}
.login-card{padding:28px}
.login-h1{margin:0 0 12px;font-size:20px;font-weight:900}
.login-fields{display:flex;flex-direction:column;gap:10px}
.login-card-hd{margin-bottom:6px}
.login-tip{margin:0;color:#64748b;font-size:12px;line-height:1.5}
.login-form-grid{display:flex;flex-direction:column;gap:10px}
.login-change{
  margin-top:8px;
  border-top:1px solid var(--line);
  padding-top:14px;
  display:flex;
  flex-direction:column;
  gap:10px;
}
.login-change-hd{display:flex;flex-direction:column;gap:4px}
.login-change h3{font-size:16px;font-weight:700}
.page-auth .login-card{
  border-radius:14px;
  box-shadow:0 10px 28px rgba(15,23,42,.1);
  display:flex;
  flex-direction:column;
}
.page-auth .login-h1{
  font-size:34px;
  font-weight:800;
  letter-spacing:-.02em;
  line-height:1.2;
}
.page-auth .field{gap:6px}
.page-auth .field-label{font-size:13px;color:#334155;font-weight:600}
.page-auth .input{height:42px;border-radius:10px}
.page-auth .btn.primary{height:42px;border-radius:10px;font-weight:700}
.page-auth #msg{font-size:12px;margin-top:2px}
.login-footer{position:fixed;left:0;right:0;bottom:0;padding:10px 14px;background:#0b1220;border-top:1px solid rgba(255,255,255,.08);display:flex;gap:14px;justify-content:center;flex-wrap:wrap;font-size:12px;color:rgba(226,232,240,.86)}
.login-footer a{color:rgba(147,197,253,.92);text-decoration:none}
.login-footer a:hover{text-decoration:underline}
.error-card{width:min(560px,92vw)}
@media (max-width:900px){
  .login-panel{grid-template-columns:1fr}
  .login-brand{order:2;padding:18px}
  .login-brand-body{gap:6px}
  .login-title{font-size:22px}
  .login-sub{font-size:13px}
  .page-auth .login-h1{font-size:24px}
  .login-footer{position:static}
  .login-card{padding:18px}
}
.status{display:inline-block;border-radius:999px;padding:2px 8px;font-size:12px;border:1px solid var(--line);color:var(--sub)}
.status.running{color:var(--primary);border-color:#bfdbfe;background:#eff6ff}
.row .input.min-w-160{min-width:160px}
.input.min-w-200{min-width:200px}
.input.w-80{width:80px;min-width:80px}
.input.min-w-120{min-width:120px}
.btn.ghost{background:#fff}
.app-layout{display:flex;min-height:100vh}
.sidebar{width:248px;background:var(--sidebar);color:var(--sidebarText);padding:14px;position:sticky;top:0;height:100vh;overflow:auto;transition:width .18s ease}
.brand{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;background:rgba(255,255,255,.06);margin-bottom:12px}
.brand-logo{width:34px;height:34px;border-radius:10px;background:linear-gradient(135deg,#60a5fa,#2563eb);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800}
.brand-title{font-weight:800;letter-spacing:.2px}
.brand-sub{font-size:12px;color:rgba(203,213,225,.8);margin-top:2px}
.nav{display:flex;flex-direction:column;gap:10px}
.nav-group{display:flex;flex-direction:column;gap:6px}
.nav-group-title{font-size:12px;color:rgba(203,213,225,.75);padding:0 10px;margin-top:4px}
.nav-item{display:flex;align-items:center;gap:10px;padding:10px 10px;border-radius:10px;border:1px solid rgba(148,163,184,.12);background:transparent;color:var(--sidebarText);cursor:pointer;position:relative}
.nav-item#navDashboard,.nav-item#navEmployee,.nav-item#navEnterpriseProfile,.nav-item#navEnterprise,.nav-item#navAdmin,.nav-item#navAudit{display:none}
html.nav-show-navDashboard .nav-item#navDashboard,
html.nav-show-navEmployee .nav-item#navEmployee,
html.nav-show-navEnterpriseProfile .nav-item#navEnterpriseProfile,
html.nav-show-navEnterprise .nav-item#navEnterprise,
html.nav-show-navAdmin .nav-item#navAdmin,
html.nav-show-navAudit .nav-item#navAudit{display:flex}
.nav-item:hover{background:rgba(255,255,255,.06)}
.nav-item.active{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.18);color:var(--sidebarActive)}
.nav-ico{width:22px;height:22px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:rgba(148,163,184,.14);color:#e2e8f0;font-size:14px}
.nav-item.active .nav-ico{background:rgba(96,165,250,.18);color:#fff}
.nav-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:100vh}
.header{position:sticky;top:0;z-index:60;background:rgba(245,247,251,.92);backdrop-filter:saturate(160%) blur(8px);border-bottom:1px solid var(--line)}
.header-inner{max-width:1200px;margin:0 auto;padding:10px 14px;display:flex;align-items:center;justify-content:space-between;gap:10px}
.header-left{display:flex;align-items:center;gap:10px;min-width:0}
.btn.icon{width:36px;padding:0;display:flex;align-items:center;justify-content:center}
/* 顶栏导航按钮：桌面显示侧栏折叠(↔)，移动端显示菜单(☰) */
#btnToggleNav{display:none}
#btnToggleSidebar{display:flex}
.page-titlebar{display:flex;flex-direction:column;min-width:0}
.page-titlebar .title{font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.breadcrumb{font-size:12px;color:var(--sub);display:flex;flex-wrap:wrap;gap:6px}
.bc-sep{opacity:.7}
.bc-link{color:var(--sub);text-decoration:none}
.bc-link:hover{text-decoration:underline}
.header-right{display:flex;align-items:center;gap:8px}
.user-chip{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--line);border-radius:999px;background:#fff}
.user-avatar{
  width:22px;height:22px;border-radius:99px;background:#e2e8f0;
  display:flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:700;color:#334155;
  user-select:none;
}
.user-avatar.has-img{color:transparent}
.content{flex:1 0 auto;max-width:1200px;width:100%;margin:0 auto;padding:16px 14px 24px}
/* 内容区卡片：轻阴影，避免「模块浮一堆」的廉价感 */
.content .card{
  box-shadow:0 1px 2px rgba(15,23,42,.05);
  border-radius:8px;
  margin-bottom:14px;
}
.content .card:last-child{margin-bottom:0}
.content-dashboard .card.card-panel{padding:18px 18px 16px}
/* 看板页顶栏：次要操作弱化，与内容区风格一致 */
.page-dashboard .header-right{gap:10px}
.page-dashboard .header-right .user-chip{background:#fafbfc}
.page-dashboard #btnLogout{
  background:#f8fafc;
  color:var(--sub);
  border-color:var(--line);
}
.page-toolbar{gap:10px;align-items:center}
.page-toolbar .input,
.page-toolbar select{
  flex:1 1 220px;
  min-width:180px;
  max-width:320px;
}
.page-toolbar .btn{flex:0 0 auto}
.card-panel-title{white-space:nowrap}
.toolbar-wrap{
  width:min(980px,100%);
  align-items:flex-end;
}
.toolbar-main{
  width:100%;
  justify-content:flex-end;
  flex-wrap:nowrap;
  overflow-x:auto;
  overflow-y:hidden;
}
.toolbar-main::-webkit-scrollbar{height:6px}
.toolbar-main::-webkit-scrollbar-thumb{background:rgba(148,163,184,.6);border-radius:99px}
.toolbar-main::-webkit-scrollbar-track{background:transparent}
.toolbar-main .input,
.toolbar-main select{
  flex:0 1 260px;
  max-width:320px;
}
.toolbar-main .btn{min-width:76px}
.toolbar-advanced{
  width:100%;
  border:1px solid var(--line);
  background:#fbfdff;
  border-radius:10px;
  padding:10px 10px;
  gap:8px;
}
.toolbar-advanced-row{
  width:100%;
  justify-content:flex-end;
}
.filter-label{
  min-width:96px;
  text-align:right;
}
.filter-sep{opacity:.75}
.filter-date{
  flex:0 0 170px !important;
  min-width:170px !important;
  max-width:170px !important;
}
.table-shell{
  border:1px solid var(--line);
  border-radius:8px;
  background:#fff;
}
.table-loading{
  color:#64748b;
  font-size:13px;
  padding:14px 12px;
}
.table-shell table{margin:0}
.page-dashboard .table-shell thead th{
  height:40px;
  font-size:12px;
  color:#64748b;
  letter-spacing:.01em;
  background:#f8fafc;
}
.page-dashboard .table-shell tbody td{
  min-height:44px;
  height:44px;
  font-size:13px;
  color:var(--text);
}
.page-dashboard .table-shell .table-empty{
  padding:28px 8px !important;
  font-size:13px;
}
.page-dashboard .filters .input,
.page-dashboard .filters select{
  min-width:180px;
}
.page-dashboard .filters .btn{
  min-width:76px;
}
.skeleton-line{
  display:block;
  height:10px;
  border-radius:4px;
  background:linear-gradient(90deg,#e2e8f0 0%,#f1f5f9 45%,#e2e8f0 90%);
  background-size:200% 100%;
  animation:kpi-shimmer 1.1s ease-in-out infinite;
}
.skeleton-line.sm{width:36%;margin:0 auto}
.skeleton-line.md{width:56%;margin:0 auto}
.list-foot-inline{
  margin-top:0;
  padding-top:0;
  border-top:none;
}
.nav-mask{display:none}
/* 工作台首屏：扁平条 + 左侧主色边线（偏飞书/企业微信信息条语感） */
.content .card.dashboard-hero{
  box-shadow:none;
  border:1px solid var(--line);
  border-left:3px solid var(--primary);
  padding:20px 20px 18px 17px;
  margin-bottom:16px;
  background:var(--card);
}
.dashboard-hero-inner{display:flex;flex-direction:column;gap:0}
.dh-head{margin-bottom:16px}
.dashboard-title{
  margin:0 0 8px;
  font-size:20px;font-weight:600;letter-spacing:-.02em;
  color:var(--text);line-height:1.3
}
.dashboard-lead{margin:0;font-size:14px;color:var(--sub);line-height:1.55;max-width:50rem}
.dh-meta{
  display:flex;flex-wrap:wrap;align-items:center;gap:6px 2px;
  padding-top:16px;margin:0;
  border-top:1px solid var(--line);
  font-size:13px;line-height:1.5;color:var(--sub)
}
.dh-meta-group{display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:8px;min-width:0}
.dh-meta-status{color:var(--text);font-weight:500;gap:8px;opacity:.92}
.dh-led{
  width:6px;height:6px;border-radius:999px;background:var(--ok);
  flex-shrink:0;position:relative;top:1px
}
.dh-meta-dot{
  color:var(--line);padding:0 8px;font-weight:400;user-select:none
}
.dh-meta-time,.dh-meta-weather{align-items:center}
.dh-meta-sub{
  color:var(--sub);font-variant-numeric:tabular-nums
}
.dh-meta-em{
  color:var(--text);font-weight:600;font-variant-numeric:tabular-nums
}
.dh-meta-weather .dh-meta-sub{
  max-width:min(280px,46vw);white-space:nowrap;overflow:hidden;text-overflow:ellipsis
}
/* 看板下方标准区块 */
.card-panel .card-hd{
  align-items:center;margin-bottom:14px;gap:12px
}
.card-panel .card-panel-title{
  margin:0;min-width:0;flex:1;
  font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--text)
}
.card-panel .card-hd .row{flex-shrink:0;margin-left:auto}
.kpi-foot{
  margin-top:14px;padding-top:12px;border-top:1px solid var(--line);
  font-size:12px;color:var(--sub)
}
.chart-slot{
  border:1px dashed #e2e8f0;background:#f8fafc;border-radius:8px;
  min-height:132px;padding:14px 14px 12px;display:flex;flex-direction:column;
  justify-content:flex-start;gap:8px;position:relative;overflow:hidden
}
.chart-slot-clickable{cursor:pointer;transition:border-color .15s ease, background-color .15s ease}
.chart-slot-clickable:hover{border-color:#bfdbfe;background:#f8fbff}
.chart-slot .kpi-label{margin-bottom:0}
.chart-slot-hint{margin:0;font-size:12px;color:#94a3b8;line-height:1.4}
.chart-slot::after{
  content:"";
  display:block;height:36px;margin-top:auto;border-radius:6px;opacity:.45;
  background:linear-gradient(90deg,#e2e8f0 0%,#e2e8f0 12%,transparent 12%,transparent 20%,#e2e8f0 20%,#e2e8f0 32%,transparent 32%,transparent 40%,#e2e8f0 40%,#e2e8f0 55%,transparent 55%,transparent 63%,#e2e8f0 63%,#e2e8f0 78%,transparent 78%)
}
.kpi-grid--charts{gap:10px}
@media (max-width:900px){
  .content .card.dashboard-hero{padding:16px 16px 14px 13px}
  .dashboard-title{font-size:18px}
  .page-toolbar .input{min-width:180px}
  .page-dashboard .filters .input,
  .page-dashboard .filters select{min-width:160px}
}
.app-footer{margin-top:auto;flex-shrink:0;border-top:1px solid rgba(255,255,255,.08);background:#0b1220}
.app-footer-inner{max-width:1200px;margin:0 auto;padding:10px 14px;display:flex;gap:14px;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;color:rgba(226,232,240,.86);font-size:12px}
.app-footer-inner a{color:rgba(147,197,253,.92);text-decoration:none}
.app-footer-inner a:hover{text-decoration:underline}
.footer-items{
  justify-content:center;
  text-align:center;
}
.footer-items > a,
.footer-items > span{
  display:inline-flex;
  align-items:center;
  gap:6px;
}
.footer-item-icon{
  width:14px;
  height:14px;
  object-fit:contain;
  flex-shrink:0;
}
.footer-sep{opacity:.55}
@media (max-width: 900px){
  #btnToggleNav{display:flex}
  #btnToggleSidebar{display:none}
  .sidebar{position:fixed;left:-270px;top:0;z-index:100;height:100vh;transition:left .18s ease}
  body.nav-open .sidebar{left:0}
  .nav-mask{display:block;position:fixed;inset:0;background:rgba(15,23,42,.35);z-index:90;opacity:0;pointer-events:none;transition:opacity .18s ease}
  body.nav-open .nav-mask{opacity:1;pointer-events:auto}
}
body.sidebar-collapsed .sidebar{width:76px}
body.sidebar-collapsed .brand-title,
body.sidebar-collapsed .brand-sub,
body.sidebar-collapsed .nav-group-title,
body.sidebar-collapsed .nav-text{display:none}
body.sidebar-collapsed .brand{justify-content:center}
body.sidebar-collapsed .nav-item{justify-content:center;gap:0}
body.sidebar-collapsed .nav-ico{width:28px;height:28px;border-radius:10px}
body.sidebar-collapsed .nav-item:hover::after{
  content:attr(data-tip);
  position:absolute;
  left:calc(100% + 10px);
  top:50%;
  transform:translateY(-50%);
  background:#111827;
  color:#fff;
  font-size:12px;
  line-height:1;
  padding:8px 10px;
  border-radius:8px;
  white-space:nowrap;
  box-shadow:0 6px 18px rgba(0,0,0,.22);
  z-index:120;
}
.card-hd{display:flex;align-items:center;justify-content:space-between;gap:10px}
.card-hd .row{margin-left:auto}
.card-hd .btn{height:34px;line-height:32px;min-width:76px;padding:0 14px}
.card-hd .btn.primary{min-width:88px}
.card-hd .btn.subtle{background:#fff}
.table-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.table-actions .btn{margin:0}
.table-actions .btn.subtle{min-width:84px}
.table-actions .btn.danger{min-width:64px}
.table-shell th:first-child,
.table-shell td:first-child{padding-left:14px}
.table-shell th:last-child,
.table-shell td:last-child{padding-right:14px}
.table-shell td:last-child{text-align:left}
.table-shell .table-actions{justify-content:flex-start}
.enterprise-org-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:stretch}
.enterprise-org-grid .card{height:100%;display:flex;flex-direction:column}
.enterprise-org-grid .table-shell{flex:1}
.org-inline-form{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:10px;
  align-items:start;
}
.org-inline-form .field{min-width:0}
.org-inline-form .field .field-label{
  min-height:20px;
  display:flex;
  align-items:center;
}
.org-inline-form .btn{width:100%;min-width:0}
.filters{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.filters > *{flex:0 0 auto}
.filters .input,
.filters select{
  min-width:160px;
}
.filters .btn{
  min-width:76px;
}
@media (max-width:900px){
  .page-toolbar .input,
  .page-toolbar select{
    min-width:160px;
    max-width:none;
    flex:1 1 100%;
  }
  .page-toolbar .btn{
    min-width:88px;
  }
  .filters .input,
  .filters select{min-width:160px}
}
.form-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.form-grid .row{grid-column:1/-1}
.tenure-inline{
  display:inline;
  margin-left:6px;
  padding:0;
  border:none;
  border-radius:0;
  background:transparent;
  color:var(--sub);
  font-weight:500;
  font-size:12px;
  line-height:18px;
}

/* 入职日期：标题行不换行，避免把输入框顶下去（编辑弹窗也生效） */
.field[data-field-code="entry_date"] > .field-label{
  display:flex;
  align-items:center;
  gap:6px;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.field[data-field-code="entry_date"] .tenure-inline{
  flex:0 0 auto;
  white-space:nowrap;
}
@media (max-width:1200px){
  .enterprise-org-grid{grid-template-columns:1fr}
  .form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:768px){
  .org-inline-form{grid-template-columns:1fr}
  .form-grid{grid-template-columns:1fr}
}
@media (max-width:768px){
  .btn{height:40px;padding:0 14px}
  .table-mobile-card table,
  .table-mobile-card thead,
  .table-mobile-card tbody,
  .table-mobile-card tr,
  .table-mobile-card th,
  .table-mobile-card td{display:block}
  .table-mobile-card thead{display:none}
  .table-mobile-card tr{border:1px solid var(--line);border-radius:8px;margin-bottom:8px;padding:8px}
  .table-mobile-card td{border:none;padding:4px 0}
  .table-mobile-card td::before{content:attr(data-label) "：";color:var(--sub)}
}
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}
.kpi-item{
  border:1px solid var(--line);border-radius:8px;padding:14px 14px 12px;
  background:#fafbfc;min-height:90px;
  transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease
}
.kpi-item:hover{
  border-color:#dbeafe;
  box-shadow:0 2px 10px rgba(37,99,235,.07);
  background:#fff
}
.kpi-label{font-size:12px;color:var(--sub);margin-bottom:8px;font-weight:500}
.kpi-value{font-size:22px;font-weight:700;letter-spacing:-.02em;color:var(--text)}
.kpi-trend{margin-top:10px;font-size:11px;font-weight:600;letter-spacing:.02em}
.kpi-trend.up{color:var(--ok)}
.kpi-trend.down{color:var(--warn)}
.kpi-trend.stable{color:var(--sub)}
.kpi-grid--skeleton{pointer-events:none}
.kpi-item--skeleton{
  background:#f1f5f9 !important;border-style:dashed !important;
  box-shadow:none !important;min-height:90px
}
.kpi-item--skeleton:hover{border-color:var(--line) !important;background:#f1f5f9 !important;box-shadow:none !important}
.kpi-skel-line{height:10px;border-radius:4px;background:linear-gradient(90deg,#e2e8f0 0%,#f1f5f9 45%,#e2e8f0 90%);background-size:200% 100%;animation:kpi-shimmer 1.1s ease-in-out infinite}
.kpi-skel-line--title{width:55%;height:8px;margin-bottom:12px;opacity:.85}
.kpi-skel-line--num{width:42%;height:20px;margin-bottom:10px;border-radius:6px}
.kpi-skel-line--sub{width:38%;height:8px;opacity:.75}
@keyframes kpi-shimmer{0%{background-position:100% 0}100%{background-position:-100% 0}}
@media (prefers-reduced-motion:reduce){
  .kpi-skel-line{animation:none;background:#e2e8f0}
  .skeleton-line{animation:none;background:#e2e8f0}
}
.chart-ph{min-height:120px;display:flex;flex-direction:column;justify-content:center}
.section{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:#fff;margin-top:10px}
.section>summary{cursor:pointer;font-weight:700;color:var(--text);list-style:none}
.section>summary::-webkit-details-marker{display:none}
.field{display:flex;flex-direction:column;gap:4px}
.field-label{font-size:13px;color:var(--sub)}
/* 与后端 sys_required_field_rule 同步：当前为必填的字段标签标红星 */
.field.field-is-required > .field-label{font-weight:600;color:var(--text)}
.field.field-is-required > .field-label::after{content:' *';color:#dc2626;font-weight:700}
.field .input,
.field select{width:100%;min-width:0}
.field-inline-action{display:flex;align-items:center;gap:8px;min-width:0}
.field-inline-action .input{flex:1 1 auto}
.btn.btn-mini{min-width:46px;height:36px;line-height:34px;padding:0 10px;flex:0 0 auto}
.install-body{min-height:100vh;padding:28px 16px 40px;background:
  radial-gradient(900px 420px at 10% 0%, rgba(37,99,235,.08), transparent 55%),
  var(--bg)}
.install-shell{max-width:640px;margin:0 auto}
.install-hero{display:flex;align-items:flex-start;gap:14px;margin-bottom:14px}
.install-logo{width:48px;height:48px;border-radius:14px;background:linear-gradient(135deg,#60a5fa,#2563eb);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:20px;flex-shrink:0}
.install-logo-muted{background:linear-gradient(135deg,#94a3b8,#64748b)}
.install-title{font-weight:800;font-size:20px;color:var(--text);margin-bottom:4px}
.install-steps{font-size:12px;color:var(--sub);margin-bottom:12px}
.install-checklist{margin-bottom:14px !important}
.install-checklist.ok{border-color:#bbf7d0;background:#f0fdf4}
.install-checklist-title{font-weight:700;font-size:14px;margin-bottom:8px}
.install-checklist-ul{margin:0;padding-left:18px;font-size:13px;color:var(--text);line-height:1.6}
.install-ok{color:var(--ok);font-weight:600}
.install-bad{color:var(--danger);font-weight:600}
.install-admin-box{margin:12px 0;padding:10px 12px;border-radius:8px;border:1px dashed var(--line);background:#f8fafc}
.install-submit{margin-top:16px}
.install-footer-note{text-align:center;margin-top:16px}
.install-hr{border:none;border-top:1px solid var(--line);margin:1.1rem 0}
.hint{font-size:12px;color:var(--sub);margin:8px 0 0;line-height:1.5}
.msg.err{color:#b91c1c;font-size:14px;margin-bottom:12px;padding:8px 10px;background:#fef2f2;border-radius:8px;border:1px solid #fecaca}
.msg.ok{color:#166534;font-size:14px;margin-bottom:12px;padding:8px 10px;background:#f0fdf4;border-radius:8px;border:1px solid #bbf7d0}
.field .input.w-full,.install-body .input.w-full{width:100%;min-width:0}
.field.grid-col-full{width:100%}
.field.grid-col-full .btn + .msg{display:inline-flex;align-items:center}
.upload-drop-zone{
  padding:0;
  border:none;
  border-radius:0;
  background:transparent;
}
.upload-drop-zone.upload-drop-active{
  background:transparent;
}
.upload-drop-zone.upload-drop-disabled{
  opacity:1;
  background:transparent;
}
.upload-files-row{
  gap:12px;
  align-items:stretch;
}
.upload-file-item{
  position:relative;
  flex:1 1 220px;
  min-width:200px;
  border:1px solid var(--line);
  border-radius:10px;
  padding:10px;
  background:#fbfdff;
}
/* 合同信息这一行：强制底部对齐，避免靠“固定高度”硬挤导致错位/挤压 */
.contract-grid{align-items:end}
.contract-upload-item{padding:6px 10px 8px}
.contract-upload-item .field-label{margin-bottom:4px}
.contract-upload-item .upload-drop-zone{margin-top:auto}
.contract-upload-item .icon-action{top:-2px}

.upload-file-item .field-label{
  margin-bottom:2px;
}
.icon-action{
  position:absolute;
  top:2px;
  right:8px;
  width:30px;
  height:30px;
  border:1px solid var(--line);
  background:#fff;
  border-radius:8px;
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:0;
  color:var(--sub);
  z-index:2;
}
.icon-action:hover{
  border-color:#cbd5e1;
  color:var(--text);
  box-shadow:0 2px 10px rgba(15,23,42,.06);
}
.icon-action:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.icon-action svg{width:18px;height:18px;fill:currentColor}
.upload-file-item.flash-ok{
  border-color:#22c55e;
  background:#f0fdf4;
  box-shadow:0 0 0 2px rgba(34,197,94,.22);
  transition:border-color .35s ease, box-shadow .35s ease, background-color .35s ease;
}
.upload-file-item .flash-ok-badge{
  position:absolute;
  right:8px;
  top:8px;
  font-size:12px;
  line-height:1;
  color:#15803d;
  background:#dcfce7;
  border:1px solid #86efac;
  border-radius:999px;
  padding:4px 8px;
  opacity:0;
  transform:translateY(-4px);
  pointer-events:none;
}
.upload-file-item.flash-ok .flash-ok-badge{
  opacity:1;
  transform:translateY(0);
  transition:opacity .2s ease, transform .2s ease;
}
.employee-archive-panel .card-panel-title{
  color:#0f172a;
}
.employee-archive-panel .field-label{
  color:#334155;
}
.employee-archive-panel .table-shell thead th{
  color:#475569;
}
.employee-archive-panel .table-shell tbody td{
  color:#1e293b;
}
.employee-archive-panel .msg{
  color:#475569;
}
.login-fields .msg{min-height:20px;line-height:20px}
.login-fields .msg.err{color:#b91c1c}
.login-fields .msg.ok{color:#6b7280}
.shortcut-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;margin-top:10px}
.shortcut-item{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:#fff;text-decoration:none;color:var(--text);font-size:14px;font-weight:600;transition:background .15s,border-color .15s}
.shortcut-item:hover{background:#f8fbff;border-color:#bfdbfe}
.shortcut-ico{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:#eff6ff;font-size:18px}
.calendar-title{font-weight:700;color:var(--text);margin-bottom:8px}
.calendar-weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:4px;font-size:12px;color:var(--sub);text-align:center}
.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.calendar-cell{min-height:36px;display:flex;align-items:center;justify-content:center;border-radius:8px;border:1px solid var(--line);font-size:13px;background:#fff}
.calendar-cell.muted{border:none;background:transparent}
.calendar-cell.today{background:#eff6ff;border-color:#93c5fd;font-weight:800;color:var(--primary)}
.perm-group{margin-top:12px;border:1px solid var(--line);border-radius:10px;padding:12px;background:#fafbfc;width:100%;align-self:stretch}
.perm-group-title{font-weight:700;margin-bottom:8px;font-size:14px;color:var(--text)}
.perm-list{display:flex;flex-direction:column;gap:6px}
.perm-row{
  align-items:center !important;
  padding:6px 8px;
  border-radius:8px;
  transition:background-color .15s ease;
}
.perm-row:hover{background:#f8fafc}
.perm-row input{margin-top:0}
.perm-row span{line-height:20px}
.perm-check{
  width:16px;
  height:16px;
  margin:0;
  border:1px solid #cbd5e1;
  border-radius:4px;
  background:#fff;
  accent-color:var(--primary);
  vertical-align:middle;
  flex:0 0 16px;
}
.perm-check:focus-visible{
  outline:2px solid rgba(37,99,235,.28);
  outline-offset:1px;
}
.perm-matrix{display:flex;flex-direction:column;gap:6px}
.perm-matrix-row{
  display:grid;
  grid-template-columns:minmax(180px,1fr) 80px 80px;
  gap:8px;
  align-items:center;
  padding:6px 8px;
  border-radius:8px;
  transition:background-color .15s ease;
}
.perm-matrix-row:nth-child(even){background:#fff}
.perm-matrix-row:not(.perm-matrix-head):hover{background:#f8fafc}
.perm-matrix-head{
  background:#f1f5f9;
  font-size:12px;
  color:var(--sub);
  font-weight:600;
}
.perm-col-field{min-width:0}
.perm-col-action{display:flex;justify-content:center}
.perm-cell-check{display:inline-flex;align-items:center;justify-content:center}
.perm-cell-na{color:#94a3b8}
@media (max-width:768px){
  .field-inline-action{gap:6px}
  .btn.btn-mini{min-width:42px}
  .perm-matrix-row{grid-template-columns:minmax(140px,1fr) 64px 64px}
}
.modal-hd .modal-title{flex:1;min-width:0}
.anomaly-link{color:var(--primary);text-decoration:none}
.anomaly-link:hover{text-decoration:underline}

/* ===== 全局 H5 适配（所有页面通用） ===== */
@media (max-width:900px){
  .header-inner{
    padding:8px 10px;
    align-items:flex-start;
  }
  .header-left{
    min-width:0;
    flex:1 1 auto;
  }
  .header-right{
    flex:0 0 auto;
    align-self:center;
  }
  .content{
    padding:10px 10px 18px;
  }
  .card{
    border-radius:10px;
    padding:10px;
  }
  .card-hd{
    align-items:flex-start;
    flex-wrap:wrap;
    gap:8px;
  }
  .card-hd .row{
    margin-left:0;
    width:100%;
    justify-content:flex-start;
  }
  .row{
    gap:6px;
  }
  .btn{
    height:40px;
    line-height:38px;
  }
}

@media (max-width:768px){
  /* 工具条与筛选项：改为单列可操作，不再横向挤压 */
  .toolbar-wrap,
  .toolbar-main,
  .toolbar-advanced,
  .toolbar-advanced-row,
  .filters,
  .page-toolbar{
    width:100%;
  }
  .toolbar-main,
  .toolbar-advanced-row,
  .filters,
  .page-toolbar{
    flex-wrap:wrap !important;
    justify-content:flex-start !important;
    overflow:visible !important;
  }
  .toolbar-main .input,
  .toolbar-main select,
  .filters .input,
  .filters select,
  .page-toolbar .input,
  .page-toolbar select,
  .filter-date{
    flex:1 1 100% !important;
    max-width:none !important;
    min-width:0 !important;
    width:100% !important;
  }
  .filter-label{
    min-width:0;
    width:100%;
    text-align:left;
  }
  .filter-sep{
    display:none;
  }
  .toolbar-main .btn,
  .filters .btn,
  .page-toolbar .btn{
    flex:1 1 calc(50% - 6px);
    min-width:0;
  }

  /* 表格容器：横向可滚动，关键操作不被裁切 */
  .table-shell{
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
  }
  .table-shell table{
    min-width:720px;
  }
  .table-actions{
    flex-wrap:nowrap;
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
  }
  .table-actions .btn{
    flex:0 0 auto;
  }

  /* 弹窗：手机全屏化，避免底部按钮看不到 */
  .modal-mask{
    padding:0;
    align-items:stretch;
    justify-content:stretch;
  }
  .modal,
  .modal.modal-lg,
  .modal.modal-md{
    width:100% !important;
    max-width:none !important;
    max-height:none !important;
    height:100vh;
    border-radius:0;
    border-left:none;
    border-right:none;
  }
  .modal-hd{
    position:sticky;
    top:0;
    z-index:3;
    background:#fff;
  }
  .modal-bd{
    padding:10px;
  }

  /* 表单网格统一单列，防止字段“看不到” */
  .form-grid{
    grid-template-columns:1fr !important;
    gap:8px;
  }
  .field-inline-action{
    flex-wrap:wrap;
  }
  .field-inline-action .btn{
    min-width:42px;
  }

  /* 登录页在手机下只保留核心卡片，避免双栏信息干扰操作 */
  .login-panel{
    grid-template-columns:1fr !important;
    gap:10px;
  }
  .login-brand{
    display:none;
  }
}

/* ===== 页面级 H5 精修：员工主档 ===== */
@media (max-width:768px){
  .page-employee-manage .toolbar-main .btn{
    flex:1 1 calc(50% - 6px);
  }
  .page-employee-manage .toolbar-main #btnQuery,
  .page-employee-manage .toolbar-main #btnOpenCreate{
    flex:1 1 100%;
  }
  .page-employee-manage .toolbar-advanced{
    padding:8px;
  }
  .page-employee-manage .toolbar-advanced-row{
    gap:6px;
  }
  .page-employee-manage #employeeEditorMask .modal-hd{
    padding:10px;
  }
  .page-employee-manage #employeeEditorMask .modal-hd .row{
    width:100%;
    margin-left:0;
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:8px;
  }
  .page-employee-manage #employeeEditorMask .modal-hd .row .btn{
    width:100%;
    min-width:0;
  }
  .page-employee-manage #employeeEditorMask .modal-bd{
    padding-bottom:18px;
  }
  .page-employee-manage .upload-files-row{
    flex-direction:column;
  }
  .page-employee-manage .upload-file-item{
    width:100%;
    min-width:0;
  }
}

/* ===== 页面级 H5 精修：账号与角色 ===== */
@media (max-width:768px){
  .page-admin-users .page-toolbar{
    gap:8px;
  }
  .page-admin-users .page-toolbar .input,
  .page-admin-users .page-toolbar select,
  .page-admin-users .page-toolbar .btn{
    flex:1 1 100%;
    width:100%;
    min-width:0;
    max-width:none;
  }
  .page-admin-users .card-hd .row{
    width:100%;
  }
  .page-admin-users .table-shell table{
    min-width:640px;
  }
}

/* ===== 页面级 H5 精修：审计日志 ===== */
@media (max-width:768px){
  .page-admin-audit .card-hd .row{
    width:100%;
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:8px;
  }
  .page-admin-audit .card-hd .row .btn{
    width:100%;
    min-width:0;
  }
  .page-admin-audit .filters{
    gap:8px;
  }
  .page-admin-audit .filters .msg{
    width:100%;
  }
  .page-admin-audit #btnQuery{
    width:100%;
    flex:1 1 100%;
  }
  .page-admin-audit .row.space-between{
    flex-direction:column;
    align-items:stretch;
    gap:8px;
  }
  .page-admin-audit .row.space-between > .row{
    width:100%;
    display:grid;
    grid-template-columns:1fr 90px 1fr;
    gap:8px;
  }
  .page-admin-audit .row.space-between > .row .btn,
  .page-admin-audit .row.space-between > .row .input{
    width:100%;
    min-width:0;
  }
}
