/* 任务列表页样式 — 2026-03-13 全量重写，1:1 对齐 H5 原型 task-list.html */
/* AI_CHANGELOG
| 日期 | Prompt | 变更 |
|------|--------|------|
| 2026-03-13 | 重写 task-list 1:1 还原 H5 | 全量重写 |
| 2026-03-13 | banner 错位重做 | 页面内实现完整 banner |
| 2026-03-13 | 5项修复+精确还原 | 恢复纹理CSS层、盖戳改回CSS、标签恢复CSS渐变、abandoned灰化、全量line-height按排版字典校准 |
*/
/* 换算公式：rpx = H5_px × 1.8204（基于 412px 验收宽度）
 * 排版字典 B.3 硬映射：
 *   text-xs  → 22rpx / 29rpx
 *   text-sm  → 26rpx / 36rpx
 *   text-base→ 30rpx / 44rpx
 *   text-lg  → 33rpx / 51rpx
 *   text-xl  → 36rpx / 51rpx
 *   text-2xl → 44rpx / 58rpx
 *   text-3xl → 54rpx / 66rpx
 *   text-[9px]→ 16rpx（行高需视觉校准）
 */

/* ============================================
 * 页面容器
 * ============================================ */
.page-task-list {
  min-height: 100vh;
  background-color: var(--color-gray-1);
  padding-bottom: 180rpx;
}

/* ============================================
 * Banner 区域
 * 方案：SVG 做渐变底图 + CSS 做纹理叠加
 * 原因：SVG pattern 在小程序 image 组件中不渲染
 * ============================================ */
.banner-area {
  position: relative;
  /* H5: pb-4 = 16px → 29rpx */
  padding-bottom: 29rpx;
  overflow: hidden;
}

/* 渐变底图 — SVG 包含 7 层渐变 + 光晕 */
.banner-bg-img {
  position: absolute;
  top: -50rpx;
  left: 0;
  width: 100%;
  height: 110%;
  z-index: 0;
}

/* 纹理层已烘焙进 banner-bg-combined.svg，此层保留占位供未来扩展 */

/* ============================================
 * 用户信息区 — H5: .px-5.pt-10.pb-3
 * px-5=20px→36rpx, pt-10=40px→73rpx, pb-3=12px→22rpx
 * ============================================ */
.user-info-section {
  position: relative;
  z-index: 2;
  padding: 36rpx 29rpx 29rpx 29rpx;
}

/* H5: .flex.items-center.gap-4 → gap-4=16px→29rpx */
.user-info-row {
  display: flex;
  align-items: center;
  gap: 29rpx;
}

/* 头像容器 — H5: w-14 h-14 rounded-2xl bg-white/20 shadow-lg overflow-hidden */
/* w-14=56px→102rpx, rounded-2xl=16px→29rpx (实际 24rpx 更接近视觉) */
.avatar-wrap {
  width: 102rpx;
  height: 102rpx;
  border-radius: 24rpx;
  background: rgba(255,255,255,0.2);
  box-shadow: 0 10rpx 15rpx -3rpx rgba(0,0,0,0.1), 0 4rpx 6rpx -4rpx rgba(0,0,0,0.1);
  overflow: hidden;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

.avatar-img {
  width: 100%;
  height: 100%;
}

.user-detail {
  flex: 1;
}

/* H5: .flex.items-center.gap-2.mb-1 → gap-2=8px→15rpx, mb-1=4px→7rpx */
.user-name-row {
  display: flex;
  align-items: center;
  gap: 15rpx;
  margin-bottom: 7rpx;
  line-height: 51rpx; /* text-xl line-height 容器 */
}

/* H5: text-xl font-semibold → 36rpx/51rpx */
.user-name {
  font-size: 36rpx;
  font-weight: 600;
  color: #ffffff;
}

/* H5: px-2 py-0.5 bg-white/20 rounded-full text-xs
 * px-2=8px→15rpx, py-0.5=2px→4rpx, text-xs→22rpx/29rpx */
.user-role-tag {
  font-size: 22rpx;
  padding: 0rpx 20rpx 0 20rpx;
  background: rgba(255,255,255,0.2);
  border-radius: 9999rpx;
  color: #ffffff;
  height: 35rpx;
  line-height: 35rpx;
}

/* H5: text-white/70 text-sm → 26rpx/36rpx */
.user-store-row {
  line-height: 36rpx;
}
.user-store {
  font-size: 26rpx;
  color: rgba(255,255,255,0.7);
}

/* ============================================
 * 业绩进度卡片 — H5: .mx-4 > .bg-white/15.backdrop-blur-md.rounded-2xl.px-4.py-3.border.border-white/20
 * mx-4=16px→29rpx, px-4=16px→29rpx, py-3=12px→22rpx, rounded-2xl=16px→29rpx
 * ============================================ */
.perf-card {
  position: relative;
  z-index: 2;
  margin: 0 29rpx;
  background: rgba(255,255,255,0.15);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-radius: 29rpx;
  padding: 22rpx 29rpx;
  border: 1rpx solid rgba(255,255,255,0.2);
}

/* --- L1: 跳档提示行 --- */
/* H5: .flex.items-center.justify-between.mb-2 → mb-2=8px→15rpx */
.perf-l1 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 15rpx;
}

/* H5: .flex.items-baseline.gap-2 → gap-2=8px→15rpx */
.perf-l1-left {
  display: flex;
  align-items: baseline;
  gap: 15rpx;
  line-height: 51rpx; /* text-xl 行高容器 */
}

/* H5: stat-label text-sm font-medium → 26rpx/36rpx */
.perf-label {
  font-size: 26rpx;
  font-weight: 500;
  color: rgba(255,255,255,0.9);
  text-shadow: 0 2rpx 4rpx rgba(0,0,0,0.15);
}

/* H5: stat-accent text-xl font-bold → 36rpx/51rpx */
.perf-accent {
  font-size: 36rpx;
  font-weight: 700;
  color: #fcd34d;
  text-shadow: 0 2rpx 4rpx rgba(0,0,0,0.2);
}

/* H5: stat-secondary text-xs → 22rpx/29rpx */
.perf-l1-right {
  display: flex;
  align-items: center;
  gap: 4rpx;
  line-height: 29rpx;
}
.perf-secondary {
  font-size: 22rpx;
  color: rgba(255,255,255,0.7);
}

/* --- L2: 5段档位进度条 --- */
/* H5: .relative.mb-6 → mb-6=24px→44rpx */
.perf-l2 {
  position: relative;
}

/* ═══════════════════════════════════════════════════
 * 进度条 — 一整根方案
 * 结构：tier-track > tier-track-bg + tier-track-fill + tier-divider×4
 * ═══════════════════════════════════════════════════ */

/* 外层容器：撑高、relative 供分隔线绝对定位 */
.tier-track {
  position: relative;
  height: 14rpx;
  border-radius: 9rpx;
  overflow: visible;

}

/* 底轨：整条灰白背景 */
.tier-track-bg {
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  border-radius: 9rpx;
  background: rgba(255,255,255,0.18);
}

/* 填充条：仅控制裁剪宽度，overflow:hidden，不设背景色 */
.tier-track-fill {
  position: absolute;
  top: 0; left: 0; bottom: 0;
  border-radius: 9rpx;
  overflow: hidden;
  transition: width 0.4s cubic-bezier(0.34, 1.2, 0.64, 1);
  box-shadow: 0 0 14rpx rgba(239,68,68,0.45);
}

/* 全宽渐变层：宽度撑满轨道 100%（相对于 tier-track），不随填充宽度缩放 */
/* 小程序中 position:absolute + left:0 + width 用 vw 单位近似轨道宽度 */
.tier-gradient-bar {
  position: absolute;
  top: 0; left: 0; bottom: 0;
  /* 轨道 = perf-card 内宽，约 (100vw - 29rpx*2 - 29rpx*2) ≈ 100vw - 116rpx */
  /* 用 100vw 保证渐变铺满，超出部分被父层 overflow:hidden 裁掉 */
  width: 100vw;
  background: linear-gradient(
    90deg,
    #fde68a  0%,
    #fbbf24 20%,
    #f97316 45%,
    #ef4444 70%,
    #910a0a 100%
  );
}

/* ══════════════════════════════════════════════════════
 * 高光动画
 * 默认状态：不播放（animation: none）
 * 触发：JS 设置 shineRunning=true → 挂上 .tier-shine--active → 单次播放
 * duration 由 WXML style 注入（shineDurMs），每轮由 JS 按进度+速度重算
 *
 * ★ 外观旋钮（在此修改）★
 *   --shine-width  : 光束宽度（默认50%）
 *   --shine-opacity: 峰值亮度 0~1（默认1.0）
 *   --shine-color  : RGB颜色，默认纯白
 *                    255,220,100=暖黄；255,180,80=橙
 * ══════════════════════════════════════════════════════ */
.tier-shine {
  --shine-width:   120rpx;  /* ★固定宽度，不随进度条长短变化；改大=光晕更宽 */
  --shine-opacity: 1.0;
  --shine-color:   255, 255, 255;

  position: absolute;
  top: 0;
  left: -70%;          /* 静止时停在左侧外，不可见 */
  width: var(--shine-width);
  height: 100%;
  background: linear-gradient(
    90deg,
    transparent 0%,
    rgba(var(--shine-color), 0.08) 20%,
    rgba(var(--shine-color), var(--shine-opacity)) 50%,
    rgba(var(--shine-color), 0.08) 80%,
    transparent 100%
  );
  animation: none;     /* 默认不播放 */
  pointer-events: none;
}
/* JS 设置 shineRunning=true 时挂上此 class，触发单次播放 */
.tier-shine--active {
  animation: tierShine 1s linear 1 forwards; /* duration 被 style 覆盖 */
}
@keyframes tierShine {
  /* left 用固定 rpx，确保起终点与填充条宽度无关 */
  0%   { left: -130rpx; opacity: 0; }  /* 从左侧外出发（≈ shine-width + 10rpx） */
  5%   { opacity: 1; }                 /* 淡入 */
  95%  { opacity: 1; }                 /* 接近右端 */
  100% { left: calc(100% + 10rpx); opacity: 0; } /* 到达右侧外，淡出 */
}

/* ══════════════════════════════════════════════════════
 * 进度末端导火索效果
 * 默认状态：光柱微弱待机，火花不播放
 * 触发：JS 设置 sparkRunning=true → 挂上 --active class → 单次播放
 * duration 由 WXML style 注入（sparkDurMs = SPARK_DUR_MS）
 *
 * ★ 外观旋钮（在此修改）★
 *   --spark-scale : 整体缩放，影响光柱+粒子大小+飞射距离
 *   --spark-pole-h: 光柱高度（宽度自动=高度/2）
 * ══════════════════════════════════════════════════════ */
.tier-edge-glow {
  --spark-scale:  0.7;
  --spark-pole-h: 30rpx;

  position: absolute;
  top: 50%;
  transform: translate(-50%, -50%) scale(var(--spark-scale));
  transform-origin: center center;
  width: calc(var(--spark-pole-h) / 2);
  height: var(--spark-pole-h);
  border-radius: 999rpx;
  background: rgba(255,255,255,1);
  /* 默认：微弱待机光 */
  opacity: 0.25;
  box-shadow: 0 0 4rpx 2rpx rgba(255,200,80,0.35);
  animation: none;
  pointer-events: none;
  overflow: visible;
  z-index: 10;
  transition: opacity 0.1s, box-shadow 0.1s;
}
/* 触发时：爆亮并消散（单次） */
.tier-edge-glow--active {
  animation: edgePulse 1s ease-out 1 forwards;
}
@keyframes edgePulse {
  0%   { opacity: 1;    box-shadow: 0 0 22rpx 12rpx rgba(255,255,255,0.95); }
  15%  { opacity: 1;    box-shadow: 0 0 26rpx 14rpx rgba(255,220, 80,0.90); }
  55%  { opacity: 0.6;  box-shadow: 0 0 12rpx  6rpx rgba(255,160, 40,0.60); }
  85%  { opacity: 0.25; box-shadow: 0 0  4rpx  2rpx rgba(255,200, 80,0.35); }
  100% { opacity: 0.25; box-shadow: 0 0  4rpx  2rpx rgba(255,200, 80,0.35); }
}

/* 火星粒子基础样式：默认隐藏，从光柱中心出发 */
.spark {
  position: absolute;
  border-radius: 999rpx;
  pointer-events: none;
  opacity: 0;
  top: 50%;
  left: 50%;
  animation: none;
}
/* 触发时播放单次散射动画 */
.spark--active { animation-iteration-count: 1; animation-fill-mode: forwards; }

/* ──────────────────────────────────────────────────────
 * 6粒火星：方向/颜色/大小各异，在 0%~15% 之间依次爆发
 * timing-function 用 linear，减速效果由关键帧间距控制：
 *   前段（爆发）：帧间距大 → 视觉上快
 *   后段（消散）：帧间距小 → 视觉上慢，自然减速飘散
 * ────────────────────────────────────────────────────── */

/* 粒子1：右上，亮白，第一个爆发 */
.spark-1 { width: 10rpx; height: 10rpx; background: #ffffff; }
.spark-1.spark--active { animation-name: spark1; animation-timing-function: linear; }
@keyframes spark1 {
  0%   { opacity: 0;   transform: translate(  0rpx,   0rpx) scale(0.0); }
  8%   { opacity: 1;   transform: translate(  8rpx, -16rpx) scale(1.6); } /* 爆发 */
  25%  { opacity: 0.9; transform: translate( 16rpx, -30rpx) scale(1.2); }
  45%  { opacity: 0.7; transform: translate( 22rpx, -40rpx) scale(0.9); }
  62%  { opacity: 0.5; transform: translate( 27rpx, -48rpx) scale(0.7); }
  76%  { opacity: 0.3; transform: translate( 31rpx, -53rpx) scale(0.5); }
  87%  { opacity: 0.15;transform: translate( 34rpx, -57rpx) scale(0.3); }
  100% { opacity: 0;   transform: translate( 36rpx, -60rpx) scale(0.1); }
}

/* 粒子2：右下，橙色 */
.spark-2 { width: 12rpx; height: 12rpx; background: #fb923c; }
.spark-2.spark--active { animation-name: spark2; animation-timing-function: linear; }
@keyframes spark2 {
  0%   { opacity: 0;   transform: translate(  0rpx,   0rpx) scale(0.0); }
  12%  { opacity: 1;   transform: translate( 10rpx,  14rpx) scale(1.5); } /* 爆发 */
  28%  { opacity: 0.8; transform: translate( 19rpx,  24rpx) scale(1.1); }
  46%  { opacity: 0.6; transform: translate( 26rpx,  32rpx) scale(0.8); }
  62%  { opacity: 0.4; transform: translate( 31rpx,  38rpx) scale(0.6); }
  76%  { opacity: 0.25;transform: translate( 35rpx,  43rpx) scale(0.4); }
  88%  { opacity: 0.1; transform: translate( 38rpx,  47rpx) scale(0.25); }
  100% { opacity: 0;   transform: translate( 42rpx,  56rpx) scale(0.1); }
}

/* 粒子3：正上，黄色，快速 */
.spark-3 { width: 8rpx; height: 8rpx; background: #fde68a; }
.spark-3.spark--active { animation-name: spark3; animation-timing-function: linear; }
@keyframes spark3 {
  0%   { opacity: 0;   transform: translate(  0rpx,   0rpx) scale(0.0); }
  6%   { opacity: 1;   transform: translate(  4rpx, -22rpx) scale(1.8); } /* 爆发 */
  20%  { opacity: 0.9; transform: translate(  7rpx, -36rpx) scale(1.3); }
  38%  { opacity: 0.7; transform: translate(  9rpx, -48rpx) scale(1.0); }
  55%  { opacity: 0.5; transform: translate( 10rpx, -57rpx) scale(0.7); }
  70%  { opacity: 0.3; transform: translate( 11rpx, -63rpx) scale(0.5); }
  84%  { opacity: 0.15;transform: translate( 11rpx, -68rpx) scale(0.3); }
  100% { opacity: 0;   transform: translate( 12rpx, -74rpx) scale(0.1); }
}

/* 粒子4：右斜上，红橙，拖尾长条 */
.spark-4 { width: 16rpx; height: 6rpx; background: #ef4444; }
.spark-4.spark--active { animation-name: spark4; animation-timing-function: linear; }
@keyframes spark4 {
  0%   { opacity: 0;   transform: translate(  0rpx,   0rpx) rotate(  0deg) scale(0.0); }
  10%  { opacity: 1;   transform: translate( 14rpx, -10rpx) rotate(-20deg) scale(1.4); } /* 爆发 */
  26%  { opacity: 0.8; transform: translate( 24rpx, -16rpx) rotate(-30deg) scale(1.0); }
  44%  { opacity: 0.6; transform: translate( 32rpx, -21rpx) rotate(-38deg) scale(0.75);}
  60%  { opacity: 0.4; transform: translate( 39rpx, -26rpx) rotate(-45deg) scale(0.55);}
  74%  { opacity: 0.25;transform: translate( 44rpx, -30rpx) rotate(-50deg) scale(0.4); }
  87%  { opacity: 0.1; transform: translate( 48rpx, -33rpx) rotate(-53deg) scale(0.25);}
  100% { opacity: 0;   transform: translate( 58rpx, -40rpx) rotate(-55deg) scale(0.1); }
}

/* 粒子5：正右，黄白，最先弹出 */
.spark-5 { width: 10rpx; height: 10rpx; background: #fbbf24; }
.spark-5.spark--active { animation-name: spark5; animation-timing-function: linear; }
@keyframes spark5 {
  0%   { opacity: 0;   transform: translate(  0rpx,  0rpx) scale(0.0); }
  5%   { opacity: 1;   transform: translate( 18rpx,  2rpx) scale(1.7); } /* 爆发（最早）*/
  20%  { opacity: 0.85;transform: translate( 30rpx,  3rpx) scale(1.2); }
  38%  { opacity: 0.65;transform: translate( 40rpx,  4rpx) scale(0.9); }
  55%  { opacity: 0.45;transform: translate( 47rpx,  5rpx) scale(0.7); }
  70%  { opacity: 0.3; transform: translate( 52rpx,  6rpx) scale(0.5); }
  84%  { opacity: 0.15;transform: translate( 56rpx,  7rpx) scale(0.3); }
  100% { opacity: 0;   transform: translate( 60rpx,  8rpx) scale(0.1); }
}

/* 粒子6：右下斜，淡橙，最大最慢 */
.spark-6 { width: 14rpx; height: 14rpx; background: #fed7aa; }
.spark-6.spark--active { animation-name: spark6; animation-timing-function: linear; }
@keyframes spark6 {
  0%   { opacity: 0;   transform: translate(  0rpx,   0rpx) scale(0.0); }
  15%  { opacity: 0.9; transform: translate(  6rpx,  18rpx) scale(1.5); } /* 爆发（最晚）*/
  30%  { opacity: 0.75;transform: translate( 10rpx,  28rpx) scale(1.1); }
  47%  { opacity: 0.55;transform: translate( 14rpx,  36rpx) scale(0.85);}
  62%  { opacity: 0.4; transform: translate( 17rpx,  43rpx) scale(0.65);}
  75%  { opacity: 0.25;transform: translate( 19rpx,  48rpx) scale(0.5); }
  87%  { opacity: 0.1; transform: translate( 21rpx,  53rpx) scale(0.35);}
  100% { opacity: 0;   transform: translate( 24rpx,  64rpx) scale(0.1); }
}


/* 分隔竖线：绝对定位叠在进度条上 */
.tier-divider {
  position: absolute;
  top: 0;
  width: 8rpx;
  height: 100%;
  background: #5381D9;
  transform: translateX(-50%);
  pointer-events: none;
  z-index: 2;
}

/* 刻度 — 完成后高亮 */
.tick--done {
  color: rgba(255,255,255,0.95);
  font-weight: 600;
}
.tick--highlight {
  color: rgba(255,255,255,0.85);
  font-weight: 500;
}

/* 刻度 — H5: text-[9px] → 16rpx */
.tier-ticks {
  position: absolute;
  width: 100%;
  top: 100%;
  margin-top: 6rpx;
  height: 24rpx;
}
.tick {
  position: absolute;
  font-size: 16rpx;
  color: rgba(255,255,255,0.55);
  transition: color 0.3s ease, font-weight 0.3s ease;
}
.tick--current {
  color: rgba(255,255,255,0.8);
  font-weight: 500;
}

/* ============================================
 * 调试面板（task-list 专属）
 * ============================================ */
.debug-panel {
  position: fixed;
  bottom: 180rpx;
  right: 30rpx;
  width: 540rpx;
  background: #ffffff;
  border-radius: 28rpx;
  padding: 30rpx 28rpx 24rpx;
  box-shadow: 0 12rpx 48rpx rgba(0,0,0,0.18);
  z-index: 999;
  opacity: 0;
  transform: translateY(20rpx) scale(0.96);
  pointer-events: none;
  transition: opacity 0.2s ease, transform 0.2s ease;
}
.debug-panel--visible {
  opacity: 1;
  transform: translateY(0) scale(1);
  pointer-events: all;
}
.debug-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 24rpx;
  padding-bottom: 20rpx;
  border-bottom: 2rpx solid #f3f3f3;
}
.debug-title {
  font-size: 28rpx;
  font-weight: 600;
  color: #242424;
  line-height: 40rpx;
}
.debug-close {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 52rpx;
  height: 52rpx;
  border-radius: 999rpx;
  background: #f3f3f3;
}
.debug-close--hover { opacity: 0.6; }
.debug-section {
  margin-bottom: 22rpx;
}
.debug-section:last-child { margin-bottom: 0; }
.debug-section--row {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.debug-label-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8rpx;
}
.debug-label {
  font-size: 24rpx;
  color: #5e5e5e;
  line-height: 36rpx;
}
.debug-value-chip {
  font-size: 22rpx;
  font-weight: 600;
  color: #10b981;
  background: rgba(16,185,129,0.10);
  padding: 4rpx 14rpx;
  border-radius: 999rpx;
  line-height: 32rpx;
}
.debug-chip--green {
  color: #10b981;
  background: rgba(16,185,129,0.10);
}
.debug-chip--yellow {
  color: #d97706;
  background: rgba(251,191,36,0.12);
}
.debug-slider {
  width: 100%;
  margin: 4rpx 0 0;
}
.debug-tick-row {
  display: flex;
  justify-content: space-between;
  margin-top: 4rpx;
}
.debug-tick {
  font-size: 18rpx;
  color: #a6a6a6;
  line-height: 28rpx;
}
.debug-tick--key {
  color: #8b8b8b;
  font-weight: 500;
}
.debug-tick--current {
  color: #0052d9;
  font-weight: 600;
}
.debug-btn-group {
  display: flex;
  flex-wrap: wrap;
  gap: 12rpx;
  margin-top: 10rpx;
}
.debug-btn {
  padding: 10rpx 18rpx;
  background: #f3f3f3;
  border-radius: 12rpx;
  font-size: 22rpx;
  color: #5e5e5e;
  line-height: 32rpx;
  border: 2rpx solid transparent;
}
.debug-btn--active {
  background: #ecf2fe;
  color: #0052d9;
  border-color: #0052d9;
  font-weight: 600;
}
/* Toggle switch */
.debug-toggle {
  width: 88rpx;
  height: 48rpx;
  border-radius: 999rpx;
  background: #e7e7e7;
  position: relative;
  transition: background 0.25s ease;
  flex-shrink: 0;
}
.debug-toggle--on {
  background: #10b981;
}
.debug-toggle-thumb {
  position: absolute;
  top: 6rpx;
  left: 6rpx;
  width: 36rpx;
  height: 36rpx;
  border-radius: 999rpx;
  background: #ffffff;
  box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.15);
  transition: left 0.25s ease;
}
.debug-toggle--on .debug-toggle-thumb {
  left: 46rpx;
}
/* 调试触发按钮 */
.debug-trigger {
  position: fixed;
  bottom: 230rpx;
  right: 30rpx;
  width: 88rpx;
  height: 88rpx;
  background: linear-gradient(135deg, #667eea, #764ba2);
  border-radius: 999rpx;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 8rpx 24rpx rgba(102,126,234,0.40);
  z-index: 998;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.debug-trigger--active {
  background: linear-gradient(135deg, #764ba2, #667eea);
  box-shadow: 0 12rpx 32rpx rgba(102,126,234,0.55);
  transform: rotate(15deg);
}
.debug-trigger--hover { opacity: 0.88; }
.debug-trigger-icon {
  font-size: 44rpx;
  line-height: 1;
}

/* --- L3: 课时 + 红戳 + 奖金 --- */
/* H5: .flex.items-stretch.mb-2.5 → mb-2.5=10px→18rpx */
.perf-l3 {
  display: flex;
  align-items: stretch;
  margin: 40rpx 0 30rpx 0;
}

/* 左侧：课时数据 + 红戳（flex:3） */
/* H5: .pr-4.border-r.border-white/25.flex.justify-center.items-center */
.perf-l3-left {
  flex: 3.5;
  padding-right: 0rpx;
  border-right: 1rpx solid rgba(255,255,255,0.25);
  display: flex;
  justify-content: center;
  align-items: center;
}

/* H5: .red-stamp.inline-block.relative padding-right:35px→64rpx */
.perf-hours-wrap {
  display: inline-block;
  position: relative;
  padding-right: 62rpx;
  text-align: center;
}

/* H5: .flex.items-baseline.justify-center.gap-1.5 → gap-1.5=6px→11rpx */
.perf-hours-row {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 11rpx;
  line-height: 51rpx; /* text-xl 行高容器 */
}

/* H5: stat-highlight text-xl font-bold → 36rpx, color:#6ee7b7 */
.hours-green {
  font-size: 38rpx;
  font-weight: 700;
  color: #6ee7b7;
  text-shadow: 0 2rpx 4rpx rgba(0,0,0,0.2);
}

/* H5: stat-secondary text-sm → 26rpx */
.hours-sep {
  font-size: 32rpx;
  color: rgba(255,255,255,0.7);
}

/* H5: stat-accent text-xl font-bold → 36rpx, color:#fcd34d */
.hours-yellow {
  font-size: 38rpx;
  font-weight: 700;
  color: #fcd34d;
  text-shadow: 0 2rpx 4rpx rgba(0,0,0,0.2);
}

/* H5: stat-value text-xl font-bold → 36rpx, color:#ffffff */
.hours-white {
  font-size: 38rpx;
  font-weight: 700;
  color: #ffffff;
  text-shadow: 0 2rpx 6rpx rgba(0,0,0,0.25);
}

/* H5: stat-label text-xs mt-1.5 → 22rpx/29rpx, mt-1.5=6px→11rpx */
.hours-label-row {
  margin-top: 0;
  line-height: 29rpx;
}
.hours-label {
  font-size: 22rpx;
  color: rgba(255,255,255,0.9);
  text-shadow: 0 2rpx 4rpx rgba(0,0,0,0.15);
}

/* --- 红戳徽章 — SVG 实现 --- */
/* H5: position:absolute, top:5px, right:-5px (相对于 .red-stamp 容器)
 * 52px→95rpx, rotate(-12deg), opacity:0.8 */
.stamp-badge {
  position: absolute;
  top: 9rpx;
  right: -9rpx;
  width: 95rpx;
  height: 95rpx;
  pointer-events: none;
  opacity: 0;
  transform: rotate(-12deg) scale(0);
}

/* 盖戳动画 */
@keyframes stampDown {
  0% { transform: rotate(-12deg) scale(3); opacity: 0; }
  50% { transform: rotate(-12deg) scale(0.9); opacity: 0.6; }
  70% { transform: rotate(-12deg) scale(1.05); opacity: 0.75; }
  100% { transform: rotate(-12deg) scale(1); opacity: 0.80; }
}
.stamp-animate {
  animation: stampDown 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}

/* 右侧：奖金激励（flex:2） */
/* H5: .pl-3.text-center.flex.flex-col.justify-center → pl-3=12px→22rpx */
.perf-l3-right {
  flex: 2;
  padding-left: 22rpx;
  text-align: center;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.bonus-wrap {
  display: flex;
  align-items: baseline;
  justify-content: center;
  padding-top: 10rpx;
}

/* H5: text-3xl font-bold text-amber-300 → 54rpx/66rpx */
.bonus-amount {
  font-size: 54rpx;
  font-weight: 700;
  color: #fcd34d;
  text-shadow:
    0 4rpx 7rpx rgba(0, 0, 0, 0.35),
    0 0 22rpx rgba(251, 191, 36, 0.5);
}

/* H5: text-base text-amber-300/80 → 30rpx */
.bonus-unit {
  font-size: 30rpx;
  color: rgba(252, 211, 77, 0.8);
}

/* H5: stat-label text-xs mt-1.5 → 22rpx/29rpx, mt-1.5=6px→11rpx */
.bonus-label-row {
  margin-top: -8rpx;
  line-height: 29rpx;
}
.bonus-label {
  font-size: 22rpx;
  color: rgba(255,255,255,0.9);
  text-shadow: 0 2rpx 4rpx rgba(0,0,0,0.15);
}

/* --- L4: 预计收入 --- */
/* H5: .flex.items-center.justify-between.pt-2.border-t.border-white/25 → pt-2=8px→15rpx */
.perf-l4 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-top: 16rpx;
  border-top: 1rpx solid rgba(255,255,255,0.25);
  line-height: 29rpx;
}

/* H5: stat-label text-xs → 22rpx/29rpx */
.perf-l4-label {
  font-size: 22rpx;
  color: rgba(255,255,255,0.9);
  text-shadow: 0 2rpx 4rpx rgba(0,0,0,0.15);
  white-space: pre;
}

/* H5: .flex.items-center.gap-1.5 → gap-1.5=6px→11rpx */
.perf-l4-right {
  display: flex;
  align-items: center;
  gap: 11rpx;
}

/* H5: stat-value text-lg font-bold → 33rpx/51rpx */
.income-value {
  font-size: 33rpx;
  font-weight: 700;
  color: #ffffff;
  text-shadow: 0 2rpx 6rpx rgba(0,0,0,0.25);
}

/* H5: trend-down → color:rgba(255,255,255,0.5), font-size:12px→22rpx */
.income-trend {
  font-size: 22rpx;
  color: rgba(255,255,255,0.7);
}
.trend-down {
  color: rgba(255,255,255,0.5);
}

/* ============================================
 * Loading / Empty / Error 状态
 * ============================================ */
.state-loading {
  padding: 36rpx 29rpx;
}
.loading-placeholder {
  background: #ffffff;
  border-radius: 22rpx;
  padding: 29rpx;
  margin-bottom: 22rpx;
}
.ph-line {
  height: 22rpx;
  background: #f3f3f3;
  border-radius: 7rpx;
  margin-bottom: 15rpx;
}
.ph-line--title { width: 40%; height: 29rpx; }
.ph-line--body { width: 80%; }
.ph-line--short { width: 55%; margin-bottom: 0; }

.state-empty {
  padding: 120rpx 0;
  text-align: center;
}
.empty-text {
  font-size: 26rpx;
  color: #a6a6a6;
}

.state-error {
  padding: 120rpx 0;
  text-align: center;
}
.error-text {
  font-size: 26rpx;
  color: #a6a6a6;
  display: block;
  margin-bottom: 29rpx;
}
.retry-btn {
  display: inline-block;
  padding: 15rpx 44rpx;
  background: #0052d9;
  border-radius: 18rpx;
  color: #ffffff;
}
.retry-btn-text {
  font-size: 26rpx;
  color: #ffffff;
}

/* ============================================
 * 任务列表区域
 * ============================================ */
/* H5: .px-4.py-5 → padding: 36rpx 29rpx */
.task-section {
  padding: 36rpx 29rpx;
}

/* --- 标题行 --- */
/* H5: .flex.items-center.justify-between.mb-4 → mb-4=16px→29rpx */
.section-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 29rpx;
  line-height: 44rpx; /* text-base 行高容器 */
}

/* H5: text-base font-semibold text-gray-13 → 30rpx/44rpx */
.section-title {
  font-size: 28rpx;
  font-weight: 600;
  color: #242424;
}

/* H5: text-sm text-gray-6 → 26rpx/36rpx */
.section-count {
  font-size: 26rpx;
  color: #a6a6a6;
}

/* --- 任务分组 --- */
/* H5: .mb-5 → mb-5=20px→36rpx */
.task-group {
  margin-bottom: 36rpx;
}

/* H5: .flex.items-center.gap-1.5.mb-2.5 → gap-1.5=6px→11rpx, mb-2.5=10px→18rpx */
.group-label-row {
  display: flex;
  align-items: center;
  gap: 11rpx;
  margin-bottom: 18rpx;
}

/* H5: .section-label → font-size:13px→24rpx, font-weight:500, padding:3px 10px→6rpx 18rpx, border-radius:4px→8rpx */
.group-label {
  display: inline-flex;
  align-items: center;
  gap: 7rpx;
  font-size: 24rpx;
  font-weight: 500;
  padding: 6rpx 18rpx;
  border-radius: 8rpx;
}

/* H5: text-amber-700 bg-amber-50 */
.group-label--pinned {
  color: #b45309;
  background: #fffbeb;
  /* 确保 📌 Emoji 在 Android 真机上正确渲染 */
  font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif;
}

/* H5: text-gray-9 bg-gray-2 */
.group-label--normal {
  color: #5e5e5e;
  background: #eeeeee;
}

/* H5: text-gray-6 bg-gray-2 */
.group-label--abandoned {
  color: #a6a6a6;
  background: #eeeeee;
}

/* H5: text-sm text-gray-6 → 26rpx/36rpx */
.group-count {
  font-size: 26rpx;
  color: #a6a6a6;
  line-height: 36rpx;
}

/* --- 卡片列表 --- */
/* H5: .space-y-3 → gap 12px→22rpx */
.task-card-list {
  display: flex;
  flex-direction: column;
  gap: 22rpx;
}

/* ============================================
 * 任务卡片
 * H5: .task-card → border-left:4px solid transparent, bg-white rounded-xl p-4 shadow-sm
 * border-left:4px→8rpx, rounded-xl=12px→22rpx, p-4=16px→29rpx
 * ============================================ */
.task-card {
  position: relative;
  background: #ffffff;
  border-radius: 20rpx;
  border-left: 12rpx solid transparent;
  box-shadow:0rpx 4rpx 6rpx rgba(0,0,0,0.08);
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
}

/* 卡片边框颜色 — 严格对齐 VI-DESIGN-SYSTEM.md 1.1 节 */
.task-card--high_priority { border-left-color: var(--task-high-priority-border); }
.task-card--priority_recall { border-left-color: var(--task-priority-recall-border); }
.task-card--relationship { border-left-color: var(--task-relationship-border); }
.task-card--callback { border-left-color: var(--task-callback-border); }

/* 置顶卡片微亮边框 — 严格对齐 VI-DESIGN-SYSTEM.md 4.1 节 */
.task-card--pinned {
  box-shadow: 0 5rpx 7rpx var(--status-pinned-shadow-light), 0 0 0 8rpx var(--status-pinned-shadow-glow);
}

/* 已放弃卡片 — 严格对齐 VI-DESIGN-SYSTEM.md 4.2 节 */
.task-card--abandoned {
  border-left-color: var(--status-abandoned-border) !important;
  opacity: var(--status-abandoned-opacity);
}

/* hover 态 */
.task-card--hover {
  background: #f9f9f9;
}

/* H5: p-4 → 29rpx */
.card-body {
  flex: 1;
  padding: 32rpx 4rpx 32rpx 32rpx;
  min-width: 0;
}

/* 右侧箭头 — H5: w-5 h-5 text-gray-5 flex-shrink-0 ml-2 mt-1 */
.card-arrow {
  flex-shrink: 0;
  padding: 0 22rpx 0 0;
  display: flex;
  align-items: center;
  align-self: stretch;
}

/* --- 卡片第一行：标签 + 客户名 + 心形 + 备注 --- */
/* H5: .flex.items-center.gap-2.mb-1.5 → gap-2=8px→15rpx, mb-1.5=6px→11rpx */
.card-row-1 {
  display: flex;
  align-items: center;
  gap: 15rpx;
  margin-bottom: 14rpx;
  line-height: 29rpx; /* text-xs 行高容器（标签高度基准） */
}

/* --- 任务类型标签 --- */
/* H5: px-2 py-0.5 text-white text-xs font-medium → padding:2px 8px→4rpx 15rpx, 22rpx/29rpx, border-radius:4px→8rpx */
.task-type-tag {
  display: inline-flex;
  align-items: center;
  padding: 8rpx 16rpx;
  border-radius: 8rpx;
  flex-shrink: 0;
}
.tag-text {
  font-size: 22rpx;
  font-weight: 500;
  color: #ffffff;
  line-height: 1;
}

/* 标签渐变色 — 严格对齐 VI-DESIGN-SYSTEM.md 1.1 节 */
.task-type-tag--high_priority {
  background: linear-gradient(135deg, var(--task-high-priority-from) 0%, var(--task-high-priority-to) 100%);
}
.task-type-tag--priority_recall {
  background: linear-gradient(135deg, var(--task-priority-recall-from) 0%, var(--task-priority-recall-to) 100%);
}
.task-type-tag--relationship {
  background: linear-gradient(135deg, var(--task-relationship-from) 0%, var(--task-relationship-to) 100%);
}
.task-type-tag--callback {
  background: linear-gradient(135deg, var(--task-callback-from) 0%, var(--task-callback-to) 100%);
}

/* 已放弃标签灰化 — 严格对齐 VI-DESIGN-SYSTEM.md 4.2 节 */
.task-type-tag--abandoned {
  background: var(--status-abandoned-border) !important;
}

/* H5: text-base font-semibold text-gray-13 → 30rpx/44rpx */
.customer-name {
  font-size: 30rpx;
  font-weight: 600;
  color: #242424;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* 已放弃客户名灰色 — 严格对齐 VI-DESIGN-SYSTEM.md 4.2 节 */
.customer-name--abandoned {
  color: var(--status-abandoned-text);
}

/* H5: note-indicator → font-size:12px→22rpx, margin-left:2px→4rpx */
.note-indicator {
  font-size: 22rpx;
  flex-shrink: 0;
}

/* --- 卡片第二行：到店/余额 --- */
/* H5: text-sm text-gray-7 leading-relaxed → 26rpx/36rpx（leading-relaxed≈1.625，但按字典取 36rpx） */
.card-row-2 {
  margin-bottom: 4rpx;
  line-height: 36rpx;
}
.visit-text {
  font-size: 26rpx;
  color: #8b8b8b;
}
/* 已放弃到店文字 — H5: .task-card.abandoned .task-desc { color: #c5c5c5 } */
.visit-text--abandoned {
  color: #c5c5c5;
}

/* --- 卡片第三行：AI 建议 --- */
/* H5: text-sm text-gray-6 leading-relaxed → 26rpx/36rpx */
.card-row-3 {
  display: flex;
  align-items: baseline;
  gap: 0;
  line-height: 36rpx;
}

/* AI 图标 — 全局样式见 app.wxss .ai-inline-icon / .ai-title-badge */
/* task-list 使用默认 indigo 配色，无需额外覆盖 */
.ai-suggestion-text {
  font-size: 26rpx;
  color: #a6a6a6;
  flex: 1;
  line-height: 36rpx;
}

.ai-suggestion-text {
  font-size: 26rpx;
  color: #a6a6a6;
  flex: 1;
}

/* --- 放弃原因行 --- */
.card-row-abandon {
  margin-top: 7rpx;
  line-height: 36rpx;
}
.abandon-reason {
  font-size: 26rpx;
  color: #a6a6a6;
}

/* --- 加载更多 --- */
.load-more {
  padding: 36rpx 0;
  text-align: center;
}
.load-more-text {
  font-size: 24rpx;
  color: #c5c5c5;
}

/* ============================================
 * 长按上下文菜单
 * H5: .context-overlay / .context-menu / .ctx-item
 * ============================================ */
.ctx-overlay {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0, 0, 0, 0.35);
  z-index: 100;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.2s ease;
}
.ctx-overlay--active {
  opacity: 1;
  pointer-events: all;
}

/* H5: .context-menu → border-radius:14px→25rpx, min-width:192px→350rpx, padding:6px 0→11rpx 0 */
.ctx-menu {
  position: fixed;
  z-index: 101;
  background: #ffffff;
  border-radius: 25rpx;
  box-shadow: 0 22rpx 73rpx rgba(0, 0, 0, 0.18);
  min-width: 350rpx;
  padding: 11rpx 0;
  opacity: 0;
  transform: scale(0.88);
  pointer-events: none;
  transition: opacity 0.15s ease, transform 0.15s ease;
  transform-origin: top left;
}
.ctx-menu--active {
  opacity: 1;
  transform: scale(1);
  pointer-events: all;
}

/* H5: .ctx-item → gap:10px→18rpx, padding:13px 18px→24rpx 33rpx, font-size:14px→26rpx */
.ctx-item {
  display: flex;
  align-items: center;
  gap: 18rpx;
  padding: 24rpx 33rpx;
  line-height: 36rpx;
}
.ctx-item + .ctx-item {
  border-top: 1rpx solid #f3f3f3;
}
.ctx-item--hover {
  background: #f3f3f3;
}

.ctx-emoji {
  font-size: 30rpx;
  flex-shrink: 0;
  /* 确保 Emoji 在 Android 真机上正确渲染 */
  font-family: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif;
}
.ctx-text {
  font-size: 26rpx;
  color: #393939;
}

/* ============================================
 * 放弃弹窗
 * H5: .modal-overlay / .modal-card
 * ============================================ */
.abandon-overlay {
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 200;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding-top: 30vh;
  transition: align-items 0.3s ease, padding-top 0.3s ease;
}

/* 键盘弹出时，弹窗移到顶部 */
.abandon-overlay--keyboard-open {
  align-items: flex-start;
  padding-top: 0;
}

/* H5: .modal-card → border-radius:16px→29rpx, width:88%, padding:24px 20px 20px→44rpx 36rpx 36rpx */
.abandon-modal {
  background: #ffffff;
  border-radius: 29rpx;
  width: 88%;
  max-width: 655rpx;
  padding: 44rpx 36rpx 36rpx;
  box-shadow: 0 36rpx 109rpx rgba(0, 0, 0, 0.2);
  max-height: 80vh;
  overflow-y: auto;
  transition: border-radius 0.3s ease;
}

/* 键盘弹出时，改为全圆角 */
.abandon-overlay--keyboard-open .abandon-modal {
  border-radius: 0;
  max-height: none;
}

/* 弹窗标题行 */
.abandon-header {
  display: flex;
  align-items: center;
  margin-bottom: 7rpx;
  line-height: 44rpx;
}
.abandon-header-left {
  display: flex;
  align-items: center;
  gap: 11rpx;
}
.abandon-header-emoji {
  font-size: 30rpx;
}
/* H5: text-base font-semibold text-gray-13 → 30rpx/44rpx */
.abandon-header-title {
  font-size: 30rpx;
  font-weight: 600;
  color: #242424;
}
.abandon-header-name {
  color: #e34d59;
}

/* H5: text-xs text-gray-6 mb-3 → 22rpx/29rpx, mb-3=12px→22rpx */
.abandon-desc-row {
  margin-bottom: 22rpx;
  line-height: 29rpx;
}
.abandon-desc {
  font-size: 22rpx;
  color: #a6a6a6;
}

/* H5: textarea → border:1.5px→3rpx solid #e7e7e7, border-radius:10px→18rpx, padding:12px 14px→22rpx 25rpx, font-size:14px→26rpx */
.abandon-textarea {
  width: 100%;
  min-height: 180rpx;
  border: 3rpx solid #e7e7e7;
  border-radius: 18rpx;
  padding: 22rpx 25rpx;
  font-size: 26rpx;
  line-height: 1.6;
  color: #2c2c2c;
  box-sizing: border-box;
  transition: border-color 0.2s;
}
.abandon-textarea:focus {
  border-color: #0052d9;
  background: #fff;
}
.abandon-textarea--error {
  border-color: #e34d59;
}

/* H5: .modal-error → color:#e34d59, font-size:12px→22rpx, margin-top:6px→11rpx */
.abandon-error {
  color: #e34d59;
  font-size: 22rpx;
  margin-top: 11rpx;
}

/* 弹窗按钮行 */
.abandon-actions {
  display: flex;
  gap: 18rpx;
  margin-top: 25rpx;
}

/* 键盘弹出时固定在键盘上方 */
.abandon-actions--float {
  position: fixed;
  left: 0;
  right: 0;
  padding: 12rpx 36rpx 16rpx;
  background: #fff;
  box-shadow: 0 -2rpx 16rpx rgba(0, 0, 0, 0.06);
  z-index: 201;
}

.abandon-btn {
  flex: 1;
  padding: 22rpx 0;
  border-radius: 18rpx;
  text-align: center;
  font-size: 27rpx;
  font-weight: 500;
}
.abandon-btn--cancel {
  background: #f3f3f3;
  color: #5e5e5e;
}
.abandon-btn--cancel-hover {
  background: #e7e7e7;
}
.abandon-btn--confirm {
  background: #e34d59;
  color: #ffffff;
}
.abandon-btn--confirm-hover {
  background: #c9363f;
}

/* 逾期徽章 — 姓名行最右，红色半透明背景 */
.overdue-badge {
  margin-left: auto;
  flex-shrink: 0;
  font-size: 22rpx;
  font-weight: 600;
  color: #e34d59;
  background: rgba(227, 77, 89, 0.12);
  border: 1rpx solid rgba(227, 77, 89, 0.25);
  border-radius: 8rpx;
  padding: 4rpx 14rpx;
  line-height: 1.4;
}

/* 截止日期行 — DISPLAY-STANDARDS §7 */
.card-row-deadline {
  display: flex;
  align-items: center;
  margin-top: 4rpx;
  margin-bottom: 2rpx;
}
.deadline-text {
  font-size: 22rpx;
  line-height: 29rpx;
  font-weight: 500;
}
.deadline-text--muted   { color: #a6a6a6; }
.deadline-text--normal  { color: #5e5e5e; }
.deadline-text--warning { color: #ed7b2f; }
.deadline-text--danger  { color: #e34d59; font-weight: 600; }
