/* ===== 基础样式 ===== */
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;
  background: #f5f7fa;
  background-color: #f5f7fa;
  color: #2c3e50;
  font-size: 14px;
  -webkit-font-smoothing: antialiased;
  min-height: 100vh;
}
.main-app {
  /* V1.1001-BGRAYS23 B3: 微信灰底 #f5f5f5 (白卡 + 灰底 层次感) */
  background: #f5f5f5;
  background-color: #f5f5f5;
  min-height: 100vh;
}
button { font-family: inherit; cursor: pointer; border: none; background: none; }
input, select, textarea { font-family: inherit; outline: none; }

#app { min-height: 100vh; }

/* ===== 登录页 ===== */
.login-page {
  min-height: 100vh;
  background-color: #f5f5f5;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  position: relative;
  overflow: hidden;
}
/* V1.1001-CLEAN20: 已删除 B1 登录页灰网格/同心圆环/conic雷达扫描动画 (原::before/::after 两个伪元素) */
.login-box {
  background: #fff;
  border-radius: 16px;
  padding: 40px 30px;
  width: 100%;
  max-width: 380px;
  box-shadow: 0 20px 60px rgba(0,0,0,0.3);
}
.login-logo {
  text-align: center;
  font-size: 56px;
  margin-bottom: 16px;
}
.login-box h1 {
  text-align: center;
  font-size: 22px;
  color: #1e3a5f;
  margin-bottom: 8px;
}
.login-sub {
  text-align: center;
  color: #7a8a9a;
  margin-bottom: 30px;
  font-size: 13px;
}
.form-group {
  margin-bottom: 10px;
}
.form-group label {
  display: block;
  margin-bottom: 4px;
  font-size: 12px;
  color: #5a6b7a;
  font-weight: 500;
}
.form-group input,
.form-group select,
.form-group textarea {
  width: 100%;
  padding: 12px 14px;
  border: 1px solid #d8e0e8;
  border-radius: 8px;
  font-size: 14px;
  background: #fafbfc;
  transition: all 0.2s;
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
  border-color: #2c5282;
  background: #fff;
}
/* V1.1001-WEUI19: 微信风全局按钮 (去新拟态凹凸投影→扁平浅灰) */
.btn {
  padding: 0.6em 1.3em;
  font-size: 14px;
  font-weight: 500;
  border-radius: 6px;
  background: #f2f2f2;
  color: #333;
  border: none;
  cursor: pointer;
  transition: background-color 0.18s ease, opacity 0.18s ease;
  box-shadow: none;
  -webkit-tap-highlight-color: transparent;
}
.btn:active {
  background: #d9d9d9;
  color: #333;
  box-shadow: none;
  transform: none;
}
/* V1.1001-WEUI19: 微信风主按钮 (深蓝纯色,去双色渐变) */
.btn-primary {
  background: #1e3a5f;
  color: #fff;
  border: none;
}
.btn-primary:hover { background: #2c5282; box-shadow: none; }
.btn-block { width: 100%; padding: 0.8em 1.3em; }
/* 语义色按钮: 扁平浅色背景+有色文字,避免大面积纯色骚扰 */
.btn-success { background: #eafaf1; color: #07c160; border: none; }
.btn-success:hover { background: #d8f4e5; }
.btn-danger  { background: #fff5f6; color: #fa5151; border: 1px solid #fbd4d7; }
.btn-danger:hover { background: #ffe9eb; }
.btn-warning { background: #fff8e1; color: #b88b00; border: none; }
.btn-warning:hover { background: #fff1c4; }
.btn-ghost   { background: #f2f2f2; color: #333; border: none; }
.btn-sm { padding: 5px 10px; font-size: 12px; }
.btn:disabled { opacity: 0.45; cursor: not-allowed; box-shadow: none; transform: none; background: #f2f2f2; color: #999; }
.login-tips {
  margin-top: 20px;
  padding: 14px;
  background: #f0f4f8;
  border-radius: 8px;
  font-size: 12px;
  color: #5a6b7a;
  line-height: 1.8;
}
.login-tips p:first-child { font-weight: 600; color: #1e3a5f; }

/* ===== 主应用 ===== */
.main-app {
  min-height: 100vh;
  /* V1.1001-BGRAYS23 B3: 微信灰底白卡 主容器 */
  background: #f5f5f5;
  background-color: #f5f5f5;
  padding-bottom: 80px;
  padding-top: 0;
  position: relative;
  overflow-x: hidden;
}
/* V1.1001-CLEAN20: 已删除 B4 星星背景装饰 (原 .app-stars + ::after + @keyframes app-stars-rise, 共 43×2 颗 box-shadow 小星星升起 80s 动画) */

/* 顶部 */
.app-header {
  /* V1.1001-BGRAYS23 B5: 微信顶栏风 — 白底 + 1px 极浅灰底边 + 深色文字 */
  background: #ffffff;
  color: #1a1a1a;
  padding: 14px 16px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  position: sticky;
  top: 0;
  z-index: 100;
  border-bottom: 1px solid #e5e5e5;
  box-shadow: none;
}
.header-left { display: flex; align-items: center; gap: 12px; }
.avatar {
  width: 42px;
  height: 42px;
  /* BGRAYS23: 微信风头像圆框,浅灰边 + 主色深蓝底(保留识别色) */
  background: #1e3a5f;
  color: #fff;
  border: 1px solid #e5e5e5;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  font-weight: 600;
}
.user-name { font-size: 15px; font-weight: 600; color: #1a1a1a; }
.user-role { font-size: 12px; color: #888; opacity: 1; }
.header-right { display: flex; gap: 8px; align-items: center; }
.icon-btn {
  width: 32px;
  height: 32px;
  /* BGRAYS23: 微信风图标按钮,白底 + 浅灰边,去毛玻璃/渐变/立体阴影 */
  background: #ffffff;
  color: #333;
  border: 1px solid #e5e5e5;
  border-radius: 8px;
  font-size: 15px;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all 0.15s ease;
  box-shadow: none;
  position: relative;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
.icon-btn:hover {
  background: #f5f5f5;
  border-color: #d0d0d0;
  color: #1e3a5f;
  transform: none;
  box-shadow: none;
}
.icon-btn:active {
  transform: none;
  box-shadow: none;
  background: #ededed;
}

/* 通知按钮动效 */
@keyframes ring {
  0%, 100% { transform: scale(1); }
  10%, 30% { transform: scale(1.15); }
  20%, 40% { transform: scale(0.95); }
  55% { transform: scale(1.05); }
  70% { transform: scale(0.98); }
}
@keyframes pulse {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.4); opacity: 0.6; }
}
@keyframes urgePulse {
  0%, 100% { box-shadow: 0 4px 12px rgba(253,126,20,0.4); }
  50% { box-shadow: 0 4px 20px rgba(253,126,20,0.8); }
}
.icon-btn[style*="ring"] { animation: ring 1.5s infinite; }

/* 渐变流光按钮 */
@keyframes gradient-shift {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}
/* V1.1001-WEUI19: btn-gradient 紫粉流动动画降级→微信风纯色深蓝按钮 (无流动,无上移阴影) */
.btn-gradient {
  background: #1e3a5f;
  background-size: auto;
  color: #fff;
  border: none;
  font-weight: 500;
  transition: background-color 0.2s;
  animation: none;
  border-radius: 8px;
  padding: 10px 20px;
}
.btn-gradient:hover {
  transform: none;
  box-shadow: none;
  background: #2c5282;
  opacity: 0.95;
}

/* 卡片悬浮上浮 */
.card-hover {
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.card-hover:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 28px rgba(0,0,0,0.12);
}

/* 玻璃拟态 */
.glass {
  background: rgba(255,255,255,0.7);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid rgba(255,255,255,0.3);
  box-shadow: 0 8px 32px rgba(0,0,0,0.08);
}
.glass-dark {
  background: rgba(30,58,95,0.85);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid rgba(255,255,255,0.2);
  color: #fff;
}

/* 3D 任务卡 - 卡片叠加(5 张堆叠 + 中间最大 + 点击翻转) */
.stack-wrap {
  background: linear-gradient(135deg, #0a0e27 0%, #1a1f4a 100%);
  border-radius: 12px;
  border: 1px solid #1e2654;
  position: relative;
  overflow: hidden;
}
.stack-inner { position: relative; width: 100%; height: 100%; perspective: 1200px; }
.stack-card {
  position: absolute;
  width: 200px;
  height: 160px;
  left: 50%;
  top: 50%;
  border-radius: 14px;
  border: 2px solid rgba(var(--color-card), 0.6);
  box-shadow: 0 8px 24px rgba(var(--color-card), 0.3);
  transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  transform-style: preserve-3d;
}
.stack-card.center {
  transform: translate(-50%, -50%) scale(1);
  z-index: 10;
  opacity: 1;
  filter: brightness(1);
  border-color: rgba(var(--color-card), 0.9);
  box-shadow: 0 12px 32px rgba(var(--color-card), 0.5);
}
.stack-card.center::before {
  content: '';
  position: absolute;
  inset: -2px;
  border-radius: 16px;
  padding: 2px;
  background: linear-gradient(45deg,
    rgba(var(--color-card), 0.8),
    rgba(255, 255, 255, 0.6),
    rgba(var(--color-card), 0.8),
    rgba(0, 255, 234, 0.8),
    rgba(var(--color-card), 0.8));
  background-size: 300% 300%;
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  animation: border-glow 4s linear infinite;
  pointer-events: none;
  z-index: 11;
}
@keyframes border-glow {
  0% { background-position: 0% 50%; }
  100% { background-position: 300% 50%; }
}
.stack-card.left-1 {
  transform: translate(-150%, -50%) scale(0.85) translateX(-30px) rotateY(20deg);
  z-index: 5;
  opacity: 0.55;
  filter: brightness(0.7);
}
.stack-card.left-2 {
  transform: translate(-220%, -50%) scale(0.65) translateX(-60px) rotateY(30deg);
  z-index: 2;
  opacity: 0.35;
  filter: brightness(0.5);
  pointer-events: none;
}
.stack-card.right-1 {
  transform: translate(50%, -50%) scale(0.85) translateX(30px) rotateY(-20deg);
  z-index: 5;
  opacity: 0.55;
  filter: brightness(0.7);
}
.stack-card.right-2 {
  transform: translate(120%, -50%) scale(0.65) translateX(60px) rotateY(-30deg);
  z-index: 2;
  opacity: 0.35;
  filter: brightness(0.5);
  pointer-events: none;
}
.card-flipper {
  position: relative;
  width: 100%;
  height: 100%;
  transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
  transform-style: preserve-3d;
  border-radius: 14px;
  cursor: pointer;
}
.card-flipper.flipped { transform: rotateY(180deg); }
.card-face {
  position: absolute;
  inset: 0;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
  border-radius: 12px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 10px;
}
.card-face.front {
  background: linear-gradient(135deg, rgba(var(--color-card), 0.6) 0%, rgba(var(--color-card), 1) 100%);
}
.card-face.back {
  transform: rotateY(180deg);
  background: linear-gradient(135deg, #0a0e27 0%, #1a1f4a 100%);
  border: 2px solid rgba(var(--color-card), 0.8);
  padding: 14px;
}
.face-priority {
  position: absolute; top: 6px; left: 6px;
  background: rgba(255,255,255,0.35); color: #fff;
  font-size: 9px; padding: 2px 6px; border-radius: 6px; font-weight: 700;
  z-index: 2;
}
.face-status {
  position: absolute; top: 6px; right: 6px;
  font-size: 9px; padding: 2px 6px; border-radius: 6px; font-weight: 700;
  z-index: 2;
}
.face-icon { font-size: 32px; margin-bottom: 4px; }
.face-title { font-size: 12px; font-weight: 700; color: #fff; line-height: 1.2; margin-bottom: 2px; max-width: 90%; }
.face-sub { font-size: 10px; color: rgba(255,255,255,0.85); }
.face-tag { font-size: 9px; background: rgba(255,255,255,0.3); color: #fff; padding: 2px 6px; border-radius: 6px; margin-top: 3px; }
.face-hint { font-size: 9px; color: rgba(255,255,255,0.6); margin-top: 4px; }
.back-title { font-size: 13px; font-weight: 700; color: #fff; margin-bottom: 6px; line-height: 1.3; }
.back-meta { font-size: 10px; color: rgba(255,255,255,0.7); line-height: 1.5; margin-bottom: 10px; }
.back-action {
  background: linear-gradient(135deg, rgba(var(--color-card), 0.9), rgba(var(--color-card), 0.6));
  color: #fff;
  border: none;
  padding: 8px 20px;
  border-radius: 20px;
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
  box-shadow: 0 4px 12px rgba(var(--color-card), 0.4);
  transition: all 0.2s;
}
.back-action:hover { transform: scale(1.08); }
.back-hint { font-size: 9px; color: rgba(255,255,255,0.4); margin-top: 6px; }
.stack-nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 32px;
  height: 32px;
  background: rgba(0, 188, 212, 0.2);
  border: 1px solid #00bcd4;
  color: #00bcd4;
  border-radius: 50%;
  font-size: 18px;
  font-weight: 700;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 20;
  transition: all 0.2s;
}
.stack-nav:hover { background: rgba(0, 188, 212, 0.4); }
.stack-nav.prev { left: 6px; }
.stack-nav.next { right: 6px; }
.stack-dot {
  width: 6px;
  height: 6px;
  background: #2d3870;
  border-radius: 50%;
  transition: all 0.3s;
  cursor: pointer;
}
.stack-dot.active { background: #00bcd4; width: 18px; border-radius: 3px; }
@keyframes count-pulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.15); color: #f57c00; }
  100% { transform: scale(1); }
}
.count-pulse {
  animation: count-pulse 0.6s ease;
  display: inline-block;
}

/* 流光进度条 */
.progress-shine {
  background: #eef0f3;
  height: 14px;
  border-radius: 7px;
  overflow: hidden;
  position: relative;
  box-shadow: inset 0 1px 2px rgba(0,0,0,0.08);
}
.progress-shine-fill {
  height: 100%;
  background: linear-gradient(90deg, #00bcd4, #4dabf7, #00bcd4);
  background-size: 200% 100%;
  border-radius: 7px;
  position: relative;
  animation: shine-flow 2s linear infinite;
  transition: width 1.5s ease;
  min-width: 4px;
}
.progress-shine-fill::after {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.5), transparent);
  animation: shine-sweep 1.5s linear infinite;
}
@keyframes shine-flow {
  0% { background-position: 0% 0; }
  100% { background-position: 200% 0; }
}
@keyframes shine-sweep {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(100%); }
}

/* 脉冲徽章 */
.badge-pulse2 {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: rgba(255,51,102,0.12);
  color: #dc3545;
  padding: 4px 10px;
  border-radius: 20px;
  font-size: 12px;
  font-weight: 700;
  border: 1px solid #dc3545;
  position: relative;
}
.badge-pulse2 .dot {
  width: 8px;
  height: 8px;
  background: #dc3545;
  border-radius: 50%;
  box-shadow: 0 0 8px rgba(220,53,69,0.6);
  animation: dot-pulse 1.5s infinite;
}
@keyframes dot-pulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.3); }
}

/* tabs */
.role-tabs {
  background: #fff;
  display: flex;
  border-bottom: 1px solid #e8ecf1;
  position: sticky;
  top: 190px;
  z-index: 99;
}

/* 快捷入口 */
.quick-entry {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  padding: 12px;
  background: #fff;
  margin-bottom: 4px;
  border-bottom: 1px solid #f0f2f5;
}
.quick-btn {
  color: #fff;
  padding: 14px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
  background: #2c5282;
}
.quick-btn.primary { background: #1e3a5f; }
.quick-btn.success { background: #28a745; }
.quick-btn.warn { background: #dc3545; }
.quick-icon { font-size: 26px; }
.quick-title { font-size: 15px; font-weight: 600; }
.quick-sub { font-size: 11px; opacity: 0.9; margin-top: 1px; }
.role-tabs .tab {
  flex: 1;
  padding: 12px 0;
  text-align: center;
  font-size: 13px;
  color: #7a8a9a;
  border-bottom: 2px solid transparent;
  transition: all 0.2s;
}
.role-tabs .tab.active {
  color: #2c5282;
  border-bottom-color: #2c5282;
  font-weight: 600;
}

/* 内容区 */
.app-content { padding: 16px; margin-top: 4px; }

/* 底部导航 */
.bottom-nav-fixed {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background: #fff;
  border-top: 1px solid #e8ecf1;
  display: flex;
  z-index: 100;
}
.nav-item {
  flex: 1;
  padding: 6px 0;
  text-align: center;
  font-size: 11px;
  color: #7a8a9a;
}
.nav-item.active { color: #2c5282; }
.nav-item .nav-icon {
  font-size: 18px;
  margin-bottom: 2px;
  font-weight: 700;
  line-height: 22px;
}

/* 卡片 */
.card {
  background: #fff;
  border-radius: 14px;
  padding: 16px;
  margin-bottom: 14px;
  box-shadow: 0 4px 16px rgba(30, 58, 95, 0.06);
  border: 1px solid rgba(30, 58, 95, 0.05);
  transition: box-shadow 0.2s, transform 0.2s;
}
.card:hover {
  box-shadow: 0 6px 20px rgba(30, 58, 95, 0.1);
}
.task-card {
  border-radius: 12px !important;
  transition: all 0.2s;
  border: 1px solid rgba(30, 58, 95, 0.08) !important;
}
.task-card:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(30, 58, 95, 0.08) !important;
}
.btn {
  transition: all 0.15s;
}
.btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 2px 6px rgba(0,0,0,0.1);
}
.btn:active {
  transform: translateY(0);
}
.status-bar .status-item {
  border-radius: 12px;
  transition: all 0.2s;
}
.status-bar .status-item:hover {
  transform: scale(1.02);
}
.simple-bar-card {
  border-radius: 14px;
  box-shadow: 0 4px 16px rgba(30, 58, 95, 0.06);
  border: 1px solid rgba(30, 58, 95, 0.05);
  background: #fff;
}
/* V1.1001-BGRAYS23 B5: 顶栏改为白底 + 1px 下灰边 (覆盖 L150 声明,去饱和深蓝渐变/shadow) */
.app-header {
  background: #ffffff !important;
  color: #1a1a1a !important;
  border-bottom: 1px solid #e5e5e5 !important;
  box-shadow: none !important;
  background-image: none !important;
}
/* V1.1001-BGRAYS23 B5: 底部导航纯 #fff + 1px 浅灰顶边,去投影/渐变,微信 TabBar 风 */
.nav-bar {
  background: #ffffff;
  border-top: 1px solid #e5e5e5;
  box-shadow: none;
}
input, select, textarea {
  transition: border-color 0.15s, box-shadow 0.15s;
}
input:focus, select:focus, textarea:focus {
  border-color: #1e3a5f !important;
  box-shadow: 0 0 0 3px rgba(30, 58, 95, 0.1);
}
.card-title {
  font-size: 15px;
  font-weight: 600;
  margin-bottom: 10px;
  color: #1e3a5f;
}

/* 任务卡 */
.task-card.is-rejected { background: #f5f5f5 !important; }
.task-card.is-done { background: #f0f0f0 !important; opacity: 0.7; }

/* V1.1001-A: 任务行状态 class */
.row-base { padding:12px 16px; border-bottom:1px solid #ececec; cursor:pointer; display:flex; align-items:center; }
.row-done { background:#f0f0f0; opacity:0.7; }
.audit-row { padding:12px 16px; border-bottom:1px solid #ececec; cursor:pointer; display:flex; align-items:flex-start; }
.audit-row-done { background:#f0f0f0; opacity:0.7; }
.audit-row-rejected { background:#f5f5f5; }
.audit-row-actioning { background:#fafafa; opacity:0.6; }
.row-rejected { background:#f5f5f5; }
.row-actioning { background:#fafafa; opacity:0.6; }
.row-base-grid { padding:10px 16px 10px 32px; border-bottom:1px solid #ececec; cursor:pointer; font-size:13px; display:flex; align-items:center; }
.row-done-grid { background:#f0f0f0; opacity:0.7; }
.row-rejected-grid { background:#f5f5f5; }
.row-base-admin { margin-bottom:8px; padding:10px; border-bottom:1px solid #f0f2f5; }
.row-done-admin { background:#f0f0f0; opacity:0.7; }
.row-rejected-admin { background:#f5f5f5; }

.task-card {
  background: #fff;
  border-radius: 12px;
  padding: 16px;
  margin-bottom: 12px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
  border-left: 4px solid #2c5282;
}
.task-card.priority-A { border-left-color: #dc3545; }
.task-card.priority-B { border-left-color: #ffc107; }
.task-card.done { opacity: 0.7; border-left-color: #28a745; }
.task-card.rejected { border-left-color: #dc3545; }

.task-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 10px;
}
.task-title {
  font-size: 15px;
  font-weight: 600;
  color: #1e3a5f;
  flex: 1;
}
.task-badges { display: flex; gap: 6px; flex-shrink: 0; }
.badge {
  padding: 2px 8px;
  border-radius: 4px;
  font-size: 11px;
  font-weight: 500;
}
.badge-A { background: #ffe5e8; color: #dc3545; }
.badge-B { background: #fff4d4; color: #b88b00; }
.badge-status { background: #1976d2 !important; color: #fff !important; }
.badge-done { background: #28a745 !important; color: #fff !important; font-weight: 600 !important; }
.badge-pending { background: #ffc107 !important; color: #000 !important; font-weight: 600 !important; }
.badge-rejected { background: #dc3545 !important; color: #fff !important; font-weight: 600 !important; }

.task-meta {
  display: flex;
  gap: 12px;
  font-size: 12px;
  color: #7a8a9a;
  margin-bottom: 10px;
  flex-wrap: wrap;
}
.task-meta-item { display: flex; align-items: center; gap: 4px; }

.task-content {
  font-size: 13px;
  color: #4a5b6a;
  line-height: 1.7;
  margin-bottom: 10px;
  white-space: pre-wrap;
  background: #f8f9fb;
  padding: 10px;
  border-radius: 6px;
}

.task-attachments {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin: 10px 0;
}
.thumb {
  width: 60px;
  height: 60px;
  border-radius: 6px;
  object-fit: cover;
  border: 1px solid #e8ecf1;
}

.task-actions {
  display: flex;
  gap: 8px;
  margin-top: 12px;
}
.task-actions .btn { flex: 1; }

/* 状态栏 */
.status-bar {
  background: #fff;
  border-radius: 12px;
  padding: 18px 12px;
  margin-bottom: 12px;
  display: flex;
  justify-content: space-around;
  text-align: center;
  box-shadow: 0 2px 8px rgba(30, 58, 95, 0.08);
}
.status-item {
  flex: 1;
  padding: 6px 4px;
  border-radius: 6px;
  transition: all 0.2s;
}
.status-item:hover {
  background: #f8f9fb;
}
.status-item .num {
  font-size: 18px;
  font-weight: 700;
  color: #1e3a5f;
  line-height: 1.2;
  word-break: break-all;
}
.status-item .label {
  font-size: 11px;
  color: #5a6b7a;
  margin-top: 3px;
  font-weight: 400;
}
/* 筛选条(可点击) — 选中时用 inline color;这里让 num/label 颜色继承父 */
.filter-bar .num,
.filter-bar .label {
  color: inherit;
}
.status-item.danger .num { color: #dc3545; }
.status-item.warn .num { color: #b88b00; }
.status-item.success .num { color: #28a745; }

/* 空状态 */
.empty {
  text-align: center;
  padding: 60px 20px;
  color: #aab4be;
}
.empty-icon { font-size: 48px; margin-bottom: 12px; }
.empty-text { font-size: 14px; }

/* Uiverse 4 色 morph loader (cosnametv) - 审核 TAB 用 */
.morph-loader {
  width: 80px;
  height: 80px;
  border-radius: 50%;
  border: 8px solid transparent;
  border-top: 8px solid #3498db;
  border-right: 8px solid #e74c3c;
  border-bottom: 8px solid #2ecc71;
  border-left: 8px solid #f39c12;
  animation:
    rotate-color 2s linear infinite,
    morph 2s ease-in-out infinite;
  margin: 0 auto 12px;
}
@keyframes rotate-color {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
@keyframes morph {
  0%, 100% { border-radius: 50%; width: 80px; height: 80px; }
  50% { border-radius: 10%; width: 100px; height: 100px; }
}

/* Uiverse 星星背景 (sinful_9361) - 登录页用 */
.stars-container {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  background: radial-gradient(ellipse at bottom, #321b35 0%, #090a0f 100%);
  overflow: hidden;
  z-index: -1;
}
#stars, #stars2, #stars3 {
  position: absolute;
  background: transparent;
  border-radius: 50%;
  pointer-events: none;
}
#stars { width: 1px; height: 1px;
  box-shadow: 501px 811px #fff, 1450px 1324px #fff, 1093px 1780px #fff, 1469px 678px #fff, 904px 741px #fff, 1160px 781px #fff, 1841px 1962px #fff, 1630px 1667px #fff, 1788px 676px #fff, 367px 1734px #fff, 1343px 156px #fff, 1283px 1142px #fff, 1062px 378px #fff, 1395px 467px #fff, 1017px 1891px #fff, 137px 1114px #fff, 1767px 1403px #fff, 1543px 11px #fff, 1078px 181px #fff, 1189px 1574px #fff, 1697px 1551px #fff, 439px 472px #fff, 1491px 677px #fff, 1364px 599px #fff, 34px 382px #fff, 1221px 1584px #fff, 1266px 1499px #fff, 169px 1907px #fff, 1219px 1125px #fff, 659px 18px #fff, 1731px 1959px #fff, 332px 1216px #fff, 1913px 788px #fff, 80px 712px #fff, 326px 1605px #fff, 574px 1502px #fff, 473px 1653px #fff, 404px 975px #fff, 322px 1797px #fff, 425px 1321px #fff, 1121px 1797px #fff, 731px 647px #fff, 891px 1584px #fff, 1523px 109px #fff, 1379px 244px #fff, 865px 1064px #fff, 493px 956px #fff, 624px 1380px #fff, 440px 619px #fff, 1630px 767px #fff, 955px 1196px #fff, 62px 729px #fff, 126px 946px #fff, 1256px 896px #fff, 1444px 256px #fff, 661px 1628px #fff, 1078px 1716px #fff, 300px 737px #fff, 1734px 413px #fff, 1296px 129px #fff, 1771px 1678px #fff, 977px 1764px #fff, 1879px 549px #fff, 665px 1531px #fff, 89px 701px #fff, 1084px 1183px #fff, 1597px 1576px #fff, 1354px 1774px #fff, 554px 1471px #fff, 1469px 287px #fff, 887px 106px #fff, 1962px 766px #fff, 638px 805px #fff, 1651px 741px #fff, 1517px 1826px #fff, 24px 1152px #fff, 507px 558px #fff, 1262px 652px #fff, 246px 1048px #fff, 1077px 421px #fff, 1866px 1847px #fff, 1986px 1561px #fff, 704px 632px #fff, 1991px 1875px #fff, 1227px 395px #fff, 45px 1116px #fff, 247px 786px #fff, 890px 607px #fff, 787px 1235px #fff, 557px 524px #fff, 1582px 1285px #fff, 1725px 1366px #fff, 952px 747px #fff, 251px 458px #fff, 1500px 1250px #fff, 1999px 1734px #fff, 1336px 1955px #fff, 1705px 1464px #fff, 728px 697px #fff, 594px 510px #fff, 1345px 1990px #fff, 1919px 1803px #fff, 1117px 966px #fff, 1629px 97px #fff, 1046px 1196px #fff, 810px 1092px #fff, 722px 976px #fff, 406px 18px #fff, 1665px 1860px #fff, 1758px 1628px #fff, 1183px 463px #fff, 564px 239px #fff, 13px 1767px #fff, 1482px 1472px #fff, 1700px 347px #fff, 1362px 244px #fff, 1141px 1708px #fff, 22px 885px #fff, 374px 1309px #fff, 1034px 1037px #fff, 1725px 1086px #fff, 1343px 1921px #fff, 596px 903px #fff, 1061px 478px #fff, 18px 1409px #fff, 729px 1364px #fff, 264px 911px #fff, 677px 1442px #fff, 123px 33px #fff, 1303px 646px #fff, 1945px 792px #fff, 1305px 938px #fff, 918px 1536px #fff, 620px 948px #fff, 183px 646px #fff, 695px 687px #fff, 881px 272px #fff, 1521px 1212px #fff, 1423px 1022px #fff, 1545px 1271px #fff, 1393px 348px #fff, 685px 1910px #fff, 1446px 856px #fff, 73px 1201px #fff, 736px 999px #fff, 673px 796px #fff, 469px 850px #fff, 1912px 142px #fff, 1278px 664px #fff, 184px 1990px #fff, 1173px 1312px #fff, 782px 1879px #fff, 323px 1035px #fff, 611px 908px #fff, 565px 1449px #fff, 748px 1713px #fff, 1047px 490px #fff, 1040px 1872px #fff, 1818px 1659px #fff, 1806px 1327px #fff, 386px 575px #fff, 1550px 463px #fff, 148px 687px #fff, 651px 1683px #fff, 1588px 1194px #fff, 1831px 2px #fff, 581px 876px #fff, 1396px 1743px #fff, 1212px 1810px #fff, 421px 1920px #fff, 658px 1461px #fff, 1859px 1809px #fff, 1456px 388px #fff, 186px 1627px #fff, 1528px 1145px #fff, 171px 97px #fff, 674px 1072px #fff, 676px 1052px #fff, 1165px 1131px #fff, 1088px 781px #fff, 1231px 948px #fff, 330px 257px #fff, 426px 1046px #fff, 549px 652px #fff, 1338px 74px #fff, 1749px 364px #fff, 931px 369px #fff, 383px 1428px #fff, 1558px 389px #fff, 927px 133px #fff, 234px 1888px #fff, 1785px 1617px #fff, 556px 643px #fff, 401px 275px #fff, 406px 1644px #fff, 1253px 1852px #fff, 1599px 883px #fff, 744px 1721px #fff, 524px 1297px #fff, 1226px 1177px #fff, 1679px 55px #fff, 874px 1811px #fff, 838px 790px #fff, 1241px 430px #fff, 1676px 652px #fff, 1191px 568px #fff, 53px 1990px #fff, 1163px 237px #fff, 61px 223px #fff, 592px 456px #fff, 1844px 271px #fff, 1324px 1488px #fff, 1373px 717px #fff, 1822px 709px #fff, 1464px 941px #fff, 1445px 1118px #fff, 991px 1414px #fff, 1964px 1076px #fff, 108px 172px #fff, 641px 1722px #fff, 1539px 427px #fff, 1697px 45px #fff, 1301px 1353px #fff, 1060px 329px #fff, 967px 1396px #fff, 493px 301px #fff, 1228px 1406px #fff, 1211px 1653px #fff, 444px 1822px #fff, 1746px 353px #fff, 1449px 381px #fff, 671px 887px #fff, 650px 138px #fff, 30px 1839px #fff, 1094px 1405px #fff, 273px 796px #fff, 1618px 1964px #fff, 1045px 1849px #fff, 1472px 1155px #fff, 1529px 1312px #fff, 728px 448px #fff, 44px 1908px #fff, 691px 818px #fff, 254px 293px #fff, 1981px 1133px #fff, 1307px 375px #fff, 196px 316px #fff, 1241px 1975px #fff, 1138px 1706px #fff, 1769px 463px #fff, 1768px 1428px #fff, 1730px 590px #fff, 1780px 523px #fff, 1862px 1526px #fff, 1613px 909px #fff, 1266px 1781px #fff, 470px 352px #fff, 699px 1682px #fff, 1002px 614px #fff, 1209px 133px #fff, 1842px 518px #fff, 1422px 1836px #fff, 1720px 1901px #fff, 470px 1788px #fff, 1355px 1387px #fff, 146px 1162px #fff, 933px 80px #fff, 681px 1063px #fff, 313px 1341px #fff, 740px 1498px #fff, 168px 1014px #fff, 345px 1355px #fff, 1498px 1562px #fff, 1626px 1358px #fff, 890px 403px #fff, 663px 562px #fff, 1481px 168px #fff, 22px 719px #fff, 774px 1041px #fff, 1899px 829px #fff, 430px 158px #fff, 430px 361px #fff, 1592px 1334px #fff, 224px 323px #fff, 1639px 1131px #fff, 7px 271px #fff, 1646px 1514px #fff, 1605px 1444px #fff, 1820px 1665px #fff, 1549px 1641px #fff, 1609px 1377px #fff, 486px 1098px #fff, 229px 613px #fff, 542px 1694px #fff, 318px 256px #fff, 1861px 918px #fff, 889px 892px #fff, 442px 1524px #fff, 19px 422px #fff, 1935px 1908px #fff, 828px 109px #fff, 862px 1248px #fff, 1275px 560px #fff, 906px 63px #fff, 337px 1605px #fff, 1691px 918px #fff, 1414px 679px #fff, 1726px 749px #fff, 1540px 1149px #fff, 1337px 1466px #fff, 446px 430px #fff, 676px 1616px #fff, 840px 326px #fff, 976px 977px #fff, 1840px 642px #fff, 1273px 804px #fff, 1071px 928px #fff, 1292px 1675px #fff, 29px 1148px #fff, 1585px 135px #fff, 1007px 563px #fff, 1035px 78px #fff, 1174px 574px #fff, 120px 1304px #fff, 845px 1292px #fff, 861px 540px #fff, 234px 232px #fff, 1940px 1367px #fff, 759px 639px #fff, 1775px 1381px #fff, 906px 372px #fff, 1104px 1165px #fff, 1524px 911px #fff, 1882px 330px #fff, 1389px 700px #fff, 300px 1629px #fff, 220px 1614px #fff, 563px 140px #fff, 1611px 1586px #fff, 793px 1316px #fff, 325px 1070px #fff, 1722px 1462px #fff, 1406px 1120px #fff, 1169px 1768px #fff, 1956px 1053px #fff, 959px 1587px #fff, 585px 1566px #fff, 370px 204px #fff, 1606px 1416px #fff, 443px 1606px #fff, 1499px 1102px #fff, 1943px 105px #fff, 1121px 1594px #fff, 1512px 32px #fff, 871px 1425px #fff, 433px 100px #fff, 294px 1471px #fff, 1688px 1755px #fff, 1666px 591px #fff, 1034px 300px #fff, 734px 1178px #fff, 1342px 313px #fff, 1616px 1590px #fff, 1763px 1472px #fff, 632px 1935px #fff, 1708px 872px #fff, 1871px 915px #fff, 1829px 1020px #fff, 1599px 578px #fff, 42px 585px #fff, 1163px 1382px #fff, 1744px 1272px #fff, 984px 1426px #fff, 1786px 1584px #fff, 1813px 379px #fff, 1867px 1127px #fff, 97px 567px #fff, 626px 988px #fff, 1178px 79px #fff, 1703px 211px #fff, 961px 1785px #fff, 110px 975px #fff, 953px 1941px #fff, 1027px 1790px #fff, 1665px 107px #fff, 11px 964px #fff, 1718px 1147px #fff, 21px 1728px #fff, 1358px 1922px #fff, 872px 65px #fff, 1191px 1635px #fff, 762px 681px #fff, 1519px 1033px #fff, 906px 566px #fff, 1074px 657px #fff, 1093px 415px #fff, 51px 198px #fff, 1075px 1418px #fff, 1547px 1070px #fff, 225px 920px #fff, 850px 1974px #fff, 981px 595px #fff, 1425px 131px #fff, 460px 917px #fff, 56px 495px #fff, 714px 428px #fff, 920px 493px #fff, 470px 1521px #fff, 532px 821px #fff, 1905px 71px #fff, 883px 1501px #fff, 294px 196px #fff, 381px 1999px #fff, 332px 793px #fff, 1246px 408px #fff, 233px 149px #fff, 315px 231px #fff, 1594px 1302px #fff, 696px 1585px #fff, 791px 136px #fff, 479px 199px #fff, 1627px 1413px #fff, 1824px 924px #fff, 1631px 342px #fff, 1251px 1151px #fff, 284px 1781px #fff, 497px 1052px #fff, 204px 1161px #fff, 646px 1499px #fff, 1762px 558px #fff, 854px 1833px #fff, 883px 945px #fff, 44px 982px #fff, 1101px 834px #fff, 515px 1748px #fff, 1578px 1435px #fff, 819px 1258px #fff, 776px 670px #fff, 115px 385px #fff, 1478px 434px #fff, 885px 20px #fff, 192px 1513px #fff, 78px 1129px #fff, 1774px 1105px #fff, 955px 1149px #fff, 1817px 1929px #fff, 1106px 1832px #fff, 1107px 1997px #fff, 94px 23px #fff, 243px 982px #fff, 43px 1972px #fff, 1798px 673px #fff, 1131px 1589px #fff, 841px 14px #fff, 826px 345px #fff, 687px 56px #fff, 1084px 32px #fff, 1887px 1878px #fff, 153px 526px #fff, 1828px 253px #fff, 1947px 1105px #fff, 886px 700px #fff, 1307px 1723px #fff, 1274px 651px #fff, 1530px 837px #fff, 1699px 1637px #fff, 1703px 1331px #fff, 1929px 1557px #fff, 1763px 737px #fff, 1118px 1680px #fff, 1545px 692px #fff, 1462px 1092px #fff, 208px 1667px #fff, 1393px 859px #fff, 186px 1794px #fff, 351px 1199px #fff, 642px 1995px #fff, 1061px 1726px #fff, 1708px 115px #fff, 1233px 1305px #fff, 637px 1786px #fff, 1730px 603px #fff, 75px 1240px #fff, 1704px 1326px #fff, 584px 346px #fff, 438px 1554px #fff, 561px 513px #fff, 1382px 225px #fff, 467px 1674px #fff, 1403px 815px #fff, 1546px 1835px #fff, 127px 1119px #fff, 276px 591px #fff, 688px 1458px #fff, 765px 646px #fff, 474px 984px #fff, 171px 361px #fff, 94px 1480px #fff, 1962px 1666px #fff, 909px 1037px #fff, 1725px 222px #fff, 253px 1355px #fff, 1892px 1901px #fff, 275px 1847px #fff, 28px 1184px #fff, 1725px 1382px #fff, 882px 647px #fff, 1935px 1046px #fff, 10px 344px #fff, 292px 1328px #fff, 127px 1352px #fff, 752px 929px #fff, 1589px 384px #fff, 284px 1829px #fff, 381px 820px #fff, 1229px 1125px #fff, 777px 429px #fff, 1811px 1499px #fff, 1573px 287px #fff, 295px 756px #fff, 389px 616px #fff, 781px 41px #fff, 1092px 333px #fff, 794px 1588px #fff, 386px 1847px #fff, 1802px 710px #fff, 662px 60px #fff, 640px 264px #fff, 463px 746px #fff, 1859px 799px #fff, 763px 37px #fff, 639px 396px #fff, 357px 1071px #fff, 1190px 1430px #fff, 1814px 257px #fff, 1382px 235px #fff, 606px 1304px #fff, 1939px 1470px #fff, 1124px 349px #fff, 307px 1567px #fff, 310px 1323px #fff, 1145px 922px #fff, 1196px 1922px #fff, 1647px 544px #fff, 788px 1337px #fff, 257px 632px #fff, 1413px 414px #fff, 590px 620px #fff, 582px 794px #fff, 1702px 1481px #fff, 1055px 53px #fff, 157px 346px #fff, 50px 1901px #fff, 1038px 1369px #fff, 796px 1941px #fff, 215px 194px #fff, 1567px 1538px #fff, 367px 800px #fff, 1044px 489px #fff, 1109px 1712px #fff, 524px 327px #fff, 525px 1252px #fff, 1475px 1240px #fff, 529px 436px #fff, 795px 834px #fff, 122px 1371px #fff, 79px 482px #fff, 520px 1249px #fff, 336px 1878px #fff, 188px 944px #fff, 325px 1259px #fff, 1491px 1942px #fff, 620px 1054px #fff, 1606px 1153px #fff, 1448px 502px #fff, 53px 1381px #fff, 107px 1670px #fff, 1380px 618px #fff, 967px 1557px #fff, 1116px 1722px #fff, 1174px 1044px #fff, 1805px 717px #fff, 663px 394px #fff, 1848px 1007px #fff, 389px 802px #fff, 49px 392px #fff, 1650px 852px #fff, 1678px 1012px #fff, 335px 1009px #fff, 1818px 1631px #fff, 1568px 742px #fff, 1162px 1991px #fff, 52px 1190px #fff, 1401px 928px #fff, 119px 1549px #fff, 537px 1529px #fff, 2px 1709px #fff, 122px 387px #fff, 543px 2px #fff, 27px 1971px #fff, 507px 1377px #fff, 1362px 1080px #fff, 1031px 1544px #fff, 1631px 1174px #fff, 1603px 312px #fff, 1626px 1422px #fff, 1430px 615px #fff, 1958px 1431px #fff, 1946px 1412px #fff, 1848px 247px #fff, 984px 1808px #fff, 1396px 225px #fff, 319px 717px #fff, 1252px 875px #fff, 1619px 156px #fff, 951px 1971px #fff, 386px 355px #fff, 1406px 1151px #fff, 273px 1538px #fff, 844px 1570px #fff, 947px 151px #fff, 1363px 525px #fff, 209px 307px #fff, 1923px 1718px #fff, 993px 1741px #fff, 1513px 353px #fff, 1353px 61px #fff, 664px 352px #fff, 1382px 359px #fff, 1487px 1707px #fff, 657px 1045px #fff, 1107px 490px #fff, 1834px 1176px #fff, 837px 1438px #fff, 1947px 448px #fff, 1196px 333px #fff, 151px 555px #fff, 18px 992px #fff, 458px 748px #fff, 1801px 890px #fff, 1093px 1012px #fff, 315px 1101px #fff, 194px 323px #fff, 754px 292px #fff, 1737px 7px #fff, 40px 840px #fff, 1170px 805px #fff, 176px 1753px #fff, 805px 1148px #fff, 1578px 1271px #fff, 367px 1494px #fff, 363px 1111px #fff, 1955px 243px #fff, 1451px 1093px #fff, 375px 617px #fff, 1223px 720px #fff, 1178px 13px #fff, 1456px 865px #fff, 1440px 49px #fff, 186px 1569px #fff, 320px 1853px #fff, 300px 539px #fff, 1559px 509px #fff, 1985px 1108px #fff, 1588px 828px #fff, 525px 1432px #fff, 831px 363px #fff, 141px 281px #fff, 1319px 402px #fff, 40px 456px #fff, 1955px 478px #fff, 1758px 818px #fff, 1924px 688px #fff, 1030px 953px #fff, 1982px 210px #fff, 917px 1401px #fff, 1051px 1837px #fff, 1045px 463px #fff, 1744px 573px #fff, 529px 1530px #fff, 542px 469px #fff, 1982px 324px #fff, 1902px 1422px #fff, 1968px 782px #fff, 1666px 1561px #fff, 955px 304px #fff, 323px 778px #fff, 272px 443px #fff, 485px 581px #fff, 1353px 1058px #fff, 1257px 131px #fff, 434px 98px #fff, 1587px 1953px #fff, 1749px 68px #fff, 1984px 839px #fff, 1518px 183px #fff, 1071px 855px #fff, 1662px 1994px #fff, 1111px 106px #fff, 1954px 838px #fff;
  animation: animStar 50s linear infinite;
}
#stars2 { width: 2px; height: 2px;
  box-shadow: 1925px 1320px #fff, 693px 1778px #fff, 1016px 711px #fff, 1171px 563px #fff, 661px 1919px #fff, 1610px 44px #fff, 1275px 140px #fff, 1208px 1802px #fff, 1473px 1587px #fff, 11px 1117px #fff, 853px 1757px #fff, 1149px 937px #fff, 1353px 428px #fff, 270px 279px #fff, 258px 1404px #fff, 417px 1188px #fff, 286px 561px #fff, 393px 1765px #fff, 147px 881px #fff, 666px 1097px #fff, 1425px 1278px #fff, 806px 156px #fff, 1252px 561px #fff, 218px 52px #fff, 1371px 1980px #fff, 171px 745px #fff, 1424px 89px #fff, 137px 244px #fff, 939px 1922px #fff, 137px 1080px #fff, 1757px 50px #fff, 904px 536px #fff, 1938px 1001px #fff, 1172px 440px #fff, 72px 1475px #fff, 102px 121px #fff, 804px 1671px #fff, 1314px 270px #fff, 440px 1341px #fff, 1216px 511px #fff, 1061px 1523px #fff, 97px 274px #fff, 704px 1318px #fff, 52px 1872px #fff, 1962px 296px #fff, 111px 289px #fff, 1157px 1236px #fff, 1347px 1451px #fff, 820px 286px #fff, 1389px 1169px #fff, 644px 841px #fff, 1286px 522px #fff, 955px 659px #fff, 428px 1805px #fff, 237px 557px #fff, 1689px 1058px #fff, 636px 1882px #fff, 1349px 1664px #fff, 1548px 432px #fff, 1841px 504px #fff, 302px 252px #fff, 827px 1765px #fff, 620px 123px #fff, 207px 748px #fff, 1454px 1234px #fff, 1967px 1790px #fff, 542px 33px #fff, 742px 1214px #fff, 255px 1402px #fff, 74px 1772px #fff, 699px 475px #fff, 980px 1253px #fff, 534px 1676px #fff, 909px 202px #fff, 1498px 1251px #fff, 1796px 120px #fff, 1409px 1263px #fff, 1627px 995px #fff, 969px 710px #fff, 1674px 676px #fff, 1832px 759px #fff, 1623px 563px #fff, 251px 1790px #fff, 96px 1688px #fff, 886px 239px #fff, 778px 150px #fff, 1767px 430px #fff, 765px 1259px #fff, 1189px 877px #fff, 444px 1629px #fff, 1560px 324px #fff, 1952px 1097px #fff, 712px 1173px #fff, 541px 911px #fff, 827px 1420px #fff, 1233px 285px #fff, 784px 546px #fff, 645px 285px #fff, 1273px 1255px #fff, 1821px 174px #fff, 221px 1795px #fff, 1004px 456px #fff, 1298px 941px #fff, 274px 387px #fff, 174px 376px #fff, 1491px 258px #fff, 1489px 1946px #fff, 1134px 1382px #fff, 1289px 1145px #fff, 464px 358px #fff, 1249px 1842px #fff, 1665px 831px #fff, 1982px 84px #fff, 541px 774px #fff, 1994px 523px #fff, 762px 1644px #fff, 1730px 867px #fff, 1951px 1287px #fff, 911px 1691px #fff, 1454px 725px #fff, 1287px 1940px #fff, 70px 564px #fff, 1980px 638px #fff, 1674px 1774px #fff, 1720px 116px #fff, 1747px 182px #fff, 1040px 450px #fff, 1795px 375px #fff, 857px 1471px #fff, 1326px 1730px #fff, 915px 274px #fff, 1224px 358px #fff, 1808px 60px #fff, 43px 1870px #fff, 1810px 1536px #fff, 1564px 1719px #fff, 731px 1388px #fff, 1953px 1967px #fff, 1744px 1119px #fff, 794px 1384px #fff, 959px 714px #fff, 18px 1932px #fff, 1358px 1437px #fff, 355px 939px #fff, 1355px 1648px #fff, 608px 719px #fff, 383px 758px #fff, 1164px 1681px #fff, 1045px 253px #fff, 424px 1279px #fff, 1899px 359px #fff, 379px 488px #fff, 214px 465px #fff, 179px 905px #fff, 830px 1993px #fff, 448px 1077px #fff, 1880px 1354px #fff, 1973px 347px #fff, 745px 1025px #fff, 788px 1007px #fff, 1377px 883px #fff, 6px 290px #fff, 1312px 407px #fff, 1398px 622px #fff, 1405px 339px #fff, 1198px 1709px #fff, 988px 1226px #fff, 87px 1459px #fff, 1113px 1698px #fff, 997px 732px #fff, 708px 331px #fff, 1876px 1112px #fff, 1729px 1797px #fff, 719px 703px #fff, 1295px 522px #fff, 758px 1061px #fff, 1309px 1014px #fff, 1327px 1365px #fff, 854px 1317px #fff, 531px 1001px #fff, 1751px 1040px #fff, 1354px 190px #fff, 800px 1538px #fff, 88px 1455px #fff, 668px 39px #fff, 1379px 41px #fff, 892px 524px #fff, 54px 649px #fff, 1289px 730px #fff, 727px 488px #fff, 181px 842px #fff, 1230px 64px #fff, 3px 857px #fff, 292px 1201px #fff, 1343px 673px #fff, 1096px 1412px #fff, 1520px 292px #fff, 104px 1683px #fff, 934px 1387px #fff, 314px 739px #fff;
  animation: animStar 100s linear infinite;
}
#stars3 { width: 3px; height: 3px;
  box-shadow: 200px 981px #fff, 1731px 521px #fff, 132px 1039px #fff, 1888px 1547px #fff, 899px 1226px #fff, 1887px 580px #fff, 1548px 1092px #fff, 1626px 689px #fff, 254px 1072px #fff, 1684px 1211px #fff, 672px 1267px #fff, 939px 668px #fff, 1969px 645px #fff, 1126px 983px #fff, 457px 568px #fff, 476px 876px #fff, 829px 1896px #fff, 1364px 1846px #fff, 1507px 1120px #fff, 936px 1948px #fff, 1833px 832px #fff, 1424px 285px #fff, 1377px 1596px #fff, 432px 153px #fff, 1348px 1410px #fff, 1529px 954px #fff, 1102px 387px #fff, 264px 297px #fff, 811px 977px #fff, 1931px 673px #fff, 1734px 978px #fff, 1772px 1567px #fff, 1197px 1400px #fff, 764px 282px #fff, 1103px 822px #fff, 872px 1803px #fff, 1057px 1763px #fff, 52px 1299px #fff, 1312px 1236px #fff, 235px 1082px #fff, 299px 1086px #fff, 1017px 1602px #fff, 1950px 626px #fff, 1306px 132px #fff, 1358px 1618px #fff, 1873px 1718px #fff, 1447px 940px #fff, 1888px 1195px #fff, 1704px 1765px #fff, 872px 1357px #fff, 1555px 1120px #fff, 250px 1415px #fff, 450px 415px #fff, 492px 901px #fff, 170px 1641px #fff, 56px 1129px #fff, 627px 1514px #fff, 1221px 500px #fff, 324px 1895px #fff, 1397px 1775px #fff, 1966px 598px #fff, 1550px 763px #fff, 326px 1605px #fff, 261px 969px #fff, 890px 281px #fff, 736px 544px #fff, 589px 1262px #fff, 1581px 368px #fff, 1900px 1132px #fff, 1914px 585px #fff, 1864px 1517px #fff, 241px 217px #fff, 859px 787px #fff, 996px 1729px #fff, 741px 121px #fff, 418px 414px #fff, 142px 967px #fff, 387px 896px #fff, 703px 562px #fff, 968px 1136px #fff, 1682px 332px #fff, 1287px 846px #fff, 256px 1427px #fff, 1885px 432px #fff, 1739px 1458px #fff, 345px 1769px #fff, 1140px 1612px #fff, 192px 1921px #fff, 920px 471px #fff, 834px 881px #fff, 917px 1803px #fff, 466px 1266px #fff, 483px 1108px #fff, 689px 986px #fff, 1279px 786px #fff, 458px 910px #fff, 1250px 870px #fff, 785px 1654px #fff, 1543px 1757px #fff, 287px 1272px #fff;
  animation: animStar 150s linear infinite;
}
@keyframes animStar {
  from { transform: translateY(0px); }
  to { transform: translateY(-2000px); }
}

/* Modal */
.modal-mask {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0,0,0,0.5);
  z-index: 99999;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
}
.modal {
  background: #fff;
  border-radius: 12px 12px 0 0;
  width: 100%;
  max-width: 360px;
  max-height: 70vh;
  display: flex;
  flex-direction: column;
  margin: 0 auto;
}
.modal-header {
  padding: 16px 20px;
  border-bottom: 1px solid #e8ecf1;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.modal-title { font-size: 16px; font-weight: 600; color: #1e3a5f; }
.modal-close {
  width: 28px; height: 38px;
  background: #f0f2f5; border-radius: 50%;
  color: #7a8a9a;
}
.modal-body {
  flex: 1;
  overflow-y: auto;
  padding: 20px;
}
.modal-footer {
  padding: 12px 20px;
  border-top: 1px solid #e8ecf1;
  display: flex;
  gap: 10px;
}
.modal-footer .btn { flex: 1; }

/* 进度条 (静态完成度 + SteveBloX 流动光带) - 慢速 + 深蓝 */
.progress {
  position: relative;
  height: 10px;
  background: rgba(30, 58, 95, 0.12);
  border-radius: 5px;
  overflow: hidden;
  margin: 8px 0;
}
.progress-bar {
  position: relative;
  z-index: 1;
  height: 100%;
  background: linear-gradient(90deg, #1e3a5f, #2c5282);
  transition: width 0.3s;
  border-radius: 5px;
}
.progress-bar.success { background: linear-gradient(90deg, #1e3a5f, #2c5282); }
.progress-bar.warn { background: linear-gradient(90deg, #1e3a5f, #2c5282); }
.progress-bar.danger { background: linear-gradient(90deg, #1e3a5f, #2c5282); }
/* SteveBloX 流动光带 (慢速 4s) */
.progress::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 0;
  height: 100%;
  background: rgba(255, 255, 255, 0.85);
  box-shadow: 0 0 6px rgba(255, 255, 255, 0.9);
  border-radius: 5px;
  z-index: 2;
  /* progress-flow 扫描线动画 (看起来像快速翻动) - 已关掉 */
  pointer-events: none;
}
@keyframes progress-flow {
  0% { left: 0; width: 0; opacity: 1; }
  50% { left: 0; width: 100%; opacity: 1; }
  100% { left: 100%; width: 0; opacity: 0; }
}

/* 周报 */
.report-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.report-table th,
.report-table td {
  padding: 10px 8px;
  text-align: left;
  border-bottom: 1px solid #e8ecf1;
}
.report-table th {
  background: #f0f4f8;
  font-weight: 600;
  color: #1e3a5f;
}
.report-table tr:hover { background: #f8f9fb; }

.dept-bar {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 12px;
}
.dept-bar .dept-name { width: 80px; font-size: 13px; }
.dept-bar .bar-wrap { flex: 1; }
.dept-bar .pct { width: 50px; text-align: right; font-size: 12px; font-weight: 600; }

/* filter */
.filter-bar {
  background: #fff;
  border-radius: 12px;
  padding: 12px;
  margin-bottom: 12px;
  display: flex;
  gap: 8px;
  overflow-x: auto;
}
.filter-chip {
  padding: 6px 14px;
  border-radius: 16px;
  font-size: 12px;
  background: #f0f4f8;
  color: #5a6b7a;
  white-space: nowrap;
  flex-shrink: 0;
}
.filter-chip.active {
  background: #2c5282;
  color: #fff;
}

/* 上传 */
.upload-area {
  border: 2px dashed #d8e0e8;
  border-radius: 8px;
  padding: 12px 8px;
  text-align: center;
  color: #7a8a9a;
  cursor: pointer;
  background: #fafbfc;
  margin: 8px 0;
  font-size: 12px;
}
.upload-area:hover { border-color: #2c5282; background: #f0f4f8; }
.upload-icon { font-size: 24px; margin-bottom: 3px; }
.upload-list {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: 10px;
}
.upload-list .thumb { position: relative; }
.upload-list .remove {
  position: absolute;
  top: -6px; right: -6px;
  width: 20px; height: 38px;
  background: #dc3545; color: #fff;
  border-radius: 50%;
  font-size: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* text muted */
.text-muted { color: #7a8a9a; font-size: 12px; }

/* 自动联想下拉 */
.suggest-box {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  background: #fff;
  border: 1px solid #e8ecf1;
  border-radius: 6px;
  box-shadow: 0 4px 12px rgba(0,0,0,0.1);
  max-height: 200px;
  overflow-y: auto;
  z-index: 10;
}
.suggest-item {
  padding: 10px 12px;
  border-bottom: 1px solid #f0f2f5;
  cursor: pointer;
}
.suggest-item:hover { background: #f0f4f8; }
.suggest-item:last-child { border-bottom: none; }

/* 悬浮新建按钮(FAB) */
.fab {
  position: fixed;
  right: 20px;
  bottom: 90px;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: #28a745;
  color: #fff;
  font-size: 32px;
  line-height: 56px;
  text-align: center;
  box-shadow: 0 4px 12px rgba(0,0,0,0.3);
  z-index: 90;
  cursor: pointer;
  user-select: none;
  font-weight: 300;
}
.fab:active {
  background: #218838;
  transform: scale(0.95);
}
.text-success { color: #28a745; }
.text-danger { color: #dc3545; }
.text-warn { color: #b88b00; }
.mt-10 { margin-top: 10px; }
.mt-20 { margin-top: 20px; }
.mb-10 { margin-bottom: 10px; }

/* 底部固定导航(科所长专用) */
.bottom-nav-fixed {
  justify-content: space-around;
  align-items: center;
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background: #fff;
  border-top: 1px solid #e8ecf1;
  display: flex;
  justify-content: space-around;
  align-items: center;
  z-index: 9999;
  box-shadow: 0 -2px 8px rgba(0,0,0,0.08);
  padding-bottom: env(safe-area-inset-bottom);
  padding-left: 4px;
  padding-right: 4px;
}
.nav-item {
  flex: 1;
  padding: 5px 0 6px 0;
  text-align: center;
  font-size: 11px;
  color: #7a8a9a;
  cursor: pointer;
}
.nav-item.active { color: #2c5282; }
.nav-item .nav-icon {
  font-size: 20px;
  font-weight: 700;
  line-height: 24px;
  margin-bottom: 2px;
}

/* 登录页四种登录方式(单行 + icon) */
.login-tabs {
  display: flex;
  gap: 6px;
  margin-bottom: 20px;
}
.login-tab {
  flex: 1;
  padding: 10px 4px;
  text-align: center;
  font-size: 13px;
  font-weight: 600;
  color: #5a6b7a;
  background: #f8f9fb;
  border-radius: 8px;
  cursor: pointer;
  border: 2px solid #e8ecf1;
  transition: all 0.2s;
}
.login-tab-icon {
  font-size: 18px;
  display: block;
  margin-bottom: 2px;
}
.login-tab-sub {
  display: none;
}
.login-tab.active {
  background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 100%);
  color: #fff;
  border-color: #1e3a5f;
  box-shadow: 0 2px 8px rgba(30, 58, 95, 0.3);
}

/* 底部 nav 4 项各自颜色 + 科技感 */
.bottom-nav-fixed .nav-item {
  flex: 1;
  padding: 6px 0 8px 0;
  text-align: center;
  position: relative;
  cursor: pointer;
  transition: all 0.2s;
  background: #f8f9fb;
  border-right: 1px solid #e8ecf1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.bottom-nav-fixed .nav-item:last-child { border-right: none; }

.nav-icon-circle {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  margin: 0 auto 3px auto;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  transition: all 0.2s;
}

/* v1.002 全部 tab 统一黑/白/灰风格(取消颜色区分) */
.nav-task .nav-icon-circle { background: linear-gradient(135deg,#1a1a1a 0%,#444 100%); box-shadow: 0 2px 6px rgba(0,0,0,0.3); }
.nav-task.active { background: #1a1a1a; }
.nav-task.active .nav-icon-circle { background: #fff; color: #1a1a1a; box-shadow: 0 0 0 2px #fff, 0 0 0 4px #1a1a1a; }
.nav-task.active .nav-label { color: #fff; font-weight: 600; }

/* 审核 - 灰 */
.nav-audit .nav-icon-circle { background: linear-gradient(135deg,#666 0%,#999 100%); box-shadow: 0 2px 6px rgba(0,0,0,0.2); }
.nav-audit.active { background: #1a1a1a; }
.nav-audit.active .nav-icon-circle { background: #fff; color: #1a1a1a; box-shadow: 0 0 0 2px #fff, 0 0 0 4px #1a1a1a; }
.nav-audit.active .nav-label { color: #fff; font-weight: 600; }

/* 新增 - 绿 */
.nav-new .nav-icon-circle { background: linear-gradient(135deg,#0d4f3c 0%,#1a8a64 100%); box-shadow: 0 2px 6px rgba(13,79,60,0.3); }
.nav-new.active { background: #0d4f3c; }
.nav-new.active .nav-icon-circle { background: #fff; color: #0d4f3c; box-shadow: 0 0 0 2px #fff, 0 0 0 4px #0d4f3c; }
.nav-new.active .nav-label { color: #fff; font-weight: 600; }

/* 历史 - 深灰 */
.nav-history .nav-icon-circle { background: linear-gradient(135deg,#0a1834 0%,#1e3a5f 100%); box-shadow: 0 2px 6px rgba(10,24,52,0.3); }
.nav-history.active { background: #1a1a1a; }
.nav-history.active .nav-icon-circle { background: #fff; color: #1a1a1a; box-shadow: 0 0 0 2px #fff, 0 0 0 4px #1a1a1a; }
.nav-history.active .nav-label { color: #fff; font-weight: 600; }

/* 我的 - 灰(去红,统一风格) */
.nav-mine .nav-icon-circle { background: linear-gradient(135deg,#444 0%,#777 100%); box-shadow: 0 2px 6px rgba(0,0,0,0.3); }
.nav-mine.active { background: #1a1a1a; }
.nav-mine.active .nav-icon-circle { background: #fff; color: #1a1a1a; box-shadow: 0 0 0 2px #fff, 0 0 0 4px #1a1a1a; }
.nav-mine.active .nav-label { color: #fff; font-weight: 600; }

.nav-label {
  font-size: 11px;
  color: #5a6b7a;
  line-height: 1.2;
}

/* 红色角标(扣分) */
.nav-badge {
  position: absolute;
  top: 2px;
  right: 8px;
  background: #ffd700;
  color: #7a0019;
  font-size: 10px;
  font-weight: 700;
  padding: 1px 5px;
  border-radius: 8px;
  line-height: 14px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.3);
}

/* === 方案 A:简洁横条柱状图 (Apple 风格) === */
.simple-bar-card {
  background: #fff;
  border-radius: 12px;
  padding: 12px 14px;
  margin-bottom: 12px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.06);
}
/* 4 周期卡片 (截图原版) - 简单白卡 */
.simple-bar-card {
  background: #fff;
  border-radius: 12px;
  padding: 8px;
  margin-bottom: 12px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.06);
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 6px;
}
.simple-bar-fill {
}

.simple-bar-card .simple-bar-row {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 8px 4px;
  cursor: pointer;
  transition: all 0.2s;
  border-radius: 8px;
  background: #f8f9fb;
  border: 2px solid transparent;
}
.simple-bar-card .simple-bar-row:last-child { border-bottom: none; }
.simple-bar-card .simple-bar-row:hover { background: #e8ecf1; }
.simple-bar-card .simple-bar-row.active {
  border-color: #1e3a5f;
  background: #f0f4fa;
}
.simple-bar-label {
  font-size: 12px;
  color: #5a6b7a;
  font-weight: 600;
  margin-bottom: 2px;
  flex-shrink: 0;
}
.simple-bar-track {
  width: 100%;
  height: 6px;
  background: #e8ecf1;
  border-radius: 3px;
  margin: 4px 0;
  position: relative;
  overflow: hidden;
}
.simple-bar-fill {
  height: 100%;
  border-radius: 4px;
  transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 12px;
  min-width: 80px;
}
.simple-bar-fill.color-blue {
  background: linear-gradient(90deg, #90caf9 0%, #bbdefb 100%);
}
.simple-bar-fill.color-green {
  background: linear-gradient(90deg, #43a047 0%, #66bb6a 100%);
}
.simple-bar-fill.color-orange {
  background: linear-gradient(90deg, #f57c00 0%, #ff9800 100%);
}
.simple-bar-fill.color-purple {
  background: linear-gradient(90deg, #7b1fa2 0%, #ab47bc 100%);
}
.simple-bar-pct {
  font-size: 12px;
  font-weight: 700;
  color: #fff;
  text-shadow: 0 1px 2px rgba(0,0,0,0.3);
  white-space: nowrap;
}
.simple-bar-num {
  width: 36px;
  text-align: right;
  font-size: 12px;
  color: #5a6b7a;
  font-weight: 500;
  font-family: 'Courier New', monospace;
  flex-shrink: 0;
}
.simple-bar-row.active .simple-bar-label { color: #1e3a5f; font-weight: 700; }
.simple-bar-row.active .simple-bar-num { color: #1e3a5f; font-weight: 700; }

.hologram-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 5px 6px;
  border-radius: 6px;
  cursor: pointer;
  border: 1px solid transparent;
  margin-bottom: 2px;
  transition: all 0.25s;
  position: relative;
  background: transparent;
}

@keyframes border-flow {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
.hologram-row:hover {
  background: rgba(30, 136, 229, 0.04);
  border-color: rgba(30, 136, 229, 0.3);
}
.hologram-row:hover::before,
.hologram-row.active::before {
  opacity: 1;
}
.hologram-row.active {
  background: rgba(30, 136, 229, 0.06);
  border-color: rgba(30, 136, 229, 0.4);
}
.hologram-label {
  font-size: 11px;
  color: #00d4ff;
  min-width: 38px;
  font-weight: 700;
  text-shadow: 0 0 8px rgba(0, 212, 255, 0.7);
  letter-spacing: 0;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
.hologram-bar {
  flex: 1;
  height: 38px;
  background: linear-gradient(90deg, #eef5fb 0%, #e0ecf5 50%, #eef5fb 100%);
  border-radius: 2px;
  overflow: hidden;
  position: relative;
  border: 1px solid rgba(30, 136, 229, 0.15);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.04);
}
.hologram-bar::before {
  content: '';
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(90deg,
    transparent 0px, transparent 9px,
    rgba(30, 136, 229, 0.18) 9px, rgba(30, 136, 229, 0.18) 10px);
  pointer-events: none;
  z-index: 1;
}

.hologram-fill {
  height: 100%;
  background: linear-gradient(180deg,
    #1e88e5 0%,
    #0d47a1 50%,
    #1e88e5 100%);
  position: relative;
  transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
  box-shadow:
    0 0 8px rgba(30, 136, 229, 0.4),
    inset 0 1px 0 rgba(255, 255, 255, 0.4),
    inset 0 -1px 0 rgba(0, 0, 0, 0.2);
  display: flex;
  align-items: center;
  justify-content: flex-end;
  padding-right: 10px;
  min-width: 50px;
  border-radius: 4px;
  border: 1px solid rgba(30, 136, 229, 0.6);
}
.hologram-fill::before {
  content: attr(data-text);
  color: #fff;
  font-size: 12px;
  font-weight: 700;
  text-shadow: 0 0 4px rgba(0, 0, 0, 0.8);
  white-space: nowrap;
  font-family: 'Courier New', monospace;
}
.hologram-fill::before {
  content: attr(data-text);
  color: #fff;
  font-size: 13px;
  font-weight: 700;
  text-shadow: 0 0 6px rgba(0, 0, 0, 0.6);
  white-space: nowrap;
  font-family: 'Courier New', monospace;
  letter-spacing: 0.5px;
}
.hologram-fill::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 50%;
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0.5),
    transparent);
  pointer-events: none;
}
.hologram-fill::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(255, 255, 255, 0.6) 50%,
    transparent 100%);
  animation: holo-scan 2.5s linear infinite;
  pointer-events: none;
}
@keyframes holo-scan {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(200%); }
}

.hologram-shine {
  position: absolute;
  top: 0;
  right: -2px;
  width: 4px;
  height: 100%;
  background: linear-gradient(90deg,
    transparent,
    rgba(255, 255, 255, 0.9));
  box-shadow: 0 0 6px rgba(255, 255, 255, 0.7);
  z-index: 3;
  display: none;
}
.hologram-tick {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 1px;
  background: linear-gradient(180deg,
    transparent,
    rgba(30, 136, 229, 0.4),
    transparent);
  pointer-events: none;
  z-index: 1;
}
.hologram-num {
  min-width: 52px;
  text-align: right;
  font-weight: 700;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  line-height: 1.1;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}
.hologram-pct {
  font-size: 14px;
  text-shadow: 0 0 8px currentColor, 0 0 14px currentColor;
  
}
.hologram-sub {
  font-size: 9px;
  color: #5a6b7a;
  font-weight: 400;
  margin-top: 1px;
  
}
.hologram-num.high { color: #0d47a1; }
.hologram-num.mid { color: #1976d2; }
.hologram-num.low { color: #ff4d6d; }

.simple-bar-count {
  font-size: 11px;
  color: rgba(255,255,255,0.95);
  font-weight: 600;
  font-family: 'Courier New', monospace;
  white-space: nowrap;
}
.simple-bar-undone {
  font-size: 11px;
  color: #1e3a5f;
  font-weight: 700;
  margin-left: 6px;
  white-space: nowrap;
  flex-shrink: 0;
}

/* ===== 高级感科技感: 粒子背景 + 动效 ===== */

/* 登录页粒子背景画布 */
.particles-canvas {
  position: fixed;
  top: 0; left: 0;
  width: 100vw; height: 100vh;
  z-index: 0;
  pointer-events: none;
}

.login-page {
  position: relative;
  z-index: 1;
}

/* 登录框发光 + 悬浮动效 */
.login-box {
  position: relative;
  z-index: 2;
  animation: boxFloat 6s ease-in-out infinite;
}

@keyframes boxFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-6px); }
}

/* 卡片 hover 提升效果 */
.card, .status-item, .status-bar > div {
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.card:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(30, 58, 95, 0.15);
}

/* 进度条从 0 增长动画 (用 opacity 淡入, 不动 width) */
.simple-bar-fill {
  animation: barFadeIn 0.8s ease-out 1;
}

@keyframes barFadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

/* 数字滚动效果 (Vue 数字变化时高亮) - 已禁用 (看着像快速翻动, 不舒服) */
@keyframes numFlash {
  0% { background: rgba(255, 215, 0, 0); }
  100% { background: transparent; }
}

.num.flash {
  /* animation 关闭 */
  border-radius: 4px;
  padding: 0 4px;
}

/* 顶部 header 渐变光效 */
.app-header::before {
  content: '';
  position: absolute;
  top: 0; left: -100%;
  width: 100%; height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
  animation: headerShine 8s infinite;
  pointer-events: none;
}

@keyframes headerShine {
  0% { left: -100%; }
  100% { left: 100%; }
}

/* nav 选中态: 渐变下划线动效 */
.nav-item.active::after {
  content: '';
  position: absolute;
  bottom: 0; left: 50%;
  width: 0; height: 3px;
  background: linear-gradient(90deg, #1e3a5f, #2c5282);
  animation: navUnderline 0.3s forwards;
}

@keyframes navUnderline {
  to { width: 60%; left: 20%; }
}

/* 任务卡片 hover 微光 */
.task-card {
  transition: all 0.25s ease;
}
.task-card:hover {
  transform: translateX(2px);
  box-shadow: 0 2px 8px rgba(30, 58, 95, 0.12);
}

/* 主按钮 hover 发光 */
.btn-primary {
  transition: all 0.25s ease;
}
.btn-primary:hover {
  box-shadow: 0 4px 12px rgba(30, 58, 95, 0.35);
  transform: translateY(-1px);
}

/* 审核按钮危险动效 */
.btn-danger:hover {
  box-shadow: 0 4px 12px rgba(220, 53, 69, 0.4);
  transform: translateY(-1px);
}

/* ===== 看板页面动效 ===== */

/* 4 圆环 (Nawsome) — 看板按科室分类 */
.dept-ring {
  width: 1.5em;
  height: 1.5em;
  flex-shrink: 0;
}
.dept-ring__ring {
  animation: ringA 2s linear infinite;
  transform-origin: center;
}
.dept-ring__ring--a { stroke: #f42f25; }
.dept-ring__ring--b { animation-name: ringB; stroke: #f49725; }
.dept-ring__ring--c { animation-name: ringC; stroke: #255ff4; }
.dept-ring__ring--d { animation-name: ringD; stroke: #f42582; }
@keyframes ringA {
  from, 4% { stroke-dasharray: 0 660; stroke-width: 20; stroke-dashoffset: -330; }
  12% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -335; }
  32% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -595; }
  40%, 54% { stroke-dasharray: 0 660; stroke-width: 20; stroke-dashoffset: -660; }
  62% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -665; }
  82% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -925; }
  90%, to { stroke-dasharray: 0 660; stroke-width: 20; stroke-dashoffset: -990; }
}
@keyframes ringB {
  from, 12% { stroke-dasharray: 0 220; stroke-width: 20; stroke-dashoffset: -110; }
  20% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -115; }
  40% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -195; }
  48%, 62% { stroke-dasharray: 0 220; stroke-width: 20; stroke-dashoffset: -220; }
  70% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -225; }
  90% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -305; }
  98%, to { stroke-dasharray: 0 220; stroke-width: 20; stroke-dashoffset: -330; }
}
@keyframes ringC {
  from { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: 0; }
  8% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -5; }
  28% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -175; }
  36%, 58% { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -220; }
  66% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -225; }
  86% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -395; }
  94%, to { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -440; }
}
@keyframes ringD {
  from, 8% { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: 0; }
  16% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -5; }
  36% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -175; }
  44%, 50% { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -220; }
  58% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -225; }
  78% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -395; }
  86%, to { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -440; }
}

/* 弹跳方块 (alexruix) — 看板按任务标题 */
.title-bounce {
  width: 28px;
  height: 28px;
  position: relative;
  flex-shrink: 0;
}
.title-bounce::before {
  content: '';
  width: 28px;
  height: 3px;
  background: #f0808050;
  position: absolute;
  top: 35px;
  left: 0;
  border-radius: 50%;
  animation: title-shadow 0.5s linear infinite;
}
.title-bounce::after {
  content: '';
  width: 100%;
  height: 100%;
  background: #f08080;
  position: absolute;
  top: 0;
  left: 0;
  border-radius: 4px;
  animation: title-jump 0.5s linear infinite;
}
@keyframes title-jump {
  15% { border-bottom-right-radius: 3px; }
  25% { transform: translateY(5px) rotate(22.5deg); }
  50% { transform: translateY(10px) scale(1, .9) rotate(45deg); border-bottom-right-radius: 24px; }
  75% { transform: translateY(5px) rotate(67.5deg); }
  100% { transform: translateY(0) rotate(90deg); }
}
@keyframes title-shadow {
  0%, 100% { transform: scale(1, 1); }
  50% { transform: scale(1.2, 1); }
}

/* ===== 审核 TAB 动效 (codingzemigle 4 立方体旋转) ===== */
.audit-cube-grid {
  width: 20px;
  height: 20px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr 1fr;
  gap: 2px;
  perspective: 300px;
  margin: 0 auto;
}
.audit-cube-grid .ac-cube {
  background: #fff;
  border-radius: 1px;
  transform-style: preserve-3d;
  animation: audit-cube-rotate 1.4s ease-in-out infinite;
}
.audit-cube-grid .ac-cube:nth-child(1) { animation-delay: 0s; }
.audit-cube-grid .ac-cube:nth-child(2) { animation-delay: 0.18s; }
.audit-cube-grid .ac-cube:nth-child(3) { animation-delay: 0.36s; }
.audit-cube-grid .ac-cube:nth-child(4) { animation-delay: 0.54s; }
@keyframes audit-cube-rotate {
  0% { transform: rotateX(0deg) rotateY(0deg); }
  25% { transform: rotateX(180deg) rotateY(180deg); }
  50% { transform: rotateX(360deg) rotateY(0deg); }
  75% { transform: rotateX(180deg) rotateY(180deg); }
  100% { transform: rotateX(360deg) rotateY(360deg); }
}

/* ===== 新增 TAB 动效 (Avishek255874 8 方向粒子爆开) ===== */
.new-spinner {
  position: relative;
  width: 22px;
  height: 22px;
  margin: 0 auto;
  overflow: visible;
}
.new-spinner::before, .new-spinner::after {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: #fff;
  margin: -2px 0 0 -2px;
  animation: new-bounce 1s ease-in-out infinite;
}
.new-spinner::before {
  box-shadow:
    0 -8px 0 0 #fff,
    0 8px 0 0 #fff,
    8px 0 0 0 #fff,
    -8px 0 0 0 #fff,
    6px -6px 0 0 #fff,
    -6px -6px 0 0 #fff,
    6px 6px 0 0 #fff,
    -6px 6px 0 0 #fff;
  animation: new-blast 1s ease-in-out infinite;
}
.new-spinner::after {
  animation: new-bounce 1s ease-in-out infinite;
}
@keyframes new-bounce {
  0%, 100% { transform: scale(0.5); opacity: 0.6; }
  50% { transform: scale(1.2); opacity: 1; }
}
@keyframes new-blast {
  0%, 40% { transform: scale(0); opacity: 0; }
  70% { transform: scale(1); opacity: 1; }
  100% { transform: scale(1.8); opacity: 0; }
}

/* ===== 历史 TAB 动效 (9 宫格交替闪烁) ===== */
.history-loader {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 2px;
  width: 18px;
  height: 18px;
  margin: 0 auto;
  overflow: hidden;
  border-radius: 2px;
}
.history-loader span {
  background: #fff;
  animation: history-blink 0.6s alternate infinite linear;
}
.history-loader span:nth-child(1) { animation-delay: 0ms; }
.history-loader span:nth-child(2) { animation-delay: 200ms; }
.history-loader span:nth-child(3) { animation-delay: 300ms; }
.history-loader span:nth-child(4) { animation-delay: 400ms; }
.history-loader span:nth-child(5) { animation-delay: 500ms; }
.history-loader span:nth-child(6) { animation-delay: 600ms; }
@keyframes history-blink {
  0% { opacity: 0.3; transform: scale(0.5) rotate(5deg); }
  50% { opacity: 1; transform: scale(1); }
}

/* ===== 我的 TAB 动效 (MiniJohan 4 角球 + 中心球 旋转) ===== */
.mine-loader {
  position: relative;
  width: 16px;
  height: 16px;
  margin: 0 auto;
  animation: mine-rotate 3s linear infinite;
  overflow: hidden;
  border-radius: 2px;
}
.mine-loader .orb {
  width: 3px;
  height: 3px;
  background-color: #fff;
  border-radius: 50%;
  position: absolute;
}
.mine-loader .orb:nth-child(1) { top: 1px; left: 1px; animation: mine-bounce 1.5s ease infinite; }
.mine-loader .orb:nth-child(2) { top: 1px; right: 1px; animation: mine-bounce 1.5s ease infinite; }
.mine-loader .orb:nth-child(3) { bottom: 1px; left: 1px; animation: mine-bounce 1.5s ease infinite; }
.mine-loader .orb:nth-child(4) { bottom: 1px; right: 1px; animation: mine-bounce 1.5s ease infinite; }
@keyframes mine-rotate {
  0% { transform: rotate(0); }
  25% { transform: rotate(90deg); }
  50% { transform: rotate(180deg); }
  100% { transform: rotate(360deg); }
}
@keyframes mine-bounce {
  0% { transform: scale(1); }
  50% { transform: scale(0.5); }
}

/* ===== 看板 TAB 动效 (mobinkakei 渐变方块旋转) ===== */
.task-loader {
  width: 22px;
  height: 22px;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border-radius: 4px;
}
.task-loader__cube {
  position: absolute;
  width: 12px;
  height: 12px;
  border-radius: 2px;
  top: 5px;
  left: 5px;
}
.task-loader__cube--glowing {
  z-index: 2;
  background-color: rgba(255, 255, 255, 0.3);
  border: 1px solid rgba(255, 255, 255, 0.4);
}
.task-loader__cube--color {
  z-index: 1;
  background: linear-gradient(135deg, #1afbf0, #da00ff);
  animation: task-loader-loadtwo 1.4s ease-in-out infinite;
  transform-origin: center;
}
@keyframes task-loader-loadtwo {
  0% { transform: rotate(0deg) scale(1); }
  50% { transform: rotate(180deg) scale(0.7); }
  100% { transform: rotate(360deg) scale(1); }
}

/* ===== 按科室分类 动效 (JaydipPrajapati1910 弹跳方块) ===== */
.dept-spinner {
  width: 18px;
  height: 18px;
  position: relative;
  display: inline-block;
  vertical-align: middle;
  margin-right: 4px;
  overflow: visible;
}
.dept-spinner::before {
  content: '';
  width: 14px;
  height: 2px;
  background: rgba(255, 255, 255, 0.5);
  position: absolute;
  top: 18px;
  left: 2px;
  border-radius: 50%;
  animation: dept-shadow 0.5s linear infinite;
  filter: blur(0.3px);
}
.dept-spinner::after {
  content: '';
  width: 14px;
  height: 14px;
  background: #3d6aff;
  position: absolute;
  top: 0;
  left: 2px;
  border-radius: 2px;
  animation: dept-jump 0.5s linear infinite;
  transform-origin: center bottom;
}
@keyframes dept-jump {
  15% { border-bottom-right-radius: 2px; }
  25% { transform: translateY(4px) rotate(22.5deg); }
  50% { transform: translateY(8px) scale(1, .9) rotate(45deg); border-bottom-right-radius: 12px; }
  75% { transform: translateY(4px) rotate(67.5deg); }
  100% { transform: translateY(0) rotate(90deg); }
}
@keyframes dept-shadow {
  0%, 100% { transform: scale(1, 1); }
  50% { transform: scale(1.2, 1); }
}

/* V1.1001-WEUI19: 微信风登录页变量 (原 neobrutalism #323232 纯黑→微信灰阶/深蓝) */
.login-wrapper {
  --input-focus: #576b95;
  --font-color: #333;
  --font-color-sub: #999;
  --bg-color: #ffffff;
  --main-color: #1e3a5f;
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 340px;
  display: flex;
  flex-direction: column;
  align-items: center;
}

/* 顶部 登录/注册 切换 */
.login-switch {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 200px;
  height: 22px;
  margin-bottom: 14px;
  user-select: none;
}
.login-toggle-label {
  position: absolute;
  top: 0;
  font-weight: 700;
  font-size: 14px;
  line-height: 22px;
  cursor: pointer;
  color: var(--font-color-sub);
  text-decoration: none;
}
.login-toggle-label[for="loginToggle"]:nth-of-type(1) { left: 18px; }
.login-toggle-label[for="loginToggle"]:nth-of-type(2) { right: 18px; }
/* 选中态(默认登录选中) */
#loginToggle:not(:checked) ~ .login-toggle-label:nth-of-type(1) {
  text-decoration: underline;
  color: var(--font-color);
}
#loginToggle:checked ~ .login-toggle-label:nth-of-type(1) {
  text-decoration: none;
  color: var(--font-color-sub);
}
#loginToggle:checked ~ .login-toggle-label:nth-of-type(2) {
  text-decoration: underline;
  color: var(--font-color);
}
/* 滑块 (居中 50x22) */
.login-slider {
  position: relative;
  width: 50px;
  height: 22px;
  border: 2px solid var(--main-color);
  border-radius: 6px;
  background-color: var(--bg-color);
  box-shadow: 3px 3px var(--main-color);
  transition: background-color 0.3s;
}
.login-slider.on { background-color: var(--input-focus); }
.login-slider::before {
  content: '';
  position: absolute;
  width: 18px;
  height: 18px;
  border: 2px solid var(--main-color);
  border-radius: 50%;
  background-color: var(--bg-color);
  box-shadow: 0 2px 0 var(--main-color);
  top: 0;
  left: -1px;
  transition: transform 0.3s;
}
.login-slider.on::before { transform: translateX(28px); }

/* 卡片 */
.login-card {
  background: lightgrey;
  border: 2px solid var(--main-color);
  box-shadow: 4px 4px var(--main-color);
  border-radius: 5px;
  padding: 22px 20px;
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 10px;
  text-align: center;
}
.login-card h1 {
  font-size: 20px;
  font-weight: 900;
  color: var(--font-color);
  margin: 0;
}
.login-sub {
  font-size: 11px;
  color: var(--font-color-sub);
  margin: -4px 0 8px;
}
.login-form {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
}

/* V1.1001-WEUI19: 微信风输入框 (原 neobrutalism: 去 2px 黑粗边+3px立体 → 浅灰#f7f7f7底,聚焦变白+蓝高亮边) */
.nb-input {
  width: 100%;
  height: 44px;
  border-radius: 8px;
  border: 1px solid transparent;
  background-color: #f7f7f7;
  box-shadow: none;
  font-size: 14px;
  font-weight: 400;
  color: var(--font-color);
  padding: 0 14px;
  outline: none;
  transition: border-color 0.18s, background-color 0.18s, box-shadow 0.18s;
  -webkit-tap-highlight-color: transparent;
}
.nb-input::placeholder { color: var(--font-color-sub); opacity: 1; }
.nb-input:focus {
  border: 1px solid var(--input-focus);
  background-color: #fff;
  box-shadow: 0 0 0 3px rgba(87, 107, 149, 0.12);
  transform: none;
}
select.nb-input {
  appearance: none;
  background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3e%3cpath d='M6 9L1 4h10z' fill='%23999999'/%3e%3c/svg%3e"), linear-gradient(#f7f7f7, #f7f7f7);
  background-repeat: no-repeat;
  background-position: right 14px center;
  padding-right: 36px;
}
select.nb-input:focus {
  background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3e%3cpath d='M6 9L1 4h10z' fill='%23576b95'/%3e%3c/svg%3e"), linear-gradient(#ffffff, #ffffff);
}

/* 记住密码 行 */
.nb-remember {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  color: var(--font-color-sub);
  cursor: pointer;
  align-self: flex-start;
  margin-left: 4px;
}
.nb-remember input { width: 14px; height: 14px; cursor: pointer; }

/* V1.1001-WEUI19: 登录页 checkbox-wrapper-46 微信风方形圆角 (18px, 绿底白勾) */
.checkbox-wrapper-46 {
  display: inline-flex;
  align-items: center;
  cursor: pointer;
  user-select: none;
}
.checkbox-wrapper-46 .inp-cbx {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}
.checkbox-wrapper-46 .cbx {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--font-color-sub, #999);
  line-height: 1;
}
.checkbox-wrapper-46 .cbx > span:first-child {
  position: relative;
  width: 18px;
  height: 18px;
  border-radius: 4px;
  border: 2px solid #e5e5e5;
  background: #fff;
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background-color 0.18s, border-color 0.18s;
  flex-shrink: 0;
}
.checkbox-wrapper-46 .cbx > span:first-child::before {
  content: '';
  display: block;
  width: 4px;
  height: 9px;
  border-right: 2px solid #fff;
  border-bottom: 2px solid #fff;
  transform: rotate(45deg) translate(-1px, -1px) scale(0);
  transform-origin: center;
  transition: transform 0.18s ease;
}
.checkbox-wrapper-46 .inp-cbx:checked + .cbx > span:first-child {
  background: #07c160;
  border-color: #07c160;
}
.checkbox-wrapper-46 .inp-cbx:checked + .cbx > span:first-child::before {
  transform: rotate(45deg) translate(-1px, -1px) scale(1);
}
.checkbox-wrapper-46 .cbx span:last-child {
  color: var(--font-color-sub, #999);
}

/* V1.1001-WEUI19: 微信风主按钮 (登录页「登 录」「提 交 申 请」) */
.nb-btn {
  width: 100%;
  height: 48px;
  border-radius: 8px;
  border: none;
  background-color: var(--main-color, #1e3a5f);
  color: #fff;
  box-shadow: none;
  font-size: 15px;
  font-weight: 500;
  cursor: pointer;
  transition: opacity 0.18s ease, background-color 0.18s ease;
  margin-top: 4px;
  -webkit-tap-highlight-color: transparent;
}
.nb-btn:hover { background: #2c5282; opacity: 0.95; }
.nb-btn:active { background: #16304e; opacity: 0.88; transform: none; box-shadow: none; }

/* 同步按钮 (跟 .icon-btn 一致, 玻璃拟态风) */
.sync-btn {
  color: #fff;
  background: linear-gradient(135deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0.08) 100%);
  font-weight: 500;
  border-radius: 8px;
  border: 1px solid rgba(255,255,255,0.25);
  cursor: pointer;
  text-align: center;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  transition: all 0.25s ease;
  font-size: 15px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.15), inset 0 1px 0 rgba(255,255,255,0.15);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}
.sync-btn:hover {
  background: linear-gradient(135deg, rgba(255,255,255,0.32) 0%, rgba(255,255,255,0.18) 100%);
  border-color: rgba(255,255,255,0.45);
  transform: translateY(-1px);
  box-shadow: 0 4px 10px rgba(0,0,0,0.2), inset 0 1px 0 rgba(255,255,255,0.2);
}
.sync-btn:active {
  transform: translateY(0);
  box-shadow: 0 1px 3px rgba(0,0,0,0.2);
}
.sync-btn svg {
  display: inline;
  width: 16px;
  height: 16px;
  color: #fff;
}
.sync-btn:focus svg { animation: spin_357 0.6s ease; }
@keyframes spin_357 {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* ===== alexruix 弹跳方块 (历史 TAB) ===== */
.ar-loader {
  position: relative;
  width: 18px;
  height: 18px;
  margin: 0 auto;
  overflow: hidden;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}
.ar-shadow {
  content: '';
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 14px;
  height: 2px;
  background: #f0808050;
  border-radius: 50%;
  animation: ar-shadow 0.5s linear infinite;
}
.ar-block {
  position: absolute;
  top: 0;
  left: 50%;
  margin-left: -5px;
  width: 10px;
  height: 10px;
  background: #f08080;
  border-radius: 1.5px;
  animation: ar-jump 0.5s linear infinite;
  transform-origin: center;
}
@keyframes ar-jump {
  15% { border-bottom-right-radius: 1.5px; }
  25% { transform: translateY(3px) rotate(22.5deg); }
  50% { transform: translateY(6px) scale(1, .9) rotate(45deg); border-bottom-right-radius: 8px; }
  75% { transform: translateY(3px) rotate(67.5deg); }
  100% { transform: translateY(0) rotate(90deg); }
}
@keyframes ar-shadow {
  0%, 100% { transform: scale(1, 1); }
  50% { transform: scale(1.2, 1); }
}

/* ===== 看板柱状图上部分 — anand_4957 跑动效 ===== */
.simple-bar-card-stars {
  position: relative;
  height: 18px;
  margin: 0 -16px 8px -16px;
  padding: 0 16px;
  overflow: hidden;
  background: linear-gradient(180deg, #f8f9fb 0%, #ffffff 100%);
  border-bottom: 1px solid #f0f2f5;
}
.runner-track {
  position: absolute;
  top: 6px;
  left: 0;
  right: 0;
  height: 1px;
}
.runner-streak {
  position: absolute;
  top: 0;
  left: 50%;
  width: 12px;
  height: 1px;
  background: linear-gradient(90deg, transparent, #1e3a5f, transparent);
  animation: runner-fly 1.2s linear infinite;
}
.runner-streak:nth-child(1) { animation-delay: 0s; }
.runner-streak:nth-child(2) { animation-delay: 0.3s; }
.runner-streak:nth-child(3) { animation-delay: 0.6s; }
.runner-streak:nth-child(4) { animation-delay: 0.9s; }
@keyframes runner-fly {
  0% { left: -10%; opacity: 0; }
  10% { opacity: 1; }
  90% { opacity: 1; }
  100% { left: 110%; opacity: 0; }
}
/* 4 跑道线 */
.simple-bar-card-stars::before,
.simple-bar-card-stars::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  height: 1px;
  background: linear-gradient(90deg, transparent 0%, #1e3a5f 50%, transparent 100%);
  animation: runner-fly 1.5s linear infinite;
}
.simple-bar-card-stars::before { top: 3px; animation-delay: 0.2s; }
.simple-bar-card-stars::after { top: 12px; animation-delay: 0.7s; }

/* 退出按钮 (Shoh2008 圆形 checkmark) */
.checkbox-wrapper-44.logout-toggle {
  display: inline-flex;
  align-items: center;
  cursor: pointer;
  margin: 0 4px;
}
.checkbox-wrapper-44.logout-toggle .toggleButton {
  cursor: pointer;
  display: block;
  transform-origin: 50% 50%;
  transform-style: preserve-3d;
  transition: transform 0.14s ease;
}
.checkbox-wrapper-44.logout-toggle .toggleButton:active { transform: rotateX(30deg); }
.checkbox-wrapper-44.logout-toggle .toggleButton div {
  width: 32px;
  height: 32px;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: #fff;
  border: 2px solid #1e3a5f;
  transition: all 0.2s;
}
.checkbox-wrapper-44.logout-toggle .toggleButton:hover div { background: #fff4d4; }
.checkbox-wrapper-44.logout-toggle .toggleButton svg {
  width: 22px;
  height: 22px;
}

/* ===== juan-sued 3 跳球 (历史 TAB + 主面板 groupView) ===== */
.js-balls {
  position: relative;
  display: inline-block;
  width: 22px;
  height: 22px;
  vertical-align: middle;
}
.js-dot {
  position: absolute;
  border-radius: 50%;
  animation-fill-mode: both;
  animation: js-jump 2s cubic-bezier(0.21, 0.98, 0.6, 0.99) infinite alternate;
}
.js-dot-1 {
  z-index: 3;
  width: 8px;
  height: 8px;
  top: 7px;
  left: 7px;
  background: #fff;
}
.js-dot-2 {
  z-index: 2;
  width: 14px;
  height: 14px;
  top: 4px;
  left: 4px;
  background: #ffd700;
  animation-delay: 0.1s;
}
.js-dot-3 {
  z-index: 1;
  width: 20px;
  height: 20px;
  top: 1px;
  left: 1px;
  background: #ff6b6b;
  animation-delay: 0.2s;
}
@keyframes js-jump {
  0%, 70% {
    box-shadow: 1px 1px 2px 1px rgba(0, 0, 0, 0.2);
    transform: scale(0);
  }
  100% {
    box-shadow: 4px 4px 8px 0 rgba(0, 0, 0, 0.3);
    transform: scale(1);
  }
}
/* 主面板 groupView 用的按科室/按任务 (深蓝色球) */
.tab-balls-blue .js-dot-1 { background: #1e3a5f; }
.tab-balls-blue .js-dot-2 { background: #2c5282; }
.tab-balls-blue .js-dot-3 { background: #4a7ba8; }

/* ===== Diox221 4 圈脉冲 (按科室/按任务) - 改 2 圈降低密度 ===== */
.dx-loader {
  display: inline-flex;
  justify-content: center;
  align-items: center;
  height: 20px;
  width: 24px;
  vertical-align: middle;
  margin-right: 6px;
  overflow: visible;
}
.dx-circle {
  position: relative;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  margin: 0 2px;
  box-shadow: inset 0 0 0 1px #1e3a5f;
  transform-origin: center;
  animation: dx-fill 1.8s ease-in-out infinite;
  flex-shrink: 0;
}
.dx-circle-1 { animation-delay: 0s; }
.dx-circle-2 { animation-delay: -0.9s; }
.dx-circle-3 { animation-delay: 0s; }
.dx-circle-4 { animation-delay: -0.9s; }
@keyframes dx-fill {
  0% { transform: scale(1); box-shadow: inset 0 0 0 1px #1e3a5f; }
  50% { transform: scale(1.4); box-shadow: inset 0 0 0 1px #1e3a5f, inset 0 0 0 4px #1e3a5f; }
  100% { transform: scale(1); box-shadow: inset 0 0 0 1px #1e3a5f, inset 0 0 0 4px #1e3a5f; }
}
/* V1.1001-WEUI19: 微信风次按钮 (描边注册→浅灰平扁) */
.nb-btn-outline {
  width: 100%;
  height: 48px;
  border-radius: 8px;
  border: none;
  background-color: #f2f2f2;
  color: #333;
  box-shadow: none;
  font-weight: 500;
  cursor: pointer;
  transition: opacity 0.18s ease, background-color 0.18s ease;
  -webkit-tap-highlight-color: transparent;
}
.nb-btn-outline:hover { background: #e6e6e6; opacity: 0.95; }
.nb-btn-outline:active { background: #d9d9d9; transform: none; box-shadow: none; }
/* 分隔线"或" */
.nb-divider {
  display: flex;
  align-items: center;
  width: 100%;
  margin: 4px 0;
  font-size: 11px;
  color: var(--font-color-sub);
}
.nb-divider::before, .nb-divider::after {
  content: '';
  flex: 1;
  height: 1px;
  background: #999;
}
.nb-divider span {
  padding: 0 10px;
}

/* V1.1001-WEUI19: 全局输入框统一微信风 (原 neobrutalism 去 2px 黑粗边+立体投影 → #f7f7f7 底, 聚焦蓝高亮 ring) */
input[type="text"]:not(.nb-input):not(.plain-input),
input[type="password"]:not(.nb-input),
input[type="number"]:not(.nb-input):not(.plain-input),
textarea:not(.plain-input),
.form-group input,
.form-group select,
.form-group textarea,
.modal-body input:not(.plain-input),
.modal-body select,
.modal-body textarea,
.content-card input,
.content-card select,
.content-card textarea {
  border-radius: 8px;
  border: 1px solid transparent;
  background-color: #f7f7f7;
  box-shadow: none;
  padding: 10px 12px;
  font-size: 14px;
  font-weight: 400;
  color: #333;
  transition: border-color 0.18s, background-color 0.18s, box-shadow 0.18s;
  outline: none;
  -webkit-tap-highlight-color: transparent;
}
input:focus, textarea:focus, select:focus,
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus,
.modal-body input:focus,
.modal-body select:focus,
.modal-body textarea:focus,
.content-card input:focus,
.content-card select:focus,
.content-card textarea:focus {
  border: 1px solid #576b95;
  background-color: #fff;
  box-shadow: 0 0 0 3px rgba(87, 107, 149, 0.12);
  transform: none;
  outline: none;
}

/* 普通输入框 (plain-input): 保持简洁,但对齐微信灰体系 */
input.plain-input,
input.plain-input:focus,
textarea.plain-input,
textarea.plain-input:focus {
  border-radius: 8px;
  border: 1px solid #e5e5e5;
  background: #fff;
  box-shadow: none;
  transform: none;
  padding: 10px 12px;
  font-size: 14px;
  font-weight: 400;
}
input.plain-input:focus,
textarea.plain-input:focus {
  border-color: #576b95;
  box-shadow: 0 0 0 3px rgba(87, 107, 149, 0.10);
}

/* ===== nima-mollazadeh 复杂沙漏 (历史 TAB) ===== */
.hourglass-loader {
  position: relative;
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.hourglass-loader .nm-svg {
  width: 28px;
  height: 28px;
  z-index: 1;
}
.hourglass-loader .nm-svg * {
  animation-duration: 2.5s;
  animation-timing-function: cubic-bezier(0.83, 0, 0.17, 1);
  animation-iteration-count: infinite;
  transform-box: fill-box;
}
/* 月牙高光 (翻转) */
.hourglass-loader .nm-glare-top {
  animation-name: nm-glare-top;
}
.hourglass-loader .nm-glare-bottom {
  animation-name: nm-glare-bottom;
}
@keyframes nm-glare-top {
  0% { stroke: rgba(255, 255, 255, 0); }
  24%, 100% { stroke: #fff; }
}
@keyframes nm-glare-bottom {
  0% { stroke: #fff; }
  24%, 100% { stroke: rgba(255, 255, 255, 0); }
}
/* 沙漏翻转 */
.hourglass-loader .nm-model {
  transform-origin: 25px 35px;
  animation-name: nm-flip;
}
@keyframes nm-flip {
  0% { transform: translate(0, 0) rotate(-180deg); }
  24%, 100% { transform: translate(0, 0) rotate(0); }
}
/* 沙流 (中线竖线) */
.hourglass-loader .nm-sand-drop {
  stroke-dasharray: 50;
  stroke-dashoffset: 0;
  animation-name: nm-sand-drop;
}
@keyframes nm-sand-drop {
  0%, 10% { stroke-dashoffset: 50; opacity: 0; }
  30% { stroke-dashoffset: 0; opacity: 1; }
  70% { stroke-dashoffset: -25; opacity: 0.6; }
  100% { stroke-dashoffset: -50; opacity: 0; }
}
/* 上沙堆 (缩小) */
.hourglass-loader .nm-sand-mound-top {
  transform-origin: 25px 7px;
  animation-name: nm-sand-mound-top;
}
@keyframes nm-sand-mound-top {
  0%, 10% { transform: scale(1, 1); opacity: 1; }
  70%, 100% { transform: scale(0.3, 0.3); opacity: 0.4; }
}
/* 下沙堆 (放大) */
.hourglass-loader .nm-sand-mound-bottom {
  transform-origin: 25px 63px;
  animation-name: nm-sand-mound-bottom;
}
@keyframes nm-sand-mound-bottom {
  0%, 30% { transform: scale(0.3, 0.3); opacity: 0.4; }
  70%, 100% { transform: scale(1, 1); opacity: 1; }
}
/* 沙粒 (左) */
.hourglass-loader .nm-grain-left {
  animation-name: nm-grain-left;
}
@keyframes nm-grain-left {
  0%, 10% { opacity: 0; transform: translateY(0); }
  30% { opacity: 1; transform: translateY(-5px); }
  60% { opacity: 1; transform: translateY(-10px); }
  100% { opacity: 0; transform: translateY(-15px); }
}
.hourglass-loader .nm-grain-right {
  animation-name: nm-grain-right;
}
@keyframes nm-grain-right {
  0%, 10% { opacity: 0; transform: translateY(0); }
  30% { opacity: 1; transform: translateY(5px); }
  60% { opacity: 1; transform: translateY(10px); }
  100% { opacity: 0; transform: translateY(15px); }
}

/* ===== 历史导出按钮 (4 色 渐变 + hover 上浮) ===== */

/* ===== 玻璃拟态 顶部按钮 (改密 / 使用说明 等) ===== */
.top-glass-btn {
  padding: 7px 14px;
  font-size: 12px;
  font-weight: 600;
  border-radius: 8px;
  cursor: pointer;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  box-shadow: 0 2px 6px rgba(0,0,0,0.08);
  transition: transform 0.2s ease, box-shadow 0.2s ease, filter 0.2s ease;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  letter-spacing: 0.3px;
}
.top-glass-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  filter: brightness(1.05);
}
.top-glass-btn:active {
  transform: translateY(0);
  filter: brightness(0.95);
}


/* ===== 3 球弹跳 loader (审核/空状态用) ===== */
.bouncing-dots-loader {
  width: 200px;
  height: 60px;
  position: relative;
  display: flex;
  justify-content: center;
  z-index: 1;
}
.bouncing-dots-loader .bd-circle {
  width: 20px;
  height: 20px;
  position: absolute;
  border-radius: 50%;
  background-color: #fff;
  left: 15%;
  transform-origin: 50%;
  animation: bd-circle 0.6s alternate infinite ease;
  border: solid 5px #1e3a5f;
  box-sizing: border-box;
}
.bouncing-dots-loader .bd-circle:nth-child(3) { left: 45%; animation-delay: 0.2s; }
.bouncing-dots-loader .bd-circle:nth-child(5) { left: auto; right: 15%; animation-delay: 0.4s; }
@keyframes bd-circle {
  0% { top: 50px; height: 5px; border-radius: 50px 50px 25px 25px; transform: scaleX(2.5); background-color: #b0c4de; }
  50% { height: 20px; border-radius: 50%; transform: scaleX(1); background-color: #1e3a5f; }
  100% { top: 0; }
}
.bouncing-dots-loader .bd-shadow {
  width: 20px;
  height: 4px;
  border-radius: 50%;
  background-color: rgba(30, 58, 95, 0.4);
  position: absolute;
  top: 52px;
  z-index: -1;
  left: 15%;
  filter: blur(1.5px);
  animation: bd-shadow 0.6s alternate infinite ease;
}
.bouncing-dots-loader .bd-shadow:nth-child(2) { left: 45%; animation-delay: 0.2s; }
.bouncing-dots-loader .bd-shadow:nth-child(4) { left: auto; right: 15%; animation-delay: 0.4s; }
@keyframes bd-shadow {
  0% { transform: scaleX(1.5); opacity: 0.7; }
  50% { transform: scaleX(1); opacity: 0.4; }
  100% { transform: scaleX(0.2); opacity: 0.15; }
}

/* ===== 通知中心 bell 图标动画 ===== */
@keyframes bell-shake {
  0%, 50%, 100% { transform: rotate(0); }
  10%, 30% { transform: rotate(-15deg); }
  20%, 40% { transform: rotate(15deg); }
}
@keyframes badge-pulse {
  0%, 100% { transform: scale(1); box-shadow: 0 0 8px rgba(220,53,69,0.4); }
  50% { transform: scale(1.12); box-shadow: 0 0 14px rgba(220,53,69,0.7); }
}

/* ===== Uiverse 3D 篮球弹跳 (审核页空状态) ===== */
@keyframes rotateBall {
  0% { transform: rotateY(0deg) rotateX(0deg) rotateZ(0deg); }
  50% { transform: rotateY(360deg) rotateX(360deg) rotateZ(0deg); }
  100% { transform: rotateY(720deg) rotateX(720deg) rotateZ(360deg); }
}
@keyframes bounceBall {
  0% { transform: translateY(-70px) scale(1, 1); }
  15% { transform: translateY(-56px) scale(1, 1); }
  45% { transform: translateY(70px) scale(1, 1); }
  50% { transform: translateY(73.5px) scale(1, 0.92); }
  55% { transform: translateY(70px) scale(1, 0.95); }
  85% { transform: translateY(-56px) scale(1, 1); }
  95%, 100% { transform: translateY(-70px) scale(1, 1); }
}
@keyframes bounceShadow {
  0% { filter: blur(3px); opacity: 0.6; transform: translateY(73px) scale(0.5, 0.5); }
  45% { filter: blur(1px); opacity: 0.9; transform: translateY(73px) scale(1, 1); }
  55% { filter: blur(1px); opacity: 0.9; transform: translateY(73px) scale(1, 1); }
  100% { filter: blur(3px); opacity: 0.6; transform: translateY(73px) scale(0.5, 0.5); }
}
.ball {
  animation-name: bounceBall;
  animation-duration: 1.2s;
  animation-iteration-count: infinite;
  animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
  border-radius: 50%;
  height: 60px;
  position: relative;
  transform: translateY(-70px);
  transform-style: preserve-3d;
  width: 60px;
  z-index: 1;
  margin: 0 auto;
}
.ball::before {
  background: radial-gradient(circle at 36px 20px, #ff8c16, #b35100);
  border: 2px solid #333333;
  border-radius: 50%;
  content: "";
  height: calc(100% + 6px);
  left: -6px;
  position: absolute;
  top: -3px;
  transform: translateZ(1vmin);
  width: calc(100% + 6px);
}
.ball .inner {
  animation-name: rotateBall;
  animation-duration: 25s;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  border-radius: 50%;
  height: 100%;
  position: absolute;
  transform-style: preserve-3d;
  width: 100%;
}
.ball .line::before,
.ball .line::after {
  border: 2px solid #333333;
  border-radius: 50%;
  content: "";
  height: 99%;
  position: absolute;
  width: 99%;
}
.ball .line::before { transform: rotate3d(0, 0, 0, 0); }
.ball .line::after { transform: rotate3d(1, 0, 0, 90deg); }
.ball .line--two::before { transform: rotate3d(0, 0, 0, 2deg); }
.ball .line--two::after { transform: rotate3d(1, 0, 0, 88deg); }
.ball .oval::before,
.ball .oval::after {
  border-top: 4px solid #333333;
  border-radius: 50%;
  content: "";
  height: 99%;
  position: absolute;
  width: 99%;
}
.ball .oval::before { transform: rotate3d(1, 0, 0, 45deg) translate3d(0, 0, 6px); }
.ball .oval::after { transform: rotate3d(1, 0, 0, -45deg) translate3d(0, 0, -6px); }
.ball .oval--two::before { transform: rotate3d(1, 0, 0, 135deg) translate3d(0, 0, -6px); }
.ball .oval--two::after { transform: rotate3d(1, 0, 0, -135deg) translate3d(0, 0, 6px); }
.shadow {
  animation-name: bounceShadow;
  animation-duration: 1.2s;
  animation-iteration-count: infinite;
  animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);
  background: black;
  filter: blur(2px);
  border-radius: 50%;
  height: 6px;
  transform: translateY(73px);
  width: 54px;
  margin: 0 auto;
}
.empty-ball-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 180px;
  perspective: 600px;
}

/* ===== Nav 三球弹跳 (审核 tab) ===== */
.nav-bouncing-dots {
  position: relative;
  width: 40px;
  height: 26px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.nav-bouncing-dots .nbi {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #fff;
  margin: 0 2px;
  animation: nav-bd 0.6s alternate infinite ease;
}
.nav-bouncing-dots .nbi:nth-child(2) { animation-delay: 0.2s; }
.nav-bouncing-dots .nbi:nth-child(3) { animation-delay: 0.4s; }
@keyframes nav-bd {
  0% { transform: translateY(0); }
  100% { transform: translateY(-10px); }
}

/* ===== Uiverse reglobby 90 度旋转 loader (审核) ===== */
.pl1 {
  display: block;
  width: 8em;
  height: 8em;
  margin: 0 auto;
}
.pl1__g,
.pl1__rect {
  animation: pl1-a 1.5s cubic-bezier(0.65, 0, 0.35, 1) infinite;
}
.pl1__g {
  transform-origin: 64px 64px;
}
.pl1__rect:first-child { animation-name: pl1-b; }
@keyframes pl1-a {
  from { transform: rotate(0); }
  80%, to {
    animation-timing-function: steps(1, start);
    transform: rotate(90deg);
  }
}
@keyframes pl1-b {
  0% { transform: scale(1, 1); }
  20% { transform: scale(1, 0); }
  60% { transform: scale(0, 1); }
  80%, 100% { transform: scale(1, 1); }
}
@keyframes pl1-c {
  0% { transform: scale(1, 1) translate(0, 12px); }
  20% { transform: scale(1, 1.5) translate(0, 0); }
  40% { transform: scale(1, 1) translate(0, 0); }
  60% { transform: scale(1.5, 1) translate(0, 0); }
  80%, 100% { transform: scale(1, 1) translate(12px, 0); }
}
.nav-pl1 {
  display: block;
  width: 32px;
  height: 32px;
}
.nav-pl1 .pl1__rect {
  fill: #fff;
}

/* ===== Uiverse Satwinder04 10 球缩放脉冲 (看板顶部) ===== */
.kanban-5balls-banner {
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 2px 0;
  margin-bottom: 2px;
  height: 28px;
  overflow: hidden;
}
.kanban-5balls-banner .loader3 {
  display: flex;
  justify-content: center;
  align-items: center;
}
.kanban-5balls-banner .circle1 {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  margin: 0 4px;
  background-color: #1e3a5f;
  animation: circle1 1.4s ease-in-out infinite;
}
.kanban-5balls-banner .circle1:nth-child(2) { animation-delay: 0.14s; }
.kanban-5balls-banner .circle1:nth-child(3) { animation-delay: 0.28s; }
.kanban-5balls-banner .circle1:nth-child(4) { animation-delay: 0.42s; }
.kanban-5balls-banner .circle1:nth-child(5) { animation-delay: 0.56s; }
.kanban-5balls-banner .circle1:nth-child(6) { animation-delay: 0.7s; }
.kanban-5balls-banner .circle1:nth-child(7) { animation-delay: 0.84s; }
.kanban-5balls-banner .circle1:nth-child(8) { animation-delay: 0.98s; }
.kanban-5balls-banner .circle1:nth-child(9) { animation-delay: 1.12s; }
.kanban-5balls-banner .circle1:nth-child(10) { animation-delay: 1.26s; }
@keyframes circle1 {
  0% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.5); opacity: 0.5; }
  100% { transform: scale(1); opacity: 1; }
}

  10% { transform: translateY(0) scale(1.3, 0.8); }
@keyframes bounceOk {
  11% { transform: translateY(0) scale(0.7, 1.2); animation-timing-function: cubic-bezier(0, 1, 0.5, 1); }
  39% { transform: translateY(-45px) scale(1); animation-timing-function: cubic-bezier(0.4, 1, 0.5, 1); }
  40% { transform: translateY(-45px) scale(1); }
  41% { transform: translateY(-45px) scale(1); animation-timing-function: cubic-bezier(1, 0, 1, 1); }
  69% { transform: translateY(0px) scale(1, 1); animation-timing-function: cubic-bezier(1, 0, 1, 1); }
  70% { transform: translateY(0) scale(1.5, 0.4); }
  80% { transform: translateY(0) scale(0.8, 1.2); }
  90% { transform: translateY(0) scale(1.1, 0.8); }
  100% { transform: translateY(0) scale(1, 1); }
}
.empty-loader-container {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 120px;
  height: 120px;
  margin: 0 auto;
}
.empty-loader-container .loader {
  position: relative;
  width: 100px;
  height: 100px;
  overflow: hidden;
  background: #c9d5e0;
  border-radius: 25px;
  transform-style: preserve-3d;
  mix-blend-mode: hard-light;
  box-shadow:
    12px 12px 12px -2px rgba(0, 0, 0, 0.15),
    inset 8px 8px 5px rgba(255, 255, 255, 0.75),
    -8px -8px 15px rgba(255, 255, 255, 0.55),
    inset -1px -1px 5px rgba(0, 0, 0, 0.2);
}
.empty-loader-container .circle {
  position: absolute;
  inset: 18px;
  background: #acbaca;
  border-radius: 50%;
  transform-style: preserve-3d;
  box-shadow:
    3px 3px 8px 0 #152b4a66,
    inset 3px 3px 3px rgba(255, 255, 255, 0.55),
    -3px -3px 5px rgba(255, 255, 255, 1);
}
.empty-loader-container .circle::before {
  content: "";
  position: absolute;
  inset: 2px;
  background: linear-gradient(#2196f3, #e91e63);
  mix-blend-mode: color-burn;
  border-radius: 50%;
  animation: anim 2s linear infinite;
}
.empty-loader-container .circle::after {
  content: "";
  position: absolute;
  inset: 12px;
  filter: blur(0.9px);
  background: #acbaca;
  border-radius: 50%;
  z-index: 1000;
}
.loader {
  position: relative;
  width: 200px;
  overflow: hidden;
  height: 200px;
  background: #c9d5e0;
  border-radius: 50px;
  transform-style: preserve-3d;
  mix-blend-mode: hard-light;
  box-shadow:
    25px 25px 25px -5px rgba(0, 0, 0, 0.15),
    inset 15px 15px 10px rgba(255, 255, 255, 0.75),
    -15px -15px 30px rgba(255, 255, 255, 0.55),
    inset -1px -1px 10px rgba(0, 0, 0, 0.2);
}
.circle {
  position: absolute;
  inset: 35px;
  background: #acbaca;
  border-radius: 50%;
  transform-style: preserve-3d;
  box-shadow:
    5px 5px 15px 0 #152b4a66,
    inset 5px 5px 5px rgba(255, 255, 255, 0.55),
    -6px -6px 10px rgba(255, 255, 255, 1);
}
.circle::before {
  content: "";
  position: absolute;
  inset: 4px;
  background: linear-gradient(#2196f3, #e91e63);
  mix-blend-mode: color-burn;
  border-radius: 50%;
  animation: anim 2s linear infinite;
}
.circle::after {
  content: "";
  position: absolute;
  inset: 25px;
  filter: blur(0.9px);
  background: #acbaca;
  border-radius: 50%;
  z-index: 1000;
}
@keyframes anim {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

/* ===== XFZNATIVE25: 旧 .xfz-iframe-wrap 已删除 (iframe 模式废弃) ===== */
/* 小饭桌现为原生 <xfz-view> 组件, 内联渲染于 me-home 容器中, 无需固定定位 */
/* .xfz-native-wrap 作用域样式由 xfz/css/app.css 自行管理 (CSS 变量作用域化) */

/* === V1.1001 收工独立页(全屏) - 微信风 === */
.submit-page-mask {
  position: fixed; top: 0; left: 0; right: 0; bottom: 0;
  background: #f5f5f5; z-index: 300;
  display: flex; flex-direction: column;
}
.submit-page {
  display: flex; flex-direction: column; flex: 1; min-height: 0;
  background: #f5f5f5;
}
.submit-page-header {
  display: flex; align-items: center; height: 48px;
  background: #fff; border-bottom: 1px solid #e8e8e8; padding: 0 16px;
  flex-shrink: 0;
}
.submit-page-back {
  font-size: 28px; color: #1a1a1a; cursor: pointer;
  width: 36px; height: 36px; display: flex; align-items: center; justify-content: center;
  margin-right: 8px; user-select: none;
}
.submit-page-title {
  font-size: 17px; font-weight: 600; color: #1a1a1a; flex: 1; text-align: center;
  margin-right: 36px; /* 平衡 back 按钮宽度 */
}
.submit-page-body {
  flex: 1; overflow-y: auto; padding: 12px 16px 80px 16px;
  -webkit-overflow-scrolling: touch;
  padding-bottom: 100px; /* 固定底部 56+16 高度 */
}
.submit-page-body .card {
  background: #fff; border-radius: 8px; padding: 14px 16px; margin-bottom: 12px;
  box-shadow: 0 1px 2px rgba(0,0,0,0.04);
}
.submit-page-footer {
  position: fixed; bottom: 0; left: 0; right: 0;
  background: #f0f0f0; border-top: 1px solid #d0d0d0;
  display: flex; height: 56px; z-index: 100;
  padding: 8px 12px; gap: 8px;
}
.submit-page-btn {
  flex: 1; height: 40px; display: flex; align-items: center; justify-content: center;
  border-radius: 6px; font-size: 15px; font-weight: 600; cursor: pointer;
  user-select: none;
}
.submit-page-btn-back {
  background: #fff; color: #1a1a1a; border: 1px solid #d0d0d0;
}
.submit-page-btn-submit {
  background: #1a1a1a; color: #fff; border: 1px solid #1a1a1a;
}

/* 紧凑版 派工内容块 */
.submit-page-body .compact-block {
  background: #f8f9fb; padding: 8px 10px; border-radius: 5px; margin: 6px 0;
  font-size: 12px; color: #1a1a1a; line-height: 1.5;
}

/* === V1.1001 状态色 8 个状态 === */
.badge-pending { background:#fff4d4; color:#b88b00; padding:3px 8px; border-radius:3px; font-weight:600; }
.badge-done { background:#d4edda; color:#28a745; padding:3px 8px; border-radius:3px; font-weight:600; }
.badge-rejected { background:#ffe5e8; color:#dc3545; padding:3px 8px; border-radius:3px; font-weight:600; }
.badge-status { background:#d6e9f8; color:#1a1a1a; padding:3px 8px; border-radius:3px; font-weight:600; }

/* ===== V1.1001-FIX-23: 微信风输入框 ===== */
.wx-input-line {
  width: 100%;
  border: none !important;
  border-bottom: 1px solid #e5e5e5 !important;
  border-radius: 0 !important;
  background: transparent !important;
  padding: 8px 0 !important;
  font-size: 15px !important;
  box-sizing: border-box;
}
.wx-input-line:focus {
  outline: none;
  border-bottom-color: #07c160 !important;
}
.wx-select-line {
  width: 100%;
  border: none !important;
  border-bottom: 1px solid #e5e5e5 !important;
  border-radius: 0 !important;
  background: transparent !important;
  padding: 10px 0 !important;
  font-size: 14px !important;
  appearance: none !important;
  -webkit-appearance: none !important;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23999' d='M6 8L0 0h12z'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: right 0 center !important;
  background-size: 10px 7px !important;
  padding-right: 20px !important;
}
.wx-textarea-line {
  width: 100%;
  border: none !important;
  border-bottom: 1px solid #e5e5e5 !important;
  border-radius: 0 !important;
  background: transparent !important;
  padding: 8px 0 !important;
  font-size: 15px !important;
  resize: none !important;
  font-family: inherit;
  box-sizing: border-box;
}
.wx-input-gray {
  width: 100%;
  border: none !important;
  background: #f5f5f5 !important;
  border-radius: 6px !important;
  padding: 8px 12px !important;
  font-size: 14px !important;
  box-sizing: border-box;
}
/* ============ ICONS22: G1-G5 线性 SVG 统一对齐 (stroke-width:1.8, currentColor, 1em 响应式) ============ */
.icon-svg {
  display: inline-block;
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
  overflow: visible;
  flex-shrink: 0;
}
.icon-svg-lg { width: 1.35em; height: 1.35em; vertical-align: -0.25em; }
.icon-svg-sm { width: 0.85em; height: 0.85em; vertical-align: -0.05em; }
.icon-svg-solid { fill: currentColor; stroke: none; }
.icon-3x3 { font-size: 28px; display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; }
.icon-list { font-size: 16px; display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; }
.btn-icon { margin-right: 4px; }
.wx-input-border {
  width: 100%;
  border: 1px solid #e5e5e5 !important;
  border-radius: 4px !important;
  background: #fff !important;
  padding: 6px 10px !important;
  font-size: 14px !important;
  box-sizing: border-box;
}

/* ===== V1.1001-FIX-24: 全局 select/input 默认微信风 (覆盖无 style 的元素) ===== */
.submit-page-body select:not([class]):not([style*="display:none"]),
.submit-page-body input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([class]):not([style*="display:none"]),
.submit-page-body textarea:not([class]):not([style*="display:none"]) {
  width: 100% !important;
  border: none !important;
  border-bottom: 1px solid #e5e5e5 !important;
  border-radius: 0 !important;
  background: transparent !important;
  padding: 8px 0 !important;
  font-size: 15px !important;
  box-sizing: border-box !important;
  appearance: none !important;
  -webkit-appearance: none !important;
}
.submit-page-body select:not([class]):not([style*="display:none"]) {
  padding: 10px 0 !important;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23999' d='M6 8L0 0h12z'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: right 0 center !important;
  background-size: 10px 7px !important;
  padding-right: 20px !important;
}

/* ===== V1.1001-FIX-29: 电脑端精致 9:16 容器 (像 iPhone) ===== */
@media (min-width: 768px) {
  /* 背景:浅灰,不要深色压迫感 */
  body {
    background: #e8eaed !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    min-height: 100vh !important;
  }
  /* 容器:像 iPhone 12 Pro 尺寸, 390x844 — BGRAYS23: 内部也用微信灰底,保证 card 白卡有层次感 */
  #app, .main-app {
    width: 700px !important;
    max-width: 700px !important;
    min-height: 100vh !important;
    height: 100vh !important;
    margin: 0 !important;
    background: #f5f5f5 !important;
    box-shadow: 0 10px 60px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.1) !important;
    border-radius: 0 !important;
    overflow: hidden !important;
    position: relative !important;
  }
  /* 登录页也用同款容器 — BGRAYS23: 内部统一微信灰底 */
  .login-page {
    width: 700px !important;
    max-width: 700px !important;
    min-height: 100vh !important;
    height: 100vh !important;
    background: #f5f5f5 !important;
    box-shadow: 0 10px 60px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.1) !important;
    overflow: hidden !important;
    position: relative !important;
  }
  /* 内部可以滚动 */
  .main-app {
    overflow-y: auto !important;
  }
  /* 底部 nav 居中在容器内 */
  .bottom-nav-fixed {
    left: 50% !important;
    right: auto !important;
    width: 100% !important;
    max-width: 700px !important;
    transform: translateX(-50%) !important;
    box-sizing: border-box !important;
  }
  /* 任务详情/收工 全屏也居中 */
  .submit-page-mask,
  .task-detail-mask,
  .modal-mask {
    left: 50% !important;
    right: auto !important;
    width: 700px !important;
    transform: translateX(-50%) !important;
  }
  /* 浮动 ⊕ 按钮限制在容器内 */
  [style*="position:fixed;right:16px"] {
    right: calc(50% - 350px + 16px) !important;
  }
  /* XFZREVIEW38: 数据分析弹窗电脑端 700px 居中, 高度自适应 */
  .xfz-native-wrap .modal-mask { padding: 0; }
  .xfz-native-wrap .modal {
    width: 700px; max-width: 700px;
    height: auto; max-height: 90vh;
    border-radius: 8px;
    position: fixed;
    top: 50%; left: 50%;
    transform: translate(-50%, -50%);
    overflow-y: auto;
  }
}

/* ===== V1.1001-FIX-36: 任务详情 mask ===== */
.task-detail-mask {
  position: fixed; top: 0; left: 0; right: 0; bottom: 0;
  z-index: 200;
}

/* ===== V1.1001-FIX-36: 任务详情底部按钮 9:16 居中 ===== */
@media (min-width: 768px) {
  .task-detail-bottom-bar {
    left: 50% !important;
    right: auto !important;
    width: 100% !important;
    max-width: 700px !important;
    transform: translateX(-50%) !important;
    box-sizing: border-box !important;
  }
}

/* V1.1001-INPUT-BOX: 通用输入框类 (微信风浅灰底, 12px 圆角, 轻阴影) */
.input-box {
  background-color: #f5f5f5;
  border: none;
  border-radius: 12px;
  padding: 12px;
  font-size: 15px;
  color: #333;
  outline: none;
  -webkit-tap-highlight-color: transparent;
  transition: background-color 0.18s, box-shadow 0.18s;
  font-family: inherit;
  box-shadow: 0 1px 3px rgba(0,0,0,0.04);
}
.input-box:focus {
  background-color: #ececec;
  box-shadow: 0 0 0 3px rgba(30,58,95,0.08);
}
.input-box::placeholder {
  color: #999;
}

/* V1.1001-DISPATCH-FORM: 派工表单卡片化 + 浅灰输入框 */
.dispatch-form-card {
  background: #fff;
  border-radius: 12px;
  padding: 16px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.04);
  margin-bottom: 12px;
}
.dispatch-input {
  width: 100%;
  background: #f5f5f5;
  border: none;
  border-radius: 8px;
  padding: 12px;
  font-size: 15px;
  color: #333;
  outline: none;
  box-sizing: border-box;
  font-family: inherit;
  transition: background 0.18s;
}
.dispatch-input:focus { background: #ececec; }
.dispatch-input::placeholder { color: #999; font-size: 14px; }
.dispatch-select {
  width: 100%;
  background: #f5f5f5 !important;
  border: none !important;
  border-radius: 8px !important;
  padding: 12px 36px 12px 14px !important;
  font-size: 15px !important;
  color: #333 !important;
  outline: none !important;
  appearance: none;
  -webkit-appearance: none;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23666' d='M6 8L0 0h12z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 12px center;
  background-size: 12px 8px;
  cursor: pointer;
  box-sizing: border-box;
  font-family: inherit;
  transition: background 0.18s, border-color 0.18s;
}
.dispatch-select:focus { background: #ececec !important; border-color: #1e3a5f !important; }
.dispatch-select option { color: #333; }
.dispatch-select option:first-child { color: #666; }
.dispatch-textarea {
  width: 100%;
  background: #f5f5f5;
  border: none;
  border-radius: 8px;
  padding: 12px;
  font-size: 15px;
  color: #333;
  outline: none;
  resize: none;
  font-family: inherit;
  box-sizing: border-box;
  transition: background 0.18s;
  min-height: 80px;
}
.dispatch-textarea:focus { background: #ececec; }
.dispatch-textarea::placeholder { color: #999; font-size: 14px; }

/* Dispatch (20260829): 紧凑双列表单风 */
.dispatch-wrap { background:#f5f5f5; min-height:100vh; padding-bottom:60px; }
.dispatch-card { background:#fff; border-radius:8px; margin:0; }
.dispatch-row {
  display:flex; align-items:center;
  padding:12px 16px;
  border-bottom:1px solid #eee;
}
.dispatch-row:last-child { border-bottom:none; }
.dispatch-row-full { flex-direction:column; align-items:stretch; gap:8px; }
.dispatch-label {
  width:80px; flex-shrink:0;
  font-size:14px; color:#333; font-weight:500;
}
/* override old .dispatch-input/select/textarea inside .dispatch-row — 微信浅灰块风 */
.dispatch-row .dispatch-input,
.dispatch-row .dispatch-select {
  flex:1 !important; min-width:0 !important; width:auto !important;
  background-color:#f5f5f5 !important;
  border:none !important; border-radius:8px !important;
  height:40px !important; padding:0 10px !important;
  font-size:14px; color:#333; outline:none !important;
  box-shadow:none !important; box-sizing:border-box;
}
.dispatch-row .dispatch-select {
  appearance:none; -webkit-appearance:none;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23666' d='M6 8L0 0h12z'/%3E%3C/svg%3E") !important;
  background-repeat:no-repeat !important;
  background-position:right 10px center !important;
  background-size:12px 8px !important;
  padding-right:30px !important;
}
.dispatch-row .dispatch-textarea {
  flex:1 !important; width:auto !important;
  background-color:#f5f5f5 !important;
  border:none !important; border-radius:8px !important;
  padding:10px !important; font-size:14px; color:#333;
  outline:none !important; box-shadow:none !important;
  resize:none; min-height:80px; box-sizing:border-box;
}
.dispatch-row .dispatch-input:focus,
.dispatch-row .dispatch-select:focus,
.dispatch-row .dispatch-textarea:focus { background-color:#ececec !important; }
.dispatch-history-btn {
  background:#fff; color:#1976d2;
  border:1px solid #e5e5e5;
  padding:7px 12px; border-radius:8px;
  font-size:12px; font-weight:500;
  cursor:pointer; white-space:nowrap; box-shadow:none;
}
.dispatch-clear-btn {
  border:none; border-radius:8px;
  padding:7px 14px; font-size:12px;
  cursor:pointer; font-weight:500;
  background:#f2f2f2; color:#333; box-shadow:none;
}
/* 胶囊按钮组 */
.capsule-group {
  display:flex !important;
  flex-wrap:wrap !important;
  gap:8px !important;
}
.capsule-btn {  width:auto !important;
  flex-shrink:0 !important;
  min-width: max-content;
  height:36px !important; line-height:36px;
  padding:0 16px !important;
  border-radius:18px !important;
  border:1px solid #ddd; background:#f5f5f5;
  font-size:13px !important; color:#5a6b7a;
  cursor:pointer; transition:all 0.15s;
  text-align:center; box-sizing:border-box;
  white-space: normal;
}
.capsule-active {
  background:#1976d2; border-color:#1976d2;
  color:#fff; font-weight:600;
}
.capsule-radio { display:none; }
/* 网格科室多选 — 胶囊标签 */
.grid-chip-list { display:flex; flex-wrap:wrap; gap:8px; width:100%; }
.grid-chip {
  height:36px; line-height:36px;
  padding:0 14px; border-radius:18px;
  background:#f5f5f5; color:#333;
  font-size:13px; cursor:pointer;
  white-space:nowrap; transition:all 0.15s;
  border:1px solid transparent;
  display:inline-flex; align-items:center;
}
.grid-chip-active {
  background:#1976d2; color:#fff;
  font-weight:600; border-color:#1976d2;
}
.grid-chip-checkbox { display:none; }
/* 底部固定按钮 */
.dispatch-bottom {  position:fixed; bottom:16px; left:16px; right:16px;
  display:flex; gap:12px; align-items:center;
  background:transparent; z-index:9999;
}
.dispatch-cancel-btn {  width:80px; flex: 0 0 80px;
  height:48px; border:none; border-radius:8px;
  background:#f5f5f5; color:#333;
  font-size:16px; font-weight:500;
  cursor:pointer; padding:0;
}
.dispatch-cancel-btn:active { opacity:0.85; }
.dispatch-submit-btn {  flex:1; height:48px;
  border:none; border-radius:8px;
  background:#1976d2; color:#fff;
  font-size:16px; font-weight:600;
  cursor:pointer;
}
.dispatch-submit-btn:active { opacity:0.85; }
/* 必填星号 */
.req { color:#dc3545; }

/* ===== Bug3 修复: 工作类型按钮 强制单行 + 横向滑动(不裁文字) ===== */
.work-types.capsule-group {
  display: flex !important;
  flex-wrap: nowrap !important;
  overflow-x: auto !important;
  gap: 8px !important;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;              /* Firefox 隐藏横滑条,视觉更清爽 */
  -ms-overflow-style: none;
}
.work-types.capsule-group::-webkit-scrollbar {
  display: none;                       /* Chrome/Safari 隐藏横滑条 */
}
.work-types.capsule-group label.capsule-btn {
  flex-shrink: 0 !important;
  padding: 0 10px !important;
  height: 36px !important;
  line-height: 36px !important;
  border-radius: 18px !important;
  white-space: nowrap !important;
  min-width: max-content;
}
/* ===== Bug3 修复 END ===== */

/* ===== 顶部同步卡片 (微信极简风) ===== */
.sync-card {
  background: #ffffff;
  border-radius: 12px;
  margin: 10px 12px;
  padding: 10px 14px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
}
.sync-card__text {
  font-size: 14px;
  color: #2c3e50;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex-shrink: 1;
  margin-right: 12px;
}
.sync-card__btn {
  flex-shrink: 0;
  height: 32px;
  border-radius: 8px;
  font-size: 14px;
  white-space: nowrap;
  background: #1976d2;
  color: #ffffff;
  border: none;
  padding: 0 16px;
  font-weight: 500;
  line-height: 32px;
  transition: opacity 0.2s ease;
}
.sync-card__btn:active {
  opacity: 0.8;
}
