
/* ============================================================
   正彤智护定位系统 — V4.0 浅灰主题
   设计规范：明亮B端 · WCAG AA · 浅灰 × 橙黄品牌色
   背景：#F5F7FA  表格：#FFFFFF  边框：#E0E0E0
   主色：#CC4422  强调：#FFD700
   ============================================================ */

:root {
  --brand: #CC4422;
  --brand-hover: #FFB74D;
  --brand-dark: #CC4422;
  --accent: #FFD700;
  --accent-hover: #FFC107;
  --bg-deep: #F5F7FA;
  --bg-dark: #FFFFFF;
  --bg-card: #FFFFFF;
  --bg-card-hover: #F8F9FB;
  --bg-elevated: #F5F7FA;
  --bg-input: #F5F7FA;
  --text-white: #222222;
  --text-primary: #333333;
  --text-secondary: #555555;
  --text-muted: #666666;
  --text-dim: #999999;
  --border: #E0E0E0;
  --border-light: #C8C8C8;
  --border-focus: #CC4422;
  --divider: #DDDDDD;
  --shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
  --shadow-md: 0 4px 16px rgba(0,0,0,0.06);
  --shadow-lg: 0 8px 32px rgba(0,0,0,0.10);
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 14px;
  --header-h: 56px;
  --sidebar-w: 250px;
  --right-panel-w: 25%;
  --toolbar-h: 44px;
  --footer-h: 28px;
}

* { margin:0; padding:0; box-sizing:border-box; }

html, body {
  margin:0;
  padding:0;
  width:100%;
  height:100%;
  overflow:hidden;
  font-family: -apple-system,"Microsoft YaHei","PingFang SC","Helvetica Neue",sans-serif;
  font-size:14px;
  line-height:1.5;
  color:#333333;
  -webkit-font-smoothing:antialiased;
}
body {
  background: #F5F7FA;
  background: #F5F7FA;
}
input, select, textarea, button { font-family:inherit; font-size:inherit; outline:none; }

::-webkit-scrollbar { width:4px; height:4px; }
::-webkit-scrollbar-track { background:transparent; }
::-webkit-scrollbar-thumb { background:var(--border); border-radius:3px; }
::-webkit-scrollbar-thumb:hover { background:var(--border-light); }

/* =============================
   2. 登录页
   ============================= */
/* 登录页顶部导航栏 */
.top-nav,
.login-topnav {
  position:fixed;
  top:0; left:0; right:0;
  z-index:99999;
  padding:16px 24px;
  display:flex;
  justify-content:center;
  pointer-events:none;
}
.topnav-items {
  display:flex;
  gap:56px;
  pointer-events:auto;
}
.topnav-link {
  color:#FFFFFF;
  font-size:15px;
  font-weight:600;
  text-decoration:none;
  white-space:nowrap;
  transition:none;
  position:relative;
  letter-spacing:0.5px;
  text-shadow:0 1px 2px rgba(0,0,0,0.2);
}
.topnav-link::after {
  content: "";
  position:absolute;
  bottom:-4px;
  left:0; right:0;
  height:2px;
  background:var(--accent);
  border-radius:1px;
  transform:scaleX(0);
  ;
}
.topnav-link:hover {
  color:#FFFFFF;
  text-shadow:0 0 14px rgba(255,165,0,0.35);
}
.topnav-link:hover::after {
  transform:scaleX(1);
}

/* 顶部导航别名 */
.header-nav{
  position:fixed;
  top:0;
  left:0;
  right:0;
  z-index:99999;
}

/* 公众号二维码弹窗 */
/* 公众号二维码缩略 - 顶部导航悬浮工具提示 */
.qr-link {
  position:relative;
  display:inline-flex;
  align-items:center;
  cursor:pointer;
}
.qr-thumb {
  width:26px;
  height:26px;
  border-radius:4px;
  object-fit:cover;
  
}
.qr-link:hover .qr-thumb {
  transform:scale(1.05);
}
.qr-tooltip {
  position:absolute;
  bottom:-12px;
  left:50%;
  transform:translate(-50%,100%) scale(0.9);
  opacity:0;
  pointer-events:none;
  ;
  z-index:1000;
}
.qr-link:hover .qr-tooltip {
  opacity:1;
  pointer-events:auto;
  transform:translate(-50%,100%) scale(1);
}
.qr-tooltip img {
  width:180px;
  height:180px;
  border-radius:8px;
  border:2px solid rgba(255,255,255,0.3);
  box-shadow:0 8px 24px rgba(0,0,0,0.4);
  display:block;
}
.qr-tooltip-text {
  display:block;
  text-align:center;
  color:rgba(255,255,255,0.9);
  font-size:11px;
  margin-top:6px;
  white-space:nowrap;
}

#loginOverlay { display:none;
  position:fixed; inset:0;
  background: linear-gradient(rgba(11,17,32,0.35), rgba(11,17,32,0.35)), url('/login-bg.jpg') no-repeat center center / cover;
  z-index:99999;
}
.login-overlay-bg {
  position:fixed; inset:0;
  background: #0b1120 url('\''\\'\'''\''/login-bg.jpg'\''\\'\'''\'') no-repeat center center / cover;
  pointer-events:none;
}
.login-overlay-bg::after {
  content: "";
  position:absolute; inset:0;
  background: rgba(11,17,32,0.35);
  pointer-events:none;
}

.login-box {
  position:fixed;
  top:50%; left:50%;
  transform:translate(-50%,-50%);
  z-index:100;
  width:400px;
  max-width:92vw;
  max-height:96vh;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  background:rgba(25,55,90,0.85);
  backdrop-filter:blur(20px);
  -webkit-backdrop-filter:blur(20px);
  border:1px solid rgba(100,190,255,0.18);
  border-radius:var(--radius-lg);
  box-shadow:0 8px 32px rgba(0,20,60,0.12), 0 0 60px rgba(60,150,255,0.05);
  padding-bottom:15px;
}
.login-box::before {
  content: "";
  position:absolute; top:0; left:0; right:0;
  height:3px;
  background:linear-gradient(90deg, var(--brand), var(--accent));
  z-index:1;
}

.login-header {
  text-align:center;
  padding:32px 32px 0;
}
.login-header .login-logo {
  width:56px; height:56px;
  border-radius:12px;
  object-fit:cover;
  margin-bottom:12px;
}
.login-header h2, .h2-title {
  color:#FFFFFF;
  font-size:20px;
  font-weight:600;
  letter-spacing:0.5px;
  margin-bottom:8px;
}
.login-header .login-subtitle, .sub-title {
  color:#64748b;
  font-size:13px;
  margin-bottom:0;
}
.login-header .login-subtitle strong {
  color:var(--accent);
  font-weight:600;
}

.login-body {
  padding:24px 32px 16px;
}

.login-field { margin-bottom:18px; }
.login-field label {
  display:block;
  color:#64748b;
  font-size:13px;
  font-weight:500;
  margin-bottom:6px;
}
.login-field input {
  width:100%;
  padding:10px 14px;
  background:var(--bg-input);
  border:1px solid var(--border);
  border-radius:var(--radius-md);
  color:#333333;
  font-size:14px;
  ;
}
.login-field input::placeholder { color:#94a3b8; }
/* 密码框显示/隐藏图标 */
.pwd-wrap {
  position: relative;
  display: block;
}
.pwd-wrap .field-input {
  padding-right: 40px;
}
.pwd-eye {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  cursor: pointer;
  font-size: 18px;
  user-select: none;
  opacity: 0.6;
  transition: opacity 0.2s;
  line-height: 1;
  z-index: 2;
}
.pwd-eye:hover {
  opacity: 1;
}

.login-field input:focus {
  border-color:var(--border-focus);
  box-shadow:0 0 0 3px rgba(245,158,11,0.15);
}

.check-row, .login-check-row {
  display:flex;
  align-items:center;
  gap:34px;
  margin-bottom:20px;
  margin-top:8px;
}
.check-row, .login-check-row .check-spacer {
  flex:1;
}
.check-label {
  display:flex;
  align-items:center;
  gap:6px;
  color:#64748b;
  font-size:13px;
  cursor:pointer;
  user-select:none;
}
.check-label input[type="checkbox"] {
  accent-color:var(--brand);
  width:15px; height:15px;
  cursor:pointer;
}

.forgot-link {
  color:#64748b;
  font-size:12px;
  cursor:pointer;
  text-decoration:none;
  white-space:nowrap;
  
}
.forgot-link:hover {
  color:var(--accent);
}
.check-label {
  display:flex;
  align-items:center;
  gap:6px;
  color:#64748b;
  font-size:13px;
  cursor:pointer;
  user-select:none;
}
.check-label input[type="checkbox"] {
  accent-color:var(--brand);
  width:14px; height:14px;
}

.login-btn {
  width:100%;
  padding:12px;
  background:var(--brand);
  border:none;
  border-radius:var(--radius-md);
  color:#1539BB;
  font-size:16px;
  font-weight:700;
  cursor:pointer;
  letter-spacing:0;
  transition:none, transform 0.12s, box-shadow 0.2s;
  position:relative;
  overflow:hidden;
}
.login-btn:hover { opacity:0.92; box-shadow:0 0 20px rgba(217,119,6,0.2); }
.login-btn:active { transform:scale(0.98); }
.login-btn:disabled { opacity:0.35; cursor:not-allowed; }
.login-btn::after {
  content: "";
  position:absolute; inset:0;
  background:linear-gradient(135deg, transparent 40%, rgba(255,255,255,0.08) 50%, transparent 60%);
  
}
.login-btn:hover::after { transform:translateX(100%); }

.login-err {
  text-align:center;
  color:#ef4444;
  font-size:13px;
  min-height:22px;
  margin-top:10px;
}




.login-footer {
  color:#FFFFFF;
  text-align:center;
  padding:6px 0 0;
  margin-top:-10px;
}
.contact-line {
  display:flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  font-size:12px;
  color:#FFFFFF;
  flex-wrap:wrap;
  line-height:1.6;
}
.contact-line .ci { white-space:nowrap; }
.contact-line .cd { color:#FFFFFF; }
.contact-line .cl {
  color:var(--accent);
  text-decoration:none;
  transition:none;
}
.contact-line .cl:hover { opacity:0.8; text-decoration:underline; }

.f-line { color:#FFFFFF; }
.login-footer .f-line a { color:#FFFFFF; }
.login-footer .footer-line {
  white-space:nowrap;
  color:#FFFFFF;
  line-height:1.5;
}
.login-footer .dot {
  color:#FFFFFF;
  margin:0 8px;
  user-select:none;
}

/* =============================
   3. 应用布局
   ============================= */
#app {
  display:none;
  position:relative;
  height:100vh;
  min-height:0;
  width:100%;
  flex-direction:column;
  overflow:hidden;
}

.app-header {
  height:var(--header-h); min-height:var(--header-h); flex-shrink:0;
  background:#1539BB;
  border-bottom:1px solid #1539BB;
  box-shadow:0 2px 8px rgba(0,0,0,.18);
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:0 16px;
  z-index:100;
}
.header-left { display:flex; align-items:center; gap:10px; }
.logo-img { width:30px; height:30px; border-radius:8px; object-fit:cover; background:#fff; padding:2px; box-sizing:border-box; box-shadow:0 1px 3px rgba(0,0,0,.15); }
.sys-name { font-size:16px; font-weight:600; color:#333333; letter-spacing:0.3px; }
.sys-name .accent { color:var(--accent); }

.header-info {
  display:flex; align-items:center; gap:10px;
  font-size:12px; color:#555555;
  flex-wrap:wrap;
  justify-content:center;
}
.header-info .info-item { white-space:nowrap; }
.header-info .link-url { color:var(--accent); text-decoration:none; }
.header-info .link-url:hover { text-decoration:underline; }
.header-info .divider { width:1px; height:12px; background:var(--border); }

.app-userinfo { display:flex; align-items:center; gap:6px; font-size:12px; color:#555555; }

.app-main {
  flex:1 1 auto;
  display:flex;
  min-height:0;
  overflow:hidden;
}

/* =============================
   4. 侧栏（扁平化）
   ============================= */
.app-sidebar {
  width:var(--sidebar-w); min-width:var(--sidebar-w);
  background:#FFFFFF;
  border-right:1px solid #E0E0E0;
  display:flex; flex-direction:column;
  overflow:hidden;
}
.sidebar-scroll {
  flex:1; overflow-y:auto; overflow-x:hidden;
  padding:0 0 28px 0;
  scrollbar-width:thin;
}
.sidebar-scroll::-webkit-scrollbar{width:6px}
.sidebar-scroll::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}

.sidebar-group-label {
  padding:10px 16px 4px;
  font-size:11px;
  color:#888888;
  text-transform:uppercase;
  letter-spacing:1px;
  font-weight:500;
}

/* 侧栏顶级标签（地图监控） */
.mgmt-tab {
  display:flex;
  align-items:center;
  gap:10px;
  padding:11px 16px;
  cursor:pointer;
  font-size:13px;
  color:#333333;
  transition:none;
  user-select:none;
  margin:2px 8px;
  border-radius:6px;
}
.mgmt-tab:hover { background:#F5F7FA; color:#CC4422; }


/* 侧栏管理按钮（项目管理/班组/人员/区域） */
.sub-tab-btn {
  display:block;
  width:calc(100% - 16px);
  margin:2px 8px;
  padding:10px 16px;
  border:none;
  background:none;
  color:#444444;
  font-size:13px;
  text-align:left;
  cursor:pointer;
  border-radius:6px;
  transition:none;
}
.sub-tab-btn:hover { background:#F5F7FA; color:#CC4422; }
.sub-tab-btn.active { background:rgba(255,165,0,0.12); color:#CC4422; font-weight:600; }

/* =============================
   5. 主内容区
   ============================= */
.app-content { flex:1; display:flex; flex-direction:column; overflow:hidden; min-width:0; }

.content-toolbar {
  height:var(--toolbar-h); min-height:var(--toolbar-h);
  display:flex; align-items:center; gap:10px;
  padding:0 16px;
  background:#FFFFFF;
  border-bottom:1px solid #E0E0E0;
}
.content-toolbar .filter-label {
  font-size:12px; font-weight:600; color:var(--text-muted); white-space:nowrap;
}
.content-toolbar select {
  padding:6px 28px 6px 10px;
  background:var(--bg-input);
  border:1px solid var(--border);
  border-radius:var(--radius-md);
  color:#333333;
  font-size:12px;
  cursor:pointer;
  appearance:none;
  -webkit-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='\''\\'\'''\''http://www.w3.org/2000/svg'\''\\'\'''\'' width='\''\\'\'''\''10'\''\\'\'''\'' height='\''\\'\'''\''6'\''\\'\'''\''%3E%3Cpath d='\''\\'\'''\''M1 1l4 4 4-4'\''\\'\'''\'' stroke='\''\\'\'''\''%2394a3b8'\''\\'\'''\'' fill='\''\\'\'''\''none'\''\\'\'''\'' stroke-width='\''\\'\'''\''1.5'\''\\'\'''\''/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 8px center;
  min-width:120px;
  transition:border-color 0.15s;
}
.content-toolbar select:hover { border-color:var(--border-light); }
.content-toolbar select:focus { border-color:var(--border-focus); }
.content-toolbar .btn {
  display:inline-flex; align-items:center; gap:5px;
  padding:6px 14px;
  background:var(--bg-elevated);
  border:1px solid var(--border);
  border-radius:var(--radius-md);
  color:#555555;
  font-size:12px;
  cursor:pointer;
  white-space:nowrap;
  transition:none;
}
.content-toolbar .btn:hover { background:var(--bg-card-hover); border-color:var(--border-light); color:#333333; }
.content-toolbar .btn-primary {
  background:linear-gradient(135deg, var(--brand), var(--brand-dark));
  border:none; color:#fff;
}
.content-toolbar .btn-primary:hover { opacity:0.9; }
.content-toolbar .spacer { flex:1; }

.content-body { flex:1; overflow:hidden; display:flex; position:relative; }
.mgmt-view { flex:1; display:none; flex-direction:column; overflow:hidden; }
#dashboardView { flex:1; display:flex; flex-direction:column; overflow:hidden; }
/* 管理表格区域增加半透深底保证文字清晰可读 */
.data-table th { background:#F0F7FF !important; color:#333333 !important; font-weight:600; }
/* ===== 数据表格增强 ===== */
.data-table thead th {
  position: sticky;
  top: 0;
  z-index: 10;
  background: #F5F7FA;
  background: #F5F7FA;
  box-shadow: 0 1px 3px rgba(0,0,0,0.06);
  color: #333333;
  font-weight: 600;
  border-bottom: 2px solid #E0E0E0;
}
.data-table tbody tr:nth-child(even) {
  background: rgba(255,255,255,0.02);
}
.data-table tbody tr:hover {
  background: rgba(217,119,6,0.12) !important;
}

.data-table td { background:#FFFFFF; color:#333333; border:1px solid #E0E0E0; }
.data-table tbody tr:nth-child(even) td { background:#F8FAFF; color:#333333; }
.data-table tbody tr:hover td { background:rgba(255,165,0,0.08) !important; }

/* =============================
   6. 右侧预警面板
   ============================= */
.right-alert-panel {
  width:var(--right-panel-w); min-width:var(--right-panel-w);
  background:#FFFFFF;
  border-left:1px solid #E0E0E0;
  display:flex; flex-direction:column; overflow:hidden;
}
.right-alert-panel .panel-header {
  padding:10px 14px;
  border-bottom:1px solid var(--border);
  display:flex; align-items:center; justify-content:space-between;
}
.right-alert-panel .panel-header h4 {
  color:#333333; font-size:13px; font-weight:600;
  display:flex; align-items:center; gap:6px;
}
.right-alert-panel .panel-header .count {
  background:#ef4444; color:#fff;
  font-size:11px; padding:1px 7px; border-radius:10px; min-width:20px; text-align:center;
}
.right-alert-panel .panel-body { flex:1; overflow-y:auto; padding:10px 12px; }

.alert-item {
  background:#FFFFFF;
  border:1px solid #E0E0E0;
  border-left:3px solid #CC4422;
  border-radius:var(--radius-md);
  padding:9px 11px;
  margin-bottom:8px;
}
.alert-item:hover { background:#F5FCFF; }
.alert-item.pending {
  border-left-color:#ef4444;
  background:rgba(239,68,68,0.06);
}
.alert-item .alert-title {
  color:#333333; font-size:13px; font-weight:500;
  margin-bottom:3px; display:flex; justify-content:space-between; align-items:center;
}
.alert-item .alert-meta { color:var(--text-muted); font-size:11px; }
.alert-empty { text-align:center; padding:30px 14px; color:#666666; font-size:13px; }

/* =============================
   7. 地图面板
   ============================= */
.content-body{position:relative}

/* 首页统计横排 */
.statGridRow{display:flex!important;gap:10px;flex-direction:row!important}
.statGridRow .stat-card{flex:1;min-width:0;margin:0!important;background:rgba(255,255,255,.92)!important;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-radius:12px;padding:12px 14px!important;box-shadow:0 2px 8px rgba(0,0,0,.06)!important;border:1px solid #eef1f6!important}
.statGridRow .stat-card .num{font-size:22px!important;font-weight:800;font-family:Consolas,monospace}
.statGridRow .stat-card .lbl{font-size:12px!important;color:#4E5969!important}
.statGridRow .stat-card .num.zero{color:#cbd5e1!important}

.map-panel { flex:1; position:relative; overflow:hidden; }
#mapCanvas { width:100%; height:100%; display:block; }

.map-left-panel {
  position:absolute; left:12px; top:12px;
  width:320px;
  background:rgba(255,255,255,0.95);
  border:1px solid var(--border);
  border-radius:var(--radius-md);
  padding:12px;
  z-index:10;
  backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
}

.stat-grid-title {
  font-size:11px; color:#888888;
  text-transform:uppercase; letter-spacing:1px;
  margin-bottom:6px; font-weight:500;
}

.stat-grid { display:grid; grid-template-columns:1fr 1fr 1fr 1fr; gap:6px; margin-bottom:12px; }
.stat-item .ic { font-size:16px; margin-bottom:2px; line-height:1; }
.stat-item {
  text-align:center; padding:10px 4px;
  background:#FFFFFF;
  border-radius:var(--radius-md);
  border:1px solid #E0E0E0;
  box-shadow:0 2px 8px rgba(0,0,0,0.06);
}

.stat-item .num { font-size:24px; font-weight:700; line-height:1.2; color:#1a1a2e; }
.stat-item .num.green { color:#16a34a; }
.stat-item .num.orange { color:var(--accent); }
.stat-item .num.red { color:#ef4444; }
.stat-item .lbl { font-size:11px; color:#64748b; margin-top:3px; }

.section-title { font-size:12px; color:#555555; font-weight:500; margin-bottom:4px; padding-bottom:4px; border-bottom:1px solid var(--border); }

.team-list { max-height:160px; overflow-y:auto; }
.team-item { padding:4px 6px; border-radius:var(--radius-sm); cursor:pointer; font-size:12px; display:flex; justify-content:space-between; transition:background 0.15s; }
.team-item:hover { background:rgba(255,255,255,0.06); }
.team-item .team-name { color:#555555; }
.team-item .cnt { color:var(--text-muted); }

.map-popup {
  position:absolute;
  background:var(--bg-elevated);
  border:1px solid var(--border-light);
  border-radius:var(--radius-md);
  padding:12px;
  min-width:200px;
  z-index:100;
  box-shadow:var(--shadow-lg);
  display:none;
}
.map-popup .popup-row { display:flex; justify-content:space-between; padding:3px 0; font-size:13px; border-bottom:1px solid rgba(42,74,111,0.3); }
.map-popup .popup-row:last-child { border-bottom:none; }
.map-popup .popup-label { color:var(--text-muted); }
.map-popup .popup-val { color:#333333; font-weight:500; }
.map-popup .action-btn { padding:4px 12px; background:var(--brand); border:none; border-radius:var(--radius-sm); color:#fff; font-size:12px; cursor:pointer; }

.map-switch {
  position:absolute; bottom:10px; right:10px; z-index:10;
  display:flex; gap:3px;
}
.map-switch button {
  padding:4px 10px;
  background:var(--bg-card);
  border:1px solid var(--border);
  border-radius:var(--radius-sm);
  color:#555555;
  font-size:11px; cursor:pointer; transition:none;
}
.map-switch button:hover { border-color:var(--border-light); color:#333333; }
.map-switch button.active { background:var(--brand); border-color:var(--brand); color:#fff; }

/* =============================
   8. 管理视图
   ============================= */
.mgmt-view { display:none; flex:1; flex-direction:column; }
.mgmt-view.active { display:flex; }

.view-header {
  display:flex; justify-content:space-between; align-items:center;
  padding:8px 16px;
  border-bottom:1px solid #E0E0E0;
  background:#FFFFFF;
}
.view-header h3 { font-size:15px; color:#333333; font-weight:600; }
.view-header .actions { display:flex; gap:8px; }
.view-header .btn-add, .btn-add {
  display:inline-flex; align-items:center; gap:4px;
  padding:6px 14px;
  background:linear-gradient(135deg, var(--brand), var(--brand-dark));
  border:none; border-radius:var(--radius-md);
  color:#fff; font-size:13px; font-weight:500; cursor:pointer;
  transition:none, transform 0.1s;
}
.btn-add:hover { opacity:0.9; }
.btn-add:active { transform:scale(0.98); }

.view-body { flex:1; overflow-y:auto; padding:12px 16px; min-height:0; scrollbar-width:thin; scrollbar-color:#64748b #f5f7fa; }
/* 表格区域滚动条（班组/工人/项目管理通用） */
.view-body::-webkit-scrollbar { width:8px; height:8px; }
.view-body::-webkit-scrollbar-track { background:#f5f7fa; border-radius:4px; }
.view-body::-webkit-scrollbar-thumb { background:#cbd5e1; border-radius:4px; border:2px solid #f5f7fa; }
.view-body::-webkit-scrollbar-thumb:hover { background:#1a237e; }
.view-body::-webkit-scrollbar-corner { background:#f5f7fa; }
.data-table { width:100%; border-collapse:separate; border-spacing:0; font-size:13px; border:1px solid #E0E0E0; border-radius:8px; overflow:hidden; }
.data-table thead { position:sticky; top:0; z-index:3; }
.data-table th {
  padding:10px 8px; text-align:left;
  border:1px solid #E0E0E0;
  color:#333333; font-weight:600;
  white-space:nowrap; font-size:12px;
  background:#F0F7FF;
  position:sticky; top:0; z-index:3;
}
.data-table td {
  padding:9px 8px;
  border:1px solid #E0E0E0;
  vertical-align:middle; color:#333333;
}
.data-table tbody tr:nth-child(even) td {
  background:rgba(255,255,255,0.025);
}
.data-table tbody tr:hover td {
  background:rgba(255,255,255,0.04);
}

.status-badge { display:inline-block; padding:2px 8px; border-radius:10px; font-size:11px; font-weight:500; }
.status-badge.active { background:rgba(16,185,129,0.12); color:#16a34a; }
.status-badge.disabled { background:rgba(239,68,68,0.12); color:#ef4444; }
.status-badge.inactive { background:rgba(100,116,139,0.15); color:var(--text-muted); }

.action-btn {
  padding:3px 8px;
  border:1px solid var(--border);
  border-radius:var(--radius-sm);
  background:transparent;
  color:#555555;
  font-size:12px; cursor:pointer; margin:0 2px;
  transition:none;
}
.action-btn:hover { background:var(--bg-card-hover); border-color:var(--border-light); color:#333333; }
.action-btn.danger:hover { background:rgba(239,68,68,0.15); border-color:#ef4444; color:#ef4444; }
.action-btn.primary { background:var(--brand); border-color:var(--brand); color:#fff; }
.action-btn.primary:hover { opacity:0.9; }

.empty-tip { text-align:center; padding:60px 20px; color:#999999; font-size:14px; }

/* 管理视图内容区滚动容器 */
.mgmt-view .view-body {
  overflow-y:auto;
  position:relative;
  min-height:0;
}

/* 操作列按钮组 */
.action-btn-group {
  display:flex; gap:4px; flex-wrap:wrap;
}

/* =============================
   9. 模态框
   ============================= */
.modal-overlay {
  position:fixed; inset:0;
  background:rgba(0,0,0,0.45);
  display:flex; align-items:center; justify-content:center;
  z-index:2000;
}
.modal-box {
  background:#FFFFFF;
  border:1px solid #E0E0E0;
  border-radius:var(--radius-lg);
  padding:28px 30px;
  width:520px; max-width:92vw; max-height:80vh;
  overflow-y:auto;
  box-shadow:0 16px 48px rgba(0,0,0,0.5);
  position:relative;
}
.modal-box::before {
  content: "";
  height:3px;
  background:linear-gradient(90deg, var(--brand), var(--accent));
  border-radius:var(--radius-lg) var(--radius-lg) 0 0;
}
.modal-box h3 { margin-bottom:18px; font-size:16px; color:#0e2a8c; font-weight:700; }
.modal-box .form-row { margin-bottom:16px; }
.modal-box label {
  display:block; color:#555555;
  font-size:13px; margin-bottom:5px; font-weight:500;
}
.modal-box .required {
  color:#ef4444; font-weight:600; margin-left:2px;
  font-size:13px;
}
.modal-box .btn-date-pick {
  width:34px; height:34px;
  border:1px solid var(--border-light);
  border-radius:var(--radius-sm);
  background:var(--bg-elevated);
  color:#333333;
  cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  transition:background 0.15s, border-color 0.15s;
  font-size:14px;
  flex-shrink:0;
}
.modal-box .btn-date-pick:hover {
  background:var(--brand);
  border-color:var(--brand);
}
.modal-box input, .modal-box select, .modal-box textarea {
  width:100%; padding:9px 12px;
  background:var(--bg-input);
  border:1px solid var(--border);
  border-radius:var(--radius-md);
  color:#333333;
  font-size:13px;
  transition:border-color 0.2s;
}
.modal-box input:focus, .modal-box select:focus { border-color:var(--border-focus); box-shadow:0 0 0 3px rgba(245,158,11,0.15); }
.modal-box .form-row-inline { display:flex; gap:10px; }
.modal-box .form-row-inline > * { flex:1; }
.modal-box textarea { resize:vertical; min-height:50px; }
.modal-box .form-row-inline { display:flex; gap:8px; }
.modal-box .form-row-inline > * { flex:1; }
.modal-box .modal-actions {
  display:flex; gap:8px; justify-content:flex-end;
  margin-top:16px; padding-top:14px;
  border-top:1px solid var(--border);
}
.modal-box .btn-cancel {
  padding:7px 18px;
  background:transparent; border:1px solid var(--border);
  border-radius:var(--radius-md);
  color:#555555; font-size:13px; cursor:pointer;
  transition:none;
}
.modal-box .btn-cancel:hover { border-color:var(--border-light); color:#333333; }
.modal-box .btn-submit {
  padding:7px 22px;
  background:linear-gradient(135deg, var(--brand), var(--brand-dark));
  border:none; border-radius:var(--radius-md);
  color:#fff; font-size:13px; font-weight:500; cursor:pointer;
  transition:none;
}
.modal-box .btn-submit:hover { opacity:0.9; }

/* =============================
   10. 页脚
   ============================= */
.footer {
  height:var(--footer-h); min-height:var(--footer-h); flex-shrink:0;
  display:flex; align-items:center; justify-content:center; gap:12px;
  font-size:11px; color:#999999;
  border-top:1px solid #E0E0E0;
  background:#F5F7FA;
}
.footer .sep { color:var(--border); }

/* =============================
   可点击网址链接
   ============================= */
.link-url {
  color:#555555;
  text-decoration:none;
  
}
.link-url:hover {
  color:var(--accent);
  text-decoration:underline;
}

/* =============================
   11. 响应式
   ============================= */

/* 忘记密码弹窗 */
.forgot-modal-overlay {
  position:fixed; top:0; left:0; right:0; bottom:0;
  z-index:100000;
  display:flex;
  align-items:center;
  justify-content:center;
  background:rgba(0,0,0,0.5);
  backdrop-filter:blur(4px);
}
.forgot-modal-box {
  background:#ffffff;
  border:1px solid var(--border);
  border-radius:16px;
  padding:40px 48px;
  text-align:center;
  min-width:360px;
  max-width:420px;
  box-shadow:0 20px 60px rgba(0,0,0,0.4);
  animation:modalFadeIn 0.2s ease;
}
@keyframes modalFadeIn {
  from { opacity:0; transform:scale(0.95) translateY(10px); }
  to   { opacity:1; transform:scale(1) translateY(0); }
}
.forgot-modal-icon {
  font-size:40px;
  margin-bottom:12px;
}
.forgot-modal-title {
  font-size:20px;
  font-weight:600;
  color:#1a1a2e;
  margin-bottom:12px;
}
.forgot-modal-text {
  font-size:14px;
  color:#333333;
  margin-bottom:8px;
  line-height:1.6;
}
.forgot-modal-phone {
  font-size:18px;
  font-weight:600;
  color:var(--accent);
  margin-bottom:28px;
  line-height:1.5;
}
.forgot-modal-btn {
  display:inline-block;
  padding:12px 48px;
  background:linear-gradient(135deg, var(--brand), var(--brand-dark));
  border:none;
  border-radius:8px;
  color:#fff;
  font-size:15px;
  font-weight:600;
  cursor:pointer;
  transition:none;
  letter-spacing:2px;
}
.forgot-modal-btn:hover {
  opacity:0.85;
}

/* 登录按钮下方隐藏错误区域的垂直适配 */
.login-err {
  min-height:20px;
  font-size:13px;
  line-height:1.4;
}

@media (max-width:1200px) {
  .right-alert-panel { width:240px; min-width:240px; }
}
@media (max-width:900px) {
  .right-alert-panel { display:none; }
  /* R11 窄屏侧边栏：完整显示菜单（不再折叠为图标条） */
  .app-sidebar { width:240px; min-width:240px; max-width:78vw; height:100vh; overflow:hidden; }
  .app-sidebar .sidebar-group-label { display:block; font-size:11px !important; color:#94a3b8 !important; padding:10px 12px 4px !important; font-weight:600 !important; }
  .app-sidebar .sub-tab-btn,
  .app-sidebar .mgmt-tab {
    justify-content:flex-start !important;
    width:auto !important;
    margin:2px 8px !important;
    padding:10px 12px !important;
    font-size:13px !important;
    line-height:1.5 !important;
    white-space:nowrap !important;
    display:flex !important;
    align-items:center !important;
    gap:10px !important;
  }
  .app-sidebar .sub-tab-btn span:not(.icon),
  .app-sidebar .mgmt-tab span:not(.icon) { display:inline !important; }
  .app-sidebar .sub-tab-btn .icon,
  .app-sidebar .mgmt-tab .icon { margin:0 !important; }
  .app-sidebar .sidebar-scroll { flex:1 !important; overflow-y:auto !important; overflow-x:hidden !important; padding-bottom:24px !important; }
  #sidebarBrandM { display:block !important; }
  .header-info .hide-mobile { display:none; }
}





/* V2.1 扩展: 工序验收 & 进度管理 */
.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);z-index:1000;display:flex;align-items:center;justify-content:center}
.modal-box{background:#fff;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,0.15);max-height:80vh;display:flex;flex-direction:column}
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #eee}
.modal-header h3{margin:0;font-size:16px}
.modal-close{cursor:pointer;font-size:18px;color:#999;padding:4px}
.modal-close:hover{color:#333}
.modal-body{padding:20px;overflow-y:auto;flex:1}
.modal-footer{padding:12px 20px;border-top:1px solid #eee;display:flex;justify-content:flex-end;gap:8px}
.form-row{margin-bottom:12px}
.form-row label{display:block;margin-bottom:4px;font-size:13px;color:#666;font-weight:500}
.form-row input,.form-row select,.form-row textarea{width:100%;padding:8px 10px;border:1px solid #ddd;border-radius:4px;font-size:14px;box-sizing:border-box}
.form-row input:focus,.form-row select:focus,.form-row textarea:focus{outline:none;border-color:#CC4422;box-shadow:0 0 0 2px rgba(255,140,0,0.15)}
.btn-primary{background:#1539BB!important;color:#fff!important;border:none!important}
.btn-primary:hover{background:#0e2a8c!important}


/* V2.1 扩展: 工序验收 & 进度管理 */
.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);z-index:1000;display:flex;align-items:center;justify-content:center}
.modal-box{background:#fff;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,0.15);max-height:80vh;display:flex;flex-direction:column}
.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #eee}
.modal-header h3{margin:0;font-size:16px}
.modal-close{cursor:pointer;font-size:18px;color:#999;padding:4px}
.modal-close:hover{color:#333}
.modal-body{padding:20px;overflow-y:auto;flex:1}
.modal-footer{padding:12px 20px;border-top:1px solid #eee;display:flex;justify-content:flex-end;gap:8px}
.form-row{margin-bottom:12px}
.form-row label{display:block;margin-bottom:4px;font-size:13px;color:#666;font-weight:500}
.form-row input,.form-row select,.form-row textarea{width:100%;padding:8px 10px;border:1px solid #ddd;border-radius:4px;font-size:14px;box-sizing:border-box}
.form-row input:focus,.form-row select:focus,.form-row textarea:focus{outline:none;border-color:#CC4422;box-shadow:0 0 0 2px rgba(255,140,0,0.15)}
.btn-primary{background:#1539BB!important;color:#fff!important;border:none!important}
.btn-primary:hover{background:#0e2a8c!important}


.quick-actions { display:grid; grid-template-columns:1fr 1fr; gap:4px; margin-top:8px; }
.quick-btn { display:flex; align-items:center; justify-content:center; gap:3px; padding:6px 4px; background:#FFFFFF; border:1px solid #E0E0E0; border-radius:6px; font-size:11px; color:#444444; cursor:pointer; }
.quick-btn:hover { background:rgba(255,165,0,0.08); border-color:#CC4422; color:#CC4422; }

.oplog-item { display:flex; align-items:flex-start; gap:8px; padding:8px 0; border-bottom:1px solid #F0F0F0; font-size:12px; }
.oplog-item:last-child { border-bottom:none; }
.oplog-icon { width:24px; height:24px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:12px; flex-shrink:0; margin-top:1px; }
.oplog-icon.add { background:#e8f5e9; color:#2e7d32; }
.oplog-icon.edit { background:#e3f2fd; color:#1565c0; }
.oplog-icon.delete { background:#fce4ec; color:#c62828; }
.oplog-icon.login { background:#fff3e0; color:#e65100; }
.oplog-body { flex:1; min-width:0; }
.oplog-body .text { color:#333; line-height:1.4; }
.oplog-body .time { color:#999; font-size:11px; margin-top:2px; }
.oplog-empty { text-align:center; padding:20px 14px; color:#999; font-size:12px; }


/* Progress section */
.progress-section { margin:6px 0 4px; padding:4px 0; }
.progress-label { font-size:11px; color:#888; font-weight:500; margin-bottom:4px; }
.prog-row { display:flex; align-items:center; gap:5px; padding:3px 0; font-size:11px; }
.prog-row .pn { flex:1; color:#555; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.prog-track { flex:1; height:5px; background:#eee; border-radius:3px; overflow:hidden; }
.prog-fill { height:100%; border-radius:3px; }
.prog-fill.done { background:#4caf50; }
.prog-fill.half { background:#CC4422; }
.prog-fill.started { background:#2196f3; }
.prog-fill.pending { background:#e0e0e0; }
.prog-row .pp { color:#999; font-size:10px; min-width:26px; text-align:right; }


/* Alert color bars */
.alert-item { position:relative; padding:8px 8px 8px 14px; border-bottom:1px solid #f0f0f0; font-size:12px; }
.alert-item:last-child { border-bottom:none; }
.alert-item::before { content:''; position:absolute; left:0; top:4px; bottom:4px; width:3px; border-radius:2px; }
.alert-item.critical::before { background:#e53935; }
.alert-item.warning::before { background:#fb8c00; }
.alert-item.info::before { background:#43a047; }
.todo-section { border-top:1px solid #e0e0e0; margin-top:8px; padding:0 12px; }
.todo-item { padding:7px 0; border-bottom:1px solid #f0f0f0; font-size:12px; display:flex; align-items:flex-start; gap:6px; }
.todo-item:last-child { border-bottom:none; }
.todo-cb { width:16px; height:16px; border:2px solid #ccc; border-radius:3px; cursor:pointer; flex-shrink:0; margin-top:1px; display:inline-flex; align-items:center; justify-content:center; font-size:10px; }
.todo-cb:hover { border-color:#CC4422; }
.todo-cb.done { background:#4caf50; border-color:#4caf50; color:#fff; }
.todo-body { flex:1; min-width:0; }
.todo-body .tt { color:#333; }
.todo-body .tt-done { text-decoration:line-through; color:#999; }
.todo-body .tm { font-size:10px; color:#999; margin-top:1px; }
.todo-add-row { display:flex; gap:4px; padding:6px 0; border-bottom:1px solid #eee; }
.todo-add-row input { flex:1; border:1px solid #ddd; border-radius:4px; padding:4px 8px; font-size:12px; outline:none; }
.todo-add-row input:focus { border-color:#CC4422; }
.todo-add-row button { background:#CC4422; color:#fff; border:none; border-radius:4px; padding:4px 10px; font-size:12px; cursor:pointer; }
.todo-add-row button:hover { background:#e69500; }
.todo-h { border-left:2px solid #e53935; padding-left:6px; }
.todo-header { display:flex; align-items:center; justify-content:space-between; padding:8px 0 4px; }
.todo-header-title { font-size:13px; font-weight:500; color:#444; }
.todo-header-count { font-size:11px; color:#999; }


/* Modal improvements */
.modal-box{min-width:480px;max-width:560px}
.modal-box .form-row{margin-bottom:10px}
.modal-box .form-row label{font-size:13px;color:#555;margin-bottom:3px;display:block}
.modal-box .form-row input,.modal-box .form-row select{width:100%;padding:7px 10px;border:1px solid #ddd;border-radius:6px;font-size:13px;outline:none;box-sizing:border-box}
.modal-box .form-row input:focus,.modal-box .form-row select:focus{border-color:#CC4422;box-shadow:0 0 0 2px rgba(255,165,0,0.15)}
.modal-box h3{font-size:16px;color:#1a1a2e;margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid #eee}
.modal-box .form-row-inline{display:flex;gap:10px;margin-bottom:10px}
.modal-box .modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px;padding-top:12px;border-top:1px solid #eee}
.modal-box .btn-submit{background:#1539BB;color:#fff;border:none;border-radius:6px;padding:8px 24px;font-size:13px;font-weight:500;cursor:pointer}
.modal-box .btn-submit:hover{background:#0e2a8c}
.modal-box .btn-cancel{background:#f5f5f5;color:#666;border:1px solid #ddd;border-radius:6px;padding:7px 20px;font-size:13px;cursor:pointer}
.modal-box .btn-cancel:hover{background:#eee}
.modal-box .required{color:#e53935}


/* Dynamic status badges */
.status-badge.planned { background:#fff3e0; color:#e65100; }
.status-badge.done { background:#e3f2fd; color:#1565c0; }


/

/* ===== Worker status badges ===== */
.status-online { display:inline-block; padding:2px 10px; border-radius:3px; font-size:12px; font-weight:500; background:#f6ffed; color:#16a34a; }
.status-off { display:inline-block; padding:2px 10px; border-radius:3px; font-size:12px; font-weight:500; background:#f5f5f5; color:#999; }
.status-leave { display:inline-block; padding:2px 10px; border-radius:3px; font-size:12px; font-weight:500; background:#fff7e6; color:#CC4422; }

/* Prevent canvas overlap in mgmt views */
.mgmt-view.active { position:relative; z-index:1; }
#mapCanvas { z-index:0; }
.mgmt-toolbar input, .mgmt-toolbar select { position:relative; z-index:2; }

/* ===== Team/Worker/Project Styles ===== */
.mgmt-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:12px;}
.toolbar-left{display:flex;gap:8px;align-items:center;}.toolbar-right{display:flex;gap:6px;align-items:center;}
.toolbar-right input,.toolbar-right select{padding:6px 10px;border:1px solid #d9d9d9;border-radius:4px;font-size:12px;outline:none;}
.toolbar-right input:focus,.toolbar-right select:focus{border-color:#1539BB;box-shadow:0 0 0 2px rgba(24,144,255,0.15);}
.btn-add{background:#1539BB;color:#fff;border:none;border-radius:4px;padding:7px 16px;font-size:13px;font-weight:500;cursor:pointer;transition:background .2s;}
.btn-add:hover{background:#0e2a8c;}
.btn-query{background:#fff;color:#1539BB;border:1px solid #1539BB;border-radius:4px;padding:7px 16px;font-size:13px;cursor:pointer;transition:all .2s;}
.btn-query:hover{background:#EEF2FC;}
.btn-danger{background:#e53935;color:#fff;border:none;border-radius:4px;padding:7px 14px;font-size:13px;cursor:pointer;transition:background .2s;}
.btn-danger:hover{background:#c62828;}
.sortable{cursor:pointer;user-select:none;transition:background .15s;}.sortable:hover{background:#f0f2f5;}
.sort-icon{font-size:10px;color:#aaa;margin-left:2px;}
.tag{display:inline-block;padding:2px 8px;border-radius:3px;font-size:11px;font-weight:500;}
.tag-blue{background:#e6f7ff;color:#1539BB;}.tag-green{background:#f6ffed;color:#16a34a;}.tag-orange{background:#fff7e6;color:#CC4422;}
.team-cb{width:16px;height:16px;cursor:pointer;accent-color:#1539BB;}
.action-btn{background:transparent;border:1px solid #d9d9d9;border-radius:4px;padding:4px 10px;font-size:12px;cursor:pointer;color:#666;margin-right:4px;transition:all .15s;}
.action-btn:hover{color:#1539BB;border-color:#1539BB;}
.action-btn.danger{color:#dc2626;border-color:#ffccc7;}.action-btn.danger:hover{color:#fff;background:#dc2626;border-color:#dc2626;}
.toast{position:fixed;top:24px;left:50%;transform:translateX(-50%);z-index:10001;padding:10px 24px;border-radius:6px;font-size:13px;font-weight:500;box-shadow:0 4px 12px rgba(0,0,0,0.15);display:none;}
.toast.success{background:#16a34a;color:#fff;}.toast.error{background:#dc2626;color:#fff;}.toast.info{background:#1539BB;color:#fff;}
.confirm-overlay{position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.45);display:flex;align-items:center;justify-content:center;}
.confirm-box{background:#fff;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.1);padding:24px 32px;max-width:400px;width:90%;text-align:center;}
.confirm-msg{font-size:14px;color:#333;line-height:1.6;margin:0 0 20px 0;}
.confirm-actions{display:flex;justify-content:center;gap:12px;}
.confirm-btn{border:none;border-radius:4px;padding:8px 24px;font-size:13px;font-weight:500;cursor:pointer;}.confirm-btn.cancel{background:#f0f0f0;color:#666;}.confirm-btn.cancel:hover{background:#e0e0e0;}.confirm-btn.ok{background:#CC4422;color:#fff;}.confirm-btn.ok:hover{background:#e87a0b;}



.status-online{display:inline-block;padding:2px 10px;border-radius:3px;font-size:12px;font-weight:500;background:#f6ffed;color:#16a34a;}
.status-off{display:inline-block;padding:2px 10px;border-radius:3px;font-size:12px;font-weight:500;background:#f5f5f5;color:#999;}
.status-leave{display:inline-block;padding:2px 10px;border-radius:3px;font-size:12px;font-weight:500;background:#fff7e6;color:#CC4422;}

/* Team/Worker/Project Styles */
.mgmt-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:12px;}
.toolbar-left{display:flex;gap:8px;align-items:center;}.toolbar-right{display:flex;gap:6px;align-items:center;}
.toolbar-right input,.toolbar-right select{padding:6px 10px;border:1px solid #d9d9d9;border-radius:4px;font-size:12px;outline:none;}
.toolbar-right input:focus,.toolbar-right select:focus{border-color:#1539BB;box-shadow:0 0 0 2px rgba(24,144,255,0.15);}
.btn-add{background:#1539BB;color:#fff;border:none;border-radius:4px;padding:7px 16px;font-size:13px;font-weight:500;cursor:pointer;}
.btn-add:hover{background:#0e2a8c;}
.btn-query{background:#fff;color:#1539BB;border:1px solid #1539BB;border-radius:4px;padding:7px 16px;font-size:13px;cursor:pointer;}
.btn-query:hover{background:#EEF2FC;}
.sortable{cursor:pointer;user-select:none;}.sortable:hover{background:#f0f2f5;}
.sort-icon{font-size:10px;color:#aaa;margin-left:2px;}
.tag{display:inline-block;padding:2px 8px;border-radius:3px;font-size:11px;font-weight:500;}
.tag-blue{background:#e6f7ff;color:#1539BB;}.tag-green{background:#f6ffed;color:#16a34a;}.tag-orange{background:#fff7e6;color:#CC4422;}
.team-cb{width:16px;height:16px;cursor:pointer;accent-color:#1539BB;}
.action-btn{background:transparent;border:1px solid #d9d9d9;border-radius:4px;padding:4px 10px;font-size:12px;cursor:pointer;color:#666;margin-right:4px;}
.action-btn:hover{color:#1539BB;border-color:#1539BB;}
.action-btn.danger{color:#dc2626;border-color:#ffccc7;}.action-btn.danger:hover{color:#fff;background:#dc2626;border-color:#dc2626;}
.toast{position:fixed;top:24px;left:50%;transform:translateX(-50%);z-index:10001;padding:10px 24px;border-radius:6px;font-size:13px;font-weight:500;box-shadow:0 4px 12px rgba(0,0,0,0.15);display:none;}
.toast.success{background:#16a34a;color:#fff;}.toast.error{background:#dc2626;color:#fff;}.toast.info{background:#1539BB;color:#fff;}
.confirm-overlay{position:fixed;inset:0;z-index:10000;background:rgba(0,0,0,0.45);display:flex;align-items:center;justify-content:center;}
.confirm-box{background:#fff;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,0.1);padding:24px 32px;max-width:400px;width:90%;text-align:center;}
.confirm-msg{font-size:14px;color:#333;line-height:1.6;margin:0 0 20px;}
.confirm-actions{display:flex;justify-content:center;gap:12px;}
.confirm-btn{border:none;border-radius:4px;padding:8px 24px;font-size:13px;font-weight:500;cursor:pointer;}
.confirm-btn.cancel{background:#f0f0f0;color:#666;}.confirm-btn.ok{background:#CC4422;color:#fff;}



.status-online{display:inline-block;padding:2px 10px;border-radius:3px;font-size:12px;font-weight:500;background:#f6ffed;color:#16a34a;}
.status-off{display:inline-block;padding:2px 10px;border-radius:3px;font-size:12px;font-weight:500;background:#f5f5f5;color:#999;}
.status-leave{display:inline-block;padding:2px 10px;border-radius:3px;font-size:12px;font-weight:500;background:#fff7e6;color:#CC4422;}

@keyframes shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-6px)}40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(4px)}}

/* ===== 搜索输入框 ===== */
.search-wrap { position: relative; display: inline-block; }
.search-input {
  padding: 8px 12px;
  border: 1px solid #d1d5db;
  border-radius: 6px;
  font-size: 13px;
  width: 180px;
  background: #fff;
  transition: all 0.2s;
  outline: none;
}
.search-input:focus {
  border-color: #d97706;
  box-shadow: 0 0 0 3px rgba(245,158,11,.15);
}
.search-dropdown {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 0 0 8px 8px;
  box-shadow: 0 4px 12px rgba(0,0,0,.1);
  max-height: 200px;
  overflow-y: auto;
  z-index: 100;
  display: none;
}
.search-dropdown-item {
  padding: 8px 12px;
  font-size: 13px;
  cursor: pointer;
  border-bottom: 1px solid #f3f4f6;
  display: flex;
  justify-content: space-between;
}
.search-dropdown-item:hover {
  transition: all 0.15s;
}
.search-dropdown-item:active {
  transform: scale(0.95);
  opacity: 0.85;
}




/* === Step 2: Tech background (dynamic) === */
.map-panel {
  position: relative;
  overflow: hidden;
}
.map-panel::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  background:
    linear-gradient(135deg, rgba(26,86,219,0.08) 0%, rgba(99,102,241,0.04) 50%, rgba(139,92,246,0.06) 100%),
    linear-gradient(rgba(26,86,219,0.08) 1px, transparent 1px),
    linear-gradient(90deg, rgba(26,86,219,0.08) 1px, transparent 1px);
  background-size: 100% 100%, 40px 40px, 40px 40px;
  pointer-events: none;
}
#mapCanvas {
  position: relative;
  z-index: 1;
}

/* === Step 3: Team panel (click stats → expand) === */
.team-expand-panel {
  position: absolute;
  left: 20px;
  top: 200px;
  width: 280px;
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 8px 24px rgba(0,0,0,.12);
  z-index: 10;
  overflow: hidden;
  transition: all .3s ease;
  border: 1px solid #e5e7eb;
}
.team-expand-panel.collapsed {
  max-height: 0;
  opacity: 0;
  transform: translateY(-10px);
  border: none;
  box-shadow: none;
  pointer-events: none;
}
.team-expand-panel:not(.collapsed) {
  max-height: 500px;
  opacity: 1;
}
.team-expand-panel .tep-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 12px 14px;
  background: linear-gradient(135deg, #d97706, #d97706);
  color: #fff;
  font-weight: 600;
  font-size: 14px;
}
.team-expand-panel .tep-close {
  cursor: pointer;
  font-size: 18px;
  line-height: 1;
  opacity: .8;
}
.team-expand-panel .tep-close:hover { opacity: 1; }
.team-expand-panel .tep-body { padding: 8px 0; max-height: 350px; overflow-y: auto; }
.team-expand-panel .tep-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 14px;
  cursor: pointer;
  transition: background .15s;
  border-left: 3px solid transparent;
}
.team-expand-panel .tep-item:hover { background: #fefce8; border-left-color: #d97706; }
.team-expand-panel .tep-item .ti-name { font-size: 14px; color: #333; }
.team-expand-panel .tep-item .ti-count { font-size: 12px; color: #6b7280; }
.team-expand-panel .tep-item .ti-count em { font-style: normal; color: #d97706; font-weight: 600; }
.team-expand-panel .tep-empty {
  padding: 20px;
  text-align: center;
  color: #9ca3af;
  font-size: 13px;
}

.search-wrap{position:relative;display:inline-block}
.search-input{padding:8px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;width:180px;background:#fff;transition:all .2s;outline:none}
.search-input:focus{border-color:#d97706;box-shadow:0 0 0 3px rgba(245,158,11,.15)}
.search-input::placeholder{color:#9ca3af}
.search-suggest{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #e5e7eb;border-radius:0 0 8px 8px;box-shadow:0 4px 12px rgba(0,0,0,.1);max-height:200px;overflow-y:auto;z-index:100;display:none}
.search-suggest .s-item{padding:8px 12px;font-size:13px;cursor:pointer;border-bottom:1px solid #f3f4f6;display:flex;justify-content:space-between}
.search-suggest .s-item:last-child{border:none}
.search-suggest .s-item:hover{background:#fefce8}
.search-suggest .s-item .s-tag{font-size:11px;color:#d97706;background:#fef3c7;padding:1px 6px;border-radius:4px}
#btnFilter:active{transform:scale(.95);opacity:.85}

/* === Project management enhancements === */
.btn-add-project { transition: all .2s; }
.btn-add-project:hover { transform: translateY(-1px); box-shadow: 0 2px 8px rgba(245,158,11,.3); }
.action-btn.success { background: #16a34a; color: #fff; }
.action-btn.success:hover { background: #059669; box-shadow: 0 1px 4px rgba(16,185,129,.4); }
.action-btn.warning { background: #d97706; color: #fff; }
.action-btn.warning:hover { background: #d97706; box-shadow: 0 1px 4px rgba(245,158,11,.4); }
.action-cell { white-space: nowrap; display: flex; gap: 4px; flex-wrap: wrap; }

/* Fixed pagination */
.project-pagination, #projectPagination {
  position: fixed;
  right: 20px;
  bottom: 20px;
  z-index: 100;
  background: #fff;
  border-radius: 8px;
  padding: 10px 14px;
  box-shadow: 0 4px 16px rgba(0,0,0,.12);
  border: 1px solid #e5e7eb;
  display: flex;
  align-items: center;
  gap: 6px;
  max-width: 90vw;
}

/* === Project management enhancements === */
.btn-add-project { transition: all .2s; }
.btn-add-project:hover { transform: translateY(-1px); box-shadow: 0 2px 8px rgba(245,158,11,.3); }
.action-btn.success { background: #16a34a; color: #fff; }
.action-btn.success:hover { background: #059669; }
.action-btn.warning { background: #d97706; color: #fff; }
.action-btn.warning:hover { background: #d97706; }
.action-cell { white-space: nowrap; display: flex; gap: 4px; flex-wrap: wrap; }
.project-pagination, #projectPagination {
  position: fixed; right: 20px; bottom: 20px; z-index: 100;
  background: #fff; border-radius: 8px; padding: 10px 14px;
  box-shadow: 0 4px 16px rgba(0,0,0,.12); border: 1px solid #e5e7eb;
  display: flex; align-items: center; gap: 6px; max-width: 90vw;
}


.pagination-fixed, #projectPagination, #teamPagination, #workerPagination, #zonePagination, #docPagination {
  display: block;
}
.pagination-fixed:empty, #projectPagination:empty, #teamPagination:empty, #workerPagination:empty {
  display: none !important;
}

/* Scrollbar for management views */
.mgmt-view { overflow-y: auto !important; }
.mgmt-view::-webkit-scrollbar { width: 6px; }
.mgmt-view::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 3px; }
.mgmt-view::-webkit-scrollbar-thumb:hover { background: #9ca3af; }



/* Team table scrollable area */
.team-table-scroll { max-height: calc(100vh - 220px); overflow-y: auto; }
.team-table-scroll::-webkit-scrollbar { width: 6px; }
.team-table-scroll::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 3px; }
.team-table-scroll::-webkit-scrollbar-thumb:hover { background: #9ca3af; }




/* === Team management filter bar === */
#teamMgmtView .view-header { display: flex; align-items: center; gap: 8px; padding: 10px 14px; flex-wrap: wrap; }
#teamMgmtView .filter-bar { display: flex; align-items: center; gap: 8px; flex: 1; }
#teamMgmtView .filter-bar .btn-query { padding: 5px 14px; background: #1539BB; color: #fff; border: none; border-radius: 4px; cursor: pointer; font-size: 13px; white-space: nowrap; }
#teamMgmtView .filter-bar .btn-query:hover { background: #0e2a8c; }
#teamMgmtView .filter-bar .btn-reset { padding: 5px 12px; background: #f3f4f6; color: #6b7280; border: 1px solid #d1d5db; border-radius: 4px; cursor: pointer; font-size: 13px; white-space: nowrap; }
#teamMgmtView .filter-bar .btn-reset:hover { background: #e5e7eb; }


/* === Pagination Ant Design Style === */
.pg-nav { display: inline-flex; align-items: center; gap: 6px; }
.pg-nav .pg-btn { width: 32px; height: 32px; padding: 0; display: inline-flex; align-items: center; justify-content: center; border: 1px solid #d9d9d9; border-radius: 4px; background: #fff; cursor: pointer; font-size: 13px; color: #333; line-height: 1; transition: all .2s; }
.pg-nav .pg-btn:hover:not(.pg-disabled):not(.pg-active) { border-color: #1539BB; color: #1539BB; }
.pg-nav .pg-btn.pg-active { background: #1539BB; border-color: #1539BB; color: #fff; font-weight: 600; cursor: default; }
.pg-nav .pg-btn.pg-disabled { background: #f5f5f5; border-color: #d9d9d9; color: #ccc; cursor: not-allowed; }
.pg-jump { width: 50px; height: 28px; text-align: center; border: 1px solid #d9d9d9; border-radius: 4px; font-size: 13px; color: #333; margin: 0 2px; outline: none; }
.pg-jump:focus { border-color: #1539BB; box-shadow: 0 0 0 2px rgba(24,144,255,.15); }
.pg-size { padding: 4px 8px; border: 1px solid #d9d9d9; border-radius: 4px; font-size: 12px; outline: none; cursor: pointer; background: #fff; min-width:90px; }
.pg-total { font-size: 13px; color: #475569; margin-right: 2px; white-space: nowrap; font-weight: 500; }
.pg-jump-wrap { display: inline-flex; align-items: center; gap: 2px; font-size: 13px; color: #475569; white-space: nowrap; }
.pagination-bar {
  position: fixed;
  right: 20px;
  bottom: 20px;
  z-index: 1000;
  display: flex;
  align-items: center;
  gap: 8px;
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 8px;
  padding: 10px 14px;
  box-shadow: 0 4px 16px rgba(0,0,0,.12);
  max-width: 90vw;
  flex-wrap: wrap;
}

/* === Trajectory overlay === */
#trajOverlay { position: fixed; top:0; left:0; width:100%; height:100%; z-index:10000; background: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center; }
/* === Worker table horizontal scroll === */
.worker-table-scroll { max-height: calc(100vh - 240px); overflow-y: auto; overflow-x: auto; }
.worker-table-scroll::-webkit-scrollbar { width: 6px; height: 6px; }
.worker-table-scroll::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 3px; }
.worker-table-scroll::-webkit-scrollbar-thumb:hover { background: #9ca3af; }

/* === Dashboard/Map Enhancements === */.map-panel{position:relative;flex:1;display:flex;min-height:0;background:#eef2f6;overflow:hidden;}.map-panel::before{display:none;}.map-panel>canvas{position:relative;z-index:2;}.team-expand-panel{position:absolute;bottom:0;left:0;right:0;background:rgba(15,23,42,0.92);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-top:1px solid rgba(24,144,255,0.3);transition:transform 0.3s ease,opacity 0.3s ease;z-index:10;max-height:300px;overflow:hidden;}.team-expand-panel.collapsed{transform:translateY(100%);opacity:0;max-height:0;}.team-expand-panel .tep-header{display:flex;justify-content:space-between;align-items:center;padding:8px 14px;border-bottom:1px solid rgba(255,255,255,0.1);}.team-expand-panel .tep-header span{color:#e2e8f0;font-size:13px;font-weight:600;}.team-expand-panel .tep-close{color:#94a3b8;cursor:pointer;font-size:18px;padding:0 4px;}.team-expand-panel .tep-body{padding:6px 14px 10px;max-height:240px;overflow-y:auto;color:#64748b;font-size:12px;}.team-expand-panel .tep-empty{text-align:center;padding:16px;color:#64748b;font-size:12px;}.team-item:hover{background:rgba(24,144,255,0.06);}.team-detail-btn:hover{background:#e6f7ff;}/* === Column Sorting === */.data-table th{cursor:pointer;user-select:none;position:relative;padding-right:18px!important;}.data-table th .sort-icon{position:absolute;right:4px;top:50%;transform:translateY(-50%);font-size:10px;color:#bbb;opacity:0.4;transition:opacity 0.2s,color 0.2s;}.data-table th:hover .sort-icon{opacity:0.8;}.data-table th .sort-icon.sorted{opacity:1;color:#1539BB;}.data-table th .sort-icon.asc::after{content:'\25B2';}.data-table th .sort-icon.desc::after{content:'\25BC';}.data-table.sorting{opacity:0.7;pointer-events:none;transition:opacity 0.2s;}
/* === Dashboard/Map Enhancements === */
.map-panel{position:relative;flex:1;display:flex;min-height:0;background:#eef2f6;overflow:hidden;}
.map-panel::before{display:none;}
.map-panel>canvas{position:relative;z-index:2;}
.team-expand-panel{position:absolute;bottom:0;left:0;right:0;background:rgba(15,23,42,0.92);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-top:1px solid rgba(24,144,255,0.3);transition:transform 0.3s ease,opacity 0.3s ease;z-index:10;max-height:300px;overflow:hidden;}
.team-expand-panel.collapsed{transform:translateY(100%);opacity:0;max-height:0;}
.team-expand-panel .tep-header{display:flex;justify-content:space-between;align-items:center;padding:8px 14px;border-bottom:1px solid rgba(255,255,255,0.1);}
.team-expand-panel .tep-header span{color:#e2e8f0;font-size:13px;font-weight:600;}
.team-expand-panel .tep-close{color:#94a3b8;cursor:pointer;font-size:18px;padding:0 4px;}
.team-expand-panel .tep-body{padding:6px 14px 10px;max-height:240px;overflow-y:auto;color:#64748b;font-size:12px;}
.team-expand-panel .tep-empty{text-align:center;padding:16px;color:#64748b;font-size:12px;}
.team-item:hover{background:rgba(24,144,255,0.06);}
.team-detail-btn:hover{background:#e6f7ff;}
/* === Column Sorting === */
.data-table th{cursor:pointer;user-select:none;position:relative;padding-right:18px !important;}
.data-table th .sort-icon{position:absolute;right:4px;top:50%;transform:translateY(-50%);font-size:10px;color:#bbb;opacity:0.4;transition:opacity 0.2s,color 0.2s;}
.data-table th:hover .sort-icon{opacity:0.8;}
.data-table th .sort-icon.sorted{opacity:1;color:#1539BB;}
.data-table th .sort-icon.asc::after{content:'\25B2';}
.data-table th .sort-icon.desc::after{content:'\25BC';}
.data-table.sorting{opacity:0.7;pointer-events:none;transition:opacity 0.2s;}
/* === Team Mgmt Layout Optimization V4.1 === */
#teamMgmtView .view-header{display:flex!important;align-items:center!important;gap:12px!important;padding:10px 16px!important;flex-wrap:wrap!important}
#teamMgmtView .filter-bar{display:flex!important;align-items:center!important;gap:8px!important;flex:1!important;min-width:0!important}
#teamMgmtView .filter-bar input[type="text"]{width:170px!important;height:32px!important;padding:4px 10px!important;font-size:13px!important;border:1px solid #d1d5db!important;border-radius:4px!important;box-sizing:border-box!important;line-height:1.4!important}
#teamMgmtView .filter-bar select{width:130px!important;height:32px!important;padding:4px 8px!important;font-size:13px!important;border:1px solid #d1d5db!important;border-radius:4px!important;box-sizing:border-box!important}
#teamMgmtView .filter-bar .btn-query{height:32px!important;padding:0 16px!important;background:#1539BB!important;color:#fff!important;border:none!important;border-radius:4px!important;cursor:pointer!important;font-size:13px!important;white-space:nowrap!important;line-height:32px!important}
#teamMgmtView .filter-bar .btn-query:hover{background:#0e2a8c!important}
#teamMgmtView .filter-bar .btn-reset{height:32px!important;padding:0 14px!important;background:#f3f4f6!important;color:#6b7280!important;border:1px solid #d1d5db!important;border-radius:4px!important;cursor:pointer!important;font-size:13px!important;white-space:nowrap!important;line-height:30px!important}
#teamMgmtView .filter-bar .btn-reset:hover{background:#e5e7eb!important}
#teamMgmtView .actions .btn-add{height:32px!important;padding:0 18px!important;background:#1539BB!important;color:#fff!important;border:none!important;border-radius:4px!important;cursor:pointer!important;font-size:13px!important;font-weight:600!important;line-height:32px!important;white-space:nowrap!important}
#teamMgmtView .actions .btn-add:hover{background:#0e2a8c!important}
#teamMgmtView .view-body{padding:8px 16px 60px!important;overflow-y:auto!important;flex:1!important}
#teamMgmtView .data-table{table-layout:fixed!important;width:100%!important}
#teamMgmtView .data-table thead th{background:#f5f7fa!important;color:#333!important;font-weight:600!important;font-size:13px!important;border-bottom:2px solid #e5e7eb!important;white-space:nowrap!important}
#teamMgmtView .data-table th:nth-child(1),#teamMgmtView .data-table td:nth-child(1){width:18%}
#teamMgmtView .data-table th:nth-child(2),#teamMgmtView .data-table td:nth-child(2){width:11%}
#teamMgmtView .data-table th:nth-child(3),#teamMgmtView .data-table td:nth-child(3){width:12%}
#teamMgmtView .data-table th:nth-child(4),#teamMgmtView .data-table td:nth-child(4){width:14%}
#teamMgmtView .data-table th:nth-child(5),#teamMgmtView .data-table td:nth-child(5){width:10%}
#teamMgmtView .data-table th:nth-child(6),#teamMgmtView .data-table td:nth-child(6){width:8%}
#teamMgmtView .data-table th:nth-child(7){width:17%}
#teamMgmtView .data-table td:nth-child(7){width:17%}
#teamMgmtView .data-table th:nth-child(8){width:10%}
#teamMgmtView .data-table td:nth-child(8){width:10%}
#teamMgmtView .data-table td:nth-child(5){text-align:right!important;padding-right:16px!important}
#teamMgmtView .data-table td:nth-child(6){text-align:center!important}
#teamMgmtView .data-table td:nth-child(8){text-align:right!important;padding-right:10px!important}
#teamMgmtView .data-table tbody tr{height:44px!important}
#teamMgmtView .data-table tbody td{padding:8px 10px!important;font-size:13px!important;border-bottom:1px solid #f0f0f0!important;vertical-align:middle!important}
#teamMgmtView .data-table .status-badge{display:inline-block!important;padding:2px 10px!important;border-radius:10px!important;font-size:12px!important;font-weight:500!important;text-align:center!important;min-width:44px!important}
#teamMgmtView .data-table .status-badge.启用,#teamMgmtView .data-table .status-badge.在场{background:#e6fffb!important;color:#08979c!important;border:1px solid #b7eb8f!important}
#teamMgmtView .data-table .status-badge.停用,#teamMgmtView .data-table .status-badge.离场{background:#fafafa!important;color:#999!important;border:1px solid #d9d9d9!important}
#teamMgmtView .pagi-bar{justify-content:flex-end!important;padding:10px 16px!important;border-top:1px solid #e8e8e8!important;background:#fafafa!important}
#teamMgmtView .pagi-bar button{height:26px!important;min-width:32px!important;padding:0 8px!important;border-radius:3px!important}
#teamMgmtView .data-table .action-btn{padding:3px 10px!important;font-size:12px!important;border-radius:3px!important;margin-left:4px!important;margin-right:0!important}
#teamMgmtView .data-table td:nth-child(5){font-variant-numeric:tabular-nums!important;font-weight:500!important;color:#333!important}
#teamMgmtView .pagi-bar>span{font-size:12px!important;color:#666!important}

/* 项目管理分页固定在底部 */
#projectView.active {
  display: flex !important;
  flex-direction: column !important;
  height: calc(100vh - 130px) !important;
}
#projectView .view-body {
  flex: 1 !important;
  overflow-y: auto !important;
  padding-bottom: 50px !important;
}



/* ===== 新建报验弹窗 - 按钮统一样式 ===== */
#inspectionModal .modal-footer {
  gap: 16px;
  padding: 16px 20px 24px 20px;
}
#inspectionModal .modal-footer .btn-cancel {
  background: #f0f0f0;
  color: #666666;
  border: none;
  border-radius: 4px;
  padding: 8px 16px;
  font-size: 14px;
  cursor: pointer;
  transition: all 0.2s ease;
  font-weight: 400;
}
#inspectionModal .modal-footer .btn-cancel:hover {
  background: #e0e0e0;
}
#inspectionModal .modal-footer .btn-cancel:active {
  background: #d0d0d0;
  transform: scale(0.97);
}
#inspectionModal .modal-footer .btn-submit {
  background: #1539BB;
  color: #ffffff;
  border: none;
  border-radius: 4px;
  padding: 8px 16px;
  font-size: 14px;
  cursor: pointer;
  transition: all 0.2s ease;
  font-weight: 600;
}
#inspectionModal .modal-footer .btn-submit:hover {
  background: #0e2a8c;
  box-shadow: 0 2px 6px rgba(24,144,255,0.35);
}
#inspectionModal .modal-footer .btn-submit:active {
  background: #096dd9;
  transform: scale(0.97);
}


/* ===== 文档下载 - 翻页 + 滚动条 ===== */
.doc-wrap{max-width:960px;margin:0 auto;padding:16px}
.doc-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}
.doc-header h4{margin:0;font-size:16px;color:#1e293b}
.doc-refresh-btn{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:6px;padding:6px 14px;font-size:13px;cursor:pointer}
.doc-refresh-btn:hover{background:#e2e8f0}
.doc-upload-area{background:#f8fafc;border:2px dashed #d1d5db;border-radius:10px;padding:24px;margin-bottom:20px;text-align:center}
.doc-upload-label{font-size:15px;color:#475569;margin-bottom:14px;font-weight:500}
.doc-upload-btn{background:#f58220;color:#fff;border:none;padding:10px 28px;border-radius:6px;font-size:14px;cursor:pointer;font-weight:500}
.doc-upload-btn:hover{background:#e0741a}
.doc-upload-status{text-align:center;margin-bottom:16px;font-size:14px;display:none}
.doc-empty{text-align:center;padding:40px;color:#94a3b8;font-size:14px}
.doc-grid{display:flex;flex-wrap:wrap;gap:16px;padding:4px;justify-content:center}
.doc-grid::-webkit-scrollbar{width:6px}
.doc-grid::-webkit-scrollbar-track{background:transparent}
.doc-grid::-webkit-scrollbar-thumb{background:#ddd;border-radius:4px}
.doc-grid::-webkit-scrollbar-thumb:hover{background:#ccc}
.doc-card{width:260px;background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:16px;box-shadow:0 1px 3px rgba(0,0,0,0.06);display:flex;flex-direction:column}
.doc-card-top{display:flex;justify-content:space-between;align-items:start;margin-bottom:8px}
.doc-card-icon{font-size:30px}
.doc-badge-builtin{font-size:11px;background:#e0f2fe;color:#0369a1;padding:2px 10px;border-radius:10px;white-space:nowrap}
.doc-delete-btn{background:none;border:none;color:#ef4444;font-size:18px;cursor:pointer;padding:2px}
.doc-delete-btn:hover{color:#dc2626}
.doc-card-name{font-size:14px;font-weight:600;color:#1e293b;margin-bottom:4px;word-break:break-all}
.doc-card-time{font-size:12px;color:#94a3b8;margin-bottom:10px}
.doc-card-actions{margin-top:auto;display:flex;gap:8px}
.doc-download-btn{display:inline-block;background:#f58220;color:#fff;padding:7px 18px;border-radius:4px;text-decoration:none;font-size:13px;cursor:pointer}
.doc-download-btn:hover{background:#e0741a}
/* doc-grid-scroll: only applied when total > perPage */
.doc-grid.doc-grid-scroll{max-height:580px;overflow-y:auto;padding:4px}
.doc-grid.doc-grid-scroll::-webkit-scrollbar{width:6px}
.doc-grid.doc-grid-scroll::-webkit-scrollbar-track{background:transparent}
.doc-grid.doc-grid-scroll::-webkit-scrollbar-thumb{background:#ddd;border-radius:4px}
.doc-grid.doc-grid-scroll::-webkit-scrollbar-thumb:hover{background:#ccc}


/* ===== 全局弹窗按钮统一样式 ===== */
.modal-box .modal-footer {
  gap: 16px;
  padding: 16px 20px 24px 20px;
}
.modal-box .modal-footer .btn-cancel {
  background: #f0f0f0;
  color: #666666;
  border: none;
  border-radius: 4px;
  padding: 8px 16px;
  font-size: 14px;
  cursor: pointer;
  transition: all 0.2s ease;
  font-weight: 400;
}
.modal-box .modal-footer .btn-cancel:hover {
  background: #e0e0e0;
}
.modal-box .modal-footer .btn-cancel:active {
  background: #d0d0d0;
  transform: scale(0.97);
}
.modal-box .modal-footer .btn-submit {
  background: #1539BB;
  color: #ffffff;
  border: none;
  border-radius: 4px;
  padding: 8px 16px;
  font-size: 14px;
  cursor: pointer;
  transition: all 0.2s ease;
  font-weight: 600;
}
.modal-box .modal-footer .btn-submit:hover {
  background: #0e2a8c;
  box-shadow: 0 2px 6px rgba(24,144,255,0.35);
}
.modal-box .modal-footer .btn-submit:active {
  background: #096dd9;
  transform: scale(0.97);
}

/* ===== 工人管理页面样式 ===== */
.worker-table { width:100%; border-collapse:collapse; font-size:14px; background:#fff; border-radius:6px; overflow:hidden; box-shadow:0 1px 4px rgba(0,0,0,0.06); }
.worker-table thead th { padding:8px 10px; text-align:left; font-weight:600; background:#f5f5f5; border-bottom:1px solid #eee; color:#333; font-size:14px; }
.worker-table tbody tr { border-bottom:1px solid #eee; line-height:32px; transition:background 0.15s; }
.worker-table tbody tr:hover { background:#fafafa; }
.worker-table tbody td { padding:0 10px; vertical-align:middle; font-size:14px; color:#333; }
.worker-table .action-btn { display:inline-block; padding:2px 8px; border-radius:3px; font-size:13px; cursor:pointer; transition:opacity 0.15s; }
.worker-table .action-btn:hover { opacity:0.75; }
.worker-toolbar .btn { display:inline-flex; align-items:center; gap:4px; padding:5px 14px; border-radius:4px; cursor:pointer; font-size:13px; border:1px solid transparent; transition:all 0.15s; height:30px; }
.worker-toolbar .btn.btn-primary { background:#1539BB; color:#fff; border-color:#1539BB; }
.worker-toolbar .btn.btn-add { background:#16a34a; color:#fff; border-color:#16a34a; }
.worker-toolbar .btn.btn-import { background:#CC4422; color:#fff; border-color:#CC4422; }
.worker-toolbar .btn:hover { filter:brightness(1.1); }

/* ============================================================
   9. 班组管理全选/反选按钮（红底黑字）+ 首页右侧分栏（通知+预警）
   ============================================================ */
button.btn-sel{color:#fff!important}
.btn-sel{background:#dc2626;border-color:#dc2626;color:#000;font-weight:600;transition:background .15s,transform .1s}
.btn-sel:hover{background:#E63336;border-color:#E63336;color:#000}
.btn-sel:active{transform:scale(.94)}
.rp-toggles{position:absolute;top:12px;right:12px;z-index:26;display:flex;gap:10px}
.rp-toggle-btn{width:42px;height:42px;border-radius:50%;background:rgba(15,23,42,.55);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(148,163,184,.32);color:#e2e8f0;display:flex;align-items:center;justify-content:center;cursor:pointer;position:relative;transition:all .2s}
.rp-toggle-btn:hover{background:rgba(30,58,138,.78);color:#fff}
.rp-toggle-btn.on{background:#1539BB;color:#fff;border-color:#0e2a8c}
.rp-toggle-btn svg{width:20px;height:20px}
.rp-toggle-dot{position:absolute;top:-3px;right:-3px;min-width:17px;height:17px;border-radius:9px;background:#ef4444;color:#fff;font-size:10.5px;font-weight:700;line-height:17px;text-align:center;padding:0 4px;box-sizing:border-box;display:none;border:1.5px solid #fff}
.right-panel{display:none}
.right-panel.open{display:flex;animation:rpIn .28s ease}
@keyframes rpIn{from{transform:translateX(40px);opacity:0}to{transform:translateX(0);opacity:1}}
.right-panel{position:absolute;top:12px;right:12px;width:300px;max-width:330px;min-width:260px;background:rgba(255,255,255,.94);border:1px solid #E8E8E8;border-radius:12px;box-shadow:0 8px 24px rgba(15,23,42,.14);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);z-index:22;display:none;flex-direction:column;overflow:hidden;pointer-events:none}
.right-panel .rp-notices,.right-panel .rp-alerts,.right-panel .rp-header,.right-panel .rp-notices-body,.right-panel .rp-alerts-body,.right-panel .pub-btn,.right-panel .hist-btn,.right-panel .alert-flt{pointer-events:auto}
.right-panel .rp-notices{flex:0 0 60%;display:flex;flex-direction:column;overflow:hidden;border-bottom:1px solid #E8E8E8;background:#F5F7FA}
.right-panel .rp-alerts{flex:1;display:flex;flex-direction:column;overflow:hidden;background:#F5F7FA;min-height:0}
.rp-header{padding:10px 14px;border-bottom:1px solid #E8E8E8;display:flex;align-items:center;gap:8px;background:#F5F7FA;flex-shrink:0}
.rp-header h4{color:#333;font-size:13px;font-weight:600;display:flex;align-items:center;gap:6px;margin:0}
.rp-header .count{background:#ef4444;color:#fff;font-size:11px;padding:1px 7px;border-radius:10px;min-width:20px;text-align:center}
.rp-header .pub-btn{margin-left:auto;background:#1539BB;color:#fff;border:none;border-radius:6px;padding:4px 12px;font-size:12px;cursor:pointer;transition:background .15s}
.rp-header .pub-btn:hover{background:#0e2a8c}
.rp-header .hist-btn{margin-left:8px;background:#fff;color:#333;border:1px solid #E8E8E8;border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer}
.rp-header .hist-btn:hover{background:#eef2f9}
.rp-header select.alert-flt{margin-left:auto;border:1px solid #E8E8E8;border-radius:6px;padding:3px 6px;font-size:12px;background:#fff;color:#333;cursor:pointer}
.rp-notices-body{flex:1;overflow-y:auto;padding:8px 10px}
.rp-alerts-body{flex:1;overflow-y:auto;padding:8px 10px}
.rp-notice-item{background:#fff;border:1px solid #E8E8E8;border-radius:8px;padding:8px 10px;margin-bottom:8px;cursor:pointer;transition:background .15s,box-shadow .15s}
.rp-notice-item:hover{background:#eef2f9;box-shadow:0 1px 4px rgba(0,0,0,.06)}
.rp-notice-item .t{font-size:13px;font-weight:600;color:#1539BB;margin-bottom:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rp-notice-item .m{font-size:11px;color:#888}
@media (max-width:1200px){.right-panel{width:240px;min-width:240px;max-width:240px}}
@media (max-width:900px){.right-panel{display:none}}

/* ---- 通知按钮（项目管理/班组管理/工人管理通用）---- */
.btn-notice-pub{background:#CC4422;color:#fff;border:1px solid #CC4422;border-radius:4px;cursor:pointer;font-size:13px;transition:all .15s;line-height:1.5}
.btn-notice-pub:hover{background:#e07d00;border-color:#e07d00;color:#fff}
.btn-notice-pub:active{transform:scale(.94)}
.btn-notice-hist{background:#CCCCCC;color:#000;border:1px solid #b8b8b8;border-radius:4px;cursor:pointer;font-size:13px;transition:all .15s;line-height:1.5}
.btn-notice-hist:hover{background:#b8b8b8;color:#000}
.btn-notice-hist:active{transform:scale(.94)}
.app-header .btn-notice-pub, .app-header .btn-notice-hist{margin-left:10px;white-space:nowrap}
/* 项目管理页：项目列表工具条 */
.proj-sel-bar{display:flex;align-items:center;gap:8px;margin:10px 2px 6px;font-size:12px}
.proj-sel-bar .sel-count{color:#666;background:#fff7e6;border:1px solid #ffd591;border-radius:12px;padding:1px 10px;font-size:12px}


/* ===== R10 登录页加固 ===== */
@media (max-width:640px) {
  .login-box {
    width:92vw;
    max-height:92vh;
    overflow-y:auto;
    -webkit-overflow-scrolling:touch;
  }
  .login-body { padding:16px 22px 12px; }
}
.login-footer .f-line a {
  font-size: 16px;
  color: #b9cce6;
  font-weight: 500;
}

/* ===== R11 侧边栏窄屏加固 ===== */
@media (max-width:600px) {
  .app-sidebar { width:220px; min-width:220px; max-width:80vw; }
  #sidebarBrandM { font-size:13px !important; padding:10px 14px !important; white-space:normal !important; }
  .app-sidebar .sub-tab-btn, .app-sidebar .mgmt-tab { padding:9px 10px !important; gap:8px !important; }
}

/* R11 登录页：复选框间距兜底 */
.login-check-row .check-label { margin-right: 10px; }
.login-check-row .check-label:last-of-type { margin-right: 0; }

/* ===== R11 登录页间距适中化（松紧适度，不影响其他页面） ===== */
.login-box { padding-bottom: 10px; }
.login-header { padding: 24px 32px 0; }
.login-header .login-logo { width: 48px; height: 48px; margin-bottom: 10px; }
.login-header h2, .h2-title { margin-bottom: 0; font-size: 20px; }
.login-header .login-subtitle, .sub-title { display: none !important; }
.login-body { padding: 20px 32px 16px; }
.login-field { margin-bottom: 16px; }
.login-field input { padding: 10px 14px; }
.login-check-row { margin-top: 6px; margin-bottom: 16px; }
.login-btn { padding: 11px; font-size: 15px; }
.login-err { min-height: 18px; margin-top: 8px; }
.login-footer { padding: 6px 20px 12px; margin-top: 0; line-height: 1.9 !important; }

/* ===== R11 手机端登录页适配 ===== */
@media (max-width:900px) {
  /* 顶部导航：自动换行，不溢出屏幕 */
  .login-topnav { padding: 12px 10px; }
  .topnav-items { gap: 14px 22px; flex-wrap: wrap; justify-content: center; }
  .topnav-link { font-size: 13px; white-space: nowrap; }
  /* 复选框不折行 */
  .check-label { white-space: nowrap; }
}
@media (max-width:640px) {
  /* 登录框边距：不贴屏幕 */
  .login-box { width: 90vw; max-width: 90vw; }
  .login-header, .login-body, .login-footer { padding-left: 24px; padding-right: 24px; }
  .login-header { padding-left: 24px; padding-right: 24px; }
  .login-body { padding-left: 24px; padding-right: 24px; }
  .login-footer { padding-left: 24px; padding-right: 24px; }
}

/* ===== R11 侧边栏二级折叠菜单 ===== */
.menu-group { margin: 2px 8px; }
.menu-group-head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 12px; border-radius: 8px; cursor: pointer;
  font-size: 13.5px; font-weight: 700; color: #333;
  background: #F5F7FA; border: 1px solid #EEF0F4;
  user-select: none; margin: 3px 0;
}
.menu-group-head:hover { background: #EEF2F9; }
.menu-group-head.active { background: rgba(255,165,0,0.14); border-color: rgba(255,165,0,0.35); color: #CC4422; }
.mg-arrow { font-size: 10px; color: #999; transition: transform .15s; }
.menu-group-body { padding: 2px 0 4px 8px; }
.menu-group-body .sub-tab-btn {
  margin: 2px 2px !important;
  padding: 9px 12px 9px 18px !important;
  font-size: 13px !important;
  display: flex !important; align-items: center !important;
  gap: 10px !important; line-height: 1.5 !important; white-space: nowrap !important;
  height: auto !important; min-height: 36px;
}
.menu-group-body .sub-tab-btn.active {
  background: rgba(255,165,0,0.16) !important; color: #CC4422 !important; font-weight: 500 !important;
}
.mgmt-tab { display: flex !important; align-items: center !important; gap: 10px !important; white-space: nowrap !important; }
.sidebar-footer { flex-shrink: 0; padding: 6px 8px 10px; background: #fff; }
.sidebar-divider { height: 1px; background: #E0E0E0; margin: 2px 4px 8px; }

/* ===== R11 体验优化 ===== */
/* 文字按钮对比度 */
.btn, .action-btn, .sub-tab-btn, .link-url, .btn-link, button { color: #1f2937; }
.btn-primary, .btn-submit, .btn-add:not([style*="color:#1539BB"]) { color: #fff !important; }
.action-btn { color: #374151; }
.action-btn.danger { color: #dc2626; }

/* 表格隔行浅灰底 */
.data-table tbody tr:nth-child(even) td { background: #F8F9FB !important; }
.data-table tbody tr:hover td { background: rgba(255,165,0,.10) !important; }

/* 危险按钮红小字 */
.action-btn.danger { color: #dc2626; font-size: 12px; padding: 3px 8px; border-color: #fecaca; }
.action-btn.danger:hover { background: #fee2e2; border-color: #dc2626; }

/* 手机端表格卡片化 */
@media (max-width:768px) {
  .data-table thead { display: none; }
  .data-table, .data-table tbody, .data-table tr, .data-table td { display: block; width: 100%; box-sizing: border-box; }
  .data-table tbody tr {
    border: 1px solid #E5E7EB; border-radius: 10px; margin-bottom: 10px;
    padding: 6px 10px; background: #fff !important;
  }
  .data-table tbody tr:nth-child(even) td { background: transparent !important; }
  .data-table td {
    border: none !important; padding: 6px 4px !important;
    display: flex; justify-content: space-between; align-items: center;
    font-size: 13px !important;
  }
  .data-table td::before { content: attr(data-label); color: #94a3b8; font-size: 12px; margin-right: 10px; flex-shrink: 0; }
  .data-table td:first-child::before { font-weight: 600; color: #1539BB; }
  .table-wrap { overflow-x: hidden !important; }
}

/* 弹窗手机端边距 */
@media (max-width:640px) {
  .modal-box { width: 94vw !important; max-width: 94vw !important; min-width: 0 !important; margin: 0 auto; }
  .quote-box { width: 96vw !important; max-width: 96vw !important; }
}

/* 提交按钮 loading */
.btn-submit, .btn-add, .btn-primary { transition: opacity .15s; }

/* ===== R11 顶部公司口号 ===== */
.app-header { position: relative; }
.header-slogan {
  position: absolute; left: 50%; top: 50%;
  transform: translate(-50%, -50%);
  color: #9ca3af; font-size: 16px; font-weight: 500; letter-spacing: 1px;
  white-space: nowrap; pointer-events: none;
  max-width: 38%; overflow: hidden; text-overflow: ellipsis;
}
@media (max-width:900px) { .header-slogan { display: none; } }

/* ===== R11 套餐报价弹窗统一样式美化 ===== */
/* 弹窗整体：浅蓝渐变 + 黄色顶边 + 大圆角 */
.quote-box {
  background: linear-gradient(165deg, #EAF2FF 0%, #F7FAFF 40%, #EDF3FC 100%) !important;
  border-top: 3px solid #CC4422 !important;
  border-radius: 18px !important;
  box-shadow: 0 24px 70px rgba(10, 30, 70, .35) !important;
}
.quote-head h3 { font-size: 18px; letter-spacing: .5px; }
/* 区块标题：加粗 + 拉开间距 */
.quote-sec {
  font-size: 16px !important;
  font-weight: 700 !important;
  margin: 22px 0 10px !important;
  letter-spacing: .3px;
}
.quote-sec::before {
  width: 4px !important;
  height: 15px !important;
  background: linear-gradient(180deg, #CC4422, #CC4422) !important;
  border-radius: 2px !important;
}
/* 套餐卡片：浅灰圆角 + hover 蓝边浮起 */
.quote-pkg {
  background: #fff !important;
  border: 1px solid #E5E7EB !important;
  border-radius: 12px !important;
  padding: 14px 12px !important;
  transition: all .18s ease !important;
}
.quote-pkg:hover {
  border-color: #0e2a8c !important;
  box-shadow: 0 6px 16px rgba(29, 78, 216, .13) !important;
  transform: translateY(-2px) !important;
}
.quote-pkg .qn { font-size: 16px !important; }
.quote-pkg .qp { color: #CC4422 !important; font-size: 17px !important; margin-top: 6px !important; }
.quote-pkg .ql { color: #9ca3af !important; font-size: 11.5px !important; margin-top: 3px !important; }
/* 二维码卡片：浅白圆角底 */
.quote-qr {
  background: #fff !important;
  border-radius: 12px !important;
  padding: 12px !important;
  box-shadow: 0 2px 8px rgba(0, 0, 0, .05) !important;
}
.quote-qr .qqt { font-size: 12.5px !important; margin-bottom: 8px !important; }
/* 按钮：渐变蓝 + 圆角统一 */
.quote-btn { border-radius: 12px !important; padding: 11px 30px !important; box-shadow: 0 3px 10px rgba(29, 78, 216, .28) !important; }
/* 红色提示：浅红不刺眼 */
.quote-pay-tip span { color: #f87171 !important; }
.quote-lock .lt { color: #92400e !important; }
.quote-lock .lt b { color: #b45309; }
/* 整体行高边距 */
.quote-box { line-height: 1.75; }
.quote-pay-tip { line-height: 2 !important; }
.quote-lock .lt { line-height: 2 !important; }

/* ===== R11 套餐页收尾 ===== */
/* ① 选中/hover 边框主题橙（与价格统一） */
.quote-pkg:hover {
  border-color: #CC4422 !important;
  box-shadow: 0 6px 16px rgba(255, 140, 0, .16) !important;
}
/* ② 弹窗底部不被截断 */
.quote-box { padding-bottom: 30px !important; }
.quote-box .quote-head { padding-bottom: 6px; }

/* ===== R11 套餐三页收尾 ===== */
/* 弹窗高度加一点（底部按钮露全） */
.quote-box { max-height: 96vh !important; }
/* 选中套餐边框加深 */
.quote-pkg:hover {
  border-color: #CC4422 !important;
  box-shadow: 0 0 0 1px #CC4422, 0 6px 16px rgba(249, 115, 22, .16) !important;
}
/* 二维码统一尺寸、顶部对齐 */
.quote-qr img { width: 100% !important; max-width: 150px !important; height: auto !important; }
.quote-qr { display: flex; flex-direction: column; align-items: center; justify-content: flex-start; }
/* 所有按钮圆角统一 */
.quote-btn, .quote-box button, .quote-lock button { border-radius: 12px !important; }


/* R12 库存管理表格：浅灰边框 + 表头浅蓝 */
.data-table.inv-table { border:1px solid #E0E0E0; border-radius:8px; overflow:hidden; }
.data-table.inv-table th { background:#F0F7FF !important; border:1px solid #E0E0E0; }
.data-table.inv-table td { border:1px solid #E0E0E0; }

/* R12 全局表单输入框：浅灰边框 + 选中橙色高亮 */
input, select, textarea { border-color:#d9d9d9; }
input:focus, select:focus, textarea:focus { border-color:#CC4422 !important; box-shadow:0 0 0 2px rgba(255,140,0,0.15) !important; }


/* R13 列表统一：表格撑满+滚动、分页器、列宽分配 */
.table-wrap { height: calc(100vh - 235px); min-height: 260px; overflow-y: auto; border: 1px solid #E0E0E0; border-radius: 8px; background: #fff; }
.table-wrap::-webkit-scrollbar { width: 8px; height: 8px; }
.table-wrap::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 4px; }
.table-wrap::-webkit-scrollbar-track { background: #f3f4f6; }
.data-table th, .data-table td { white-space: nowrap; }
.data-table td.col-len { white-space: normal; max-width: 280px; min-width: 140px; line-height: 1.6; }
.data-table th.col-stat, .data-table td.col-stat { width: 90px; }
.data-table th.col-ops, .data-table td.col-ops { width: 170px; }
.data-table th.col-time, .data-table td.col-time { width: 120px; }
.data-table th.col-num, .data-table td.col-num { width: 80px; }
.pager { display: flex; align-items: center; justify-content: flex-end; gap: 10px; padding: 10px 4px; font-size: 12.5px; color: #666; flex-wrap: wrap; }
.pager .pager-total { color: #999; margin-right: 4px; order: 3; font-weight: 600; }
.pager .pager-info { font-weight: 600; color: #333; min-width: 56px; text-align: center; }
.pager-btn { padding: 4px 14px; border: 1px solid #d9d9d9; border-radius: 6px; background: #fff; color: #333; font-size: 12.5px; cursor: pointer; transition: all .12s; }
.pager-btn:hover:not(:disabled) { border-color: #CC4422; color: #CC4422; }
.pager-btn:disabled { opacity: 0.45; cursor: not-allowed; }


/* R13 体验批次1：导航/侧边栏/公告 */
/* 口号绝对居中 */
.app-header { position: relative; }
.app-header .header-info { position: absolute !important; left: 50% !important; top: 50% !important; transform: translate(-50%, -50%) !important; margin: 0 !important; pointer-events: none; flex-wrap: nowrap !important; justify-content: center !important; }
.app-header .header-info .value { color: #666666 !important; font-size: 16px !important; font-weight: 400 !important; font-style: normal !important; letter-spacing: 0.5px !important; line-height: 1 !important; white-space: nowrap !important; text-shadow: none !important; }
/* 侧边栏菜单 */
.menu-group-head { font-size: 14px; line-height: 40px; }
.menu-group .sub-tab-btn { font-size: 13px; line-height: 1.5; height: auto; min-height: 36px; display: flex; align-items: center; }
.menu-group .sub-tab-btn.active, .menu-group .sub-tab-btn.sel { background: #fff7e6 !important; color: #CC4422 !important; font-weight: 700; border-left: 3px solid #CC4422; }
.mg-arrow { font-size: 10px; color: #999; margin-left: 4px; transition: transform .15s; }
/* 退出按钮固定底部 */
.app-sidebar { position: relative; }

/* 公告行高与间距 */
.rp-notice-item { line-height: 1.8 !important; margin-bottom: 12px !important; }


/* R13 体验批次2：表格行高/表头/按钮间距/分页器 */
.data-table th { background: #f5f7fa !important; font-weight: 700 !important; }
.data-table th, .data-table td { height: 40px; padding: 0 10px; vertical-align: middle !important; }
.data-table td { height: 40px; }
.data-table .action-btn { margin: 0 4px; }
.more-btn { color: #666; }
.more-menu > div:hover { background: #f5f5f5; }
.pager-num.on { background: #CC4422 !important; border-color: #CC4422 !important; color: #fff !important; font-weight: 700; }
.pager-dot { color: #999; padding: 0 2px; }
.pager-jump { display: inline-flex; align-items: center; gap: 4px; color: #666; font-size: 12px; }
.pager-jump input { text-align: center; }


/* R13 体验批次3 */
/* 弹窗按钮统一 */
.modal-box .btn-submit { background: #CC4422 !important; border-color: #CC4422 !important; color: #fff !important; }
.modal-box .btn-cancel { background: #f3f4f6 !important; border-color: #d1d5db !important; color: #666 !important; }
/* 页面最小宽度 */
@media (min-width: 769px) { body { min-width: 1200px; overflow-x: auto; } }
/* 手机端按钮 44px */
@media (max-width: 900px) {
  .action-btn, .btn-add, .btn-submit, .btn-cancel, .pager-btn { min-height: 44px; }
}


/* UX2：必填星标红色 */
.required { color: #ef4444 !important; font-weight: 700; }
.form-row label .required, .form-group label .required { color: #ef4444; }


/* UX2-B */
.data-table th { cursor: default; }


/* R13 手机端 */
@media (max-width: 900px) {
  #mobileTabbar { display: flex !important; }
  .app-main { padding-bottom: 64px; }
  /* 弹窗底部滑出 */
  .modal-overlay { align-items: flex-end !important; }
  .modal-box { width: 100% !important; max-width: 100% !important; margin: 0 !important; border-radius: 16px 16px 0 0 !important; max-height: 88vh !important; animation: sheetUp .28s ease !important; }
  @keyframes sheetUp { from { transform: translateY(100%); } to { transform: translateY(0); } }
  /* 表格卡片式 */
  .table-wrap { height: auto !important; max-height: none !important; border: none !important; background: transparent !important; }
  .table-wrap .data-table, .table-wrap .data-table tbody, .table-wrap .data-table tr, .table-wrap .data-table td { display: block; width: 100% !important; }
  .table-wrap .data-table thead { display: none; }
  .table-wrap .data-table tbody tr { background: #fff; border: 1px solid #E5E7EB; border-radius: 10px; margin-bottom: 10px; padding: 6px 12px; }
  .table-wrap .data-table td { height: auto !important; min-height: 30px; padding: 5px 0 !important; border: none !important; white-space: normal !important; }
  .table-wrap .data-table td::before { content: attr(data-label); display: inline-block; width: 88px; color: #999; font-size: 12px; margin-right: 6px; }
  .table-wrap .data-table td[data-label=""]::before { content: ''; }
  .pager { position: static !important; }
}


/* R13 体验：收藏条 */
#favBar { display: none; padding: 6px 18px; background: #fffdf5; border-bottom: 1px solid #f0e6d2; font-size: 12px; }
.sub-tab-btn .fav-star:hover { color: #CC4422; }


/* R13 收尾：展示统一 + 打印 */
img.avatar, .avatar { width: 36px !important; height: 36px !important; border-radius: 8px !important; object-fit: cover; }
.status-badge.warn { background: rgba(245,158,11,0.12); color: #b45309; }
.status-badge.expired { background: rgba(239,68,68,0.12); color: #ef4444; }
.data-table td { max-width: 240px; overflow: hidden; text-overflow: ellipsis; }
.data-table td.col-len { max-width: 280px; }
/* 打印 A4 */
@media print {
  @page { size: A4; margin: 12mm; }
  .app-sidebar, .app-header, .view-header .actions, .actions, .btn-add, .pager, #mobileTabbar, #backTopBtn, #globalBreadcrumb, .fav-star, .action-btn { display: none !important; }
  body { min-width: 0 !important; background: #fff !important; }
  .app-main { margin: 0 !important; padding: 0 !important; display: flex !important; flex-direction: row; }
  .mgmt-view, .view-body, .table-wrap { height: auto !important; max-height: none !important; overflow: visible !important; border: none !important; }
  .data-table { border: 1px solid #999 !important; }
  .data-table th { background: #f0f0f0 !important; }
}


/* 筛选/查询按钮统一橙色 */
.btn-primary, .btn-query, .btn-selw { background: #CC4422 !important; border-color: #CC4422 !important; color: #fff !important; }
.btn-primary:hover, .btn-query:hover { opacity: .9; }
/* 单位页表格边框兜底 */
.mgmt-view .data-table { border: 1px solid #E0E0E0 !important; }


/* ============================================================
   企业级 SaaS 主题层（飞书/钉钉质感）— 20260807
   ============================================================ */
:root {
  --brand: #CC4422 !important;
  --brand-hover: #E86E00 !important;
  --brand-dark: #D96400 !important;
  --accent: #CC4422 !important;
  --aux: #1539BB;
  --bg: #F5F7FA;
  --bg-card: #FFFFFF;
  --text-1: #1D2129;
  --text-2: #4E5969;
  --text-3: #86909C;
  --border: #E5E6EB;
  --radius: 8px;
  --shadow-soft: 0 2px 8px rgba(0,0,0,0.06);
}
* { font-family: "Microsoft YaHei", "PingFang SC", -apple-system, "Segoe UI", sans-serif; }
body { background: #F5F7FA !important; color: #4E5969; }

/* ===== 顶部导航：60px 磨砂玻璃 ===== */
.app-header {
  height: 60px !important; min-height: 60px !important;
  background: #1539BB !important;
  border-bottom: 1px solid #1539BB !important;
  box-shadow: 0 2px 8px rgba(0,0,0,.18) !important;
  position: relative !important; top: 0; left: 0; right: 0; z-index: 9999;
}
.app-header .logo-img { width: 32px; height: 32px; border-radius: 8px; object-fit:cover; background:#fff; padding:2px; box-sizing:border-box; }
.app-header .sys-name { font-size: 16px; font-weight: 500; color: #FFFFFF; }
.app-header .header-info .value { color: #FFFFFF !important; font-size: 16px !important; font-weight: 400 !important; }
.app-header .app-userinfo { color: #4E5969 !important; }
.app-main { padding-top: 0; }
@media (max-width: 768px) { .app-main { padding-top: 60px; } }
@media (min-width: 769px) { .app-header { position: relative !important; } }

/* ===== 左侧菜单：220px 白底 ===== */
.app-sidebar {
  width: 220px !important; min-width: 220px !important;
  background: #FFFFFF !important;
  border-right: 1px solid #E5E6EB !important;
  box-shadow: none !important;
}
.menu-group-head { font-size: 14px; line-height: 48px; height: 48px; color: #4E5969; font-weight: 500; }
.menu-group .sub-tab-btn {
  font-size: 13px; line-height: 1.5; height: auto; min-height: 36px; color: #4E5969;
  border-radius: 0 !important; margin: 0 !important; padding-left: 8px !important;
  border-left: 3px solid transparent;
}
.menu-group .sub-tab-btn:hover { background: #F2F3F5; }
.menu-group .sub-tab-btn.active, .menu-group .sub-tab-btn.sel {
  background: linear-gradient(90deg, #FFF7E6, #FFFDF5) !important;
  color: #CC4422 !important; font-weight: 500;
  border-left: 3px solid #CC4422;
}
.menu-group-body { padding-left: 24px; transition: all .2s ease; }
.mg-arrow { transition: transform .2s; }

/* ===== 内容区白卡 ===== */
.view-body { padding: 20px !important; }
.mgmt-view.active .view-body, .view-body { background: #FFFFFF; border-radius: 8px; box-shadow: var(--shadow-soft); margin: 16px; }
.view-header { padding: 16px 20px 0; background: transparent; }
.view-header h3 { font-size: 18px; font-weight: 500; color: #1D2129; }
.mgmt-view.active { display: block; }
#dashboardView { padding: 0; }

/* ===== 表格：精致企业风 ===== */
.data-table th {
  background: #F7F8FA !important; color: #1D2129 !important;
  font-size: 13px; font-weight: 500 !important; height: 48px !important;
  border-bottom: 1px solid #E5E6EB !important;
}
.data-table td { height: 48px; border-bottom: 1px solid #F2F3F5 !important; color: #4E5969; }
.data-table tbody tr:hover td { background: #F7F8FA !important; }
.data-table { border: 1px solid #E5E6EB !important; border-radius: 8px; }
.table-wrap { border-radius: 8px; border: 1px solid #E5E6EB; }

/* ===== 按钮体系 ===== */
.btn-add, .btn-submit {
  background: linear-gradient(135deg, #CC4422, #CC4422) !important;
  border: none !important; color: #fff !important;
  height: 36px; border-radius: 8px; font-size: 14px; font-weight: 500;
  transition: all .2s ease;
}
.btn-add:hover, .btn-submit:hover { background: linear-gradient(135deg, #E86E00, #FF8A2A) !important; box-shadow: 0 4px 12px rgba(255,125,0,.25); }
.btn-add:active { transform: scale(.97); }
.btn:not([style*="background:#1539BB"]), .btn-cancel, .btn-primary.ghost, .action-btn.more-btn {
  background: #FFFFFF !important; border: 1px solid #D9D9E3 !important;
  color: #4E5969 !important; height: 36px; border-radius: 8px; font-size: 13px;
  transition: all .2s ease;
}
.btn:hover, .btn-cancel:hover { border-color: #CC4422; color: #CC4422; }
.action-btn.danger, .action-btn[style*="ef4444"] { color: #E5484D !important; border-color: #FDE1E1 !important; background: #FFF5F5 !important; }
.action-btn { height: 30px; border-radius: 6px; font-size: 12.5px; }

/* ===== 弹窗：缩放动画 ===== */
.modal-overlay { background: rgba(0,0,0,0.5) !important; }
.modal-box {
  border-radius: 8px !important; box-shadow: 0 12px 40px rgba(0,0,0,.12) !important;
  animation: modalZoom .22s ease !important;
}
@keyframes modalZoom { from { transform: scale(.92); opacity: 0; } to { transform: scale(1); opacity: 1; } }

/* ===== 输入框：36px 橙 focus ===== */
input, select, textarea { height: 36px; border-radius: 6px !important; border: 1px solid #D9D9E3 !important; font-size: 14px; }
textarea { height: auto; }
input:focus, select:focus, textarea:focus { border-color: #CC4422 !important; box-shadow: 0 0 0 2px rgba(255,125,0,.12) !important; }

/* ===== 首页统计卡 ===== */
.stat-item {
  background: #FFFFFF; border-radius: 8px; box-shadow: var(--shadow-soft);
  padding: 20px; text-align: center; transition: all .2s ease; border: 1px solid #F0F1F3;
}
.stat-item:hover { transform: translateY(-3px); box-shadow: 0 8px 20px rgba(0,0,0,.08); }
.stat-item .num { font-size: 24px !important; font-weight: 500 !important; color: #1D2129; }
.stat-item .lbl { font-size: 12.5px; color: #86909C; margin-top: 6px; }
.stat-item .num.stat-num-empty { color: #9ca3af !important; text-shadow: none !important; font-weight: 600 !important; }

/* ===== 地图浅色 ===== */
.leaflet-tile-pane { filter: grayscale(0.35) brightness(1.06) contrast(0.92); }

/* ===== 分页器精致化 ===== */
.pager { padding: 14px 4px; }
.pager-btn { height: 30px; border-radius: 6px; border: 1px solid #D9D9E3; background: #fff; color: #4E5969; }
.pager-btn.on { background: #CC4422 !important; border-color: #CC4422 !important; }
.pager .pager-total { color: #86909C; }

/* ===== 加载/空状态 ===== */
.empty-tip { color: #86909C; }
.loading-spinner { border: 3px solid #F0F1F3; border-top-color: #CC4422; border-radius: 50%; width: 28px; height: 28px; animation: spin 0.8s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }

/* ===== 通知卡片 ===== */
.rp-notice-item { background: #fff; border: 1px solid #F0F1F3; border-radius: 8px; padding: 12px 14px; line-height: 1.8 !important; margin-bottom: 12px !important; transition: all .15s; }
.rp-notice-item:hover { border-color: #FFD9B3; }


/* ===== 全局橙色统一（覆盖历史蓝色按钮/输入框） ===== */
button[style*="1d4ed8"], button[style*="1890ff"], button[style*="2563eb"], button[style*="3b82f6"] {
  background: #CC4422 !important; border-color: #CC4422 !important; color: #fff !important;
}
button[style*="linear-gradient(135deg,#0e2a8c"], button[style*="linear-gradient(135deg, #0e2a8c"] {
  background: linear-gradient(135deg, #CC4422, #CC4422) !important; border-color: #CC4422 !important;
}
input[type="checkbox"], input[type="radio"] { accent-color: #CC4422 !important; }
input[style*="accent-color:#0e2a8c"] { accent-color: #CC4422 !important; }
.quote-btn, .quote-box button { background: #CC4422 !important; border-color: #CC4422 !important; color: #fff !important; }


/* 顶部导航修复：切换器左移、图标右移、齿轮层级 */
#companySwitcher { display: none !important; }
.app-header > div[onclick="openGlobalSearch()"], #msgBell { margin-left: auto; }
.app-header > div[onclick="openGlobalSearch()"] { margin-left: auto; }
#msgBell { margin-left: 14px; }
.app-userinfo { z-index: 99999 !important; position: relative; }
#companyArrow { transition: color .15s; }
#companyArrow:hover { color: #CC4422; }
.header-left { z-index: 99997; }


/* ===== 左侧菜单强化（20260807） ===== */
.app-sidebar { width: 220px !important; min-width: 220px !important; max-width: 220px !important; background: #fff !important; border-right: 1px solid #E5E6EB !important; }
/* 一级/二级层级：二级缩进 24px */
.menu-group-body { padding-left: 24px !important; }
.menu-group-body .sub-tab-btn { padding-left: 4px !important; }
/* 选中高亮（含顶部 tab） */
.mgmt-tab.active, .mgmt-tab.sel {
  background: #FFF7E6 !important;
  color: #CC4422 !important;
  border-left: 3px solid #CC4422 !important;
  font-weight: 500 !important;
}
.menu-group .sub-tab-btn.active, .menu-group .sub-tab-btn.sel {
  background: #FFF7E6 !important;
  color: #CC4422 !important;
  border-left: 3px solid #CC4422 !important;
  font-weight: 500 !important;
}
/* 菜单图标统一 16px 垂直居中 */
.menu-group .sub-tab-btn .icon, .mgmt-tab .icon, .menu-group .sub-tab-btn > span:first-child, .mgmt-tab > span:first-child {
  font-size: 16px !important;
  line-height: 1 !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 20px !important;
}
/* 退出登录：分割线 + 固定底部 */
#btnLogout {
  position: absolute !important;
  bottom: 12px !important;
  left: 12px !important;
  right: 12px !important;
  width: auto !important;
  border-top: 1px solid #E5E6EB !important;
  padding-top: 10px !important;
  margin-top: 20px !important;
  background: transparent !important;
  text-align: center;
}
#btnLogout:hover { color: #CC4422 !important; }


/* ===== 表格统一强化（20260807） ===== */
.pager { justify-content: center !important; }
.data-table th { font-weight: 700 !important; }
.data-table th, .data-table td { height: 40px !important; padding: 0 10px !important; }


/* ===== 筛选按钮 + 圆角统一（20260807） ===== */
.btn, .btn-primary, .btn-add, .btn-cancel, .btn-submit, .action-btn, .pager-btn, .btn-query, .btn-sel, .btn-selw, .quick-btn, .more-btn, button { border-radius: 8px !important; }
input, select, textarea { height: 36px !important; border-radius: 8px !important; }
textarea { height: auto !important; }
.toolbar-right input, .toolbar-right select, .filter-bar input, .filter-bar select, .search-input { height: 36px !important; border-radius: 8px !important; }


/* ===== 表格统一：纵向滚动表头固定 + 横向滚动（20260807） ===== */
.table-wrap { overflow: auto !important; height: calc(100vh - 235px) !important; min-height: 260px; }
.table-wrap .data-table thead th, .data-table th {
  position: sticky !important;
  top: 0 !important;
  z-index: 5 !important;
  background: #F7F8FA !important;
  box-shadow: 0 1px 0 #E5E6EB;
}
/* 老分页器统一样式 */
.pagination-fixed, #usersPagination, #projectPagination, #teamPagination, #workerPagination, #docPagination {
  display: flex !important; justify-content: center; align-items: center; gap: 8px; padding: 12px 0 !important;
}
.pagination-fixed a, .pagination-fixed span, #usersPagination a, #usersPagination span, #projectPagination a, #projectPagination span, #teamPagination a, #teamPagination span, #workerPagination a, #workerPagination span {
  display: inline-block; padding: 5px 12px; border: 1px solid #D9D9E3; border-radius: 8px; font-size: 12.5px; color: #4E5969; cursor: pointer; text-decoration: none; background: #fff;
}
.pagination-fixed a:hover, #usersPagination a:hover, #projectPagination a:hover, #teamPagination a:hover { border-color: #CC4422; color: #CC4422; }
.pagination-fixed .current, #usersPagination .current, #projectPagination .current, #teamPagination .current, #workerPagination .current { background: #CC4422 !important; color: #fff !important; border-color: #CC4422 !important; font-weight: 600; }


/* ===== 大厅卡片 + 筛选对齐（20260807） ===== */
.hall-grid { grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)) !important; width: 100% !important; }
.hall-grid > div { min-width: 0; }
.pager { margin: 0 auto; }
/* 筛选栏对齐 */
.filter-bar, .toolbar-row, .actions, .view-header .actions { display: flex !important; align-items: center !important; flex-wrap: wrap; gap: 8px; }
.filter-bar input, .filter-bar select, .toolbar-right input, .toolbar-right select, .search-input { height: 36px !important; padding: 6px 10px !important; box-sizing: border-box !important; }


/* 口号字体兜底 */
.app-header .header-info .value { font-family: "Microsoft YaHei", "PingFang SC", "Noto Sans CJK SC", sans-serif !important; }


/* ===== 修复 .btn-sel 白底白字（20260807） ===== */
.btn.btn-sel, button.btn-sel {
  background: #dc2626 !important;
  border-color: #dc2626 !important;
  color: #fff !important;
}
.btn.btn-sel:hover, button.btn-sel:hover { background: #E63336 !important; border-color: #E63336 !important; color: #fff !important; }
/* 其他被 .btn 白底覆盖的彩色按钮兜底 */
.btn.btn-danger, button.btn-danger { background: #dc2626 !important; color: #fff !important; border-color: #dc2626 !important; }


/* 班组扩展按钮：橙色边框透明底（不被 .btn-add 覆盖） */
.team-extra-btn {
  background: transparent !important;
  border: 1.5px solid #CC4422 !important;
  color: #CC4422 !important;
  height: 36px;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 500;
  padding: 0 14px;
  margin-left: 8px;
  cursor: pointer;
  transition: all .15s;
}
.team-extra-btn:hover { background: rgba(255,125,0,.08) !important; }


/* ===== 输入框文字/占位符可见性（20260807） ===== */
input, select, textarea { color: #333333 !important; }
input::placeholder, textarea::placeholder, select::placeholder { color: #9CA3AF !important; opacity: 1 !important; }
.search-input::placeholder { color: #9CA3AF !important; }


/* ===== 360/旧内核兼容 + 按钮兜底（20260807） ===== */
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #9CA3AF !important; opacity: 1; }
input:-moz-placeholder, textarea:-moz-placeholder { color: #9CA3AF !important; opacity: 1; }
input::-moz-placeholder, textarea::-moz-placeholder { color: #9CA3AF !important; opacity: 1; }
input:-ms-input-placeholder, textarea:-ms-input-placeholder { color: #9CA3AF !important; opacity: 1; }
button.btn-sel, .btn.btn-sel {
  background: #dc2626 !important;
  border-color: #dc2626 !important;
  color: #fff !important;
}
button.btn-selw, .btn.btn-selw {
  background: #CC4422 !important;
  border-color: #CC4422 !important;
  color: #fff !important;
}


/* ===== 最终表格统一（20260807） ===== */
/* 所有包裹表格的表头固定 */
.table-wrap table th, .table-wrap table thead th, .worker-table th, .worker-table thead th {
  position: sticky !important;
  top: 0 !important;
  z-index: 5 !important;
  background: #F7F8FA !important;
}
/* 滚动条统一（右下角，细窄） */
.table-wrap::-webkit-scrollbar { width: 8px; height: 8px; }
.table-wrap::-webkit-scrollbar-thumb { background: #C1C7D0; border-radius: 4px; }
.table-wrap::-webkit-scrollbar-thumb:hover { background: #A8AFB9; }
.table-wrap::-webkit-scrollbar-corner { background: transparent; }
/* worker 表格容器兼容 */
.worker-table-scroll { max-height: calc(100vh - 240px); overflow: auto; }


/* ===== 防重影（360 渲染修复，20260807） ===== */
.team-item, .app-header .header-info, .app-header .header-info .value {
  transform: translateZ(0) !important;
  backface-visibility: hidden !important;
  -webkit-backface-visibility: hidden !important;
}
.app-header .header-info { transform: translate(-50%, -50%) translateZ(0) !important; }
.app-header .header-info .value { text-shadow: none !important; }
.team-item { will-change: auto; }


/* ===== R12 移动端适配（<768px） ===== */
@media (max-width: 768px) {
  #hamburger { display: inline-block !important; }
  .app-header { padding: 0 10px !important; }
  .app-header .sys-name { font-size: 16px !important; }
  .app-header .header-info .value { font-size: 14px !important; }
  .app-userinfo #userInfo { display: none; }
  .app-sidebar {
    position: fixed !important; left: 0; top: 60px; bottom: 0;
    width: 240px !important; min-width: 240px !important; max-width: 78vw !important;
    transform: translateX(-110%); transition: transform .25s ease; z-index: 99989;
    box-shadow: 4px 0 20px rgba(0,0,0,.12);
  }
  .app-sidebar.sb-open { transform: translateX(0); }
  .app-main { margin-left: 0 !important; }
  #mobileTabbar { display: flex !important; }
  .view-body { padding: 12px !important; }
  .view-body, .mgmt-view.active .view-body { margin: 8px !important; }
  .table-wrap { height: calc(100vh - 240px) !important; }
  .stat-item { padding: 12px 8px !important; }
  .stat-item .num { font-size: 18px !important; }
  .app-main { padding-bottom: 58px; }
}


/* ===== P1 UI 收尾（20260807） ===== */
/* 弹窗/卡片圆角 12px */
.modal-box, .stat-item, .view-body, .mgmt-view.active .view-body, .rp-notice-item, .hall-grid > div { border-radius: 12px !important; }
/* 卡片淡阴影 */
.stat-item, .hall-grid > div, .rp-notice-item { box-shadow: 0 2px 8px rgba(0,0,0,0.06) !important; }
/* 口号加粗 */
.app-header .header-info .value { font-weight: 500 !important; }
/* 菜单图标间距 */
.menu-group .sub-tab-btn, .mgmt-tab { gap: 12px !important; }
.menu-group .sub-tab-btn > span:first-child, .mgmt-tab > span:first-child { width: 22px !important; }
/* 状态色统一：施工中/剩余项目等蓝色状态文字 → 深蓝辅助色（保留语义） */


/* ===== P1 6节：首页细节（20260807） ===== */
.stat-item .lbl { font-size: 16px !important; color: #86909C !important; }
.stat-item .num { font-size: 24px !important; font-weight: 700 !important; }
.leaflet-tile-pane { filter: grayscale(0.5) brightness(1.08) contrast(0.85) !important; }


/* P2：关于我们 */
#aboutR12Body { line-height: 2 !important; }
#aboutR12Body img { border-radius: 14px !important; box-shadow: 0 8px 24px rgba(0,0,0,.14) !important; }


/* 线性菜单图标 */
.mi { width: 16px; height: 16px; flex-shrink: 0; vertical-align: middle; }
.menu-group .sub-tab-btn .mi, .mgmt-tab .mi { width: 16px !important; height: 16px !important; margin-right: 10px; }


/* ===== P1 收尾（20260807） ===== */
/* 全选/反选/列宽：红→橙 */
button.btn-sel, .btn.btn-sel, button.btn-selw, .btn.btn-selw {
  background: #CC4422 !important;
  border-color: #CC4422 !important;
  color: #fff !important;
}
button.btn-sel:hover, button.btn-selw:hover { background: #E86E00 !important; border-color: #E86E00 !important; color: #fff !important; }
/* 签到页深蓝表头 → 浅灰 */
.mgmt-view .data-table th, .table-wrap table th, .checkin-table th { background: #F7F8FA !important; color: #1D2129 !important; }
/* 公司切换箭头放大 */
#companyArrow { font-size: 16px !important; color: #CC4422 !important; font-weight: 700; }
/* 空状态通用 */
.empty-illu { display:inline-block; width:56px; height:56px; }
.empty-illu svg { width:56px; height:56px; stroke:#C1C7D0; }

/* ===== R15 UI 优化（2026-08-08 豆包清单） ===== */
/* 左侧菜单选中态：深橙底白字，一眼可见 */
.sub-tab-btn.active { background:#CC4422 !important; color:#fff !important; font-weight:600; }
.sub-tab-btn.active svg { color:#fff !important; }
/* 主操作按钮统一正彤橙 */
.btn-add:not([style*="background:#fff"]) { background:linear-gradient(135deg,#1539BB,#2456d8) !important; }
/* 表格操作按钮放大 + 间距拉开 */
.action-btn { font-size:14px !important; padding:6px 12px !important; margin:0 4px !important; }
/* 表格隔行浅灰，防看串行 */
.data-table tbody tr:nth-child(even) { background:#FAFAFA !important; }
/* 弹窗/卡片圆角统一 */
.modal, .card, .panel { border-radius:14px; }
/* 正文/菜单字号底线 14px */
.sub-tab-btn { font-size:14px; }
.body-text, .content-text { font-size:14px; }
/* 分页器放大 */
.page-btn, .pager button { font-size:14px; padding:7px 14px; }

/* ===== 统计卡 PC 端精致化：默认仅大数字，hover 展开文字（20260809） ===== */
@media (min-width: 769px) {
  .stat-grid { gap: 6px !important; }
  .stat-item { padding: 8px 4px !important; cursor: default; overflow: hidden; transition: all .28s ease !important; }
  .stat-item:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0,0,0,.10) !important; }
  .stat-item .num { font-size: 20px !important; line-height: 1.25 !important; }
  .stat-item .lbl {
    max-height: 0 !important; opacity: 0 !important; margin: 0 !important;
    overflow: hidden !important;
    transition: max-height .28s ease, opacity .28s ease, margin .28s ease !important;
    font-size: 12px !important;
  }
  .stat-item:hover .lbl { max-height: 26px !important; opacity: 1 !important; margin-top: 2px !important; }
}

/* ===== R18 P0-1：首页地图拉满 + 统计卡热区滑入（20260809） ===== */
@media (min-width: 769px) {
  #dashboardView { position: relative; }
  .map-panel { width: 100% !important; }
  /* 右上通知/预警半透明悬浮，不挤地图 */
  .right-panel {
    position: absolute !important; right: 12px; top: 12px; bottom: 12px;
    width: 300px; z-index: 20; overflow: hidden;
    background: rgba(15, 23, 42, 0.55) !important;
    backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
    border: 1px solid rgba(148, 163, 184, 0.28);
    border-radius: 12px; box-shadow: 0 8px 24px rgba(0,0,0,.28);
  }
  .right-panel .rp-notices, .right-panel .rp-alerts { background: transparent !important; border: none !important; box-shadow: none !important; }
  /* 左上角热区（100x100，透明） */
  .map-hotzone {
    position: absolute; left: 0; top: 0; width: 100px; height: 100px;
    z-index: 12; cursor: default; pointer-events: auto;
  }
  /* 统计面板：默认完全隐藏（左侧外），热区 hover 滑入，移开 2s 收回 */
  .map-left-panel {
    position: absolute !important; left: 12px; top: 12px; width: 212px;
    z-index: 15 !important;
    transform: translateX(calc(-100% - 30px)) !important;
    opacity: 0 !important; visibility: visible !important;
    transition: transform .32s ease .4s, opacity .32s ease .4s !important;
    background: rgba(255,255,255,0.97) !important;
    box-shadow: 0 10px 30px rgba(15,23,42,.18) !important;
    border-radius: 12px !important;
  }
  .map-hotzone:hover + .map-left-panel,
  .map-left-panel:hover {
    transform: translateX(0) !important;
    opacity: 1 !important;
    transition-delay: 0s !important;
  }
}

/* R19: 发布通知/历史按钮防遮挡加固 */
.content-toolbar .btn-notice-pub,
.content-toolbar .btn-notice-hist{position:relative;z-index:5;flex:0 0 auto;white-space:nowrap;overflow:visible;line-height:1.5}

/* 顶栏改版（深蓝 + 白字） */
.app-header .sys-name{color:#fff !important}
.app-header .sys-name .accent{color:#FFD700 !important}
.app-header #headerName{color:#fff !important}
.app-header .header-info .info-item .value{color:#fff !important}
.app-header .app-userinfo{color:#fff !important}
.app-header #hamburger{color:#fff !important}
#msgBell{color:#fff}
@media (max-width: 768px){
  .app-header .header-info{display:none}
  .app-header #companySwitcher{display:none !important}
  .app-header .header-left .sys-name{font-size:14px}
  .app-header #msgBell{margin-right:8px}
}

/* 按钮文字垂直居中 */
button, .btn-add, .btn-sel, .btn-selw, .action-btn, .btn-export, .team-extra-btn {
  display:inline-flex; align-items:center; justify-content:center; line-height:1;
}
button svg, .btn-add svg, button img { vertical-align:middle; margin-right:4px; }

/* 视图显隐（AI告警等 section.view） */
.view{display:none}.view.on{display:block}

.app-main{display:flex;flex-direction:row;flex:1 1 auto;overflow:hidden}
.app-sidebar{width:220px;flex:0 0 220px;display:flex;flex-direction:column;overflow:hidden}
.sidebar-scroll{flex:1 1 auto;overflow-y:auto}
.app-content{flex:1 1 0%;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.content-body{flex:1 1 auto;overflow-y:auto}

@media (min-width: 768px){ #mobileTabbar{ display:none !important; } }

.sidebar-brand-m{display:none!important;height:0!important;overflow:hidden!important}

#app>span{display:none!important}

.app-sidebar{padding-top:0!important;margin-top:0!important}
.app-main{margin-top:0!important;padding-top:0!important}

.sidebar-scroll{display:flex;flex-direction:column}
.sidebar-scroll > .menu-group:last-child{margin-top:auto !important}


html,body{width:100%!important}
#app{width:100%!important;max-width:100%!important}
.app-main{width:100%!important}

.app-sidebar{background:#ffffff !important;color:#334155 !important;border-right:1px solid #e2e8f0}
.app-sidebar .menu-group-head{color:#475569 !important}
.app-sidebar .menu-group-head:hover{background:#f1f5f9}
.app-sidebar .sub-tab-btn{color:#475569 !important}
.app-sidebar .sub-tab-btn:hover{background:#f1f5f9}
.app-sidebar .sub-tab-btn.active{background:#f2f6fc !important;color:#0e2a8c !important}
.app-sidebar .sidebar-group-label{color:#94a3b8 !important}
.app-sidebar .mgmt-tab{color:#475569 !important}
.app-sidebar .mgmt-tab.active{background:#f2f6fc !important;color:#0e2a8c !important}


/* ===== v81后续 P0-4: 修复文字框只显示一半 =====
   原全局 input/select/textarea 固定 height:36px，部分无 box-sizing，
   叠加父级 line-height 继承导致文字被垂直截断。统一改为自适应高度。 */
input:not([type="checkbox"]):not([type="radio"]),
select,
textarea {
  box-sizing: border-box !important;
  height: auto !important;
  min-height: 36px !important;
  line-height: 1.4 !important;
  overflow: visible !important;
  vertical-align: middle !important;
}
input[type="checkbox"], input[type="radio"] {
  height: auto !important;
  min-height: 0 !important;
  width: auto !important;
}


/* v118 联动工作台入口调淡：浅蓝底+品牌蓝字，不抢内容；激活用橙色左条 */
.app-sidebar .sub-tab-btn.cockpit-entry{
  background:#EAEFFB !important;
  color:#1539BB !important;font-weight:700 !important;font-size:15px !important;
  border:1px solid #C9D6F5 !important;letter-spacing:.5px;box-shadow:none !important;
}
.app-sidebar .sub-tab-btn.cockpit-entry:hover{ background:#DCE6FA !important; }
.app-sidebar .sub-tab-btn.cockpit-entry.active{
  background:#DCE6FA !important;color:#1539BB !important;
  border:1px solid #C9D6F5 !important;border-left:3px solid #CC4422 !important;
}
.app-sidebar .menu-group-head{font-size:14px!important;font-weight:700!important;color:#1e293b!important;padding:11px 12px!important;letter-spacing:.3px}
.app-sidebar .sub-tab-btn{font-size:14px!important;color:#334155!important}
.app-sidebar .sub-tab-btn.active{color:#0e2a8c!important;font-weight:600}
.app-sidebar .sidebar-group-label{font-size:12px!important;color:#64748b!important;letter-spacing:.5px;font-weight:600}
#cockpitView{font-size:14px;line-height:1.7}

/* ============================================================
   v121 视觉焕新层（正彤蓝橙 · 高级 SaaS 质感，只做视觉增强不改结构）
   主色 蓝#1539BB / 强调橙#CC4422，作用域限定主系统，不影响深色大屏
   ============================================================ */
#app, .app-main, .app-content { -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility; }
#app * { box-sizing:border-box; }

/* —— 通用按钮：统一圆角/过渡/微立体（内联指定颜色的保留其色，只统一形） —— */
#app .btn, .mgmt-view .btn, .content-toolbar .btn {
  border-radius:8px !important; transition:all .18s ease !important; letter-spacing:.2px;
  font-size:13px; cursor:pointer; line-height:1.4;
}
#app .btn:hover { transform:translateY(-1px); box-shadow:0 4px 12px rgba(20,64,120,.14); }
#app .btn:active { transform:translateY(0); }
#app .btn-primary { background:linear-gradient(135deg,#1539BB,#2456d8)!important; border:none!important; box-shadow:0 2px 8px rgba(20,64,120,.18); }
#app .btn-primary:hover { background:linear-gradient(135deg,#1539BB,#0e2a8c)!important; }
#app .btn-add { box-shadow:0 2px 8px rgba(15,23,42,.08); }
#app .btn-add:hover { filter:brightness(.96); }

/* —— 输入/下拉：圆润 + 蓝色聚焦环 —— */
.mgmt-view input[type=text],.mgmt-view input[type=search],.mgmt-view input[type=number],
.mgmt-view input:not([type]),.mgmt-view select,.modal-box input,.modal-box select,.modal-box textarea {
  border-radius:8px; border:1px solid #d6dbe8; background:#fff; transition:border-color .15s,box-shadow .15s;
}
.mgmt-view input:focus,.mgmt-view select:focus,.modal-box input:focus,.modal-box select:focus,.modal-box textarea:focus {
  outline:none !important; border-color:#1539BB !important; box-shadow:0 0 0 3px rgba(20,64,120,.12) !important;
}

/* —— 视图/卡片：更白、更柔、更圆 —— */
.mgmt-view .view-body, .mgmt-view > div, .panel, .content-panel { border-radius:12px; }
.mgmt-view table, .worker-table, .data-table { border-collapse:separate !important; border-spacing:0; }
.mgmt-view thead tr, .worker-table thead tr { background:#f3f6fd !important; }
.mgmt-view thead th, .worker-table thead th {
  color:#2b3a6b !important; font-weight:700 !important; border-bottom:2px solid #e3e9f6 !important;
  padding:10px 12px !important; font-size:13px; white-space:nowrap;
}
.mgmt-view tbody td, .worker-table tbody td { border-bottom:1px solid #eef1f7 !important; padding:9px 12px !important; }
.mgmt-view tbody tr { transition:background .13s; }
.mgmt-view tbody tr:hover { background:#f5f8ff !important; }

/* —— 统计卡：悬浮微抬 + 统一描边 —— */
.statGridRow .stat-card, .stat-card, .kpi-card {
  border:1px solid #e8ebf4 !important; border-radius:14px !important;
  box-shadow:0 2px 10px rgba(20,64,120,.05) !important; transition:transform .18s,box-shadow .18s !important;
}
.statGridRow .stat-card:hover, .stat-card:hover { transform:translateY(-2px); box-shadow:0 8px 22px rgba(20,64,120,.10) !important; }

/* —— 侧栏：圆角条目、柔和激活 —— */
.app-sidebar .menu-item, .sidebar .menu-item, .app-sidebar button[class*=sidebar] { border-radius:9px; transition:all .15s; }
.app-sidebar .menu-item:hover { background:rgba(20,64,120,.07); }
.app-sidebar .menu-item.active, .app-sidebar .active > .menu-item {
  background:linear-gradient(90deg,#EAEFFB,#f4f7ff); color:#1539BB; font-weight:700;
  box-shadow:inset 3px 0 0 #CC4422;
}

/* —— 弹窗：更大圆角 + 柔影 —— */
.modal-box { border-radius:16px !important; box-shadow:0 24px 70px rgba(15,23,42,.28) !important; overflow-x:hidden; overflow-y:auto; }
.modal-mask { backdrop-filter:blur(2px); -webkit-backdrop-filter:blur(2px); }

/* —— 分页器 —— */
.pg-btn, .pagination .pg-btn { border-radius:8px !important; transition:all .13s; }
.pg-btn.pg-active { background:#1539BB !important; color:#fff !important; border-color:#1539BB !important; }
.pg-size, .pg-jump { border-radius:8px; }

/* —— 细滚动条 —— */
#app ::-webkit-scrollbar { width:8px; height:8px; }
#app ::-webkit-scrollbar-thumb { background:#c7cfdf; border-radius:8px; }
#app ::-webkit-scrollbar-thumb:hover { background:#a9b4cc; }
#app ::-webkit-scrollbar-track { background:transparent; }

/* —— zt-more 通用「更多▾」收纳菜单（人员等工具栏） —— */
.zt-more { position:relative; display:inline-block; }
.zt-more > summary { list-style:none; user-select:none; }
.zt-more > summary::-webkit-details-marker { display:none; }
.zt-more > summary:hover { border-color:#1539BB !important; color:#1539BB !important; background:#EAEFFB; }
.zt-more[open] > summary { border-color:#1539BB !important; color:#1539BB !important; background:#EAEFFB; }
.zt-more-menu {
  position:absolute; right:0; top:calc(100% + 6px); z-index:9999; min-width:210px;
  background:#fff; border:1px solid #e6eaf3; border-radius:12px; padding:6px;
  box-shadow:0 12px 34px rgba(15,23,42,.16); display:flex; flex-direction:column; gap:2px;
}
.zt-more-menu a {
  display:block; padding:9px 12px; border-radius:8px; font-size:13px; color:#33415c;
  cursor:pointer; white-space:nowrap; transition:background .12s,color .12s;
}
.zt-more-menu a:hover { background:#EAEFFB; color:#1539BB; }

/* —— 空状态更友好 —— */
.empty-tip { color:#9aa3b5 !important; padding:48px 0 !important; text-align:center; font-size:13.5px; }


/* ============ [第四批·人员表格整改 20260913] 全站数据表格防逐字竖排 ============ */
.table-scroll-x { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.worker-table { min-width: 1260px; table-layout: fixed; width: 100%; }
.worker-table th, .worker-table td { white-space: nowrap; }
.worker-table th:nth-child(1) { width: 4%; }
.worker-table th:nth-child(2) { width: 5%; }
.worker-table th:nth-child(3) { width: 10%; }
.worker-table th:nth-child(4) { width: 5%; }
.worker-table th:nth-child(5) { width: 12%; }
.worker-table th:nth-child(6) { width: 10%; }
.worker-table th:nth-child(7) { width: 8%; }
.worker-table th:nth-child(8) { width: 6%; }
.worker-table th:nth-child(9) { width: 5%; }
.worker-table th:nth-child(10) { width: 9%; }
.worker-table th:nth-child(11) { width: 6%; }
.worker-table th:nth-child(12) { width: 9%; }
.worker-table th:nth-child(13) { width: 11%; }
.worker-table td { overflow: hidden; text-overflow: ellipsis; }
.data-table td, .tb td, .v99tbl td, .inv-table td, .tbl td { white-space: nowrap; }
.data-table .col-ops { white-space: nowrap; }


/* ============ [20260913] 民族默认值 + 移动端表格横滑加固 ============ */
/* 横向滚动只发生在表格容器内部，页面主体不晃 */
.table-scroll-x { width:100%; max-width:100%; min-width:0; }
.worker-table-scroll { width:100%; max-width:100%; min-width:0; }
.mgmt-view, .view-body, .mgmt-view .view-body { min-width:0; }
.view-body, .mgmt-view .view-body { overflow-x:hidden; }
@media (max-width: 768px) {
  body, .app-main, .app-content, .mgmt-view, .view-body, .mgmt-view .view-body, .table-wrap { min-width:0 !important; max-width:100% !important; }
  body { overflow-x:hidden; }
}


/* [20260913] 移动端横晃根治：min-width:1000 仅桌面端生效，移动端归零 */
@media (min-width: 769px){ html,body{min-width:1000px!important} }
@media (max-width: 768px){ html,body{min-width:0!important;overflow-x:hidden!important} }

/* ===== 全站 UI 协调化（2026-09-13 · v167ui）===== */

/* 1. 侧边栏：选中/悬停态统一宝蓝 + 左侧指示条 */
.mgmt-tab:hover, .sub-tab-btn:hover, .menu-group-head:hover { background:#EEF2FC !important; color:#1539BB !important; }
.mgmt-tab.active, .mgmt-tab.sel,
.sub-tab-btn.active, .sub-tab-btn.sel,
.menu-group .sub-tab-btn.active, .menu-group .sub-tab-btn.sel {
  background:#EEF2FC !important; color:#1539BB !important; font-weight:600 !important;
  box-shadow:inset 3px 0 0 #1539BB !important;
}
.mgmt-tab.active svg, .mgmt-tab.sel svg, .sub-tab-btn.active svg, .sub-tab-btn.sel svg { color:#1539BB !important; }
.menu-group-head.active { background:#EEF2FC !important; border-color:rgba(21,57,187,.35) !important; color:#1539BB !important; font-weight:600 !important; }

/* 2. 统计卡：白底 + 顶部宝蓝条 + 宝蓝数字 */
.stat-card { flex:1; min-width:0; background:#fff; border:1px solid #E5E7EB; border-radius:12px; padding:14px 16px; position:relative; overflow:hidden; box-shadow:0 1px 3px rgba(15,42,140,.06); text-align:left; }
.stat-card .stat-bar { position:absolute; left:0; top:0; width:100%; height:3px; background:linear-gradient(90deg,#1539BB,#3b63d9); }
.stat-card .stat-label { font-size:12.5px; color:#6B7280; }
.stat-card .stat-num { font-size:26px; font-weight:700; color:#1539BB; margin-top:4px; font-variant-numeric:tabular-nums; }
.stat-card.stat-accent .stat-num { color:#CC4422; }

/* 3. 分页归位：不再悬浮右下角，收进表格卡片底部右对齐 */
.pagination-bar, .project-pagination, #projectPagination,
.pagination-fixed, #workerPagination, #teamPagination, #zonePagination, #docPagination, #usersPagination {
  display:flex !important; justify-content:flex-end !important; flex-wrap:wrap !important;
  position:static !important; right:auto !important; bottom:auto !important; left:auto !important; top:auto !important;
  margin:14px 0 0 auto !important; z-index:1 !important;
  box-shadow:none !important; border:none !important; border-top:1px solid #E5E7EB !important;
  border-radius:0 !important; padding:14px 2px 2px !important; max-width:100% !important; width:auto !important;
}
/* 通用兜底：任何 id 含 pagination 的容器都不再 fixed */
[id*="Pagination"], [id*="pagination"] { position:static !important; right:auto !important; bottom:auto !important; }

/* 4. 主按钮 hover 深蓝 */
.btn, .btn-add, button[style*="1539BB"] { transition:all .15s ease; }
.btn:hover, .btn-add:hover { filter:brightness(.94); }

/* 5. 输入框/下拉 focus 宝蓝描边 */
input:focus, select:focus, textarea:focus { border-color:#1539BB !important; outline:none; box-shadow:0 0 0 2px rgba(21,57,187,.12); }
/* 6. 菜单未选中态统一灰（图标/文字） */
.mgmt-tab, .sub-tab-btn { color:#6B7280; }
.menu-group-head { color:#475569; }
.mgmt-tab .mi, .sub-tab-btn .mi, .menu-group-head .mi { color:#6B7280; }


/* ===== v169 P1：工人表操作列统一（等高、等圆角、固定间距，删除红字浅红底二选一） ===== */
.worker-table td:last-child { white-space:nowrap; }
.worker-table .action-btn { display:inline-block; height:28px; line-height:20px; padding:4px 10px !important; margin:0 3px !important; border-radius:6px; font-size:12.5px !important; vertical-align:middle; }
.worker-table .more-wrap { display:inline-block; vertical-align:middle; margin:0 3px; }


/* S3/P1-3：工种日薪「删除」中性化，hover 才强调为红（危险色不滥用） */
.wt-del {
  border: 1px solid #cbd5e1 !important; color: #64748b !important; background: #fff !important;
  opacity: .55; transition: all .15s;
}
.wt-del:hover {
  opacity: 1; color: #dc2626 !important; border-color: #fca5a5 !important; background: #fef2f2 !important;
}
/* 弹窗内滚动条（对齐 .view-body，8px 可见可拖，2026-09-15 弹窗滚动专项） */
.modal-box::-webkit-scrollbar { width:8px; height:8px; }
.modal-box::-webkit-scrollbar-track { background:#f5f7fa; border-radius:4px; }
.modal-box::-webkit-scrollbar-thumb { background:#cbd5e1; border-radius:4px; border:2px solid #f5f7fa; }
.modal-box::-webkit-scrollbar-thumb:hover { background:#1a237e; }
.modal-box { scrollbar-width:thin; scrollbar-color:#cbd5e1 #f5f7fa; }
