/* ===== 🦋 演出预约 · 全局固定样式（模板统一，禁止改动） ===== */

* { margin:0; padding:0; box-sizing:border-box; }

:root{

  /* 品牌主色 · 玻璃紫粉 */
  --primary:#c850c0; --primary-dark:#9c3fb0; --primary-soft:#e0a8ec;

  --grad-warm:linear-gradient(135deg,#a855f7 0%,#ec4899 100%);

  --grad-warm-soft:linear-gradient(135deg,#d9a8f0 0%,#f5b8d8 100%);

  /* 品牌辅助紫 · 靛紫（移约/固定位/学员管理/工单分组 唯一辅助紫，2026-08-07 收敛） */
  --accent:#534AB7; --accent-soft:#EEEDFE; --accent-strong:#3f3789;

  --bg:#faf3fb; --bg-grad:linear-gradient(135deg,#f3e6fb 0%,#fdeaf4 48%,#f8f0fb 100%);

  --card:rgba(255,255,255,0.72); --card-solid:#ffffff;

  --text:#3a2e3c; --muted:#9a8ba0; --line:rgba(168,85,247,0.20);

  --glass-border:rgba(255,255,255,0.65); --glass-shadow:0 10px 34px rgba(168,85,247,0.14);

  --free:#fffdfb; --occupied:#efe2ee; --refund:#e94f5f; --refunded:#f3ecef;

  --ok:#2eb872; --warn:#f5a623; --danger:#e94f5f;

  /* 语义色 token · 同义状态唯一值（2026-08-07 收敛：8红/8绿/5蓝 归并） */
  --blue:#185FA5; --blue-soft:#E6F1FB; --blue-border:#B5D4F4;   /* 预约/转约蓝 */
  --green:#149a5c; --green-soft:#E2F7EC;                        /* 完成绿 */
  --red-deep:#C0392B; --red-soft:#FDECEC; --red-border:#F7C1C1; /* 退约深红 */
  --amber:#9A3412; --amber-soft:#FFF4DD;                        /* 待处理琥珀 */

  /* 表头/悬停紫调（① 统一暖橙→紫） */
  --th-grad:linear-gradient(180deg,#f6effb,#efe6f7); --th-text:#6d3588;
  --hover-soft:#f6f0fb; --hover-ring:rgba(168,85,247,0.16);

  /* 通用语义 token（供 JS 内联样式与组件复用；与品牌紫调对齐，2026-09-02 补定义） */
  --color-primary-500:#a855f7;
  --color-text-primary:var(--text);
  --color-text-secondary:#6d3588;
  --color-text-tertiary:var(--muted);
  --color-border-tertiary:var(--line);
  --color-background-secondary:#faf3fb;

}

html,body{ height:100%; }

/* 移动端防横向溢出兜底：页面级禁止左右滑动，滚动只发生在各自容器内（tbl-scroll/sched-wrap/fx-grid-scroll 等）。
   overflow-x:hidden 兼容老 iOS；overflow-x:clip 不创建滚动容器、不破坏 position:sticky（顶栏/时间列冻结），新浏览器自动升级。
   overscroll-behavior 阻断「容器滑到底继续拖 → 带动整页」的滚动链（iOS 橡皮筋体验） */
html{ overflow-x:hidden; overscroll-behavior-x:none; }
@supports (overflow-x:clip){ html{ overflow-x:clip; } }
.tbl-scroll,.sched-wrap,.fx-grid-scroll,.day-scroll{ overscroll-behavior-x:contain; }

body{ font-family:"Microsoft YaHei","PingFang SC",sans-serif; background:var(--bg-grad); background-attachment:fixed; color:var(--text); font-size:14px; position:relative; }
.site-foot{ text-align:center; font-size:12px; color:var(--muted); padding:14px 12px 18px; line-height:1.6; }
.site-foot a{ color:var(--muted); text-decoration:none; }
.site-foot a:hover{ color:var(--primary); text-decoration:underline; }

body::before{ content:""; position:fixed; top:-12%; left:-8%; width:52vw; height:52vw; pointer-events:none; z-index:-1; background:radial-gradient(circle, rgba(168,85,247,0.26) 0%, rgba(168,85,247,0) 68%); }

/* 登录名水印：在内容卡片(.card)与弹窗(.modal)背景平铺，透明度 10%，不挡点击与内容；dark 模式 JS 自动切浅灰。 */
:root{ --wb-watermark-url: none; }
.card, .modal{ position:relative; overflow:hidden; }
.card::before, .modal::before{
  content:""; position:absolute; inset:0; pointer-events:none; z-index:-1;
  background-image:var(--wb-watermark-url); background-repeat:repeat; background-position:0 0;
}

body::after{ content:""; position:fixed; bottom:-14%; right:-8%; width:58vw; height:58vw; pointer-events:none; z-index:-1; background:radial-gradient(circle, rgba(236,72,153,0.22) 0%, rgba(236,72,153,0) 68%); }

.hidden{ display:none !important; }



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

.btn{ display:inline-block; border:1px solid var(--line); background:rgba(255,255,255,0.7); color:var(--text); padding:7px 14px; border-radius:11px; cursor:pointer; font-size:13px; transition:.18s; backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); }

.btn:hover{ border-color:var(--primary); color:var(--primary); transform:translateY(-1px); }

.btn-primary{ background:var(--grad-warm); border-color:transparent; color:#fff; box-shadow:0 6px 18px rgba(255,107,93,0.32); }
.btn-primary:disabled, .btn-primary[disabled]{ background:#e5e5e5; color:#999; box-shadow:none; cursor:not-allowed; border-color:transparent; transform:none; filter:none; }

.btn-primary:hover{ color:#fff; filter:brightness(1.06); transform:translateY(-1px); box-shadow:0 8px 24px rgba(255,107,93,0.4); }
.btn-primary:disabled:hover, .btn-primary[disabled]:hover{ color:#999; transform:none; box-shadow:none; }

.btn-danger{ background:var(--danger); border-color:var(--danger); color:#fff; }

.btn-danger:hover{ opacity:.88; color:#fff; }

.btn-warn{ background:var(--warn); border-color:var(--warn); color:#fff; }
.btn-warn:hover{ opacity:.88; color:#fff; }
.btn-warn:disabled, .btn-warn[disabled]{ background:#e5e5e5 !important; border-color:transparent !important; color:#999 !important; box-shadow:none !important; cursor:not-allowed; opacity:.65; transform:none; filter:none; }
.btn-warn:disabled:hover, .btn-warn[disabled]:hover{ color:#999 !important; transform:none; box-shadow:none; }

.btn-ok{ background:var(--ok); border-color:var(--ok); color:#fff; }

.btn-ok:hover{ opacity:.88; color:#fff; }

.btn-ghost{ background:transparent; }

.btn-block{ display:block; width:100%; margin-top:10px; }

button:disabled{ opacity:.45; cursor:not-allowed; }



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

.login-screen{ position:relative; min-height:100vh; display:flex; align-items:center; justify-content:center;

  background:var(--grad-warm); padding:20px; overflow:hidden; }

.login-screen::before{ content:""; position:absolute; top:-20%; right:-10%; width:60vw; height:60vw; background:radial-gradient(circle, rgba(255,255,255,0.22) 0%, rgba(255,255,255,0) 65%); pointer-events:none; }

.login-topbar{ position:absolute; top:0; left:0; right:0; display:flex; align-items:center; justify-content:space-between; padding:16px 22px; z-index:2; }

.login-brand{ color:#fff; font-weight:600; font-size:14px; opacity:.95; letter-spacing:.3px; }

.login-toggle{ background:rgba(255,255,255,.18); color:#fff; border:1px solid rgba(255,255,255,.45); }

.login-toggle:hover{ background:rgba(255,255,255,.32); }

.login-card{ background:var(--card-solid); border:1px solid var(--line); border-radius:24px; padding:44px 42px; width:440px; max-width:96vw; box-shadow:0 18px 50px rgba(168,85,247,0.18); position:relative; z-index:1; }

.login-logo{ text-align:center; margin-bottom:16px; }
.login-logo svg{ display:inline-block; }

.login-card h1{ text-align:center; font-size:24px; margin:6px 0 4px; }

.login-sub{ text-align:center; color:var(--muted); font-size:12px; margin-bottom:22px; }
.login-sub:empty{ display:none; }

.login-form label{ display:block; font-size:12px; color:var(--muted); margin:12px 0 5px; }

.login-form input{ width:100%; padding:10px 12px; border:1px solid var(--line); border-radius:8px; font-size:14px; }

.login-form input:focus{ outline:none; border-color:var(--primary); }

.login-tip,.login-tip-en{ font-size:11px; color:var(--muted); margin-top:14px; line-height:1.7; background:var(--hover-soft); padding:10px; border-radius:8px; }

.login-demo{ font-size:11px; color:#8a6d3b; margin-top:10px; line-height:1.9; background:#fdf7ec; padding:10px; border-radius:8px; }



/* ---------- 顶部栏 ---------- */

.topbar{ height:58px; background:rgba(255,255,255,0.68); backdrop-filter:blur(16px) saturate(160%); -webkit-backdrop-filter:blur(16px) saturate(160%); border-bottom:1px solid var(--glass-border); display:flex; align-items:center; justify-content:space-between; padding:0 22px; position:sticky; top:0; z-index:50; }

.logo{ font-weight:700; font-size:16px; color:var(--primary); }

.topbar-left,.topbar-right{ display:flex; align-items:center; gap:12px; }

.sync-dot{ font-size:11px; padding:2px 8px; border-radius:10px; background:rgba(255,255,255,0.7); color:#9a8b85; white-space:nowrap; }

.sync-dot.on{ background:#e3f7ec; color:#1a9e5a; }

.sync-dot.off{ background:#fdecec; color:#d6453d; }

.actor-switch{ display:flex; align-items:center; gap:6px; background:rgba(255,255,255,0.6); border-radius:11px; padding:4px 10px; }

.actor-switch-label{ font-size:12px; color:var(--muted); }

.actor-switch select{ border:none; background:transparent; font-size:13px; font-weight:600; color:var(--text); cursor:pointer; outline:none; max-width:180px; }

.top-user{ font-weight:600; }

.actor-switch select{ max-width:130px; }

.role-badge{ background:rgba(168,85,247,0.14); color:var(--primary); font-size:12px; padding:3px 10px; border-radius:20px; font-weight:600; }



/* ---------- 导航 ---------- */

.nav{ background:rgba(255,255,255,0.5); backdrop-filter:blur(12px); border-bottom:1px solid var(--glass-border); display:flex; gap:4px; padding:6px 22px; position:sticky; top:58px; z-index:49; }

.nav-tab{ padding:9px 18px; cursor:pointer; font-size:14px; color:var(--muted); border-radius:11px; user-select:none; position:relative; transition:.15s; }

.nav-tab:hover{ color:var(--primary); background:rgba(168,85,247,0.08); }

.nav-tab.active{ color:var(--primary); font-weight:700; background:rgba(168,85,247,0.14); }

.nav-badge{ position:absolute; top:2px; right:4px; background:var(--danger); color:#fff; font-size:10px; border-radius:10px; padding:1px 5px; }



/* ---------- 页面 ---------- */

.page{ max-width:1280px; margin:0 auto; padding:20px 22px 60px; }

.card{ background:var(--card); backdrop-filter:blur(18px) saturate(160%); -webkit-backdrop-filter:blur(18px) saturate(160%); border:1px solid var(--glass-border); border-radius:18px; box-shadow:var(--glass-shadow); padding:18px 20px; margin-bottom:18px; }

.card-title{ font-size:15px; font-weight:700; margin-bottom:12px; display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:8px; }

.card-title .sub{ font-size:12px; color:var(--muted); font-weight:400; }

/* 首页预约表标题栏：月份切换 + 全年视图强制单行 */
.sched-card-title{ flex-wrap:nowrap; gap:8px; }
.sched-title{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0; }
.sched-nav{ display:flex; flex-wrap:nowrap; align-items:center; gap:4px; flex-shrink:0; }
.sched-nav-label{ margin:0 4px; white-space:nowrap; font-size:13px; }
.sched-nav .btn-sm{ white-space:nowrap; padding:5px 8px; font-size:12px; }
@media (max-width:480px){
  .sched-card-title{ flex-wrap:wrap; gap:6px; }
  .sched-title{ flex:1 0 100%; min-width:100%; overflow:visible; text-overflow:clip; }
  .sched-nav{ width:100%; justify-content:flex-start; flex-wrap:wrap; gap:6px 4px; }
  .sched-nav-label{ flex:1; text-align:center; font-size:12px; margin:0 2px; }
  .sched-nav .btn-sm{ padding:3px 6px; font-size:10px; white-space:nowrap; }
}

/* 全站翻页/月份切换按钮统一比例（参考截图：紧凑圆角、同高同字号） */
.page-nav{ display:inline-flex; align-items:center; gap:4px; flex-wrap:nowrap; }
.page-nav-label{ margin:0 4px; white-space:nowrap; font-size:13px; font-weight:600; }
.pill{ display:inline-flex; align-items:center; padding:3px 11px; border-radius:14px; font-size:12px; font-weight:600; white-space:nowrap; }
.pill-purple{ background:var(--accent-soft); color:var(--accent); border:1px solid var(--accent-soft); }
.btn.page-nav-btn, .page-nav .btn{
  padding:4px 10px; font-size:12px; border-radius:8px; white-space:nowrap;
  display:inline-flex; align-items:center; justify-content:center; min-height:26px;
}
.filter-bar.page-nav{ display:flex; flex-wrap:nowrap; gap:4px; justify-content:flex-end; }
@media (max-width:768px){
  .page-nav, .filter-bar.page-nav{ display:flex; width:100%; justify-content:flex-end; }
  .btn.page-nav-btn, .page-nav .btn{ padding:3px 8px; font-size:11px; border-radius:8px; min-height:24px; }
  .page-nav-label{ flex:1; text-align:center; font-size:12px; margin:0 2px; }
}

/* 取消审核 Tab 内 ①/② 分组小标题（2026-08-31 演员取消/退约操作合并） */
.sub-h{ font-size:15px; font-weight:700; color:#6d28d9; margin:18px 0 8px; display:flex; align-items:center; gap:8px; padding-left:10px; border-left:4px solid #8b5cf6; }
.sub-h:first-of-type{ margin-top:6px; }

.row{ display:flex; gap:18px; flex-wrap:wrap; }

.row > .card{ flex:1; min-width:320px; }



/* 快捷操作区 */

.quick-bar{ display:flex; gap:10px; flex-wrap:wrap; align-items:center; }

.quick-bar .spacer{ flex:1; }

.quick-bar input[type=text]{ padding:7px 10px; border:1px solid var(--line); border-radius:8px; font-size:13px; }

/* 固定位操作条：明细居左 + 清空/确认提交居右（同一行） */
.fx-op-bar{ display:flex; flex-direction:row; align-items:center; gap:8px; flex-wrap:nowrap; }
.fx-op-main{
  display:flex; gap:8px;
  width:auto; align-items:center;
  margin-left:auto;
  order:2; /* 按钮在右 */
}
.fx-op-clear,.fx-op-submit{ width:auto; box-sizing:border-box; white-space:nowrap; }
.fx-op-details{
  flex:1; min-width:0;
  order:1; /* 明细在左 */
  display:flex; flex-direction:column; align-items:flex-start;
  gap:4px;
  font-size:12px; color:#5f5e5a; line-height:1.4;
}
.fx-op-row{
  display:flex; flex-wrap:wrap; align-items:center; gap:6px;
  width:100%;
}
.fx-op-row .fx-op-times{
  flex:1; min-width:0;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.fx-op-tag{ padding:1px 6px; border-radius:10px; font-size:11px; }
.fx-op-tag--add{ background:#e2f7ec; color:#27500a; }
.fx-op-tag--cancel{ background:#fde3e6; color:#791f1f; }
.fx-op-times{ color:#888780; }

/* 专属演员时段视图底部操作条：已选 + 清空 + 确认提交 */
/* 默认移动端：信息独占一行，清空+确认提交同排各占一列；桌面端由 @media(min-width:769px) 覆盖为单行 */
#bk-quickbar{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  align-items:center;
}
#bk-quickbar .bk-view-info{
  grid-column:1 / -1;
  display:flex; flex-wrap:wrap; align-items:center; gap:6px;
  font-size:13px;
}
#bk-quickbar .bk-view-info b{ white-space:nowrap; }
#bk-quickbar .bk-view-info .muted{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:100%; }
#bk-quickbar .spacer{ display:none; }
#bk-quickbar button{ width:100%; box-sizing:border-box; white-space:nowrap; }

/* 个人预约表 · 图例下方转约/移约操作条（合并原顶部 quickBar 卡片） */
.bk-opbar{ display:flex; gap:10px; flex-wrap:wrap; margin:10px 0 2px; }
.btn-transfer{ background:#2f6bff; border-color:transparent; color:#fff; box-shadow:0 6px 18px rgba(47,107,255,0.3); }
.btn-transfer:hover{ color:#fff; filter:brightness(1.06); }
.btn-move{ background:#7d4fd1; border-color:transparent; color:#fff; box-shadow:0 6px 18px rgba(125,79,209,0.3); }
.btn-move:hover{ color:#fff; filter:brightness(1.06); }
.bk-item .bk-actions{ margin-top:6px; display:flex; gap:8px; }

.seg{ display:inline-flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; }

.seg button{ border:none; background:#fff; padding:6px 14px; font-size:12px; cursor:pointer; color:var(--muted); }

.seg button.on{ background:var(--primary); color:#fff; }



/* 个人预约表：检索框 + 周/月切换 内嵌卡片标题（合并自原顶部快捷条，右窄栏自适应换行） */

.pt-controls{ display:inline-flex; align-items:center; gap:8px; flex-wrap:wrap; justify-content:flex-end; }

.pt-search{ padding:7px 10px; border:1px solid var(--line); border-radius:8px; font-size:13px; width:190px; max-width:100%; }

@media (max-width:980px){

  .pt-controls{ width:100%; justify-content:flex-start; }

  .pt-search{ flex:1; min-width:150px; }

}



/* ---------- 表格通用 ---------- */

table.tbl{
  width:100%;
  border-collapse:separate;   /* separate 才能给整表/单元格圆角 */
  border-spacing:0;
  font-size:12.5px;
  border:1px solid var(--line);
  border-radius:12px;          /* 圆润容器 */
  overflow:hidden;
}

.tbl th{
  background:linear-gradient(180deg,#f6effb,#efe6f7);  /* 柔和紫色表头 */
  color:var(--th-text);
  font-weight:600;
  padding:9px 11px;
  border-bottom:1px solid var(--line);   /* 仅保留底部分隔线 */
  text-align:center;
  white-space:nowrap;
}

.tbl td{
  border-bottom:1px solid var(--line);
  border-right:1px solid var(--line);     /* 右+下细线，末列末行由下方规则移除 */
  padding:8px 10px;
  text-align:center;
  vertical-align:middle;
}

.tbl tr:last-child td{ border-bottom:none; }
.tbl td:last-child{ border-right:none; }

.tbl tbody tr:nth-child(even) td{ background:#fcfbfd; }   /* 柔和隔行 */
.tbl tbody tr:hover td{ background:var(--hover-soft); }              /* 整行柔光 */

.tbl-scroll{ overflow:auto; max-height:520px; border-radius:12px; }  /* 圆角裁切 */

/* 账户关系小表（ac-reltbl）：主样式见「账户主控台」区定义（2026-08-07 删除被覆盖的重复圆角版） */
.ac-reltbl tr:last-child td{ border-bottom:none; }
.ac-reltbl td:last-child{ border-right:none; }
/* 固定位配置记录：内容列点击查看小卡详情 */
.fx-detail-link{ color:var(--accent,#7a5b1e); cursor:pointer; text-decoration:none; border-bottom:1px dashed rgba(122,91,30,.4); }
.fx-detail-link:hover{ text-decoration:none; color:var(--accent-strong,#9a6b1e); }
.fx-detail-ico{ font-size:11px; opacity:.6; margin-left:2px; }
.fx-cfg-pop{ position:fixed; z-index:9999; width:280px; max-width:92vw;
  background:var(--card,#fff); backdrop-filter:blur(18px) saturate(160%); -webkit-backdrop-filter:blur(18px) saturate(160%);
  border:1px solid var(--glass-border,#e6d7ef); border-radius:14px; box-shadow:0 12px 42px rgba(80,40,90,.22); padding:12px 14px; }
.fx-cfg-card{ font-size:13px; line-height:1.6; }
.fx-cfg-card-h{ font-weight:700; margin-bottom:8px; display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.fx-cfg-row{ display:flex; gap:8px; align-items:baseline; margin:5px 0; flex-wrap:wrap; }
.fx-tag{ display:inline-block; padding:1px 9px; border-radius:999px; font-size:12px; font-weight:600; white-space:nowrap; }
.fx-tag-add{ background:rgba(34,160,90,.14); color:#1a8a4f; }
.fx-tag-del{ background:rgba(224,53,63,.14); color:#c81f2b; }



/* ===== 方案A 移动端工单卡片 / 更多抽屉 / 点日详情（显示控制由媒体查询负责） ===== */

.tk-mobile{ display:none; }

/* 「更多」抽屉（复用通用模态承载） */

.more-nav-list{ display:flex; flex-direction:column; gap:8px; }

.more-nav-item{ display:flex; align-items:center; gap:10px; padding:13px 15px; border:1px solid var(--line); border-radius:13px; cursor:pointer; font-size:15px; background:#fff; transition:background .15s ease, transform .1s ease; }

.more-nav-item:active{ background:var(--primary-soft,#f6e6ff); transform:scale(.98); }

.more-nav-ico{ font-size:19px; flex-shrink:0; }

/* 月历点日详情（通用模态承载，主要为移动端点格触发） */

.day-list{ display:flex; flex-direction:column; gap:8px; }
.day-acts{ display:flex; gap:6px; justify-content:flex-end; }

.day-row{ display:flex; align-items:center; gap:10px; padding:11px 13px; border:1px solid var(--line); border-radius:13px; background:#fff; }

.day-row.s-done{ border-left:4px solid var(--green); }

.day-row.s-refund{ border-left:4px solid var(--refund,#f6a); }

.day-row.s-cancelled,
.day-row.s-refunded{ border-left:4px solid #9aa1b5; background:#f3ecef; }
.day-row.s-closed{ border-left:4px solid #5f5e5a; background:#e8e8e6; }

.day-row.mine{ border-left:4px solid var(--primary,#c850c0); }

.day-time{ font-weight:700; font-size:15px; min-width:50px; flex-shrink:0; }

.day-meta{ flex:1; min-width:0; }

.day-name{ font-weight:600; font-size:14px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

.day-st{ font-size:12px; color:var(--muted,#888); }

/* 弹层内清单增强：选中行 + 勾选框对齐 + 演员/类型标签（看板只读明细用） */
.day-row.on{ border-color:var(--primary); background:var(--hover-soft); }
.day-row input[type=checkbox]{ width:17px; height:17px; flex-shrink:0; margin:0 2px 0 0; cursor:pointer; }
.day-row.all{ background:#f7f6f3; border-color:#d3d1c7; }
.day-row.disabled{ background:#f3f2f5; opacity:.72; }
.day-row.all .day-all-label{ flex:1; font-weight:600; font-size:14px; color:#3c3489; }
.day-row.all .day-all-count{ font-size:12px; color:var(--muted,#888); }
.day-actor{ font-size:11px; color:var(--muted,#888); margin-left:auto; flex-shrink:0; white-space:nowrap; }
.day-type{ font-size:11px; color:#534AB7; background:#efe4ff; border-radius:6px; padding:1px 6px; flex-shrink:0; white-space:nowrap; }

.day-acts{ display:flex; flex-wrap:wrap; gap:6px; flex-shrink:0; }

.day-acts .btn{ margin:0; }



/* ---------- 状态徽章 ---------- */

.st{ display:inline-block; font-size:11px; padding:2px 8px; border-radius:10px; font-weight:600; white-space:nowrap; text-align:center; }

.st-pending{ background:var(--amber-soft); color:var(--amber); }
.st-review{ background:#fde3e6; color:#c0392b; }

.st-done{ background:var(--green-soft); color:var(--green); }

.st-booked{ background:var(--blue-soft); color:var(--blue); }

.st-refund{ background:#fde3e6; color:#c0392b; }

.st-refunded{ background:#c0392b; color:#fff; }
.st-cancelled{ background:#8b93a8; color:#fff; }

.st-fin{ display:inline-block; background:#FAEEDA; color:#854F0B; border:1px solid #EF9F27; border-radius:10px; padding:2px 9px; margin:2px 3px 2px 0; font-size:12px; }
.st-com{ display:inline-block; background:#EEEDFE; color:#534AB7; border:1px solid #AFA9EC; border-radius:10px; padding:2px 9px; margin:2px 3px 2px 0; font-size:12px; }
.auth-lab{ font-size:12px; font-weight:700; }
.am-add-btn{ border:1px dashed #cfc8da; background:#fff; color:#5b556b; border-radius:8px; }
.am-add-btn:hover{ border-color:#8b5cf6; color:#7c3aed; background:#faf7ff; }
/* ===== 演员管理手机端卡片流 ===== */
.act-cards{ display:flex; flex-direction:column; gap:10px; margin-top:10px; }
.act-card{ border:1px solid var(--line); border-radius:12px; padding:12px; background:#fff; }
.act-card__hd{ display:flex; align-items:center; gap:10px; }
.act-card__ava{ flex:0 0 auto; }
.act-card__name{ flex:1; min-width:0; }
.act-card__name b{ font-size:15px; }
.act-card__region{ font-size:12px; color:var(--muted); margin-top:2px; }
.act-card__up{ flex:0 0 auto; }
.act-card__grants{ margin:10px 0; }
.act-card__ops{ display:flex; flex-wrap:nowrap; gap:6px; }
.act-card__ops .btn{ flex:1 1 0; min-width:0; padding:8px 6px; font-size:12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
@media (max-width:380px){ .act-card__ops{ gap:4px; } .act-card__ops .btn{ padding:7px 4px; font-size:11px; } }

.st-pass1{ background:var(--blue-soft); color:var(--blue); }
.st-pass1-cancel{ background:#e94f5f; color:#fff; }

.st-passed{ background:#e0f5f1; color:#0E9C8A; }

.st-reject{ background:#8b93a8; color:#fff; }
.st-ok{ background:#E6F7EF; color:#149a5c; }
.st-off{ background:#F1EFE8; color:#888780; }
.st-warn{ background:#FAEEDA; color:#854F0B; }
.cell-tag{ display:inline-block; margin-left:4px; font-size:10px; padding:1px 5px; border-radius:6px; background:#fff0d6; color:#9a6a00; font-weight:600; vertical-align:middle; }  /* 首节/特殊标记通用标签（trial 置灰提示复用） */
.cell-tag--trial{ display:inline-block; margin-left:4px; font-size:10px; padding:1px 5px; border-radius:6px; background:#e6f7ef; color:#0F6E56; font-weight:600; vertical-align:middle; }  /* 首节试课绿色标签（个人/业务流水 + 演员端英文日弹窗共用） */
.myf-trial{ color:#1a9e4b !important; font-weight:600; }  /* 个人/业务流水时段明细：首节试课整行绿加粗 */
.st-perm{ background:#FFF7E0; color:#9A6A00; }
.st-normal{ background:#EEEDFE; color:#534AB7; }
.st-manual{ background:#EEEDFE; color:#534AB7; }

/* My Cancel Requests — 方案A 状态分组 */

.mc-pills{ display:flex; flex-wrap:wrap; gap:6px; margin:8px 0 12px; }

.st.mc-pill{ font-size:12px; padding:3px 11px; border-radius:14px; cursor:pointer; border:1px solid transparent; }
.st.mc-pill.on{ box-shadow:0 0 0 2px var(--primary); font-weight:600; }

.mc-group{ margin-bottom:14px; }

.mc-group-h{ display:flex; align-items:center; gap:8px; margin:4px 0 7px; padding-bottom:5px; border-bottom:1px solid var(--glass-border); }

.mc-group-cnt{ font-size:12px; color:var(--muted); }



/* 个人流水记录 — 卡片时间线（方案1）+ 顶部计数胶囊（方案2） */

.fr-list{ display:flex; flex-direction:column; gap:10px; }

.fr-card{ background:#fff; border:1px solid var(--glass-border); border-radius:10px; padding:10px 12px; box-shadow:0 1px 3px rgba(0,0,0,.04); }

.fr-card-head{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }

.fr-type{ font-weight:600; font-size:13px; color:#222; }

.fr-time{ font-size:12px; color:var(--muted); margin-left:auto; margin-right:6px; }

.fr-detail{ margin-top:7px; font-size:13px; color:#444; line-height:1.5; }

.fr-hist{ margin-top:8px; border-top:1px dashed var(--line); padding-top:7px; }



/* 业务流水 — 工单卡片墙（方案1） */

.bf-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); gap:12px; }

.bf-card{ background:#fff; border:1px solid var(--glass-border); border-radius:10px; padding:11px 13px; box-shadow:0 1px 3px rgba(0,0,0,.04); }

.bf-card-top{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:8px; }

.bf-idx{ font-weight:700; font-size:13px; color:var(--muted); }

.bf-type{ font-weight:600; font-size:13px; color:#222; }

.bf-card-top .btn{ margin-left:auto; }

.bf-meta{ display:grid; grid-template-columns:1fr 1fr; gap:6px 14px; margin-bottom:8px; }

.bf-cell{ display:flex; flex-direction:column; }

.bf-k{ font-size:11px; color:var(--muted); }

.bf-v{ font-size:13px; color:#222; font-weight:500; }

.bf-detail{ font-size:13px; color:#444; line-height:1.5; }

.bf-hist{ margin-top:9px; border-top:1px dashed var(--line); padding-top:8px; }

.bf-hist-title{ font-size:12px; color:var(--muted); margin-bottom:5px; }

/* 电脑端业务流水：列表 + 右侧详情面板（方案三精简版） */

.bf-split{ display:grid; grid-template-columns:minmax(0,46%) minmax(0,54%); gap:0; border:1px solid var(--glass-border); border-radius:10px; overflow:hidden; min-height:360px; background:#fff; }
/* 窄屏（平板/小桌面）：左列略收、详情让位，保持可读比例 */
@media (max-width:980px){ .bf-split{ grid-template-columns:minmax(0,42%) minmax(0,58%); } }

.bf-list{ border-right:1px solid var(--glass-border); max-height:620px; overflow:auto; }

.bf-row{ display:grid; grid-template-columns:30px auto 1fr 1fr; gap:6px; align-items:center; padding:9px 12px; border-bottom:1px solid var(--glass-border); cursor:pointer; }
.bf-head{ display:grid; grid-template-columns:30px auto 1fr 1fr; gap:6px; padding:8px 12px; font-size:11px; color:var(--muted); border-bottom:1px solid var(--glass-border); background:#fafbfc; }

.bf-row:hover{ background:var(--glass-hover,#f3f6fb); }

.bf-row--active{ background:#f1ebfd; box-shadow: inset 3px 0 0 var(--primary); }

.bf-row .bf-idx{ font-size:12px; color:var(--muted); }
.bf-row--active .bf-idx{ color:var(--primary); font-weight:600; }

.bf-row .bf-type{ font-weight:600; font-size:12px; color:#222; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

.bf-row .bf-sum, .bf-row .bf-ap{ text-align:right; font-size:12px; color:#555; white-space:normal; word-break:break-word; }

.bf-panel{ padding:14px 16px; background:#fff; overflow:auto; max-height:620px; }

.bf-panel-empty{ color:var(--muted); font-size:13px; padding:24px; text-align:center; }

.bf-panel-head{ display:none; }

.bf-panel-grid{ display:grid; grid-template-columns:1fr 1fr; gap:8px 14px; margin-bottom:12px; }

.bf-panel-grid > div{ display:flex; flex-direction:column; }

.bf-panel-detail{ font-size:13px; color:#444; line-height:1.5; margin-bottom:12px; word-break:break-word; }



/* 响应式：窄屏单列 */

@media (max-width:560px){

  .bf-grid{ grid-template-columns:1fr; }

  .bf-meta{ grid-template-columns:1fr; }

  .fr-time{ margin-left:0; width:100%; order:3; }

}



/* 固定课业务类型徽章（审核员待确认列表中突出显示） */

.tag-fixed{ display:inline-block; font-size:11px; padding:1px 7px; border-radius:9px; font-weight:700; background:#f6effb; color:var(--primary-dark); border:1px solid #ffd0c2; margin-right:4px; }



/* ---------- 课表网格 ---------- */

.sched-wrap{ overflow:auto; max-height:560px; border:1px solid var(--line); border-radius:8px; }
/* 通用可缩放容器：双指捏合放大 / 单指拖拽平移；放大态下 .zoomed 取消单元格截断，名字完整显示 */
.zoom-pane{ overflow:hidden; touch-action:none; -webkit-user-select:none; user-select:none; position:relative; }
.zoom-pane .sched-wrap{ transform-origin:0 0; will-change:transform; }
.zoom-pane.zoomed .sched td{ overflow:visible; }
.zoom-pane.zoomed .cell-note{ max-width:none; overflow:visible; white-space:nowrap; text-overflow:clip; }

/* 资格名单管理弹窗：默认左右分栏 */
.fxq-panel-grid{ display:grid; grid-template-columns:minmax(0,44%) minmax(0,1fr); gap:14px; align-items:start; }
.fxq-panel{ border:0.5px solid var(--line); border-radius:10px; padding:12px; background:var(--bg2,#fafafc); min-width:0; }
.fxq-panel-title{ font-size:13px; font-weight:500; margin-bottom:8px; }
.fxq-search{ display:flex; gap:6px; margin-bottom:8px; }
.fxq-search input{ flex:1; min-width:0; padding:6px 8px; font-size:13px; border:0.5px solid var(--line); border-radius:6px; }
.fxq-list{ max-height:300px; overflow:auto; display:flex; flex-direction:column; gap:4px; }
.fxq-row{ display:flex; align-items:center; gap:8px; padding:6px 8px; border:0.5px solid var(--line); border-radius:8px; background:#fff; }
.fxq-avatar{ width:24px; height:24px; border-radius:50%; font-size:12px; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.fxq-name{ flex:1; min-width:0; font-size:12px; color:#333; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fxq-state{ font-size:11px; color:var(--muted); flex-shrink:0; }
.fxq-tag{ font-size:11px; padding:1px 7px; border-radius:999px; flex-shrink:0; }
.fxq-add{ border-color:#534AB7; color:#534AB7; flex-shrink:0; }
.fxq-remove{ border-color:#e0353f; color:#e0353f; flex-shrink:0; }

table.sched{ border-collapse:separate; border-spacing:4px; width:100%; font-size:11.5px; }

.sched th{ background:#f6effb; border:1px solid var(--line); padding:6px 4px; border-radius:8px; position:sticky; top:0; z-index:2; min-width:96px; }

.sched th.today-col{ background:var(--primary); color:#fff; }

.sched th.time-col{ min-width:58px; position:sticky; left:0; z-index:3; }

.sched td{ border:1px solid var(--line); height:30px; border-radius:8px; text-align:center; padding:1px 3px; overflow:hidden; outline:none; -webkit-tap-highlight-color:transparent; }

.sched td.time-cell{ background:#f9fafd; color:var(--muted); font-weight:600; position:sticky; left:0; z-index:1; min-width:58px; }

.sched td.free{ background:var(--free); cursor:pointer; }

.sched td.free:hover{ background:var(--hover-soft); box-shadow:inset 0 0 0 2px var(--primary); }

.sched td.closed{ background:#f4f5f8; }

.sched td.occupied{ background:var(--occupied); color:#5a6376; }

.sched td.mine{ background:var(--blue-soft); color:var(--blue); font-weight:600; }

.sched td.refund{ background:var(--refund); color:#fff; font-weight:700; }

.sched td.refunded{ background:var(--refunded); color:#9aa1b5; font-weight:700; }

.sched td.tpl-mine{ background:#ffd9cc; color:#b3371f; font-weight:600; cursor:pointer; }
.sched td.tpl-mine.tpl-cancel-pending{ background:#fff4d6; color:#c0392b; border:2px dashed #c0392b; box-sizing:border-box; }

.sched td.tpl-other{ background:var(--occupied); color:#5a6376; }

/* 过期时段（时间已过）：深灰底，仅作视觉区分、不可选，无图标/文字 */

.sched td.expired{ background:#ece7ee; color:#b3acb8; cursor:not-allowed; }

.sched .cell-note{ display:block; font-size:10px; transform:scale(.92); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:110px; margin:0 auto; }

.sched .cell-badge{ display:inline-block; font-size:9px; line-height:1.45; padding:0 5px; border-radius:6px; margin-top:3px; font-weight:700; white-space:nowrap; }

.sched .cell-badge.cfg{ background:rgba(20,154,92,.10); color:var(--green); border:1px solid var(--green); }

.sched .cell-badge.new{ background:rgba(200,80,192,.12); color:#9c3fb0; border:1px solid #c850c0; }

.sched .cell-badge.del{ background:rgba(224,53,63,.10); color:#e0353f; border:1px solid #e0353f; }

.sched td.fx-del-pending{ cursor:pointer; }

.sched td.fx-del-pending:hover{ filter:brightness(.97); }

/* 演员退约：日程表多选单元格 */

.sched td.ac-cell{ cursor:pointer; position:relative; }

.sched td.ac-cell:hover{ box-shadow:inset 0 0 0 2px var(--primary); }

.sched td.ac-cell .cell-check{ position:absolute; top:3px; right:4px; width:16px; height:16px; line-height:16px; text-align:center;

  font-size:11px; font-weight:700; color:#fff; background:var(--primary); border-radius:50%; display:none; }

.sched td.ac-cell.ac-sel{ box-shadow:inset 0 0 0 2px var(--primary); background:#f6effb; }

.sched td.ac-cell.ac-sel .cell-check{ display:block; }

.ac-bar{ margin-top:14px; border-top:1px dashed var(--line); padding-top:12px; }

.ac-selinfo{ font-size:13px; margin-bottom:6px; color:var(--text); }

.ac-selinfo b{ color:var(--primary); }



/* 个人周表 */

.week-grid{ display:grid; grid-template-columns:repeat(7,1fr); gap:8px; }

.week-day{ border:1px solid var(--line); border-radius:10px; min-height:120px; background:#fffaf7; overflow:hidden; }

.week-day.today{ border-color:var(--primary); box-shadow:0 0 0 2px rgba(168,85,247,.18); }

.week-day-head{ padding:6px 8px; background:#f6effb; font-size:12px; font-weight:700; display:flex; justify-content:space-between; }

.week-day.today .week-day-head{ background:var(--primary); color:#fff; }

.week-day-body{ padding:6px; display:flex; flex-direction:column; gap:5px; }

.bk-item{ background:#fff; border:1px solid var(--line); border-left:3px solid var(--primary); border-radius:6px; padding:4px 6px; font-size:11px; line-height:1.5; }

.bk-item .bk-time{ font-weight:700; }

.bk-item.s-refund{ border-left-color:var(--danger); background:#fff5f6; }

.bk-item.s-done{ border-left-color:var(--ok); }

.bk-item.s-cancelled{ border-left-color:#8b93a8; background:#f3f4f6; }



/* 月历 */

.month-grid{ display:grid; grid-template-columns:repeat(7,1fr); gap:5px; }

.month-grid .mg-head{ text-align:center; font-size:12px; color:var(--muted); font-weight:700; padding:4px 0; }

/* 演员日程卡片头部：标题+结算日 / 操作按钮 同一行，按钮组内部永不折行 */
.as-head{ justify-content:flex-start; align-items:flex-start; gap:8px; }
.as-head .as-title-wrap{ display:flex; flex-direction:column; gap:2px; min-width:0; }
.as-title-wrap .as-title{ font-weight:700; }
.as-title-wrap .as-sub{ font-size:12px; color:var(--muted); font-weight:400; }
.as-actions{ display:flex; gap:8px; flex-wrap:nowrap; align-items:center; }
.as-actions .btn-sm{ white-space:nowrap; }
.as-nav{ display:flex; align-items:center; justify-content:center; gap:4px; margin:12px 0 6px; }
.as-nav .btn{ padding:4px 10px; font-size:12px; border-radius:8px; white-space:nowrap; display:inline-flex; align-items:center; justify-content:center; min-height:26px; }
.as-nav .as-month{ margin:0 4px; font-size:13px; font-weight:600; min-width:96px; text-align:center; white-space:nowrap; }
@media (max-width:480px){
  .as-actions{ margin-left:0; flex:1 0 auto; }
  .as-actions .btn-sm{ padding:5px 8px; font-size:11px; }
  .as-nav{ width:100%; justify-content:space-between; }
  .as-nav .btn{ padding:3px 8px; font-size:11px; min-height:24px; }
  .as-nav .as-month{ flex:1; font-size:12px; margin:0 2px; }
}

/* 演员统计日期筛选条：From/To 上下两行 + 紧凑快捷预设（激活项紫填充） */
.as-filter{ display:flex; flex-direction:column; gap:8px; margin:2px 0 8px; }
.as-date-row{ display:flex; align-items:center; gap:8px; }
.as-date-label{ font-size:12px; color:var(--muted); min-width:32px; flex-shrink:0; }
.as-date-input{ flex:1; width:100%; min-width:0; box-sizing:border-box; padding:7px 10px; border:1px solid var(--line); border-radius:8px; font-size:13px; background:var(--bg); color:var(--text); }
.as-presets{ display:flex; gap:6px; }
.as-preset{ flex:1; min-width:0; padding:8px 4px; border:1px solid var(--line); border-radius:8px; background:#f1edf5; color:var(--text); font-size:12px; cursor:pointer; text-align:center; white-space:nowrap; transition:all .15s ease; }
.as-preset:hover{ border-color:var(--accent); }
.as-preset--on{ background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600; }

/* 演员统计页月份导航器：按钮与月份标签比例均匀（手机端紧凑） */
.as-month-nav{ display:flex; justify-content:space-between; align-items:center; gap:4px; margin:4px 0 6px; }
.as-month-nav .btn{ padding:4px 10px; font-size:12px; border-radius:8px; white-space:nowrap; min-height:26px; display:inline-flex; align-items:center; justify-content:center; }
.as-month-nav b{ margin:0 4px; font-size:13px; font-weight:600; white-space:nowrap; text-align:center; }
@media (max-width:480px){
  .as-month-nav{ justify-content:center; }
  .as-month-nav .btn{ padding:3px 8px; font-size:11px; min-height:24px; }
  .as-month-nav b{ flex:1; font-size:12px; margin:0 2px; }
}

.mg-cell{ border:1px solid var(--line); border-radius:8px; min-height:74px; padding:4px 6px; font-size:11px; background:#fff; }

.mg-cell.dim{ background:#f7f8fb; color:#c3c8d6; }

.mg-cell.today{ border-color:var(--primary); box-shadow:0 0 0 2px rgba(168,85,247,.18); }

.mg-cell .mg-date{ display:flex; align-items:center; justify-content:space-between; font-weight:700; font-size:12px; }

.mg-cell.today .mg-date{ color:var(--primary); }

/* 个人预约日程表「今天」标签（从 mg-date 内独立出来，避免和红点挤在一行） */
.mg-today{ font-size:9px; color:var(--primary); font-weight:700; margin-top:2px; line-height:1; }

/* 退约表 / 看板统计：月历格内类型色点 + 选中态（套 My Schedule 圆角语言） */
.mg-dots{ display:flex; gap:3px; margin-top:3px; flex-wrap:wrap; }
.mg-dot{ width:7px; height:7px; border-radius:50%; display:inline-block; flex-shrink:0; }
.mg-cell.seled{ border-color:var(--primary); box-shadow:0 0 0 2px rgba(168,85,247,.25); background:var(--hover-soft); }
.mg-seln{ display:inline-block; min-width:15px; background:var(--danger); color:#fff; border-radius:9px; font-size:10px; padding:0 4px; margin-left:3px; vertical-align:middle; }
/* 月历/周表/日弹窗日期格：当天正在走退约工单的课数量红底白字数字徽标，尺寸/圆角/字号与表格数字徽标(.mg-num/.mg-badge--split)对齐 */
.refund-badge{ display:inline-flex; align-items:center; justify-content:center; min-width:16px; height:16px; padding:0 4px; margin-left:4px; border-radius:6px; background:#D32F2F; color:#fff; font-size:10px; font-weight:700; line-height:1; vertical-align:middle; box-sizing:border-box; }
/* 月历格日期行内红点更紧凑，保证完全显示在表格格里 */
.mg-date .refund-badge{ min-width:14px; height:14px; padding:0 3px; margin-left:3px; border-radius:4px; font-size:9px; }
.refund-banner{ display:inline-flex; align-items:center; gap:6px; margin-bottom:10px; padding:6px 12px; border-radius:8px; background:#fde3e6; color:#c0392b; font-size:13px; font-weight:600; }

.mg-bk{ margin-top:2px; border-radius:4px; padding:1px 4px; background:#f6effb; color:var(--primary-dark); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

/* 个人日程表月历紧凑格：有课徽标 + 首节提示 + 点选态（参考 My Schedule 模版，纯视觉层） */
.mg-cell.mg-tap{ cursor:pointer; transition:box-shadow .15s ease,background .15s ease; }
.mg-cell.mg-tap:hover{ box-shadow:0 0 0 2px rgba(200,80,192,.22); background:var(--hover-soft); }
.mg-cell .mg-badge{ display:inline-block; min-width:17px; height:17px; line-height:17px; padding:0 5px; margin-top:4px; border-radius:9px; background:var(--primary); color:#fff; font-size:10px; font-weight:700; text-align:center; }
/* 专属演员时段视图：蓝「已预约」/ 绿「已完成」分色徽标 */
/* 用双类选择器把特异性从 (0,1,0) 提到 (0,2,0)，压过后面 .mg-cell .mg-badge（同样 0,2,0 但位置靠后）+ 用 !important 兜底；position:static 避免继承 .mg-badge 的 absolute 定位 */
.mg-badge.mg-badge--split{ position:static !important; top:auto !important; right:auto !important; background:transparent !important; color:inherit !important; border-radius:0 !important; padding:0 !important; min-width:0 !important; height:15px; line-height:1; display:inline-flex; align-items:center; gap:3px; }
.mg-badge.mg-badge--split .mg-num{ font-size:10px; font-weight:800; line-height:1; border-radius:6px; padding:1px 5px; }
.mg-badge.mg-badge--split .mg-num--white{ background:#fff; color:#111; border:1px solid #e5e5e5; }
.mg-badge.mg-badge--split .mg-num--blue{ background:var(--blue-soft); color:var(--blue); }
.mg-badge.mg-badge--split .mg-num--green{ background:var(--green-soft); color:var(--green); }
.mg-badge.mg-badge--split .mg-num--purple{ background:#f3e9fb; color:#8b32c8; }
.mg-badge.mg-badge--split .mg-num--gray{ background:#f3ecef; color:#9aa1b5; }
.mg-badge.mg-badge--split .mg-num--dark-gray{ background:#e8e8e6; color:#5f5e5a; }
.mg-cell .mg-hint{ display:flex; flex-direction:column; align-items:flex-start; gap:2px; margin-top:2px; font-size:10px; color:var(--muted); line-height:1.25; }
.mg-cell .mg-hint-time{ white-space:nowrap; overflow:visible; font-size:10px; }
.mg-cell .mg-hint-badge{ line-height:1; }
/* My Schedule 首节时间旁的紫色数字徽标：改为时间在上、徽标在下两行，避免同行挤爆 */
.mg-cell .mg-hint .mg-badge{ position:static; font-size:9px; padding:0 4px; min-width:14px; height:14px; line-height:14px; border-radius:999px; }
/* 演员端 Statistics 月历格：done/booked/cancelled 改为圆点+数量字，与 My Schedule 风格统一 */
.mg-cell .mg-count-row{ display:flex; align-items:center; gap:4px; margin-top:2px; line-height:1; }
.mg-cell .mg-count-row .mg-dot{ display:inline-flex; align-items:center; justify-content:center; min-width:16px; height:16px; border-radius:50%; background:var(--muted); color:#fff; font-size:9px; font-weight:700; padding:0 4px; box-sizing:border-box; font-style:normal; }
.mg-cell .mg-count-row.done .mg-dot{ background:#149a5c; }
.mg-cell .mg-count-row.booked .mg-dot{ background:#fff; color:#149a5c; border:1.5px solid #149a5c; }
.mg-cell .mg-count-row.cancelled .mg-dot{ background:#9aa1b5; }
.mg-cell .mg-empty{ margin-top:7px; font-size:11px; color:#c3c8d6; }
/* My Schedule 表格下方备注（三色徽标 + 首节时间提示的含义） */
.mg-note{ display:flex; flex-wrap:wrap; gap:8px 18px; margin-top:12px; padding-top:10px; border-top:1px dashed var(--line); font-size:11px; color:var(--muted); line-height:1.7; }
.mg-note-i{ display:inline-flex; align-items:center; gap:5px; }
.mg-note-i.muted{ color:var(--muted); }
.mg-note .dot{ width:9px; height:9px; border-radius:50%; display:inline-block; flex:0 0 auto; }
.mg-note .dot-purple{ background:#a855f7; }
.mg-note .dot-green{ background:#2eb872; }
.mg-note .dot-red{ background:#e94f5f; }
.mg-note .dot-gray{ background:#9aa1b5; }
.mg-note .dot-dark-gray{ background:#5f5e5a; }

.mg-bk.mine{ background:#dce7ff; color:#2f6bff; }

.mg-bk.s-refund{ background:#fde3e6; color:var(--danger); }

.mg-bk.s-done{ background:var(--green-soft); color:var(--green); }

.mg-bk.s-cancelled{ background:#f3f4f6; color:#8b93a8; }

/* 预约表 B 方案：月历 + 当日下钻（可跨天多选） */
.bk-month .mg-cell{ cursor:pointer; transition:box-shadow .12s ease,background .12s ease; }
.bk-month .mg-cell:hover{ box-shadow:inset 0 0 0 2px var(--primary); }
.bk-month .mg-free{ display:inline-block; font-size:10px; line-height:1.5; padding:1px 6px; border-radius:6px; margin-top:4px; background:var(--green-soft); color:var(--green); font-weight:600; }
.bk-month .mg-free.zero{ background:#f4f5f8; color:#9aa1b5; }
.bk-month .mg-booked{ display:inline-block; font-size:10px; line-height:1.5; padding:1px 6px; border-radius:6px; margin-top:4px; margin-right:3px; background:var(--blue-soft); color:var(--blue); font-weight:600; }
.bk-month .mg-empty{ font-size:10px; color:#c3c8d6; margin-top:4px; }
.bk-month .mg-cell.bk-day-sel{ border-color:var(--primary); box-shadow:inset 0 0 0 2px rgba(168,85,247,.25); background:var(--hover-soft); }
.bk-month .mg-cell.mg-locked{ background:#f4f5f8; color:#c3c8d6; }
.bk-month .mg-cell.bk-past{ background:#f4f5f8; color:#c3c8d6; }
.bk-month .mg-cell.bk-past .mg-date{ color:#c3c8d6; }
.bk-month .mg-cell.bk-past .mg-booked, .bk-month .mg-cell.bk-past .mg-free{ opacity:.45; }
.bk-month .mg-sel-dot{ display:inline-block; width:6px; height:6px; border-radius:50%; background:var(--primary); margin-left:4px; vertical-align:middle; }
.bk-drill{ border:1px solid var(--line); border-radius:8px; padding:10px 12px; background:#fafbfc; }
.bk-drill .drill-t{ margin-bottom:2px; }
.bk-drill .slot{ display:inline-block; font-size:12px; padding:5px 12px; margin:4px; border:1px solid var(--line); border-radius:999px; cursor:pointer; background:#fff; transition:all .12s ease; }
.bk-drill .slot:hover{ border-color:var(--primary); }
.bk-drill .slot.on{ background:var(--primary); color:#fff; border-color:var(--primary); font-weight:600; }
.bk-drill .slot.bk-expired{ background:#f4f5f8; color:#c0c5d4; cursor:not-allowed; text-decoration:line-through; border-color:#e6e8ee; }
@media (max-width:600px){
  .bk-month .mg-free{ font-size:9px; padding:1px 4px; }
  .bk-drill .slot{ font-size:11px; padding:5px 10px; margin:3px; }
}
/* ---------- 折叠规则 ---------- */

details.rule{ border:1px solid var(--line); border-radius:8px; margin-bottom:8px; background:#fffaf7; }

details.rule summary{ padding:10px 14px; cursor:pointer; font-weight:600; font-size:13px; list-style:none; }

details.rule summary::before{ content:"▸ "; color:var(--primary); }

details.rule[open] summary::before{ content:"▾ "; }

details.rule .rule-body{ padding:0 16px 12px; font-size:12.5px; color:#4a5268; line-height:2; }



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

.form-grid{ display:grid; grid-template-columns:1fr 1fr; gap:12px 16px; }

.form-grid .full{ grid-column:1 / -1; }

.f-item label{ display:block; font-size:12px; color:var(--muted); margin-bottom:5px; }

.f-item label b.req{ color:var(--danger); }

.f-item input,.f-item select,.f-item textarea{ width:100%; padding:8px 10px; border:1px solid var(--line); border-radius:8px; font-size:13px; background:#fff; }

.f-item input:disabled{ background:#f4f5f8; color:#8b93a8; }

.f-item textarea{ resize:vertical; min-height:60px; }

/* 2026-09-23 修：表单单选组横排对齐（.f-item input 通用样式会把 radio 撑成 100% 宽+边框+padding 导致错位） */
.f-radios{ display:flex; gap:20px; align-items:center; flex-wrap:wrap; }
.f-radios label{ display:inline-flex; align-items:center; gap:6px; font-size:13px; color:var(--text); margin:0; cursor:pointer; }
.f-radios input[type=radio]{ width:auto; min-width:0; padding:0; border:none; margin:0; accent-color:var(--primary); flex:none; }

.bk-tip{ display:flex; flex-wrap:wrap; align-items:center; gap:6px; padding:10px 12px; background:#eef4ff; border:1px solid #d4e3ff; border-radius:8px; font-size:13px; color:#2f5db3; margin-bottom:12px; }
.bk-tip__n{ display:inline-flex; align-items:center; justify-content:center; min-width:18px; height:18px; padding:0 5px; background:#3b82f6; color:#fff; border-radius:9px; font-size:11px; font-weight:700; }
.bk-tip__ar{ color:#9bb6e6; font-weight:700; }
.f-hint{ font-size:11px; color:var(--muted); margin-top:4px; line-height:1.6; }
/* 提示块分级（2026-09-02）：A 类规则/操作说明 → 黄底（复用规则卡 #FFF8E1）；C 类危险操作 → 红底 */
.f-hint.f-yellow{ display:block; background:#FFF8E1; border:1px solid #FCD34D; border-radius:8px; padding:8px 12px; color:#7a5b00; margin:8px 0; line-height:1.7; font-size:12px; }
.f-hint.f-danger{ display:block; background:#fdecea; border:1px solid #f5b5b0; border-radius:8px; padding:8px 12px; color:#c0392b; margin:8px 0; line-height:1.7; font-size:12px; }
.f-hint.f-ok{ display:block; background:#eafaf1; border:1px solid #9fe0bb; border-radius:8px; padding:8px 12px; color:#149a5c; margin:8px 0; line-height:1.7; font-size:12px; font-weight:600; }

.f-warn{ font-size:12px; color:#b26a00; background:#fff7e8; border:1px solid #f5dfb3; border-radius:8px; padding:8px 12px; line-height:1.7; margin:10px 0; }
.f-danger{ font-size:12px; color:var(--red-deep); background:#fdecec; border:1px solid #f3c4c4; border-radius:8px; padding:8px 12px; line-height:1.7; margin:10px 0; }

/* 预约流程步骤卡（顶部 · PC 横向4列 / 手机纵向时间线，2026-09-02） */
.bk-flow-card{
  background:var(--color-background-secondary);
  border:1px solid var(--color-border-tertiary);
  border-radius:12px;
  padding:18px 22px 22px;
  margin-bottom:14px;
}
.bk-flow-card__foot{ margin-top:14px; padding-top:12px; border-top:1px dashed var(--color-border-tertiary); font-size:13px; clear:both; }
/* 固定表选位状态条（块B）：可编辑绿 / 只读黄，原因内联 */
.fx-status{ margin:6px 0 10px; padding:8px 12px; border-radius:8px; font-size:13px; line-height:1.5; }
.fx-status--ok{ background:#eafaf0; color:#1a7f43; border:1px solid #b6e3c6; }
.fx-status--ro{ background:#fff8e1; color:#8a6d1a; border:1px solid #f3d98a; }
.bk-flow-card__title{ font-size:14px; font-weight:600; color:var(--color-text-secondary); margin-bottom:14px; display:flex; align-items:center; gap:6px; }
.bk-flow{ display:flex; align-items:center; gap:18px; }
.bk-flow__step{ flex:1 1 0; min-width:0; display:flex; flex-direction:column; align-items:center; text-align:center; padding:0; }
.bk-flow__num{ display:inline-flex; align-items:center; justify-content:center; width:28px; height:28px; border-radius:50%; background:var(--color-primary-500); color:#fff; font-size:13px; font-weight:700; margin-bottom:8px; box-shadow:0 2px 6px rgba(168,85,247,0.28); }
.bk-flow__label{ font-size:14px; font-weight:600; color:var(--color-text-primary); margin-bottom:2px; }
.bk-flow__sub{ display:none; }
.bk-flow__arrow{ display:flex; align-items:center; align-self:center; color:var(--color-text-tertiary); font-size:18px; flex:0 0 auto; }
@media (max-width:768px){
  .refund-badge{ min-width:14px; height:14px; padding:0 3px; margin-left:3px; border-radius:4px; font-size:8px; }
  .mg-date .refund-badge{ font-size:8px; }
  .bk-flow-card{ padding:10px 12px 12px; }
  /* 手机纵向：圆点居左 + 标签居右（2026-09-19 拍板：预约流程卡 PC 横向 / 手机纵向 / 圆点正圆） */
  .bk-flow{ flex-direction:column; align-items:stretch; gap:0; }
  .bk-flow__step{ flex-direction:row; align-items:center; text-align:left; gap:10px; padding:7px 0; }
  .bk-flow__arrow{ display:none; }
  .bk-flow__step:not(:last-child)::before{ display:none; }
  .bk-flow__num{ width:24px; height:24px; font-size:12px; margin-bottom:0; flex:0 0 24px; }
  .bk-flow__label{ font-size:13px; margin-bottom:0; }
}

/* 流程卡 · 药丸折叠 + 纵向时间轴（首页/手机端，2026-09-17；步骤不含说明） */
.bk-pill{
  margin-left:auto; font-size:12px; font-weight:600; color:var(--primary);
  background:#fff; border:1px solid var(--primary); border-radius:999px;
  padding:4px 12px; cursor:pointer; line-height:1;
}
.bk-pill:hover{ background:var(--primary); color:#fff; }
.bk-pill:focus-visible{ outline:2px solid var(--primary); outline-offset:2px; }
.bk-flow-card--pill .bk-flow-card__title{ margin-bottom:0; }
.bk-flow-v{ display:flex; flex-direction:column; margin-top:12px; }
.bk-flow-v[hidden]{ display:none; }
.bk-step{ display:flex; gap:12px; }
.bk-rail{ position:relative; width:28px; flex:0 0 28px; display:flex; justify-content:center; }
/* 2026-09-19 修复：原裸 .bk-dot(28×28+flex:0 0 28px) 与图例/当日清单圆点(.bk-dot 9×9, :2797) 同名冲突，
   flex 容器内 basis:28px 压过 width:9px → 全部被压成 28×9 椭圆。收窄选择器到时间轴专属 .bk-rail .bk-dot。 */
.bk-rail .bk-dot{
  width:28px; height:28px; border-radius:50%; background:var(--grad-warm); color:#fff;
  font-size:13px; font-weight:700; display:flex; align-items:center; justify-content:center;
  box-shadow:0 2px 6px rgba(168,85,247,0.28); z-index:1; flex:0 0 28px; margin-right:0;
}
.bk-rail::before{ content:""; position:absolute; top:28px; bottom:0; left:50%; transform:translateX(-50%); width:2px; background:var(--line); }
.bk-step:last-child .bk-rail::before{ display:none; }
.bk-body{ padding-bottom:16px; flex:1; }
.bk-step:last-child .bk-body{ padding-bottom:2px; }
.bk-label{ font-size:14px; font-weight:600; color:var(--text); }
/* 药丸时间轴圆点：尺寸/居中已并入上方 .bk-rail .bk-dot 定义（2026-09-19 同名冲突修复） */
/* 药丸展开 · PC 横向 4 列（圆点在上、标签在下、横向连线）；手机(<769px)仍纵向时间轴（2026-09-19 拍板） */
@media (min-width:769px){
  .bk-flow-v{ flex-direction:row; align-items:stretch; }
  .bk-step{ flex:1 1 0; flex-direction:column; align-items:center; text-align:center; gap:0; }
  .bk-rail{ width:100%; flex:0 0 auto; height:28px; }
  .bk-rail::before{ top:13px; bottom:auto; left:50%; width:100%; height:2px; transform:none; }
  .bk-step:last-child .bk-rail::before{ display:none; }
  .bk-body{ padding:8px 0 0; }
}

.slot-picker{ display:flex; flex-wrap:wrap; gap:6px; max-height:180px; overflow:auto; border:1px solid var(--line); border-radius:8px; padding:8px; }

.slot-chip{ border:1px solid var(--line); border-radius:6px; padding:4px 8px; font-size:12px; cursor:pointer; user-select:none; background:#fff; }

.slot-chip.on{ background:var(--primary); color:#fff; border-color:var(--primary); }

.slot-chip.off{ background:#f4f5f8; color:#c0c5d4; cursor:not-allowed; text-decoration:line-through; }
/* 2026-09-23 时段格四态（用户定稿）：紫框=选中统一标记；白底紫框=将新增开放、红底紫框=将关闭、紫实心=已开放基准态 */
.slot-chip.add{ background:#fff; border:2px solid #c850c0; color:#534AB7; }
.slot-chip.close{ background:#E24B4A; color:#fff; border:2px solid #c850c0; }



/* ---------- 模态框 ---------- */

.modal-backdrop{ position:fixed; inset:0; background:rgba(20,26,48,.45); z-index:200; display:flex; align-items:flex-start; justify-content:center; padding:40px 16px; overflow:auto; }

.modal{ background:rgba(255,255,255,0.92); backdrop-filter:blur(20px) saturate(160%); -webkit-backdrop-filter:blur(20px) saturate(160%); border:1px solid var(--glass-border); border-radius:20px; width:640px; max-width:96vw; box-shadow:0 26px 70px rgba(170,55,35,0.25); }

.modal.wide{ width:900px; }

.modal-head{ display:flex; justify-content:space-between; align-items:center; padding:16px 20px; border-bottom:1px solid var(--line); font-size:16px; font-weight:700; }

.modal-close{ border:none; background:none; font-size:22px; cursor:pointer; color:var(--muted); line-height:1; }

.modal-body{ padding:18px 20px 22px; max-height:72vh; overflow:auto; }

.modal-actions{ display:flex; justify-content:flex-end; gap:10px; margin-top:18px; }
/* 2026-09-23 配置弹窗操作栏吸底：常驻可视区，时段格滚动时按钮始终可见 */
.modal-actions.sp-actions{ position:sticky; bottom:0; margin-top:14px; padding-top:12px; background:#fff; border-top:0.5px solid var(--color-border-tertiary); z-index:3; }

/* 模态框打开时锁定背景滚动（移动端防止遮罩滚动露出门户首页） */
body.modal-open{ overflow:hidden; }

/* ---------- 顶部系统公告横幅 ---------- */
.notice-bar{
  display:flex; align-items:center; gap:8px; justify-content:center;
  background:linear-gradient(90deg,#ff9a3c,#ff6b5d); color:#fff;
  font-size:13px; line-height:1.6; padding:8px 14px; text-align:center;
  box-shadow:0 2px 8px rgba(255,107,93,.25);
}
.notice-bar .nb-ico{ flex:0 0 auto; font-size:14px; }
.notice-bar .nb-text{ white-space:pre-wrap; word-break:break-word; flex:1 1 auto; }
.notice-bar.hidden{ display:none; }
.notice-bar .nb-close{ flex:0 0 auto; cursor:pointer; opacity:.85; border:none; background:rgba(255,255,255,.22);
  color:#fff; border-radius:50%; width:20px; height:20px; line-height:18px; font-size:14px; margin-left:4px; }
.notice-bar .nb-close:hover{ opacity:1; background:rgba(255,255,255,.35); }
/* 演员端通知横幅：蓝色样式（与学员端橙色系统公告区分） */
.notice-bar--actor{
  background:linear-gradient(90deg,#4f7cff,#3a66e0);
  box-shadow:0 2px 8px rgba(58,102,224,.28);
}
@media (max-width:768px){
  .notice-bar{ font-size:12px; padding:7px 10px; }
}
/* 消息中心内公告编辑区 */
.nc-announce{ border:1px solid var(--line); border-radius:12px; padding:12px 14px; margin-bottom:14px; background:#fffaf7; }
.nc-announce-head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
.nc-announce-head .na-title{ font-weight:700; font-size:14px; }
.nc-announce-head .na-tag{ font-size:11px; padding:1px 8px; border-radius:9px; background:var(--primary); color:#fff; }
.nc-announce .na-ro{ white-space:pre-wrap; word-break:break-word; font-size:13px; line-height:1.7; color:#7a4a12;
  background:#fff7e8; border:1px solid #f5dfb3; border-radius:8px; padding:8px 12px; }
.nc-announce textarea{ width:100%; min-height:88px; resize:vertical; padding:8px 10px; border:1px solid var(--line);
  border-radius:8px; font-size:13px; line-height:1.7; background:#fff; box-sizing:border-box; }
.nc-announce .na-row{ display:flex; align-items:center; justify-content:space-between; gap:10px; margin-top:8px; flex-wrap:wrap; }
.nc-announce .na-row .na-count{ font-size:11px; color:var(--muted); }
.nc-announce .na-toggle{ display:flex; align-items:center; gap:6px; font-size:12px; color:var(--muted); }
.nc-announce .na-actions{ display:flex; gap:8px; }
/* 演员端通知区（蓝色，与演员端顶部蓝色横幅呼应；2026-08-29 新增） */
.nc-announce--actor{ background:#f5f8ff; border-color:#c9d8ff; }
.nc-announce--actor .na-tag{ background:#4f7cff; }
.nc-announce--actor .na-title{ color:#1f3a8a; }
.nc-announce .na-ro--actor{ color:#1f3a8a; background:#eef3ff; border-color:#c9d8ff; }



/* ---------- Toast ---------- */

/* 顶部整宽横条 toast：平时 translateY(-100%) 隐藏在屏外，弹出滑入；自动 3.6s 收回，✕ 立即关。
   不挡主体内容、不挡 nav tab。max-width 100% 确保超长文案换行不撑破视口。 */
.toast{
  position:fixed; top:8px; left:50%; transform:translateX(-50%) translateY(-140%);
  display:flex; align-items:center; justify-content:center; gap:8px;
  background:#16a34a; color:#fff; font-weight:500;
  border:1px solid rgba(255,255,255,.28);
  border-radius:999px;
  padding:8px 38px 8px 18px; box-sizing:border-box;
  font-size:13px; line-height:1.5;
  max-width:min(560px, calc(100vw - 320px));
  z-index:500;
  box-shadow:0 6px 20px rgba(22,163,74,.38);
  transition:transform .25s ease, opacity .2s ease;
  opacity:0;
  pointer-events:none;
  text-align:center;
}
.toast::before{ content:""; width:8px; height:8px; border-radius:50%; flex:none; background:rgba(255,255,255,.92); }
.toast:not(.hidden){ transform:translateX(-50%) translateY(0); opacity:1; pointer-events:auto; }
.toast.err{ background:#dc2626; box-shadow:0 6px 20px rgba(220,38,38,.38); }
.toast.err::before{ background:rgba(255,255,255,.92); }
.toast.ok::before{ background:rgba(255,255,255,.92); }
.toast b{ font-weight:700; }
/* 关闭按钮：胶囊内右侧，不占 flex 流 */
.toast .toast-x{ position:absolute; right:12px; top:50%; transform:translateY(-50%); cursor:pointer; font-size:15px; line-height:1; padding:0 6px; opacity:.8; color:#fff; user-select:none; }
.toast .toast-x:hover{ opacity:1; }



/* ---------- 开关 ---------- */

.switch{ position:relative; display:inline-block; width:38px; height:21px; vertical-align:middle; }

.switch input{ opacity:0; width:0; height:0; }

.switch .sl{ position:absolute; inset:0; background:#cfd4e2; border-radius:21px; transition:.2s; cursor:pointer; }

.switch .sl::before{ content:""; position:absolute; width:16px; height:16px; left:2.5px; top:2.5px; background:#fff; border-radius:50%; transition:.2s; }

.switch input:checked + .sl{ background:var(--ok); }

.switch input:checked + .sl::before{ transform:translateX(17px); }



/* ---------- 头像 ---------- */

.avatar{ width:34px; height:34px; border-radius:50%; object-fit:cover; border:2px solid var(--line); display:inline-flex; align-items:center; justify-content:center; background:var(--hover-soft); font-size:16px; vertical-align:middle; overflow:hidden; }

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



/* ---------- 图例 ---------- */

.legend{ display:flex; gap:10px; flex-wrap:nowrap; font-size:11px; color:var(--muted); align-items:center; overflow-x:auto; scrollbar-width:none; }
.legend::-webkit-scrollbar{ display:none; }
.legend span{ white-space:nowrap; flex-shrink:0; }

.legend i{ display:inline-block; width:11px; height:11px; border-radius:3px; border:1px solid var(--line); margin-right:4px; vertical-align:-2px; }



/* ---------- 看板小卡 ---------- */

.kpis{ display:flex; gap:12px; flex-wrap:wrap; }

.kpi{ flex:1; min-width:130px; background:rgba(255,255,255,0.6); backdrop-filter:blur(12px); border:1px solid var(--glass-border); border-radius:16px; padding:12px 14px; text-align:center; box-shadow:var(--glass-shadow); }

.kpi .kpi-num{ font-size:24px; font-weight:800; color:var(--primary); }

.kpi.kpi-warn .kpi-num{ color:var(--amber); }

.kpi.kpi-danger .kpi-num{ color:var(--danger); }

.kpi.kpi-ok .kpi-num{ color:var(--ok); }

.kpi .kpi-label{ font-size:12px; color:var(--muted); margin-top:2px; }

/* 演员预约统计 KPI 状态色模版（按业务状态一对一染色，区别于品牌主色 --primary） */
.kpi.kpi-purple .kpi-num{ color:#534AB7; }   /* 约课总量 · 品牌紫 */
.kpi.kpi-amber  .kpi-num{ color:#BA7517; }   /* 待确认 · 琥珀橙 */
.kpi.kpi-pink   .kpi-num{ color:#D4537E; }   /* 已预约未核实 · 粉 */
.kpi.kpi-green  .kpi-num{ color:#3B6D11; }   /* 已预约 · 绿（已确定） */
.kpi.kpi-red    .kpi-num{ color:var(--red-deep); }   /* 待退约 · 红 */
.kpi.kpi-gray   .kpi-num{ color:#5F5E5A; }   /* 已退约 · 灰（区别于品牌紫，避免混淆） */

/* 已完成强突大卡（方案 C 风格 · teal 块加高加宽 + 渐变底 + 强阴影） */
.kpi.kpi-teal-big{
  flex:1 1 100%;
  display:flex; align-items:center; justify-content:center; gap:22px;
  width:100%; min-height:104px; padding:18px 26px; margin-top:6px;
  background:linear-gradient(135deg,#E1F5EE 0%,#C7EBD8 100%);
  border:1.5px solid #1D9E75; border-radius:18px;
  box-shadow:0 6px 20px rgba(29,158,117,.20), inset 0 1px 0 rgba(255,255,255,.5);
  position:relative; overflow:hidden;
}
.kpi.kpi-teal-big::after{
  content:""; position:absolute; right:-30px; top:-30px; width:120px; height:120px;
  background:radial-gradient(circle, rgba(29,158,117,.18) 0%, transparent 70%); border-radius:50%;
}
.kpi.kpi-teal-big .kpi-num-big{
  font-size:48px; font-weight:800; color:#0F6E56; line-height:1;
  font-variant-numeric:tabular-nums; letter-spacing:-1px;
  position:relative; z-index:1;
}
.kpi.kpi-teal-big .kpi-label-big{
  font-size:15px; font-weight:600; color:#085041; letter-spacing:.5px;
  position:relative; z-index:1;
}



/* ---------- 日期多选（超管时段配置） ---------- */

.dm-cal{ display:grid; grid-template-columns:repeat(7,1fr); gap:4px; }

.dm-cal .dm-h{ text-align:center; font-size:11px; color:var(--muted); font-weight:700; padding:3px 0; }

.dm-day{ border:1px solid var(--line); border-radius:6px; text-align:center; padding:6px 0; font-size:12px; cursor:pointer; user-select:none; background:#fff; }

.dm-day:hover{ border-color:var(--primary); }

.dm-day.sel{ background:var(--primary); color:#fff; border-color:var(--primary); font-weight:700; }

.dm-day.blank{ border:none; cursor:default; background:transparent; }

/* 已有约课的日期：时段配置面板中置灰、不可选，只能走取消/退约路径 */
.dm-day.locked{ background:#f1f1f4; color:#9aa1b5; border-color:#e2e4ea; cursor:not-allowed; }
.dm-day.locked:hover{ border-color:#e2e4ea; }
.dm-day .dm-lock{ font-size:9px; line-height:1.1; }

/* 超管月单位日程表：已约课可勾选时段 */

.dm-day.has{ text-align:left; cursor:default; }

.dm-day.has:hover{ border-color:var(--line); }

.dm-day .d-num{ font-weight:700; margin-bottom:4px; text-align:center; }

.dm-day .d-num .seln{ display:inline-block; min-width:16px; background:var(--danger); color:#fff; border-radius:9px; font-size:10px; padding:0 4px; margin-left:3px; }

.sch-chip{ display:flex; align-items:center; gap:4px; border:1px solid var(--line); border-radius:6px; padding:3px 5px; margin:3px 0; font-size:11px; cursor:pointer; user-select:none; background:#fff7f3; line-height:1.3; }

.sch-chip:hover{ border-color:var(--primary); }

.sch-chip.on{ background:var(--danger); color:#fff; border-color:var(--danger); }

.sch-chip.on .badge{ background:rgba(255,255,255,.22); color:#fff; }

.sch-chip input{ margin:0; }

.sch-chip .t{ font-weight:700; }

.sch-chip .n{ flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

.sch-chip .badge{ font-size:9px; padding:1px 4px; border-radius:4px; }





.filter-bar{ display:flex; gap:10px; flex-wrap:wrap; align-items:center; margin-bottom:12px; }

.filter-bar select,.filter-bar input{ padding:6px 10px; border:1px solid var(--line); border-radius:8px; font-size:12.5px; background:#fff; }

/* 业务流水筛选栏：默认继承 .filter-bar，移动端由 @media 覆写为两列卡片 */
.mf-filter-bar{ display:flex; gap:10px; align-items:center; margin:0 0 12px; flex-wrap:nowrap; }
.mf-filter-bar select,.mf-filter-bar input{ flex:1 1 0; min-width:0; }
/* 转约移约 Tab 筛选栏：无状态芯片，避免下拉/输入过度拉伸 */
.mf-filter-bar.mf-tm-bar{ justify-content:flex-start; gap:10px; }
.mf-filter-bar.mf-tm-bar select{ flex:0 1 auto; width:auto; min-width:140px; max-width:200px; }
.mf-filter-bar.mf-tm-bar input{ flex:0 1 auto; width:auto; min-width:160px; max-width:240px; }
/* 个人流水筛选栏：桌面端与 .filter-bar 一致，移动端由 @media 覆写为两列同行 */
.myf-filter-bar{ display:flex; gap:10px; align-items:center; margin:0 0 12px; flex-wrap:wrap; }
.myf-filter-bar select{ padding:6px 10px; border:1px solid var(--line); border-radius:8px; max-width:220px; }

/* 固定位周期进度步骤条（迭代95+）：各月 待排→已排→已定稿 状态可视化，沿用全局主题变量 */

.fx-cycle-stepper{ margin:10px 0 4px; padding:12px 14px; border:1px solid var(--line); border-radius:14px; background:rgba(255,255,255,0.5); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px); }

.fx-stepper-head{ display:flex; justify-content:space-between; align-items:baseline; margin-bottom:10px; flex-wrap:wrap; gap:4px; }

.fx-stepper-title{ font-weight:700; font-size:13.5px; color:var(--primary); }

.fx-stepper-meta{ font-size:12px; color:var(--muted); }

.fx-stepper-track{ display:flex; align-items:center; flex-wrap:wrap; gap:6px; }

.fx-step{ display:flex; flex-direction:column; align-items:center; gap:4px; cursor:pointer; padding:4px 6px; border-radius:10px; transition:.18s; min-width:46px; }

.fx-step:hover{ background:rgba(168,85,247,0.08); }

.fx-step-active{ background:rgba(168,85,247,0.14); box-shadow:inset 0 0 0 1px var(--primary-soft); }

.fx-step-dot{ width:26px; height:26px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:13px; font-weight:700; border:2px solid var(--line); background:#fff; color:var(--muted); transition:.2s; }

.fx-step-pending .fx-step-dot{ color:var(--amber); border-color:#f0d28a; background:var(--amber-soft); }

.fx-step-sched .fx-step-dot{ color:#fff; border-color:var(--primary); background:var(--grad-warm); box-shadow:0 4px 12px rgba(168,85,247,0.3); }

.fx-step-done .fx-step-dot{ color:#fff; border-color:var(--green); background:linear-gradient(135deg,#2eb872,#1c9c63); box-shadow:0 4px 12px rgba(46,184,114,0.3); }

.fx-step-lbl{ font-size:11px; color:var(--muted); }

.fx-step-done .fx-step-lbl, .fx-step-sched .fx-step-lbl{ color:var(--text); }

.fx-step-line{ flex:0 0 18px; height:3px; border-radius:3px; background:var(--line); margin:0 1px; }

.fx-step-line-on{ background:var(--grad-warm); }

/* 固定位超管操作区：STEP 1 排位 / STEP 2 定稿 卡片（2026-09-04 去小字·手机适配） */
.fx-op-steps{ display:flex; gap:10px; margin-top:8px; flex-wrap:wrap; }
.fx-op-step{ flex:1 1 0; min-width:0; display:flex; flex-direction:column; gap:8px; padding:10px; border-radius:12px; background:#fff; }
.fx-op-step--1{ border:1px solid #8a5cff55; background:linear-gradient(135deg,#f3eeff,#faf5ff); }
.fx-op-step--2{ border:1px solid #149a5c55; background:#eafaf1; }
.fx-op-tag{ align-self:flex-start; font-size:10px; font-weight:700; letter-spacing:.5px; padding:2px 8px; border-radius:999px; background:var(--primary); color:#fff; }
.fx-op-tag--2{ background:#fff; color:#149a5c; border:1px solid #149a5c; }
.fx-op-btn{ width:100%; font-size:14px; padding:9px 14px; margin-top:2px; }
.fx-op-btn--2{ background:#fff; color:#149a5c; border:1.5px solid #149a5c; }
@media (max-width:480px){
  .fx-op-step{ flex:1 1 100%; padding:10px; }
}

.muted{ color:var(--muted); font-size:12px; }

.admin-only-tag{ display:inline-block; font-size:10px; background:#3d2a6e; color:#cbb8ff; border-radius:4px; padding:1px 6px; margin-left:6px; vertical-align:1px; }

.empty{ text-align:center; color:var(--muted); padding:26px 0; font-size:13px; }

/* 表单空列表原因提示卡片（移约/转约/退约 共用，按类型着色 + 既有 emoji 图标风格） */
.bk-empty-card{ display:block; text-align:center; padding:22px 18px 18px; background:rgba(255,255,255,0.6); border:1px solid var(--line); border-radius:16px; backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); margin:6px 0; }
.bk-empty-chip{ display:inline-block; font-size:12px; font-weight:600; padding:3px 12px; border-radius:999px; margin-bottom:10px; }
.bk-empty-ic{ font-size:34px; line-height:1; margin-bottom:6px; }
.bk-empty-title{ font-size:14px; font-weight:600; color:var(--text); margin-bottom:10px; }
.bk-empty-reasons{ list-style:none; padding:0; margin:0 auto 12px; max-width:300px; }
.bk-empty-reasons li{ font-size:12.5px; color:#6a5d6e; line-height:1.85; text-align:left; }
.bk-empty-reasons li b{ color:var(--text); font-weight:600; }
.bk-empty-foot{ font-size:11px; color:var(--muted); }



/* ===== 移动端适配（手机竖屏 ≤768px） ===== */

@media (max-width:768px){

  body{ font-size:13px; }



  /* 顶栏：单行不换行，logo + 演员切换(弹性占满) + 用户芯片(紧凑) 三段式，375px 完整容纳不溢出 */

  .topbar{ height:auto; min-height:48px; flex-wrap:nowrap; align-items:center; padding:6px 12px; gap:6px; }

  .topbar-left{ flex:1 1 auto; min-width:0; gap:6px; }

  .topbar-right{ flex-shrink:0; }

  .logo{ font-size:14px; white-space:nowrap; flex-shrink:0; }

  /* 演员切换：弹性占满左部剩余空间，超长演员名自动省略 */

  .actor-switch{ flex:1 1 auto; min-width:0; padding:3px 8px; gap:4px; }

  .actor-switch-label{ display:none; } /* 手机顶栏空间紧张，隐藏“当前演员”标签，直接显示演员名 */

  .actor-switch select{ max-width:none; min-width:0; flex:1 1 auto; width:100%; font-size:12px; text-overflow:ellipsis; }

  /* 用户芯片：窄屏仅留 头像 + 同步灯(紧凑省略) + 箭头，姓名/角色移入下拉菜单省空间 */

  .user-chip{ padding:3px 7px 3px 3px; gap:5px; }

  .user-chip .user-meta{ display:none; } /* 窄屏隐藏用户名/角色，仅留头像+同步灯+箭头（提高特异性，稳赢桌面 .user-meta{display:flex}） */

  .sync-dot{ font-size:10px; padding:1px 6px; max-width:80px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

  .user-chev{ margin-left:0; }



  /* 导航：横向滑动，标签不压缩不换行（取消吸顶避免与变高顶栏错位；.nav 隐藏见下方 1389 行方案A） */

  .nav-tab{ flex-shrink:0; white-space:nowrap; padding:11px 14px; font-size:13px; }



  /* 页面与卡片：减小边距、单列堆叠 */

  .page{ padding:14px 12px 70px; max-width:100%; }

  .card{ padding:14px; min-width:0; }

  .card-title{ font-size:13px; justify-content:flex-start; gap:6px; }
  /* 固定位标题行：手机端月份徽章与标题并排、缩字号适配窄屏（2026-09-23） */
  .fx-cycle-badge{ font-size:10px; padding:2px 7px; }
  .fx-eff-ym{ font-size:10px; }

  .row{ flex-direction:column; gap:12px; }

  .row > .card{ min-width:0; }



  /* 表单：单列 */

  .form-grid{ grid-template-columns:1fr; gap:10px; }

  .f-item input,.f-item select,.f-item textarea{ font-size:15px; padding:10px 12px; }



  /* 模态框：接近全屏、可滚动，按钮堆叠 */

  .modal,.modal.wide{ width:96vw; max-width:96vw; }

  .modal-head{ padding:14px 16px; font-size:15px; }

  .modal-body{ padding:14px; max-height:80vh; }

  .modal-actions{ flex-wrap:wrap; gap:8px; }

  .modal-actions .btn{ flex:1; min-width:120px; }



  /* 弹窗内日历/时段选择器：触控友好 */

  .dm-cal{ gap:3px; }

  .dm-day{ padding:11px 0; font-size:14px; min-height:42px; }

  .dm-day .d-num{ font-size:13px; }

  /* 时段选择器：4 列网格紧凑排布，38 个时段完整展示（不再局部限高截断，弹窗整体滚动可见全部） */

  .slot-picker{ display:grid; grid-template-columns:repeat(4,1fr); gap:6px; max-height:none; padding:8px; }

  .slot-chip{ padding:9px 2px; font-size:13px; text-align:center; white-space:nowrap; }

  .modal-body .f-warn,.modal-body .f-hint{ font-size:12px; line-height:1.65; }

  /* 演员退约操作表已改用 .month-grid 圆角整月历（7 列不滑动、点格弹详情），原 .am-cal 纵向列表规则已移除 */



  /* 个人周表：单列纵向堆叠，每天一块，避免 7 列挤压 */

  .week-grid{ grid-template-columns:1fr; gap:10px; }

  .week-day{ min-height:auto; }



  /* 个人预约表 · 移动端日期栏（横向滚动 · 默认 3 张/屏 · 当天居中 · 无限滑动加载） */

  .day-scroll{ display:flex; gap:8px; overflow-x:auto; -webkit-overflow-scrolling:touch; scroll-snap-type:x proximity; padding:6px 2px 10px; scrollbar-width:none; }

  .day-scroll::-webkit-scrollbar{ display:none; }

  .day-cell{ flex:0 0 calc((100% - 16px)/3); min-width:96px; scroll-snap-align:center; border:1px solid var(--line); border-radius:12px; background:#fffaf7; padding:8px 4px; text-align:center; cursor:pointer; transition:transform .15s ease, box-shadow .15s ease; }

  .day-cell:active{ transform:scale(.96); }

  .day-cell.on{ border-color:var(--primary); background:var(--primary); color:#fff; box-shadow:0 0 0 2px rgba(200,80,192,.25); }

  .day-cell.today:not(.on){ border-color:var(--primary); box-shadow:0 0 0 2px rgba(168,85,247,.18); }

  .dc-wd{ font-size:12px; opacity:.85; }

  .dc-date{ font-size:14px; font-weight:700; margin:2px 0; }

  .dc-date em{ font-style:normal; font-size:11px; opacity:.85; margin-left:4px; }

  .dc-count{ font-size:11px; opacity:.75; }

  .day-content{ border:1px solid var(--line); border-radius:12px; background:#fffaf7; padding:10px; margin-top:10px; }

  .day-content.today{ border-color:var(--primary); }

  .dc-head{ display:flex; justify-content:space-between; align-items:center; font-size:13px; margin-bottom:8px; }

  .day-content .bk-item{ margin-bottom:6px; }

  .day-nav{ display:none; } /* 移动端用原生手指横滑，隐藏 ‹ › 按钮 */



  /* 月历：7 列保留但更紧凑，强制均分防止内容撑大溢出 */

  .month-grid{ display:grid; grid-template-columns:repeat(7, minmax(0,1fr)); gap:3px; }

  .mg-cell{ min-height:70px; font-size:10px; padding:3px 4px; overflow:hidden; } /* 62→70：为底部五色圆点簇留出一行高度 */

  .mg-cell .mg-date{ font-size:11px; }

  .mg-bk{ font-size:9px; }

  /* split 徽标在移动端窄列中紧凑化，避免右侧数字被截断 */
  .mg-badge.mg-badge--split .mg-num{ font-size:9px; padding:1px 4px; }

  /* 「约N / 空N」改为上下堆叠，避免并排撑宽列（2026-09-02 修复手机端月历右侧溢出） */

  .bk-month .mg-booked, .bk-month .mg-free{ display:block; margin:3px 0 0; margin-right:0; }



  /* ===== 工单表 ≤768px 卡片化（桌面宽表隐藏） ===== */

  .tk-desktop{ display:none; }

  .tk-mobile{ display:block; }

  .tk-card{ border:1px solid var(--line); border-radius:14px; background:#fff; padding:13px; margin-bottom:11px; box-shadow:var(--shadow-sm,0 1px 2px rgb(0 0 0 /.05)); }

  .tk-top{ display:flex; justify-content:space-between; align-items:center; margin-bottom:9px; }

  .tk-type{ font-weight:700; font-size:14.5px; color:var(--primary,#c850c0); }

  .tk-row{ display:flex; gap:8px; padding:3px 0; font-size:13px; line-height:1.5; }

  .tk-k{ color:var(--muted,#888); min-width:40px; flex-shrink:0; }

  .tk-v{ flex:1; min-width:0; word-break:break-word; }

  .tk-ops{ margin-top:10px; display:flex; flex-wrap:wrap; gap:7px; }

  .tk-ops .btn{ flex:1; min-width:88px; margin:0; }

  /* 月历移动端大触控 + 点日看详情 */

  .mg-cell{ position:relative; min-height:72px; } /* 64→72：同上，容纳圆点簇 */

  .mg-cell.mg-tap{ cursor:pointer; transition:transform .12s ease, box-shadow .12s ease; }

  .mg-cell.mg-tap:active{ transform:scale(.96); box-shadow:0 0 0 2px rgba(200,80,192,.32); }

  /* 2026-09-14 修复手机端红点与紫点重合：.mg-badge 从日期行右上角下移到日期行下方，
     避免与 .refund-badge（退约红点，仍在日期行右侧）重叠。 */
  .mg-badge{ position:absolute; top:18px; right:3px; background:var(--primary,#c850c0); color:#fff; font-size:10px; font-weight:700; border-radius:999px; padding:1px 6px; line-height:1.5; }

  .mg-badge.ok{ background:var(--green); }

  .mg-hint{ font-size:10px; color:var(--muted,#888); margin-top:3px; }



  /* 表格：字号略缩，横向滚动由外层 .tbl-scroll 提供 */

  .tbl{ font-size:12px; }

  .tbl th,.tbl td{ padding:6px 7px; white-space:nowrap; }



  /* 课表：略缩并提升触控高度，靠 .sched-wrap 横向滚动 */

  table.sched{ font-size:11px; }

  .sched th{ min-width:78px; padding:5px 2px; }

  .sched th.time-col{ min-width:52px; }

  .sched td{ height:36px; padding:1px 2px; }

  .sched td.time-cell{ min-width:52px; }



  /* 冻结窗格（移动端）：时段列(左) + 表头行(上) 固定，仅内容区滚动。

     改用纯 CSS position:sticky（配合 base 的 border-collapse:separate + 单元格 overflow:hidden + 不透明时段列背景），

     在 iOS Safari 上稳定可靠；文字被锁死在各自格内，不再溢进时间栏、行列不错位。

     （旧方案用 JS transform 平移补偿，在 iOS 上脆弱易致溢出/错位，已弃用，见 home.js WB._freezeSched） */

  .sched th{ position:sticky; top:0; z-index:4; }

  .sched th.time-col{ position:sticky; left:0; top:0; z-index:6; background:#f6effb; }

  .sched td.time-cell{ position:sticky; left:0; z-index:4; background:#f9fafd; }

  .sched th.today-col{ z-index:5; }

  .sched .cell-note{ max-width:72px; }



  /* 按钮：移动端更大的点击区 */

  .btn{ padding:10px 15px; font-size:14px; }

  .btn-sm{ padding:8px 12px; font-size:12.5px; }

  .quick-bar,.filter-bar{ gap:8px; }

  .quick-bar input[type=text],.filter-bar select,.filter-bar input{ font-size:13px; padding:9px 10px; }

  /* 固定位操作条：移动端明细与按钮上下堆叠，明细在上占满宽度，按钮在下居右 */
  .fx-op-bar{ flex-direction:column; align-items:stretch; gap:6px; }
  .fx-op-main{ order:2; margin-left:0; justify-content:flex-end; width:100%; }
  .fx-op-details{ order:1; width:100%; font-size:11px; gap:4px; }
  .fx-op-row{ flex-wrap:wrap; }
  .fx-op-row .fx-op-times{ white-space:normal; word-break:break-all; }
  .fx-op-times{ max-width:100%; }

  /* 业务流水 + 个人流水筛选栏：移动端两列紧凑，去掉额外外框（保留每个下拉自身药丸边框） */
  .mf-filter-bar,.myf-filter-bar{ display:grid; grid-template-columns:repeat(auto-fit,minmax(0,1fr)); gap:8px; margin-bottom:12px; }
  .mf-filter-bar select,.mf-filter-bar input,.myf-filter-bar select{ width:100%; min-width:0; max-width:none; padding:3px 10px; border:1px solid #e5e3ef; border-radius:12px; background:#faf9fd; font-size:11.5px; color:var(--text); }
  .mf-filter-bar select,.myf-filter-bar select{ appearance:none; -webkit-appearance:none; background:#faf9fd url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238b8799' stroke-width='2.5'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 9px center; padding-right:26px; }

  /* 状态筛选芯片：业务流水默认两行，每行3个等宽，完整显示 */
  .mc-pills{ display:grid; grid-template-columns:repeat(3,1fr); gap:6px; }
  .st.mc-pill{ width:100%; text-align:center; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; padding:2px 6px; border-radius:12px; font-size:11px; }

  /* 个人流水状态芯片：保持单行（用户单独确认） */
  .my-pills.mc-pills{ display:flex; flex-wrap:nowrap; gap:3px; }
  .my-pills .st.mc-pill{ flex:1 1 auto; min-width:0; padding:1px 3px; font-size:10px; }

  /* 业务流水状态芯片：同样保持单行、宽度自适应（2026-09-21 用户确认，参考个人流水 my-pills） */
  .mf-st-pills.mc-pills{ display:flex; flex-wrap:nowrap; gap:3px; }
  .mf-st-pills .st.mc-pill{ flex:1 1 auto; min-width:0; padding:1px 3px; font-size:10px; }

  /* 业务流水：类型/演员与申请人分两行，申请人独占一行 */
  .mf-filter-bar.mf-filter-bar{ grid-template-columns:1fr 1fr; }
  .mf-filter-bar.mf-filter-bar input{ grid-column:1 / -1; }
  /* 转约移约 Tab：演员+申请人同行（演员窄/申请人宽），类型药丸移到下方单行（2026-09-21 用户确认） */
  .mf-filter-bar.mf-tm-bar{ grid-template-columns:auto 1fr; }
  .mf-filter-bar.mf-tm-bar select,.mf-filter-bar.mf-tm-bar input{ width:auto; max-width:none; }
  .mf-filter-bar.mf-tm-bar input{ grid-column:auto; }
  .mf-tm-pills.mc-pills{ display:flex; flex-wrap:nowrap; gap:3px; }
  .mf-tm-pills .st.mc-pill{ flex:1 1 auto; min-width:0; padding:1px 3px; font-size:10px; }

  /* 工单卡 band（类型·演员·日期·节数·审核员）：移动端压缩字号与间距，
     确保「节数」与后方「审核员」同排一行显示（2026-09-21 用户确认） */
  .tk-band{ font-size:11px; gap:4px 8px; padding:8px 10px; }
  .tk-band .b-type{ font-size:11.5px; }

  /* 下拉与切换：触控友好 */

  .actor-switch select{ max-width:none; font-size:13px; }



  /* KPI 看板：两列网格 */

  .kpis{ gap:8px; }

  .kpi{ min-width:calc(50% - 8px); }



  /* Toast 手机端：顶部居中玻璃胶囊（位置2：悬顶栏上、不盖内容；避让刘海用 env(safe-area-inset-top)） */

  .toast{ top:calc(env(safe-area-inset-top,0px) + 8px); left:50%; right:auto; max-width:calc(100vw - 24px); font-size:12.5px; padding:6px 32px 6px 14px; }



  /* 登录页：输入框放大避免 iOS 自动缩放 */

  .login-card{ padding:28px 22px; }

  .login-card h1{ font-size:21px; }

  .login-form input{ padding:12px 13px; font-size:16px; }

  .login-form label{ margin:14px 0 6px; }

  .login-topbar{ padding:12px 14px; }

  .login-brand{ display:none; }



  /* 弹窗内表单元素放大 */

  .modal-body select,.modal-body input,.modal-body textarea{ font-size:15px; }

}



/* ===== 学员管理 · 批量设置可见演员 ===== */

.batch-card{ margin:14px 0; padding:14px 16px; border:1px solid var(--accent);

  border-radius:12px; background:linear-gradient(180deg,#f6effb,#efe0fa); }

.batch-head{ display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:8px;

  font-weight:600; font-size:15px; }

.batch-stat{ font-weight:500; font-size:13px; color:#8a6f66; }

.batch-stat b{ color:var(--accent); }

.actor-pills{ display:flex; flex-wrap:wrap; gap:8px; margin:10px 0; }

.chk-pill{ display:inline-flex; align-items:center; gap:6px; padding:6px 11px; border:1px solid var(--line);

  border-radius:20px; background:#fff; cursor:pointer; font-size:13px; user-select:none; transition:.15s; }

.chk-pill input{ width:15px; height:15px; accent-color:var(--accent); }

.chk-pill.on{ border-color:var(--accent); background:var(--hover-soft); color:#e8590c; font-weight:600; }

.batch-actions{ display:flex; flex-wrap:wrap; gap:8px; }

tr.sel-row{ background:var(--hover-soft); }

@media (max-width:768px){

  .batch-head{ flex-direction:column; align-items:flex-start; }

  .actor-pills{ gap:6px; }

  .chk-pill{ font-size:12px; padding:5px 9px; }

  .batch-actions .btn{ flex:1 1 auto; }

}



/* ===== 业务流水记录表 · 按工单分组 + 下拉状态历史 ===== */

.flows-tbl .flow-main{ cursor:pointer; transition:background .12s; }

.flows-tbl .flow-main:hover{ background:var(--hover-soft); }

.flows-tbl .flow-grp.open .flow-main{ background:var(--hover-soft); }

.flows-tbl .flow-caret{ text-align:center; width:36px; color:var(--accent); font-size:12px; }

.flows-tbl .flow-detail td{ background:#fff8f4; padding:0; }

.flow-hist{ padding:12px 16px 14px; }

.flow-hist-title{ font-size:12.5px; color:#667; margin-bottom:8px; font-weight:600; }

.flow-sub{ font-size:12.5px; }

.flow-sub th,.flow-sub td{ padding:6px 8px; }

.flow-sub .st{ font-size:12px; padding:2px 7px; }

.flow-hist .empty{ font-size:12px; color:#98a; padding:6px 0; }



/* ===== 业务受理收据条（约课/固定课排位后小票） ===== */

.receipt{ max-width:460px; margin:0 auto; background:#fffdf3; border:1px solid #e8ddc0; border-radius:10px;

  padding:16px 18px; font-family:"Courier New",Consolas,monospace; box-shadow:0 6px 24px rgba(0,0,0,.08); }

.receipt-head{ text-align:center; font-size:17px; font-weight:700; letter-spacing:2px; color:#7a5b1e;

  padding-bottom:10px; border-bottom:2px dashed #d9c9a0; margin-bottom:10px; }

.receipt-row{ display:flex; justify-content:space-between; gap:12px; padding:5px 0; font-size:13.5px;

  border-bottom:1px dashed #efe6cf; }

.receipt-row>span{ color:#8a7a52; white-space:nowrap; }

.receipt-row>b{ color:#3a331f; text-align:right; }

.receipt-slots{ align-items:flex-start; }

.receipt-slots>div{ line-height:1.45; }

.receipt-foot{ margin-top:12px; padding-top:8px; border-top:2px dashed #d9c9a0; text-align:center;

  font-size:11.5px; color:#a08f64; }


/* ===== 固定位周模板：先选后存（学员锁定） ===== */

td.fx-sel{ background:#8fa8ff; color:#fff; text-align:center; cursor:pointer; font-size:12px; font-weight:600; }

td.fx-locked{ background:#e8e8ec; color:#888780; text-align:center; font-size:12px; cursor:not-allowed; }

td.fx-sel:hover, td.fx-locked:hover{ filter:brightness(.95); }

/* 固定表格子冲突预警：该周几时段在目标月已被演员/学员占用，排位时可能被跳过 */
td.free.fx-conflict{ box-shadow:inset 0 0 0 2px #e0353f; background:#fff0f0; }
td.free.fx-conflict:hover{ background:#ffe3e3; }
.fx-warn{ display:inline-block; font-size:9px; color:#e0353f; font-weight:700; margin-left:2px; }



/* ===== 实时排位表：全年视图 ===== */

.fx-year-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; }

.fx-year-month{ border:1px solid var(--line); border-radius:10px; padding:8px; cursor:pointer; transition:.15s; background:rgba(255,255,255,0.6); backdrop-filter:blur(10px); }

.fx-year-month:hover{ border-color:var(--accent); box-shadow:0 3px 12px rgba(168,85,247,.18); }

.fx-year-title{ font-weight:700; font-size:13px; margin-bottom:6px; display:flex; justify-content:space-between; }

.fx-year-cnt{ font-size:11px; color:#fff; background:var(--accent); border-radius:10px; padding:0 6px; }

.fx-year-days{ display:grid; grid-template-columns:repeat(7,1fr); gap:2px; }

.fx-yd{ aspect-ratio:1; border-radius:3px; background:#efe8f3; font-size:9px; }

.fx-yd.has{ box-shadow:inset 0 0 0 1px rgba(0,0,0,.12); }

@media (max-width:768px){ .fx-year-grid{ grid-template-columns:repeat(2,1fr); } }



/* ===== P0-1 消息中心铃铛 ===== */

.notice-badge{ position:absolute; top:-4px; right:-6px; min-width:16px; height:16px; border-radius:9px;

  background:#e0392b; color:#fff; font-size:10px; line-height:16px; text-align:center; padding:0 3px; font-weight:700; }

#btn-notice{ position:relative; }

/* ===== P0-1b 消息中心列表（2026-08-08 BUG-1 修复：未读高亮/点击已读/已读折叠） ===== */

.nc-list{ display:flex; flex-direction:column; gap:6px; }

.nc-item{ border:0.5px solid var(--line); border-radius:8px; padding:8px 12px; cursor:pointer; transition:background .12s; background:var(--card-solid); }

.nc-item:hover{ background:rgba(168,85,247,0.06); }

.nc-item--unread{ border-color:#4f8cff; border-left:3px solid #4f8cff; background:#eef4ff; }

.nc-item--unread:hover{ background:#e3edff; }

.nc-item-head{ display:flex; justify-content:space-between; align-items:center; gap:8px; font-size:13px; color:var(--text); }

.nc-item--unread .nc-item-head b{ color:#185FA5; }

.nc-item-time{ white-space:nowrap; font-size:11px; color:var(--muted); }

.nc-item-dot{ margin-top:4px; font-size:11px; color:#4f8cff; }

.nc-item-hint{ margin-top:4px; font-size:11px; color:var(--muted); }

.nc-item-body{ margin-top:6px; font-size:13px; color:var(--text); background:var(--card-solid); border:0.5px solid var(--line); border-radius:6px; padding:6px 10px; white-space:pre-wrap; word-break:break-word; }

/* 2026-09-17 结构化通知富卡片：图标 + 大标题 + 明细框（标签值 / 箭头行）+ 流水指引 */
.nc-rich{ display:flex; margin:-8px -12px; border-radius:8px; overflow:hidden; }
.nc-rich-bar{ flex:0 0 4px; }
.nc-rich-main{ flex:1; min-width:0; padding:8px 12px; }
.nc-rich-head{ display:flex; align-items:flex-start; gap:10px; }
.nc-rich-ic{ flex:0 0 32px; width:32px; height:32px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:16px; font-weight:700; line-height:1; }
.nc-rich-titles{ flex:1; min-width:0; padding-top:1px; }
.nc-rich-title{ display:block; font-size:14px; font-weight:600; color:var(--text); line-height:1.3; }
.nc-rich-time{ display:block; font-size:11px; color:var(--muted); margin-top:2px; }
.nc-rich-detail{ margin-top:8px; background:rgba(140,140,140,0.10); border:0.5px solid var(--line); border-radius:6px; padding:6px 10px; }
.nc-rich-row{ display:flex; gap:8px; font-size:13px; line-height:1.5; padding:1px 0; }
.nc-rich-label{ flex:0 0 60px; color:var(--muted); }
.nc-rich-val{ flex:1; min-width:0; color:var(--text); word-break:break-word; white-space:pre-line; }
.nc-rich-arrow{ align-items:center; gap:6px; }
/* #43 待办汇总富卡片：演员行 + 分类计数 chips（2026-09-19 落码，配色按 9/17 拍板图例） */
.nc-rich-actor{ font-size:13px; font-weight:600; color:var(--text); line-height:1.4; padding-top:1px; }
.nc-rich-kinds{ display:flex; flex-wrap:wrap; gap:4px; margin-top:4px; }
.k-chip{ display:inline-block; padding:4px 11px; border-radius:999px; font-size:12px; font-weight:500; line-height:1.5; white-space:nowrap; }
.tm-chip{ display:inline-block; padding:1px 8px; border-radius:999px; background:#EEEDFE; color:#3C3489; font-size:11px; font-weight:500; line-height:1.6; margin:2px 6px 2px 0; white-space:nowrap; }
/* 2026-09-20 退约卡：时段按日期分组（同学员同日期合并，日期下平铺时段，无 ×N 幻觉） */
.tm-date{ display:flex; flex-wrap:wrap; align-items:center; gap:2px; margin:3px 0; }
.tm-d{ display:inline-block; flex:0 0 auto; font-size:11px; font-weight:600; color:#993556; background:#FCEEF0; border-radius:4px; padding:1px 6px; margin-right:6px; }
.ac-gate-tip{ font-size:11px; color:#993556; margin-left:auto; }
.ac-gate-tip[style*="none"]{ display:none; }
.nc-ra-from{ color:var(--muted); }
.nc-ra-ar{ color:#10b981; font-weight:700; }
.nc-ra-to{ color:var(--text); font-weight:600; }
.nc-rich-foot{ margin-top:8px; font-size:11px; color:var(--muted); }
/* 2026-09-21 固定位排位进度卡：三步进度条（受理/定稿/审核员确认），紫=固定位主题色 #534AB7 */
.nc-rich-steps{ display:flex; align-items:center; gap:5px; padding:5px 0 4px; flex-wrap:wrap; }
.nc-step{ display:inline-flex; align-items:center; gap:4px; }
.nc-step-dot{ width:17px; height:17px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; font-size:10px; line-height:1; background:#fff; border:1px solid var(--line); color:var(--muted); flex:0 0 auto; }
.nc-step-dot.done{ background:#534AB7; border-color:#534AB7; color:#fff; }
.nc-step-t{ font-size:11px; color:var(--muted); white-space:nowrap; }
.nc-step-t.done{ color:#3C3489; font-weight:500; }
.nc-step-line{ width:16px; height:1px; background:var(--line); flex:0 0 auto; }
.nc-step-line.done{ background:#AFA9EC; }
/* 2026-09-22 退约进度卡：驳回(✕红) / 当前(空心色圈) 状态节点 + 驳回原因红标 + 列表全局页脚 */
.nc-step-dot.current{ background:#fff; border:2px solid #9aa3b5; color:#9aa3b5; }
.nc-step-dot.reject{ background:#A32D2D; border-color:#A32D2D; color:#fff; }
.nc-step-t.reject{ color:#A32D2D; font-weight:600; }
.nc-step-line.reject{ background:#A32D2D; }
.nc-rich-row-danger .nc-rich-label, .nc-rich-row-danger .nc-rich-val{ color:#A32D2D; }
.nc-global-foot{ margin-top:10px; padding-top:8px; border-top:1px solid var(--line); font-size:11px; color:var(--muted); text-align:center; }

@media(max-width:768px){
  .nc-rich-ic{ flex-basis:26px; width:26px; height:26px; font-size:14px; }
  .nc-rich-title{ font-size:13px; }
  .nc-rich-label{ flex-basis:56px; }
}



/* ===== P0-4 数据看板 ===== */

.dash-sec{ margin:14px 0; }

.dash-title{ font-weight:700; margin-bottom:8px; font-size:14px; }

.dash-bar{ display:flex; align-items:center; gap:8px; margin:4px 0; font-size:12.5px; }

.dash-bar-label{ width:130px; text-align:right; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:#445; }

.dash-bar-track{ flex:1; height:18px; background:#efe8f3; border-radius:9px; overflow:hidden; }

.dash-bar-fill{ height:100%; border-radius:9px; transition:width .4s; }

.dash-bar-val{ width:44px; text-align:left; color:#334; }

@media (max-width:768px){ .dash-bar-label{ width:80px; font-size:11px; } }

/* 运营看板 · 方案 A：经典 KPI + 双表并排（列对齐，避免串字乱行） */
.dash-two{ display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-top:2px; }
.dash-tbl{ border:1px solid var(--glass-border); border-radius:14px; padding:12px 12px 6px; background:rgba(255,255,255,0.55); }
.dash-tbl-title{ font-weight:700; font-size:13.5px; margin-bottom:8px; display:flex; align-items:center; gap:6px; }
.dash-table{ width:100%; border-collapse:collapse; font-size:13px; }
.dash-table th{ text-align:left; font-size:11.5px; font-weight:600; color:var(--muted); padding:6px 8px; border-bottom:1px solid var(--line); white-space:nowrap; }
.dash-table td{ padding:7px 8px; border-bottom:1px solid #f1eef4; color:#3a2e3c; vertical-align:middle; }
.dash-table tr:last-child td{ border-bottom:none; }
.dash-table td.nm{ max-width:120px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dash-table td.num{ text-align:right; font-weight:700; font-variant-numeric:tabular-nums; }
.dash-table td.rk{ width:30px; text-align:center; color:var(--muted); font-weight:600; }
.dash-table td.rate{ white-space:nowrap; width:46%; }
.rate-bar{ display:inline-block; height:9px; border-radius:5px; vertical-align:middle; margin-right:7px; max-width:130px; min-width:14px; }
.rate-pct{ font-size:11px; color:var(--muted); vertical-align:middle; }
@media (max-width:680px){ .dash-two{ grid-template-columns:1fr; } }



/* ===== P1-8 移动端底部导航（大屏隐藏） ===== */

.mobile-nav{ display:none; }

@media (max-width:768px){

  .mobile-nav{ display:flex; position:fixed; left:0; right:0; bottom:0; z-index:120;

    background:#fff; border-top:1px solid var(--line); padding:6px 12px calc(6px + env(safe-area-inset-bottom));

    box-shadow:0 -4px 18px rgba(20,30,80,.08); }

  .mnav-tab{ flex:1; text-align:center; cursor:pointer; padding:4px 2px; color:var(--muted); user-select:none; }

  .mnav-tab.active{ color:var(--primary); }

  .mnav-ico{ font-size:19px; line-height:1.2; position:relative; }

  .mnav-badge{ position:absolute; top:-4px; left:55%; min-width:15px; height:15px; border-radius:8px;

    background:var(--danger,#e0392b); color:#fff; font-size:9px; line-height:15px; text-align:center; padding:0 3px; }

  .mnav-label{ font-size:10px; margin-top:1px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

  /* 底部导航占位：避免内容被遮挡 */

  .page{ padding-bottom:70px; }
  .site-foot{ padding-bottom:calc(64px + env(safe-area-inset-bottom)); } /* 备案号避开移动端固定底栏 */

  /* 顶部横向导航在移动端让位于底部导航（保留可横向滑动访问全部tab） */

  .nav{ display:none; } /* 方案A：移动端隐藏与底部Tab重复的吸顶横向导航，底部5 Tab + 更多抽屉为唯一导航 */

  /* 表单弹窗移动端全屏化：模态框铺满视口、仅 .modal-body 内部滚动，遮罩固定不滚动，避免滚动到底露出首页 */
  .modal-backdrop{ padding:0; align-items:stretch; overflow:hidden; }

  .modal{ width:100vw; max-width:100vw; height:100vh; height:100dvh; min-height:0; border-radius:0; box-shadow:none; display:flex; flex-direction:column; }

  .modal.wide{ width:100vw; }

  .modal-head{ flex:none; position:sticky; top:0; background:#fff; z-index:2; }

  .modal-body{ flex:1 1 auto; max-height:none; overflow-y:auto; -webkit-overflow-scrolling:touch; padding-bottom:28px; }

}



/* ===== 预约·视图先选后存（专属演员时段视图点选锁定） ===== */

td.bk-sel{ background:linear-gradient(135deg,#a855f7,#ec4899); color:#fff; text-align:center; cursor:pointer; font-weight:600; }

td.bk-sel:hover{ filter:brightness(.95); }

td.bk-sel .cell-note{ color:#fff; }



/* ===== P1-9 移动端日程表/表格可视性增强 ===== */

@media (max-width:768px){

  /* 所有表格容器：惯性滚动，横向不跳顿 */

  .tbl-scroll,.sched-wrap,.flows-tbl,.fx-year-grid,.batch-card{ -webkit-overflow-scrolling:touch; overscroll-behavior-x:contain; }

  /* 日程表（周视图/周模板）：压缩列宽，单屏可见更多列 */

  .sched th{ min-width:62px; padding:4px 2px; }

  .sched th.time-col,.sched td.time-cell{ min-width:46px; }

  .sched td{ height:34px; padding:1px 2px; }

  .sched .cell-note{ max-width:54px; font-size:9px; transform:scale(.9); }

  .sched .cell-badge{ font-size:8px; padding:0 3px; }

  /* 月历日程表（sched-cal）：收窄 min-width，保持横向滚动可查看全部 */

  .sched-cal{ min-width:520px; }

  .sched-cal td{ height:56px; padding:4px; font-size:10px; }

  /* 通用表格：内容自动换行防溢出（避免 nowrap 撑破容器/显示错乱） */

  .tbl{ font-size:11.5px; }

  .tbl th,.tbl td{ padding:5px 4px; white-space:normal; word-break:break-word; }

  .tbl .st,.tbl .btn,.tbl input[type=checkbox]{ white-space:nowrap; }

  /* 演员统计页周期汇总表：表头/单元格不换行，字号略缩，由外层 tbl-scroll 横向滚动 */
  .as-summary .tbl th,.as-summary .tbl td{ white-space:nowrap; word-break:normal; }
  .as-summary .tbl{ font-size:11px; }

  /* 工单表（待办工单/待确认/已预约未核实）等多列表格：保持合理列宽→横向左右滑动查看全部栏目，

     杜绝窄列挤压导致中文逐字竖排；收紧留白让一屏展示更多工单 */

  .tk-tbl{ min-width:920px; }

  .tk-tbl th{ white-space:nowrap; }

  .tk-tbl th,.tk-tbl td{ padding:4px 6px; font-size:11px; }

  .tk-tbl td{ vertical-align:middle; }

  /* 移动端表格容器改为整页滚动（不再表内限高），一屏查看更多行 */

  .tbl-scroll{ max-height:none; overflow-x:auto; border-radius:0; }   /* 横向滚动时由 table 自身圆角负责，避免双层边 */

  /* 卡片内文本与收据 */

  .receipt{ padding:12px; }

  .receipt-row{ font-size:12px; }

  .receipt-row>span{ white-space:nowrap; }

  .card-title .sub{ font-size:11px; }

}

/* ===== 方案B：≤768px 固定表/周表 7 列紧凑首屏全显（不横滑） ===== */
@media (max-width:768px){
  /* 周模板/周视图 .sched：table-layout:fixed 让 7 天列均分容器宽度，整屏看全周一到周日 */
  .sched-wrap{ overflow:hidden; max-height:none; }   /* 取消限高与横滑，纵向随页面滚动 */
  table.sched{ table-layout:fixed; width:100%; border-spacing:2px; font-size:9.5px; }
  .sched th{ min-width:0; padding:4px 1px; font-size:10px; }
  .sched th.time-col{ min-width:34px; width:34px; }
  .sched td{ height:30px; padding:1px; }
  .sched td.time-cell{ min-width:34px; width:34px; font-size:9px; }
  /* 单元格内长文案（如「我·普通·起始2026-09」）截断为极短标签；完整明细在 title（桌面悬停）与上方「待提交改动」面板（移动端） */
  .sched .cell-note{ max-width:100%; font-size:8px; transform:scale(.92); line-height:1.1;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .sched .cell-badge{ font-size:7px; padding:0 2px; margin-top:1px; }
  /* 我的固定位/他人占用：纯色块即可表达状态，行内只留极短标识 */
  .sched td.tpl-mine, .sched td.tpl-other{ font-weight:600; }
  .sched td.fx-sel .cell-note{ color:#fff; }
}

/* 演员退约一审 · 按学员细分块（排法B：学员优先） */

.tk-block{ margin-bottom:14px; }

.tk-band{ display:flex; flex-wrap:wrap; align-items:center; gap:6px 14px;

  background:linear-gradient(135deg,rgba(168,85,247,.10),rgba(236,72,153,.10));

  border:1px solid rgba(200,80,192,.25); border-radius:12px; padding:9px 13px; margin-bottom:8px; font-size:13px; }

.tk-band .b-type{ font-weight:700; color:#c850c0; }

.tk-band .b-actor{ font-weight:700; color:#3a2a45; }

.tk-band .b-k{ color:#9a7aa6; margin-right:2px; }

.tk-band .b-v{ font-weight:600; color:#3a2a45; }

.tk-band .b-reason{ color:#9c1f7a; font-weight:700; }

.tk-band .b-ops{ margin-left:auto; display:flex; gap:6px; }

.tk-stu-card{ background:#fff; border:1px solid #f0e0f5; border-radius:12px; padding:11px 13px; margin-bottom:9px; }

.tk-block .tk-tbl{ min-width:auto; }

.tk-block .tk-tbl th,.tk-block .tk-tbl td{ padding:7px 10px; font-size:12px; }

/* 分组卡强调色：预约一审=蓝 / 转约移约=紫 / 退约=红 */
.tk-block--blue{ border-left:4px solid var(--blue); padding-left:10px; }
.tk-block--blue .tk-band{ background:linear-gradient(135deg,rgba(24,95,165,.10),rgba(99,160,235,.10)); border-color:rgba(24,95,165,.30); }
.tk-block--blue .tk-band .b-type{ color:var(--blue); }
.tk-block--blue .tk-stu-card{ border-color:#dcebfb; }

.tk-block--purple{ border-left:4px solid #534AB7; padding-left:10px; }
.tk-block--purple .tk-band{ background:linear-gradient(135deg,rgba(83,74,183,.10),rgba(124,116,225,.10)); border-color:rgba(83,74,183,.30); }
.tk-block--purple .tk-band .b-type{ color:#534AB7; }
.tk-block--purple .tk-stu-card{ border-color:#e7e2fb; }

.tk-block--red{ border-left:4px solid #c81e37; padding-left:10px; }
.tk-block--red .tk-band{ background:linear-gradient(135deg,rgba(200,30,55,.10),rgba(235,90,110,.10)); border-color:rgba(200,30,55,.30); }
.tk-block--red .tk-band .b-type{ color:#c81e37; }
.tk-block--red .tk-stu-card{ border-color:#fbe0e4; }

/* 转约=蓝（2026-08-07 收敛：原品红 C026D3 并入品牌蓝，类名 magenta 保留历史兼容） */
.tk-block--magenta{ border-left:4px solid var(--blue); padding-left:10px; }
.tk-block--magenta .tk-band{ background:linear-gradient(135deg,rgba(24,95,165,.10),rgba(99,160,235,.10)); border-color:rgba(24,95,165,.30); }
.tk-block--magenta .tk-band .b-type{ color:var(--blue); }
.tk-block--magenta .tk-stu-card{ border-color:#dcebfb; }

.tk-block .tk-tbl tr.tk-grp td{ background:#faf5fc; font-weight:700; color:#5a3a66; font-size:12px; border-top:1px solid #ecdff2; padding-top:6px; padding-bottom:6px; }
.tk-block--blue .tk-tbl tr.tk-grp td{ background:#f1f6fd; color:#1d4e84; border-color:#dcebfb; }
.tk-block--purple .tk-tbl tr.tk-grp td{ background:#f4f2fd; color:#3f3789; border-color:#e7e2fb; }
.tk-block--red .tk-tbl tr.tk-grp td{ background:#fdf1f3; color:#9c2335; border-color:#fbe0e4; }
.tk-block--magenta .tk-tbl tr.tk-grp td{ background:#fdeefb; color:#1d4e84; border-color:#dcebfb; }
.tk-stu{ font-size:12px; font-weight:700; color:#5a3a66; margin-bottom:6px; padding-bottom:4px; border-bottom:1px dashed #ecdff2; }
.tk-block--blue .tk-stu{ color:#1d4e84; border-color:#dcebfb; }
.tk-block--purple .tk-stu{ color:#3f3789; border-color:#e7e2fb; }
.tk-block--red .tk-stu{ color:#9c2335; border-color:#fbe0e4; }
.tk-block--magenta .tk-stu{ color:#1d4e84; border-color:#dcebfb; }

/* ===== 演员取消批卡 + 学员勾选（版1+勾选） ===== */
.ac-tbl th:nth-child(1), .ac-tbl td.ac-cb{ width:34px; text-align:center; }
.ac-tbl td.ac-cb input{ width:16px; height:16px; cursor:pointer; }
.ac-foot{ display:flex; align-items:center; gap:12px; padding:9px 12px; border-top:1px solid #f1d7dc; background:#fff6f7; border-radius:0 0 10px 10px; flex-wrap:wrap; }
.ac-selall{ display:inline-flex; align-items:center; gap:5px; font-size:13px; color:#5a2230; cursor:pointer; user-select:none; }
.ac-selall input{ width:15px; height:15px; cursor:pointer; }
.ac-cnt{ font-size:13px; color:#9c2335; font-weight:600; }
.ac-foot .btn{ margin-left:auto; }
/* 2026-09-20 批量退约(bcancel)：确认/驳回按钮从头部 band 沉到卡片底部右下方，与全选条分隔 */
.tk-ops-bot{ display:flex; gap:6px; margin-left:auto; }
.ac-foot--bc{ justify-content:space-between; }
.ac-foot--bc .ac-gate-tip{ margin-left:0; }
.ac-foot--bc .tk-ops-bot{ flex:0 0 auto; }
.ac-mrow{ display:flex; align-items:center; gap:10px; padding:11px 12px; border-top:1px solid #f6e3e7; }
.ac-mrow:first-of-type{ border-top:none; }
.ac-mrow input{ width:18px; height:18px; flex:0 0 auto; cursor:pointer; }
.ac-m-main{ display:flex; flex-direction:column; line-height:1.35; }
.ac-m-stu{ font-size:14px; font-weight:600; color:#333; }
.ac-m-meta{ font-size:12px; color:#9c2335; }
@media (max-width:560px){
  .ac-foot{ gap:8px; padding:8px 10px; }
  .ac-cnt{ font-size:12px; }
  .ac-mrow{ padding:10px; }
}

/* ===== 授权管理账号标签：自适应换行排布（防横向溢出） ===== */

.grant-tags{ display:flex; flex-wrap:wrap; gap:5px; align-items:center; }

.grant-tags .st{ margin:0; }



/* ===== 演员管理总表（act-tbl）：移动端保列宽横向滑动 + 压缩行高 ===== */

@media (max-width:768px){

  .act-tbl{ min-width:860px; }

  .act-tbl th{ white-space:nowrap; }

  .act-tbl th,.act-tbl td{ padding:4px 6px; font-size:11px; }

  .act-tbl td{ vertical-align:middle; }

  .act-tbl td:first-child{ min-width:64px; text-align:center; }

  .act-tbl .btn{ white-space:nowrap; }

}



/* ===== 多列表格移动端统一适配（保列宽横向滑动 + 压缩行高） ===== */

@media (max-width:768px){

  .ab-tbl{ min-width:760px; }   /* 演员预约统计·明细 */

  .flow-tbl{ min-width:820px; } /* 流水记录 */

  .st-tbl{ min-width:840px; }   /* 数据表·学员 */

  .bt-tbl{ min-width:880px; }   /* 批量退约确认 */

  .acc-tbl{ min-width:1160px; } /* 账户管理（12列） */

  .ab-tbl th,.flow-tbl th,.st-tbl th,.bt-tbl th,.acc-tbl th{ white-space:nowrap; }

  .ab-tbl th,.ab-tbl td,.flow-tbl th,.flow-tbl td,

  .st-tbl th,.st-tbl td,.bt-tbl th,.bt-tbl td,.acc-tbl th,.acc-tbl td{ padding:4px 6px; font-size:11px; }

  .ab-tbl td,.flow-tbl td,.st-tbl td,.bt-tbl td,.acc-tbl td{ vertical-align:middle; }

  .ab-tbl .btn,.flow-tbl .btn,.st-tbl .btn,.bt-tbl .btn,.acc-tbl .btn{ white-space:nowrap; }

}



/* ===== 角色权限管理表（rl-tbl）：移动端保列宽横向滑动 + 压缩行高 + 授权标签紧凑换行 ===== */

@media (max-width:768px){

  .rl-tbl{ min-width:640px; } /* 两列：演员列+授权账号列，保列宽→chips 区一行更多标签，横向滑动看全 */

  .rl-tbl th{ white-space:nowrap; }

  .rl-tbl th,.rl-tbl td{ padding:4px 6px; font-size:11px; }

  .rl-tbl td{ vertical-align:middle; }

  .rl-tbl td:first-child{ white-space:nowrap; min-width:130px; } /* 头像+演员名不拆行 */

  .rl-tbl .grant-tags{ gap:4px; }

  .rl-tbl .grant-tags .st{ font-size:10px; padding:2px 6px; line-height:1.5; } /* 标签更紧凑→行高更矮，一屏更多演员 */

  .rl-tbl .grant-tags .st a{ white-space:nowrap; }

}



/* ===== 路线 A：顶栏收纳 + 导航图标 + 首页仪表盘（纯视觉/结构，业务/数据/交互零改动） ===== */

/* 顶栏：用户芯片（头像+昵称+角色+同步灯） + 操作组（铃铛/切换/改密/退出） */

.user-chip{ display:flex; align-items:center; gap:8px; background:rgba(255,255,255,0.62); border:1px solid var(--glass-border); border-radius:14px; padding:4px 12px 4px 6px; }

.user-ava{ width:30px; height:30px; border-radius:50%; background:var(--grad-warm); color:#fff; font-weight:700; font-size:14px; display:flex; align-items:center; justify-content:center; flex-shrink:0; }

.user-meta{ display:flex; flex-direction:column; align-items:center; gap:1px; line-height:1.15; }

.user-meta .top-user{ font-size:13px; font-weight:600; }

.user-meta .role-badge{ padding:1px 8px; font-size:11px; }

.topbar-actions{ display:flex; align-items:center; gap:6px; }

.topbar-actions .btn{ white-space:nowrap; }

.icon-btn{ padding:6px 10px; border-radius:11px; }



/* 导航：加图标，与文字同行对齐 */

.nav-tab{ display:inline-flex; align-items:center; gap:7px; }

.nav-ico{ font-size:15px; line-height:1; }



/* 首页仪表盘：hero 问候条 + 双栏主区（左=专属演员时段视图，右=个人预约表） */

.dash-hero{ background:var(--grad-warm); border-radius:18px; padding:18px 24px; color:#fff; margin-bottom:18px; display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:12px; box-shadow:var(--glass-shadow); }

.dash-hero .dh-greet{ font-size:20px; font-weight:800; letter-spacing:.3px; }

.dash-hero .dh-sub{ font-size:13px; opacity:.92; margin-top:4px; }

.dash-hero .dh-date{ font-size:13px; opacity:.92; text-align:right; line-height:1.5; }

.home-grid{ display:grid; grid-template-columns:minmax(0,1fr); gap:18px; align-items:start; margin-bottom:18px; } /* 桌面与移动端统一：首页模块（专属演员时段视图 / 个人预约表）各占一行满宽堆叠，不再双栏并排 */

.home-grid > .card{ margin-bottom:0; }

@media (max-width:768px){

  .dash-hero{ padding:14px 16px; }

  .dash-hero .dh-greet{ font-size:17px; }

  .dash-hero .dh-date{ text-align:left; }

  .topbar-actions .btn{ padding:7px 10px; font-size:12px; }

}



/* ===== 迭代70：顶栏用户下拉菜单（通知/切换角色/改密/退出 收纳为一处） ===== */

summary.user-chip{ list-style:none; cursor:pointer; outline:none; }

summary.user-chip::-webkit-details-marker{ display:none; }

.user-menu-wrap{ position:relative; }

.user-ava-wrap{ position:relative; display:inline-flex; align-items:center; }

.user-chev{ font-size:11px; opacity:.65; transition:transform .2s; margin-left:2px; }

details.user-menu-wrap[open] .user-chev{ transform:rotate(180deg); }

.user-menu{ position:absolute; top:calc(100% + 8px); right:0; min-width:196px;

  background:rgba(255,255,255,0.92); backdrop-filter:blur(18px) saturate(160%); -webkit-backdrop-filter:blur(18px) saturate(160%);

  border:1px solid var(--glass-border); border-radius:14px; box-shadow:var(--glass-shadow); padding:6px; z-index:60; }

.user-menu-item{ display:flex; align-items:center; gap:9px; padding:9px 12px; border-radius:9px; cursor:pointer; font-size:13px; color:var(--text); transition:.12s; white-space:nowrap; }

.user-menu-item:hover{ background:rgba(168,85,247,0.10); color:var(--primary); }

.user-menu-item.user-menu-danger:hover{ background:rgba(233,79,95,0.10); color:var(--danger); }

.user-menu-divider{ height:1px; background:var(--line); margin:5px 8px; }

/* 未读角标挂到头像右上角（renderNoticeBadge 原样驱动，零改动） */

.user-ava-wrap .notice-badge{ top:-3px; right:-5px; }

@media (max-width:768px){

  .user-menu{ right:0; left:auto; min-width:176px; }

}



/* ===== 移动端：横向滚动表格/日历 —— 稳定渲染 + 顺滑滑动 + 位置保持 ===== */

/* 移动端横向滚动表格/日历 —— 稳定渲染 + 顺滑滑动 + 位置保持。

   说明：此前为规避 iOS Safari 在 border-collapse:collapse 下对 position:sticky 的撕裂，

   曾在这里把全部单元格强制 position:static !important 并改用 JS transform 伪冻结。

   现 .sched 已升级为 border-collapse:separate + 纯 CSS sticky（见 .sched 相关规则），

   故此处仅对普通数据表 .tbl 取消 sticky（它本就靠整体横向滚动查看），保留 .sched 的 CSS sticky 冻结。 */

@media (max-width:768px){

  /* 1) 顺滑惯性横向滑动，横向滑动不触发纵向回弹（全局生效） */

  .tbl-scroll,.sched-wrap,.fx-year-grid{ -webkit-overflow-scrolling:touch; overscroll-behavior-x:contain; }

  /* 2) 仅普通数据表 .tbl 取消单元格 sticky（覆盖其 base sticky 声明）；.sched 的 sticky 冻结予以保留 */

  table.tbl th,table.tbl td{ position:static !important; }

  /* 3) 滚动容器严格跟随页面主体宽度，禁止表格单独撑破页面 */

  .tbl-scroll,.sched-wrap{ width:100%; max-width:100%; }

  /* 4) 授权账号标签自适应换行排布，避免横向溢出（角色权限页 rl-tbl 整表贴合屏宽，标签整列换行；.grant-tags 全局已含 flex-wrap:wrap） */

  .rl-tbl{ min-width:0 !important; width:100%; }

  .rl-tbl th:last-child,.rl-tbl td:last-child{ position:static !important; }

  .rl-tbl .grant-tags .st{ font-size:10px; padding:2px 6px; line-height:1.5; }

}

/* 业务流水详情：工单状态变更记录 — 左右分栏时间线（方案三） */

.bf-timeline{ margin-top:2px; }

.bf-tl-row{ display:flex; gap:12px; }

.bf-tl-axis{ width:12px; flex-shrink:0; display:flex; flex-direction:column; align-items:center; }

.bf-tl-dot{ width:10px; height:10px; border-radius:50%; margin-top:3px; flex-shrink:0; }

.bf-tl-line{ width:2px; flex:1; background:var(--line); margin:4px 0; }

.bf-tl-body{ flex:1; padding-bottom:14px; }

.bf-tl-row--last .bf-tl-body{ padding-bottom:0; }

.bf-tl-time{ font-size:12px; color:var(--muted); margin-bottom:4px; }

.bf-tl-meta{ display:flex; align-items:center; gap:10px; font-size:13px; }

.bf-tl-rev{ color:var(--muted); font-size:12px; }



/* 个人流水（电脑端）双栏：左列表（编号-状态-类型-所属演员/申请人）+ 右详情面板（时间/明细/进度流转） */
.myf-split{ display:grid; grid-template-columns:400px minmax(0,1fr); gap:12px; align-items:start; }
.myf-list{ border:1px solid var(--line); border-radius:10px; overflow:hidden; background:#fff; }
.myf-head{ display:grid; grid-template-columns:30px auto 1fr 1fr; gap:6px; padding:8px 12px; font-size:11px; color:var(--muted); border-bottom:1px solid var(--line); }
.myf-row{ display:grid; grid-template-columns:30px auto 1fr 1fr; gap:6px; align-items:center; padding:9px 12px; cursor:pointer; border-left:3px solid transparent; }
.myf-row:hover{ background:#f7f8fa; }
.myf-row--active{ border-left-color:var(--accent,#2b6cb0); background:#f1ebfd; }
.myf-idx{ font-size:12px; color:var(--muted); }
.myf-row--active .myf-idx{ color:var(--accent,#2b6cb0); font-weight:600; }
.myf-type{ font-size:12px; font-weight:600; color:#222; }
.myf-ap{ font-size:12px; text-align:right; color:#555; white-space:normal; word-break:break-word; }
.myf-panel{ border:1px solid var(--line); border-radius:10px; padding:14px 16px; background:#fff; }
.myf-panel-empty{ font-size:13px; color:var(--muted); padding:20px 0; text-align:center; }
.myf-time{ font-size:12px; color:var(--muted); margin-bottom:8px; }
.myf-detail{ font-size:13px; line-height:1.6; color:#444; padding:10px 12px; background:#f6f7f9; border-radius:8px; margin-bottom:14px; }
.myf-tl-title{ font-size:12px; color:var(--muted); margin-bottom:10px; }
.myf-tl-row{ display:flex; gap:10px; }
.myf-tl-axis{ display:flex; flex-direction:column; align-items:center; width:12px; flex-shrink:0; }
.myf-tl-dot{ width:9px; height:9px; border-radius:50%; flex-shrink:0; }
.myf-tl-line{ width:1px; flex:1; background:var(--line,#e3e6ec); margin:3px 0; }
.myf-tl-body{ padding-bottom:12px; }
.myf-tl-time{ font-size:12px; color:#444; line-height:1.5; }
.myf-tl-rev{ font-size:11px; color:var(--muted); margin-top:2px; }

/* ===== 流水明细统一框（蓝框标准 / 取消类红框；固定位蓝框内含绿已排·红已取消分栏） ===== */
/* ① 个人流水 ② 业务流水 ③ 固定位操作 三套流水共用同一套框样式，消除排版差异 */
.flow-detail{ border-radius:8px; padding:10px 12px; margin:8px 0; font-size:12px; }
.flow-detail .fd-title{ font-weight:700; font-size:12px; margin-bottom:4px; }
.flow-detail.blue{ background:var(--blue-soft); border:1px solid #B5D4F4; }
.flow-detail.blue .fd-title{ color:var(--blue); }
.flow-detail.red{ background:var(--red-soft); border:1px solid #F7C1C1; }
.flow-detail.red .fd-title{ color:var(--red-deep); }
.flow-detail.purple{ background:#F0ECFD; border:1px solid #D6CDF6; }
.flow-detail.purple .fd-title{ color:#534AB7; }
.flow-detail.magenta{ background:#FBE7FB; border:1px solid var(--blue-border); }
.flow-detail.magenta .fd-title{ color:var(--blue); }
.flow-detail.amber{ background:#FBEAE0; border:1px solid #EF9F27; }
.flow-detail.amber .fd-title{ color:#9A3412; }
.flow-detail.teal{ background:#E3F4EF; border:1px solid #9FD8C8; }
.flow-detail.teal .fd-title{ color:#0E7C66; }
.flow-detail.orange{ background:#FEF3C7; border:1px solid #FCD34D; }
.flow-detail.orange .fd-title{ color:#B45309; }
.flow-detail.deepred{ background:#F9E0E0; border:1px solid #E6B0AA; }
.flow-detail.deepred .fd-title{ color:#7B241C; }
.flow-detail.indigo{ background:#E5E7FB; border:1px solid #C7D2FE; }
.flow-detail.indigo .fd-title{ color:#4338CA; }
.flow-detail.green{ background:#E6F7EF; border:1px solid #9FE3C4; }
.flow-detail.green .fd-title{ color:#149a5c; }
.flow-detail.yellow{ background:#FFF7E0; border:1px solid #F0D27A; }
.flow-detail.yellow .fd-title{ color:#9A6A00; }
/* 转约移约明细块行（演员/学员/提交）与原→目标红蓝箭头（方案C） */
.fd-row{ display:flex; gap:8px; padding:3px 0; font-size:12px; line-height:1.5; }
.fd-row .fd-k{ color:#888780; min-width:40px; flex:none; }
.fd-row .fd-v{ color:#333; font-weight:600; }
.fd-target{ padding:4px 0; display:flex; flex-direction:column; gap:2px; }
.t-from{ color:var(--red-deep); font-weight:500; }
.t-to{ color:var(--blue); font-weight:500; }
.t-arrow{ color:#888780; margin:0 8px; }
.fd-split{ display:grid; grid-template-columns:1fr 1fr; gap:10px; font-size:12px; margin-top:6px; }
.fd-kept{ padding:8px 10px; background:#EAF3DE; border-radius:8px; }
.fd-kept .fd-h{ font-weight:600; color:#3B6D11; margin-bottom:5px; }
.fd-cancelled{ padding:8px 10px; background:var(--red-soft); border-radius:8px; }
.fd-cancelled .fd-h{ font-weight:600; color:var(--red-deep); margin-bottom:5px; }
@media (max-width:560px){ .fd-split{ grid-template-columns:1fr; } }

@media (max-width:980px){ .myf-split{ grid-template-columns:300px minmax(0,1fr); } }
@media (max-width:768px){ .myf-split{ grid-template-columns:1fr; } .myf-list{ max-height:40vh; overflow:auto; } }

/* ---- 转约申请单 · 抽屉式选择列表（方案三） ---- */
.tf-chips{ display:flex; flex-wrap:wrap; gap:6px; margin-bottom:8px; }
.tf-chip{ padding:4px 10px; font-size:12px; border:1px solid var(--line); border-radius:14px; cursor:pointer; color:#555; background:#fff; transition:all .15s ease; }
.tf-chip:hover{ border-color:var(--ok); color:var(--ok); }
.tf-chip--on{ background:var(--ok); border-color:var(--ok); color:#fff; }
.tf-picker{ max-height:260px; overflow-y:auto; border:1px solid var(--line); border-radius:8px; background:#fff; }
.tf-pick{ display:flex; align-items:center; justify-content:space-between; padding:10px 12px; cursor:pointer; border-bottom:1px solid var(--line); transition:background .15s ease; }
.tf-pick:last-child{ border-bottom:none; }
.tf-pick:hover{ background:#f6f8fa; }
.tf-pick--sel{ background:#f1ebfd; box-shadow:inset 3px 0 0 var(--ok); }
.tf-pick-t{ font-size:14px; font-weight:600; color:#222; }
.tf-pick-a{ font-size:12px; color:#777; }

/* ---- 移约申请单 · 分组卡片布局（桌面/手机比例均匀，不溢出、不乱码） ---- */
/* 移约规则合并卡片（次数限制 + 时效规则时间轴）—— 黄底提示块 */
.mv-rule-card{ border:1px solid #FCD34D; border-radius:12px; background:#FFF8E1; padding:12px 14px; display:flex; flex-direction:column; gap:10px; }
.mv-rule-h{ display:flex; align-items:center; justify-content:space-between; gap:8px; }
.mv-rule-h-t{ font-size:13px; font-weight:600; color:#78350F; }
.mv-rule-h-cnt{ font-size:12px; color:#92400E; background:#FEF3C7; border:1px solid #FCD34D; border-radius:999px; padding:2px 10px; white-space:nowrap; }
.mv-rule-h-cnt b{ color:#B45309; font-weight:800; font-size:13px; }
.mv-rule-sec{ display:flex; flex-direction:column; gap:6px; }
.mv-rule-sec-t{ font-size:12px; font-weight:600; color:#92400E; }
.mv-rule-list{ margin:0; padding-left:18px; display:flex; flex-direction:column; gap:3px; }
.mv-rule-list li{ font-size:12px; color:#78350F; line-height:1.5; }
.mv-rule-list li b{ color:#451A03; font-weight:700; }
.mv-rule-tl{ display:flex; flex-direction:column; gap:8px; }
.mv-tl-item{ display:flex; align-items:flex-start; gap:8px; }
.mv-tl-dot{ flex:0 0 auto; width:10px; height:10px; border-radius:50%; margin-top:4px; }
.mv-tl--ok .mv-tl-dot{ background:var(--green); }
.mv-tl--warn .mv-tl-dot{ background:#f59e0b; }
.mv-tl--err .mv-tl-dot{ background:var(--error); }
.mv-tl-body{ display:flex; flex-direction:column; gap:1px; }
.mv-tl-body b{ font-size:12px; font-weight:600; color:#78350F; }
.mv-tl-body span{ font-size:11px; color:#92400E; line-height:1.4; }
.mv-rule-foot{ font-size:12px; color:#78350F; background:#FEF3C7; border:1px solid #FCD34D; border-radius:8px; padding:6px 10px; }
.mv-rule-foot b{ color:#B91C1C; font-weight:700; }
@media (max-width:480px){
  .mv-rule-card{ padding:10px 12px; }
  .mv-rule-h-cnt{ padding:2px 8px; }
}
.mv-card{ border:1px solid var(--line); border-radius:12px; padding:12px 14px; background:#fff; display:flex; flex-direction:column; gap:12px; }
.mv-card-h{ display:flex; align-items:center; gap:8px; font-size:13px; font-weight:600; color:var(--text); margin-bottom:0; }
.mv-no{ display:inline-flex; align-items:center; justify-content:center; width:22px; height:22px; border-radius:50%; background:#efeaff; color:#534ab7; font-size:12px; font-weight:700; flex:0 0 auto; }
.mv-field{ display:flex; flex-direction:column; gap:5px; min-width:0; }
.mv-field > label{ font-size:12px; color:var(--muted); font-weight:500; line-height:1.4; }
.mv-field select{ width:100%; min-width:0; box-sizing:border-box; }
.mv-src{ min-width:0; }
.mv-src .sp{ border:none; box-shadow:none; background:transparent; padding:0; }
.mv-dst-cell{ min-width:0; }
/* 顶部 Tab 翻页（方案B）：一次只看一节，切 tab 不重渲染（display:none 不影响联动选择器） */
.mv-tabs{ display:flex; gap:8px; margin:2px 0 12px; flex-wrap:wrap; }
.mv-tab{ flex:1 1 0; min-width:84px; padding:9px 8px; border:1.5px solid var(--line); border-radius:10px; background:#faf9ff; color:#6f6a96; font-size:13px; font-weight:600; cursor:pointer; transition:all .15s ease; }
.mv-tab:hover{ border-color:#cdc4f0; }
.mv-tab.sel{ border-color:var(--accent); background:#efeaff; color:#534ab7; box-shadow:0 3px 10px rgba(127,91,214,.18); }
.mv-panes{ }
.mv-pane{ } /* 默认显示；切换由 JS 控制 display */
@media (min-width:768px){
  .mv-card{ display:grid; grid-template-columns:1fr 1fr; gap:14px 18px; align-items:start; }
  .mv-card-h{ grid-column:1 / -1; }
}
@media (max-width:560px){
  .mv-card{ padding:10px 11px; }
  .mv-field select{ font-size:13px; }
}
.mv-pager{ display:flex; align-items:center; justify-content:center; gap:10px; margin:10px 0 2px; flex-wrap:wrap; }
.mv-page-info{ font-size:12px; color:var(--muted); font-weight:500; }
.btn-sm{ padding:6px 12px; font-size:12px; border-radius:8px; }
.mv-picker{ max-height:120px; overflow-y:auto; border:1px solid var(--line); border-radius:8px; background:#fff; }
.tf-pick--off{ opacity:.45; cursor:not-allowed; }
.tf-pick-warn{ color:var(--danger); font-size:11px; font-weight:500; }

/* ---- 转约/移约 · 原时段两级选择（先日期后时间） ---- */
.tf-two{ display:flex; gap:8px; align-items:center; }
.tf-two select{ flex:1; min-width:0; }
.mv-src-two{ display:flex; gap:6px; align-items:center; }
.mv-src-two select{ flex:1; min-width:0; padding:5px 6px; }

/* ---- 统一时段选择器（B+C：搜索视图默认 + 分组列表视图切换） ---- */
.sp{ border:1px solid var(--line); border-radius:10px; background:#fff; padding:10px; }
.sp-bar{ display:flex; gap:8px; align-items:center; margin-bottom:8px; }
.sp-search{ flex:1; min-width:0; padding:8px 10px; border:1px solid var(--line); border-radius:8px; font-size:13px; background:#fff; }
.sp-toggle{ flex:0 0 auto; padding:6px 10px; font-size:12px; border:1px solid var(--line); border-radius:8px; background:#fff; cursor:pointer; color:#555; white-space:nowrap; }
.sp-toggle:hover{ border-color:var(--primary); color:var(--primary); }
.sp-recent{ display:flex; flex-wrap:wrap; align-items:center; gap:6px; margin-bottom:8px; }
.sp-chip{ padding:3px 10px; font-size:11px; border:1px solid var(--line); border-radius:12px; background:#f6f7f9; cursor:pointer; color:#555; }
.sp-chip:hover{ border-color:var(--primary); color:var(--primary); }
.sp-group-title{ font-size:12px; color:var(--muted); margin:8px 2px 4px; font-weight:600; }
.sp-empty{ text-align:center; color:var(--muted); font-size:12px; padding:18px 0; }
.sp--transfer .tf-pick--sel{ background:var(--blue-soft); box-shadow:inset 3px 0 0 #378add; }
.sp--cancel   .tf-pick--sel{ background:#fdecec; box-shadow:inset 3px 0 0 #e24b4a; }
.sp--move     .tf-pick--sel{ background:#efeaff; box-shadow:inset 3px 0 0 var(--accent); }

/* ---- 移约原时段：日期→时间 两级联动选择器（大量已约时段收拢显示，桌面/手机共用） ---- */
.mv-cascade{ display:flex; flex-direction:column; gap:8px; }
.mv-date-strip{ display:flex; gap:8px; overflow-x:auto; padding:2px 2px 8px; scrollbar-width:thin; -webkit-overflow-scrolling:touch; }
.mv-date-strip::-webkit-scrollbar{ height:5px; }
.mv-date-strip::-webkit-scrollbar-thumb{ background:#d9d4f3; border-radius:9px; }
.mv-dchip{ flex:0 0 auto; min-width:64px; text-align:center; padding:8px 6px; border:1.5px solid var(--line); border-radius:12px; background:#faf9ff; cursor:pointer; transition:all .15s ease; }
.mv-dchip .mv-d{ font-size:13px; font-weight:700; color:#3a3660; }
.mv-dchip .mv-w{ font-size:11px; color:#8f8ac0; margin-top:2px; }
.mv-dchip .mv-c{ font-size:10px; color:#a39ecb; margin-top:2px; }
.mv-dchip.sel{ border-color:var(--accent); background:#efeaff; box-shadow:0 3px 10px rgba(127,91,214,.18); }
.mv-dchip.sel .mv-d,.mv-dchip.sel .mv-w{ color:var(--accent); }
.mv-time-empty{ font-size:12px; color:#b3aed4; padding:10px 4px; font-style:italic; }
.mv-time-empty.mv-time-warn{ color:#b06a12; font-style:normal; font-weight:600; background:#fff5e6; border:1px solid #f3d8a8; border-radius:10px; padding:10px 12px; line-height:1.5; }
.mv-time-grid{ display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.mv-tchip{ padding:10px 12px; border:1.5px solid var(--line); border-radius:12px; background:#fff; cursor:pointer; transition:all .15s ease; display:flex; flex-direction:column; gap:2px; }
.mv-tchip .mv-tt{ font-size:14px; font-weight:700; color:#3a3660; }
.mv-tchip .mv-ta{ font-size:11px; color:#8f8ac0; }
.mv-tchip.sel{ border-color:var(--accent); background:#efeaff; }
.mv-tchip.sel .mv-tt,.mv-tchip.sel .mv-ta{ color:var(--accent); }
.mv-tchip.off{ opacity:.45; cursor:not-allowed; background:#f6f5fb; }
/* 首节试课（trial）：灰色不可选 + 内联提示「首节不可转约/退约」 */
.mv-tchip--trial{ opacity:.55; cursor:not-allowed; background:#f5f5f7; border-style:dashed; border-color:#d2d2da; }
.mv-tchip--trial .mv-tt{ color:#9b9ba6; }
.mv-tchip--trial .mv-ta{ color:#b6b6c0; }
.mv-trial-hint{ font-size:11px; color:#8a8a96; font-weight:600; margin-top:2px; }
.mv-twarn{ color:var(--danger); font-size:11px; font-weight:500; }
.mv-tok{ color:var(--accent); font-size:12px; }
.mv-tpick{ color:#a39ecb; font-size:11px; }
@media (max-width:760px){
  .mv-time-grid{ grid-template-columns:1fr 1fr; }
  .mv-dchip{ min-width:58px; padding:7px 5px; }
}
/* 申请单源时段级联主题色（转约蓝 / 退约举证红），复用移约级联结构，仅覆盖选中态 */
.casc--magenta .mv-dchip.sel{ border-color:var(--blue); background:var(--blue-soft); box-shadow:0 3px 10px rgba(24,95,165,.18); }
.casc--magenta .mv-dchip.sel .mv-d,.casc--magenta .mv-dchip.sel .mv-w{ color:var(--blue); }
.casc--magenta .mv-tchip.sel{ border-color:var(--blue); background:var(--blue-soft); }
.casc--magenta .mv-tchip.sel .mv-tt,.casc--magenta .mv-tchip.sel .mv-ta{ color:var(--blue); }
.casc--magenta .mv-tok{ color:var(--blue); }
.casc--red .mv-dchip.sel{ border-color:var(--red-deep); background:#fdeaea; box-shadow:0 3px 10px rgba(163,45,45,.16); }
.casc--red .mv-dchip.sel .mv-d,.casc--red .mv-dchip.sel .mv-w{ color:var(--red-deep); }
.casc--red .mv-tchip.sel{ border-color:var(--red-deep); background:#fdeaea; }
.casc--red .mv-tchip.sel .mv-tt,.casc--red .mv-tchip.sel .mv-ta{ color:var(--red-deep); }
.casc--red .mv-tok{ color:var(--red-deep); }

/* 级联选择器：日期区「可多选」标题 + 选中态加强（转约申请单） */
.mv-casc-head{ display:flex; align-items:center; gap:8px; font-size:12px; font-weight:700; color:#5a547e; padding:2px 2px 6px; }
.mv-multi-badge{ font-size:10px; font-weight:700; color:#534AB7; background:#EEEDFE; border:1px solid #cecbf6; border-radius:8px; padding:1px 7px; }
.mv-time-empty.mv-time-info{ color:#534AB7; font-style:normal; font-weight:600; background:#EEEDFE; border:1px solid #cecbf6; border-radius:10px; padding:10px 12px; line-height:1.5; margin-top:2px; }
.mv-tchip.sel{ border-width:2px; box-shadow:0 2px 8px rgba(127,91,214,.20); }

/* 转约「已选时段」独立卡片（清晰、日期+时段一目了然） */
.tf-sel-card{ border:1.5px solid #cecbf6; border-radius:12px; background:#fbfaff; padding:8px 10px; margin-bottom:10px; }
.tf-sel-head{ font-size:13px; font-weight:700; color:#534AB7; margin-bottom:6px; }
.tf-sel-row{ display:flex; align-items:center; gap:8px; padding:6px 8px; border:1px solid #e6e8ee; border-radius:8px; background:#fff; margin-bottom:5px; font-size:13px; }
.tf-sel-date{ font-weight:600; color:#3a3660; flex:1 1 auto; }
.tf-sel-actor{ color:#8f8ac0; font-size:12px; }
.tf-tag{ font-size:11px; background:#EEEDFE; color:#534AB7; padding:1px 6px; border-radius:4px; flex:0 0 auto; }
.tf-sel-x{ flex:0 0 auto; border:none; background:#f3eefb; color:#8a7fc4; border-radius:6px; width:22px; height:22px; font-size:12px; cursor:pointer; line-height:1; }
.tf-sel-x:hover{ background:#e6def7; color:#534AB7; }
.tf-sel-empty{ font-size:12px; color:#b3aed4; padding:8px 10px; border:1px dashed #d9d4f3; border-radius:10px; margin-bottom:10px; }

/* ===== 账户主控台（方案C 双栏） ===== */
.ac-page-head{ display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; margin:2px 2px 14px; }
.ac-h2{ font-size:20px; font-weight:700; color:var(--primary); margin:0; }
.ac-sub{ font-size:12px; color:var(--muted); }

.ac-console{ display:flex; gap:18px; align-items:stretch; }
.ac-list{ flex:0 0 340px; max-width:340px; background:var(--card); backdrop-filter:blur(18px) saturate(160%); -webkit-backdrop-filter:blur(18px) saturate(160%); border:1px solid var(--glass-border); border-radius:18px; box-shadow:var(--glass-shadow); padding:14px; display:flex; flex-direction:column; max-height:calc(100vh - 180px); }
.ac-list-head{ display:flex; flex-direction:column; gap:10px; margin-bottom:10px; flex-shrink:0; }
.ac-search{ width:100%; padding:9px 12px; border:1px solid var(--line); border-radius:10px; font-size:13px; background:#fff; }
.ac-search:focus{ outline:none; border-color:var(--primary); }
.ac-chips{ display:flex; flex-wrap:wrap; gap:6px; }
.ac-chip{ font-size:12px; padding:4px 12px; border:1px solid var(--line); border-radius:12px; background:rgba(255,255,255,.6); color:var(--text); cursor:pointer; transition:.15s; user-select:none; }
.ac-chip:hover{ border-color:var(--primary); color:var(--primary); }
.ac-chip.on{ background:var(--grad-warm); border-color:transparent; color:#fff; box-shadow:0 4px 12px rgba(168,85,247,.28); }
.ac-items{ overflow-y:auto; display:flex; flex-direction:column; gap:6px; padding-right:4px; flex:1 1 auto; min-height:0; }

.ac-item{ display:flex; align-items:center; gap:10px; padding:9px 10px; border-radius:12px; cursor:pointer; transition:.15s; border:1px solid transparent; }
.ac-item:hover{ background:rgba(255,255,255,.7); }
.ac-item--active{ background:#fff; border-color:var(--primary); box-shadow:0 4px 14px rgba(168,85,247,.16); }
.ac-dot{ width:9px; height:9px; border-radius:50%; flex:0 0 auto; }
.ac-dot--ok{ background:var(--ok); }
.ac-dot--warn{ background:var(--warn); }
.ac-dot--off{ background:#bbb; }
.ac-ava{ width:34px; height:34px; border-radius:50%; background:var(--grad-warm-soft); color:var(--primary-dark); display:flex; align-items:center; justify-content:center; font-weight:700; flex:0 0 auto; }
.ac-item-main{ min-width:0; }
.ac-item-name{ font-size:14px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ac-item-sub{ font-size:11px; color:var(--muted); }

/* 档案面板 */
.ac-profile{ flex:1 1 auto; min-width:0; background:var(--card); backdrop-filter:blur(18px) saturate(160%); -webkit-backdrop-filter:blur(18px) saturate(160%); border:1px solid var(--glass-border); border-radius:18px; box-shadow:var(--glass-shadow); padding:20px 22px; max-height:calc(100vh - 180px); overflow-y:auto; }
.ac-profile-empty{ flex:1 1 auto; display:flex; align-items:center; justify-content:center; color:var(--muted); font-size:14px; background:var(--card); border:1px dashed var(--line); border-radius:18px; }
.badge-actor{ display:inline-block; font-size:11px; padding:1px 9px; border-radius:10px; background:#7d4fd1; color:#fff; font-weight:500; vertical-align:middle; }
.actor-console .ac-list-head{ gap:10px; }
.actor-console .ac-search{ margin-bottom:0; }
.ac-pf-head{ display:flex; align-items:center; gap:14px; padding-bottom:16px; border-bottom:1px solid var(--line); margin-bottom:16px; flex-wrap:wrap; }
.ac-pf-head .avatar{ width:56px; height:56px; font-size:26px; flex:0 0 auto; }
.ac-pf-avatar-label{ display:inline-flex; cursor:pointer; position:relative; }
.ac-pf-avatar-label:hover .avatar{ box-shadow:0 0 0 3px rgba(125,79,209,0.25); border-color:#7d4fd1; }
.ac-pf-id{ flex:1 1 auto; min-width:0; }
.ac-pf-name{ font-size:18px; font-weight:500; }
.ac-pf-acc{ font-size:13px; color:var(--muted); margin-top:3px; }
.ac-pf-ops{ display:flex; flex-wrap:nowrap; gap:6px; flex:1 1 100%; }
.ac-pf-ops .btn{ flex:1 1 0; min-width:0; padding:8px 6px; font-size:12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
@media (max-width:380px){ .ac-pf-ops{ gap:4px; } .ac-pf-ops .btn{ padding:7px 4px; font-size:11px; } }
.ac-pf-sec{ margin-bottom:18px; }
.ac-pf-sec-t{ font-size:13px; font-weight:500; color:var(--muted); margin-bottom:10px; }
.bc-add-opts{ max-height:240px; overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain; position:relative; }
.bc-rev-tag{ display:inline-block; padding:1px 8px; border-radius:8px; background:#E6F0FB; color:#2F6BFF; font-size:11px; line-height:18px; white-space:nowrap; }
@media (max-width:768px){
  #bc-addbox{ position:relative; z-index:2; display:flex; flex-direction:column; }
  .bc-add-opts{ height:260px; max-height:none; overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain; touch-action:pan-y; position:relative; z-index:1; transform:translateZ(0); box-sizing:border-box; flex:0 0 auto; }
}
.ac-pf-info{ display:grid; grid-template-columns:1fr 1fr; gap:12px 18px; }
.ac-pf-info > div{ display:flex; flex-direction:column; gap:3px; }
.ac-pf-k{ font-size:12px; color:var(--muted); }
.ac-pf-v{ font-size:14px; }
.ac-p-head{ display:flex; align-items:center; gap:12px; margin-bottom:14px; }
.ac-p-ava{ width:48px; height:48px; border-radius:50%; background:var(--grad-warm); color:#fff; display:flex; align-items:center; justify-content:center; font-size:20px; font-weight:700; flex:0 0 auto; }
.ac-p-name{ font-size:17px; font-weight:700; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.ac-p-actions{ display:flex; gap:6px; margin-bottom:16px; flex-wrap:nowrap; }
.ac-p-actions .btn{ flex:1 1 0; min-width:0; padding:8px 6px; font-size:12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ac-sec{ margin-bottom:18px; }
.ac-sec-h{ font-size:13px; font-weight:700; color:var(--primary); margin-bottom:10px; padding-left:9px; border-left:3px solid var(--primary); }
.ac-kv{ display:grid; grid-template-columns:auto 1fr; gap:8px 16px; margin:0; }
.ac-kv dt{ font-size:12px; color:var(--muted); }
.ac-kv dd{ font-size:13px; margin:0; }
.ac-caps{ display:flex; flex-wrap:wrap; gap:6px; }
.ac-cap{ font-size:12px; padding:3px 10px; border-radius:11px; background:rgba(168,85,247,.12); color:var(--primary-dark); border:1px solid var(--line); }
.ac-cap.base{ background:var(--grad-warm); color:#fff; border-color:transparent; font-weight:600; }
.ac-cap.empty{ background:transparent; color:var(--muted); border:1px dashed var(--line); }
.ac-reltbl{ width:100%; border-collapse:collapse; font-size:13px; }
.ac-reltbl th{ text-align:left; font-size:12px; color:var(--muted); font-weight:600; padding:6px 8px; border-bottom:1px solid var(--line); }
.ac-reltbl td{ padding:7px 8px; border-bottom:1px solid rgba(168,85,247,.1); }

/* 批量高级区 */
.ac-batch{ margin-top:6px; }
.ac-batch > summary{ cursor:pointer; font-weight:600; }

/* 移动端覆盖层 */
.ac-overlay{ position:fixed; inset:0; background:var(--bg-grad); z-index:80; transform:translateX(100%); transition:transform .28s ease; display:flex; flex-direction:column; padding:0; overflow:hidden; }
.ac-overlay--show{ transform:translateX(0); }
.ac-ov-head{ display:flex; align-items:center; gap:10px; padding:14px 16px; border-bottom:1px solid var(--glass-border); background:rgba(255,255,255,.7); backdrop-filter:blur(12px); }
.ac-ov-back{ width:34px; height:34px; border-radius:50%; border:1px solid var(--line); background:#fff; font-size:22px; line-height:1; color:var(--text); cursor:pointer; }
.ac-ov-title{ font-size:15px; font-weight:700; }
.ac-overlay .ac-profile{ border-radius:0; border:none; box-shadow:none; background:transparent; backdrop-filter:none; max-height:none; flex:1 1 auto; overflow-y:auto; padding:18px 16px; }
.ac-ov-foot{ display:flex; gap:6px; padding:10px 12px; border-top:1px solid var(--glass-border); background:rgba(255,255,255,.8); backdrop-filter:blur(12px); flex-wrap:nowrap; }
.ac-ov-foot .btn{ flex:1 1 0; min-width:0; padding:9px 4px; font-size:12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
@media (max-width:380px){
  .ac-ov-foot{ gap:4px; padding:8px 10px; }
  .ac-ov-foot .btn{ padding:8px 2px; font-size:11px; }
  .ac-p-actions{ gap:4px; }
  .ac-p-actions .btn{ padding:7px 4px; font-size:11px; }
}

/* 授权弹窗 */
.ac-gr-list{ max-height:60vh; overflow-y:auto; display:flex; flex-direction:column; gap:8px; margin:12px 0; }
.ac-gr-row{ display:flex; align-items:center; gap:12px; padding:9px 12px; border:1px solid var(--line); border-radius:12px; background:#fff; }
.ac-gr-name{ flex:1; font-size:13px; font-weight:600; }
.ac-gr-tg{ display:flex; align-items:center; gap:5px; font-size:12px; color:#555; white-space:nowrap; cursor:pointer; }
.ac-gr-tg input{ accent-color:var(--primary); }

/* 编辑弹窗 textarea 全宽 */
.f-item.full{ grid-column:1 / -1; }

/* 响应式 */
@media (max-width:860px){
  .ac-console{ flex-direction:column; }
  .ac-list{ flex:1 1 auto; max-width:none; width:100%; max-height:none; }
  .ac-profile{ max-height:none; }
}
/* 手机端账户列表固定 7 行高度，超出垂直滚动 */
@media (max-width:768px){
  .ac-items{ max-height:392px; }
}
/* ===== 手机端统一流水抽屉（流水记录 / 业务流水 / 固定位操作 共用） ===== */
.mf-cats{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 4px}
.mf-cat{padding:5px 14px;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:13px;color:#555;cursor:pointer;line-height:1.4}
.mf-cat--on{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:600}
.mf-list{display:flex;flex-direction:column;gap:10px;margin-top:8px}
.mf-card{background:#fff;border:1px solid var(--line);border-left:4px solid var(--line);border-radius:12px;padding:10px 12px;box-shadow:0 1px 3px rgba(0,0,0,.05);cursor:pointer;transition:transform .15s ease,box-shadow .15s ease}
.mf-card:active{transform:scale(.99)}
.mf-card-top{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
.mf-card-no{font-size:11px;font-weight:700;color:var(--muted);background:#f3f1f8;padding:1px 6px;border-radius:5px;white-space:nowrap}
.mf-tag{font-size:11px;padding:2px 8px;border-radius:6px;font-weight:600;white-space:nowrap}
.mf-card-top .st{margin-left:auto}
.mf-card-mid{font-size:14px;color:#222;font-weight:500;line-height:1.4}
.mf-card-sub{font-size:12px;color:#888;margin-top:3px}
.mf-scrim{position:fixed;inset:0;background:rgba(20,18,40,.45);opacity:0;visibility:hidden;transition:opacity .25s ease;z-index:90}
.mf-scrim.show{opacity:1;visibility:visible}
.mf-drawer{position:fixed;left:0;right:0;bottom:0;height:90vh;height:90dvh;max-height:92vh;background:#fff;border-radius:18px 18px 0 0;box-shadow:0 -8px 30px rgba(0,0,0,.18);transform:translateY(100%);transition:transform .28s cubic-bezier(.22,.61,.36,1);z-index:91;display:flex;flex-direction:column;overflow:hidden}
.mf-drawer.show{transform:translateY(0)}
.mf-drawer-grip{flex:none;width:40px;height:5px;border-radius:3px;background:#d8d4e8;margin:8px auto 2px}
.mf-drawer-head{flex:none;display:flex;align-items:center;justify-content:space-between;padding:6px 16px 10px;border-bottom:1px solid var(--line)}
.mf-drawer-head span{font-weight:700;font-size:15px;color:#2a2540}
.mf-drawer-x{border:none;background:#f0edf8;color:#6b6390;width:30px;height:30px;border-radius:50%;font-size:15px;cursor:pointer}
.mf-drawer-body{flex:1 1 auto;min-height:0;overflow-y:auto;padding:14px 16px 26px;-webkit-overflow-scrolling:touch}


/* ===== 批量设置学员可见演员 · 方案C 三步向导 (bc-*) ===== */
.bc-wizard{display:block}
.bc-steps{display:flex;gap:10px;margin-bottom:12px}
.bc-step{display:flex;align-items:center;gap:8px;flex:1;background:#fff;border:1px solid #e6e1ee;border-radius:10px;padding:9px 12px;cursor:pointer;color:#8a7fa0;font-size:13px;font-weight:500}
.bc-step .bc-dot{width:22px;height:22px;border-radius:50%;background:#ece6f5;color:#9a8fb0;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex:none}
.bc-step.on{border-color:#c850c0;color:#7a2ea8;box-shadow:0 2px 8px rgba(200,80,192,.12)}
.bc-step.on .bc-dot{background:#c850c0;color:#fff}
.bc-selbar{display:flex;align-items:center;justify-content:space-between;background:#eafaf0;border:1px solid #b6e6c8;border-radius:9px;padding:8px 12px;margin-bottom:12px;font-size:13px;color:#2f7a4a}
.bc-selbar b{color:#1f9d55;font-size:14px}
.bc-clr{margin-left:8px;color:#7a8a80;cursor:pointer;text-decoration:underline;font-size:12px}
.bc-toolbar{margin-bottom:10px}
.bc-search{width:100%;padding:9px 12px;border:1px solid #dcd6e4;border-radius:8px;font-size:14px;margin-bottom:8px;background:#fff}
.bc-search:focus{outline:none;border-color:#c850c0;box-shadow:0 0 0 3px rgba(200,80,192,.12)}
.bc-az{display:flex;gap:4px;overflow-x:auto;padding-bottom:6px;margin-bottom:6px}
.bc-az-i{flex:none;font-size:11px;padding:3px 7px;border:1px solid #dcd6e4;border-radius:5px;cursor:pointer;color:#6a6278;background:#fff;white-space:nowrap}
.bc-az-i.on{background:#f3e6f7;color:#7a2ea8;border-color:#c850c0}
.bc-quick{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px}
.bc-q{flex:none;font-size:11px;padding:5px 10px;border:1px solid #dcd6e4;border-radius:14px;background:#fff;color:#6a6278;cursor:pointer;white-space:nowrap}
.bc-q:hover{border-color:#c850c0;color:#7a2ea8}
.bc-cols{display:flex;gap:16px}
.bc-left{flex:1.7;min-width:0}
.bc-right{flex:1;min-width:0;background:#faf8fc;border:1px solid #ece6f3;border-radius:12px;padding:14px}
.bc-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}
.bc-chip{display:flex;align-items:center;gap:6px;padding:9px 10px;border:1px solid #dcd6e4;border-radius:7px;background:#fff;cursor:pointer;color:#4a4458;font-size:12px;min-height:36px;user-select:none}
.bc-chip input{flex:none;width:14px;height:14px;margin:0}
.bc-chip>.bc-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bc-chip.on{border-color:#1f9d55;background:#eafaf0;color:#1f7a45;font-weight:600}
.bc-footrow{display:flex;align-items:center;justify-content:space-between;margin-top:12px;gap:10px}
.bc-sum-num{font-size:30px;font-weight:700;color:#c850c0;line-height:1}
.bc-sum-lbl{font-size:12px;color:#8a7fa0;margin-bottom:10px}
.bc-sum-list{font-size:12px;color:#5a5470;line-height:1.8;border-top:1px solid #ece6f3;padding-top:8px}
.bc-sum-actor{margin-top:10px;font-size:13px;color:#5a5470}
.bc-sum-actor .pill{margin:2px}
.bc-impact{margin-top:12px;font-size:12px;color:#8a6a00;background:#fff8e6;border:1px solid #f3e0a8;border-radius:8px;padding:8px 10px}
.bc-confirm{background:#faf8fc;border:1px solid #ece6f3;border-radius:12px;padding:16px;margin-bottom:12px}
@media (max-width:760px){
  .bc-steps{gap:6px}
  .bc-step{padding:7px 8px;font-size:12px}
  .bc-step span:last-child{display:none}
  .bc-cols{display:block}
  .bc-right{margin-top:12px}
  .bc-grid{grid-template-columns:repeat(2,1fr);gap:8px}
  .bc-chip{padding:11px 10px;font-size:13px;min-height:42px}
}

/* ===== 固定位流程横向时间线（学员端 · 配色2 状态色驱动） ===== */
.fx-tl-card{margin-top:0}
/* 2026-09-10 修复：原 .fx-tl 为不换行 flex，同级的 .fx-tl-note 会被当成第 9 个 flex 子项挤在步骤条右侧，
   导致 PC 浮层压住节点、手机端换行错乱。改为允许换行 + note 独占整行（flex-basis:100%）。 */
.fx-tl{display:flex;flex-wrap:wrap;align-items:flex-start;padding:8px 2px 4px}
.fx-tl-node{flex:1.2 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;cursor:default}
.fx-tl-node.click{cursor:pointer}
.fx-tl-node.click:hover .fx-tl-label{color:var(--primary)}
.fx-tl-node.click:active{transform:scale(.98)}
.fx-tl-dot{width:22px;height:22px;border-radius:50%;border:3px solid #b6bcc7;background:#fff;box-sizing:border-box;transition:all .2s}
.fx-tl-label{font-size:13px;font-weight:600;color:#4a4458;line-height:1.25;padding:0 2px}
.fx-tl-status{font-size:11px;color:#8a7fa0}
.fx-tl-seg{flex:1 1 0;height:3px;margin-top:9px;background:#d8dbe2;border-radius:2px;min-width:10px}
/* 状态配色：done=青 / active=紫 / pending=灰 */
.fx-tl-node.is-done .fx-tl-dot{border-color:#0E9C8A;background:#0E9C8A}
.fx-tl-node.is-done .fx-tl-label{color:#0b7d6e}
.fx-tl-node.is-done .fx-tl-status{color:#0b7d6e}
.fx-tl-node.is-active .fx-tl-dot{border-color:#3B8EF0;background:#3B8EF0;box-shadow:0 0 0 4px rgba(59,142,240,.28)}
.fx-tl-node.is-active .fx-tl-label{color:var(--blue)}
.fx-tl-node.is-active .fx-tl-status{color:var(--blue)}
.fx-tl-node.is-pending .fx-tl-dot{border-color:#D3D1C7;background:#D3D1C7}
.fx-tl-seg.is-done{background:#0E9C8A}
.fx-tl-node.is-reject .fx-tl-dot{border-color:var(--red-deep);background:var(--red-deep)}
.fx-tl-node.is-reject .fx-tl-label{color:var(--red-deep)}
.fx-tl-node.is-reject .fx-tl-status{color:var(--red-deep)}
/* 终态：未参与本轮 / 未获得资格（琥珀，区别于红=驳回、蓝=进行中、青=完成） */
.fx-tl-node.is-excluded .fx-tl-dot{border-color:#C98A1E;background:#C98A1E}
.fx-tl-node.is-excluded .fx-tl-label{color:#9a6a12}
.fx-tl-node.is-excluded .fx-tl-status{color:#9a6a12}
/* 2026-09-23 ①步锁定态（珊瑚红，区别于驳回深红） */
.fx-tl-node.is-locked .fx-tl-dot{border-color:#A32D2D;background:#A32D2D}
.fx-tl-node.is-locked .fx-tl-label{color:#A32D2D}
.fx-tl-node.is-locked .fx-tl-status{color:#A32D2D;font-weight:500}
.fx-tl-note{flex:0 0 100%;width:100%;box-sizing:border-box;margin:8px 2px 0;padding:8px 10px;font-size:12px;color:#7a6a3a;background:#fbf3e2;border:1px solid #f0e0bf;border-radius:8px;line-height:1.5}
/* 补选轮徽标：超管 reopen 后显示，琥珀色与终态 is-excluded 同族，提示名额有限 */
.fx-round-badge{display:inline-block;margin-left:6px;padding:1px 8px;font-size:11px;font-weight:600;color:#9a6a12;background:#fbeccb;border:1px solid #f0d9a3;border-radius:999px;vertical-align:middle}
/* 弹窗方案C：标签云 */
.fx-pop{padding:2px 0}
.fx-pop-sub{font-size:12px;color:#8a7fa0;margin-bottom:10px}
.fx-caps{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:6px}
.fx-cap{display:inline-block;padding:6px 12px;border-radius:999px;background:#efe4ff;color:#534AB7;font-size:13px;font-weight:600;border:1px solid #d9c9ff;white-space:nowrap}
.fx-pop-meta{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 0;border-top:1px solid #f0edf5;font-size:13px}
.fx-pop-meta .muted{color:#8a7fa0}
.fx-pop-foot{margin-top:10px;font-size:12px;color:#8a7fa0;background:#faf8fc;border:1px solid #ece6f3;border-radius:8px;padding:8px 10px}
@media (max-width:560px){
  .fx-tl-dot{width:18px;height:18px;border-width:2px}
  .fx-tl-label{font-size:11px}
  .fx-tl-status{font-size:10px}
  .fx-tl-seg{margin-top:7px}
  /* 2026-09-10：窄屏下 note 独占整行且不断词溢出 */
  .fx-tl-note{font-size:11px;padding:7px 9px;margin-top:7px;word-break:break-word}
}

/* 固定位配置记录：折叠卡（默认折叠，展开后框内最多露3行，超出下滑） */
.fx-cfg-head{ user-select:none; }
.fx-cfg-head:hover .fx-cfg-chev{ color:var(--primary); }
.fx-cfg-chev{ font-size:12px; color:var(--muted); font-weight:400; }
.fx-cfg-body{ padding:0 0 10px; }
.fx-cfg-scroll table.tbl th{ position:sticky; top:0; z-index:1; }
.fx-cfg-hint{ padding:7px 14px; text-align:center; font-size:12px; color:var(--muted); background:var(--bg); border-top:1px solid var(--line); }

/* 批量设置学员可见演员 · 方案C（虚拟滚动内联表） */
.bc-planC .bc-head{ font-size:14px; margin-bottom:8px; }
.bc-planC .bc-toolbar{ margin-bottom:8px; }
.bc-planC .bc-search{ width:100%; padding:8px 10px; border:1px solid var(--line); border-radius:8px; font-size:14px; box-sizing:border-box; }
.bc-planC .bc-vp{ border:1px solid var(--line); border-radius:8px; background:#fff; overflow:auto; -webkit-overflow-scrolling:touch; }
.bc-planC .bc-row{ display:flex; align-items:center; gap:8px; padding:0 10px; border-bottom:1px solid #f0f1f5; box-sizing:border-box; }
.bc-planC .bc-chk{ flex:0 0 auto; }
.bc-planC .bc-name{ flex:0 0 120px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bc-planC .bc-acc{ flex:0 0 120px; color:var(--muted); font-size:12px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bc-planC .bc-cur{ flex:1; color:var(--muted); font-size:12px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bc-planC .bc-batchbar{ display:flex; align-items:center; gap:8px; padding:10px; border-top:1px solid var(--line); background:#fafbfc; border-radius:0 0 8px 8px; flex-wrap:wrap; }
@media(max-width:640px){ .bc-planC .bc-name{ flex-basis:84px; } .bc-planC .bc-acc{ flex-basis:72px; } .bc-planC .bc-cur{ font-size:11px; } }
/* 20260806163000 回退：固定表选位格不再蓝亮起（圆点配色见下） */

/* ===== 个人预约表 · 桌面端（≥769px）统一滑动条 + ‹ › 按钮 ===== */
@media (min-width:769px){
  .day-scroll-wrap{ position:relative; }
  .day-scroll{ display:flex; gap:8px; overflow-x:auto; scroll-snap-type:x proximity; padding:8px 40px 12px; scrollbar-width:thin; }
  .day-scroll::-webkit-scrollbar{ height:6px; }
  .day-scroll::-webkit-scrollbar-thumb{ background:#e6dceb; border-radius:3px; }
  .day-cell{ flex:0 0 160px; min-width:160px; scroll-snap-align:center; border:1px solid var(--line); border-radius:12px; background:#fffaf7; padding:12px 6px; text-align:center; cursor:pointer; transition:box-shadow .15s ease, transform .15s ease; }
  .day-cell:hover{ box-shadow:0 0 0 2px rgba(168,85,247,.12); }
  .day-cell.on{ border-color:var(--primary); background:var(--primary); color:#fff; box-shadow:0 0 0 2px rgba(168,85,247,.25); }
  .day-cell.today:not(.on){ border-color:var(--primary); box-shadow:0 0 0 2px rgba(168,85,247,.18); }
  .day-nav{ position:absolute; top:42px; z-index:3; width:34px; height:34px; border-radius:50%; border:1px solid var(--line); background:#fff; cursor:pointer; font-size:20px; line-height:1; color:var(--text); display:flex; align-items:center; justify-content:center; box-shadow:0 2px 6px rgba(0,0,0,.06); transition:all .12s ease; }
  .day-nav:hover{ border-color:var(--primary); color:var(--primary); background:var(--hover-soft); }
  .day-nav-prev{ left:0; }
  .day-nav-next{ right:0; }
  .day-content{ border:1px solid var(--line); border-radius:12px; background:#fffaf7; padding:12px; margin-top:12px; }
  .dc-head{ display:flex; justify-content:space-between; align-items:center; font-size:14px; margin-bottom:10px; }
  .day-content .bk-item{ margin-bottom:8px; }
  /* 固定位操作条：桌面端保持明细居左、按钮居右（同一行） */
  .fx-op-bar{ flex-direction:row; align-items:center; flex-wrap:nowrap; gap:8px; }
  .fx-op-main{ order:2; margin-left:auto; width:auto; justify-content:flex-start; }
  .fx-op-details{ order:1; flex:1; min-width:0; }
  .fx-op-row{ flex-wrap:wrap; }
  .fx-op-row .fx-op-times{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .fx-op-clear,.fx-op-submit{ width:auto; }
  /* 专属演员时段视图操作条：桌面端恢复单行 */
  #bk-quickbar{ display:flex; flex-wrap:wrap; gap:10px; }
  #bk-quickbar .bk-view-info{ grid-column:auto; flex:1 1 auto; }
  #bk-quickbar .spacer{ display:block; flex:1; }
  #bk-quickbar button{ width:auto; }
}
/* ===== 个人预约表 5 色圆点配色（桌面/移动通用，复用 fxColorOf 配色） ===== */
.bk-dot{ display:inline-block; width:9px; height:9px; border-radius:50%; margin-right:6px; vertical-align:middle; flex-shrink:0; }
.dc-dots{ display:flex; gap:4px; flex-wrap:wrap; margin-top:3px; padding-left:2px; }
.bk-dot-mini{ display:inline-block; width:7px; height:7px; border-radius:50%; }
.bk-legend{ display:flex; flex-wrap:wrap; gap:10px 16px; padding:8px 12px; background:#faf7fb; border-bottom:1px solid var(--line); font-size:12px; color:#555; }
.bk-leg{ display:inline-flex; align-items:center; gap:5px; }
.bk-leg .bk-dot{ margin-right:0; }
/* 弹窗内嵌变体：无底部分隔线、圆角块状，用于「点月历格 → 当日预约清单」顶部 */
.bk-legend--flat{ border-bottom:0; border-radius:10px; margin-bottom:10px; padding:7px 10px; }
/* 数据表页「个人预约日程表」月历格内的圆点簇：格子空间紧，收紧间距并防溢出 */
.mg-cell .dc-dots{ margin-top:4px; gap:3px; padding-left:0; }
.mg-cell .bk-dot-mini{ width:7px; height:7px; }
/* 当日清单每行左侧纯色圆点：与 .day-time 对齐，不挤压既有 border-left 状态条 */
.day-row > .bk-dot{ margin-right:0; }
@media (max-width:768px){
  .mg-cell .dc-dots{ gap:2.5px; margin-top:3px; }
  .mg-cell .bk-dot-mini{ width:6px; height:6px; }
  .bk-legend{ gap:8px 12px; padding:7px 10px; font-size:11px; }
}

/* ===== 固定位合并组详情（业务流水 · 2026-08-07）===== */
.fx-panel{ font-size:13px; }
.fx-head{ display:flex; justify-content:space-between; align-items:center; margin-bottom:4px; }
.fx-title{ font-size:14px; }
.fx-meta{ font-size:12px; color:var(--muted); margin-bottom:10px; display:flex; gap:14px; flex-wrap:wrap; }
.fx-blue{ background:var(--blue-soft); border-left:3px solid #0F6E56; border-radius:8px; padding:8px 12px; margin:10px 0; }
.fx-tpl{ font-size:12px; padding:4px 0; }
.fx-sch{ font-size:12px; padding:6px 0 2px; border-top:0.5px solid #B5D4F4; }
.fx-dets{ display:flex; gap:8px; font-size:12px; padding:6px 0 2px; }
.fx-det{ flex:1; border-radius:6px; padding:5px 9px; line-height:1.8; min-width:0; }
.fx-det-add{ background:var(--blue-soft); color:var(--blue); }
.fx-det-del{ background:var(--red-soft); color:var(--red-deep); }
.fx-det-h{ font-weight:500; font-size:11px; display:block; margin-bottom:2px; opacity:.85; }
.fx-tl{ margin-top:6px; }
.fx-tl-row{ display:flex; gap:12px; }
.fx-tl-axis{ width:12px; flex-shrink:0; display:flex; flex-direction:column; align-items:center; }
.fx-tl-dot{ width:10px; height:10px; border-radius:50%; margin-top:3px; flex-shrink:0; }
.fx-tl-line{ width:2px; flex:1; background:var(--line); margin:4px 0; }
.fx-tl-body{ flex:1; padding-bottom:12px; }
.fx-tl-time{ font-size:11px; color:var(--muted); }
.fx-tl-meta{ font-size:13px; margin:1px 0; }
.fx-tl-txt{ font-size:12px; color:var(--muted); line-height:1.5; }
.fx-steps{ display:flex; align-items:center; gap:6px; margin-top:10px; padding-top:10px; border-top:0.5px solid var(--line); }
.fx-stp{ display:flex; align-items:center; gap:4px; font-size:11px; color:var(--muted); white-space:nowrap; }
.fx-dot{ width:8px; height:8px; border-radius:50%; display:inline-block; }
.fx-st-ok{ background:#639922; }
.fx-st-cur{ background:#EF9F27; }
.fx-st-todo{ background:#D3D1C7; }
.fx-ln{ flex:1; height:1px; background:var(--line); }

/* ===== 固定位合并组详情 v2（参考用户截图 · 2026-08-07）===== */
.fx-head .fx-title{ font-size:14px; font-weight:500; display:flex; align-items:center; gap:6px; }
.fx-state{ font-size:12px; color:var(--muted); margin-bottom:10px; }
.fx-state b{ color:var(--text-primary,#3a2e3c); font-weight:500; }
.fx-row{ font-size:13px; padding:4px 0; line-height:1.7; }
.fx-row-tag{ font-weight:500; margin-right:4px; }
.fx-row-text{ display:block; margin-top:2px; font-size:13px; }
.fx-blue-box{ background:var(--blue-soft); border-left:3px solid #0F6E56; border-radius:8px; padding:8px 12px; margin:8px 0; }
.fx-blue-h{ font-size:13px; font-weight:500; color:#0F6E56; margin-bottom:4px; }
.fx-blue-line{ font-size:13px; color:var(--blue); line-height:1.8; }
.fx-tl-title{ font-size:13px; font-weight:500; margin-top:12px; padding-top:10px; border-top:0.5px solid var(--line); }
.fx-tl-lab{ font-size:11px; padding:1px 6px; border-radius:4px; margin-left:4px; font-weight:500; opacity:.9; }

/* ===== 排位网格（2026-08-08 桌面方案A：9列双周末×30分钟全密度；手机横滑适配1=时间列 sticky 冻结） ===== */
.fx-grid-scroll{ overflow-x:auto; border:1px solid var(--line); border-radius:10px; background:#fff; padding:4px; scroll-behavior:smooth; -webkit-overflow-scrolling:touch; }
.fx-grid{ display:grid; grid-template-columns:44px repeat(9,minmax(0,74px)); gap:2px; min-width:700px; }
.fx-grid-tc{ position:sticky; left:0; z-index:2; background:linear-gradient(180deg,#534AB7,#7F77DD); color:#fff; font-size:11px; text-align:center; padding:5px 2px; border-radius:7px; font-variant-numeric:tabular-nums; }
.fx-grid-th{ z-index:3; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px; }
.fx-grid-col{ color:#fff; font-size:11px; text-align:center; padding:5px 2px; border-radius:8px 8px 0 0; }
.fx-grid-cell{ min-height:24px; border-radius:5px; font-size:9px; display:flex; flex-direction:column; gap:1px; }
.fx-grid-cell > * { flex:1 1 auto; min-height:0; }
.fx-grid-cell > div { display:flex; flex-direction:column; gap:1px; }
.fx-grid-cell > div > .fx-cell-name { flex:1 1 auto; min-height:0; }
.fx-cell-name{ display:flex; align-items:center; justify-content:center; width:100%; box-sizing:border-box; max-width:100%; padding:0 3px; text-align:center; }
/* 单日视图样式（.fx-mode-bar / .fx-day-*）已随单日视图一并删除，双端统一网格 .fx-grid */
@media (max-width:980px){
  .fx-grid{ grid-template-columns:44px repeat(9,minmax(0,66px)); min-width:640px; }
}
/* 实时排位预览 · 周视图轮播（.fx-rt-carousel）：每屏一块完整 周一~周日 面板，横向滑动看整月（下月固定表仍沿用） */
.fx-rt-carousel{ display:flex; gap:6px; overflow-x:auto; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch; padding:2px; scroll-behavior:smooth; scrollbar-width:none; -ms-overflow-style:none; }
.fx-rt-carousel::-webkit-scrollbar{ display:none; }
.fx-rt-week{ flex:0 0 100%; scroll-snap-align:start; overflow:hidden; border:1px solid var(--line); border-radius:8px; background:#fff; padding:2px; }
.fx-rt-week .fx-grid{ min-width:0 !important; gap:1px; }
.fx-rt-week .fx-grid-cell{ min-height:22px; border-radius:4px; }
/* 2026-09-28 用户拍板：取消「本周」蓝色描边（fx-rt-week--today 高亮），全部周面板统一样式；
   class 保留 —— fxRtGoToday/fxNmGoToday 仍用 .fx-rt-week--today 定位滚动 */
@media (max-width:768px){
  .fx-rt-week .fx-grid-tc{ padding:3px 1px; font-size:9px; }
  .fx-rt-week .fx-grid-th{ padding:4px 1px; font-size:10px; }
  .fx-rt-week .fx-grid-cell{ min-height:20px; font-size:8px; }
  .fx-rt-week .fx-cell-name{ font-size:8px !important; padding:2px 2px !important; transform:none; display:flex !important; align-items:center !important; justify-content:center !important; }
}
/* 固定位周期状态卡：标题 + 阶段 badge */
.fx-cycle-head{ display:flex; align-items:center; justify-content:space-between; gap:8px; flex-wrap:wrap; padding:0 2px; }
.fx-cycle-title{ font-weight:600; font-size:14px; color:var(--text); }
.fx-cycle-badge{ font-size:11px; font-weight:600; padding:2px 9px; border-radius:999px; background:#eef1f6; color:#6b7280; white-space:nowrap; }
.fx-eff-ym{ font-size:12px; }   /* 生效月药丸字号（手机端由 media 覆写为 10px 适配窄屏） */
.fx-cycle-badge--closed{ background:#fff4d6; color:#b7791f; }
/* 时间线：PC 横向 stepper */
.fx-cycle-tl{ display:flex; justify-content:space-between; align-items:flex-start; position:relative; padding:8px 0 4px; margin:6px 0; }
.fx-cycle-tl::before{ content:''; position:absolute; top:20px; left:12%; right:12%; height:2px; background:#d1d5db; z-index:0; }
.fx-cycle-step{ flex:1; display:flex; flex-direction:column; align-items:center; position:relative; z-index:1; text-align:center; }
.fx-cycle-step__dot{ width:24px; height:24px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:600; }
.fx-cycle-step__body{ margin-top:6px; display:flex; flex-direction:column; gap:2px; }
.fx-cycle-step__name{ font-size:12px; font-weight:500; color:var(--text); }
.fx-cycle-step__date{ font-size:10px; color:var(--muted); }
/* 阶段状态色：已完成绿 ✓ / 当前品牌紫高亮 / 未来灰；圆点配色集中在此（不再内联），与 is-cur 同步 */
.fx-cycle-step__dot{ background:#e5e7eb; color:#9ca3af; }
.fx-cycle-step.is-done .fx-cycle-step__dot{ background:#10b981; color:#fff; }
.fx-cycle-step.is-cur .fx-cycle-step__dot{ background:#534AB7; color:#fff; box-shadow:0 0 0 4px rgba(83,74,183,.16); }
.fx-cycle-step.is-done .fx-cycle-step__name{ color:#0f9d6b; }
.fx-cycle-step.is-cur .fx-cycle-step__name{ color:#534AB7; font-weight:700; }
@media (max-width:768px){
  /* 时间线：移动端竖向时间轴（圆点+竖线，阶段名左对齐不再断字）；5 步垂直排布，逐行留白避免堆积 */
  .fx-cycle-head{ align-items:flex-start; }
  .fx-cycle-tl{ flex-direction:column; align-items:stretch; padding:6px 0; }
  .fx-cycle-tl::before{ top:18px; bottom:18px; left:11px; right:auto; width:2px; height:auto; }
  .fx-cycle-step{ flex:initial; flex-direction:row; align-items:center; text-align:left; padding:8px 0; }
  .fx-cycle-step__dot{ flex:0 0 24px; }
  .fx-cycle-step__body{ margin-top:0; margin-left:10px; flex-direction:row; align-items:baseline; gap:8px; }
  .fx-cycle-step__name{ font-size:13px; }
  .fx-cycle-step__date{ font-size:11px; }
}
@media (max-width:480px){
  .fx-rt-week .fx-grid{ grid-template-columns:34px repeat(7,minmax(0,1fr))!important; min-width:0 !important; }
}

/* 2026-08-12 移动端防聚焦自动放大：iOS/部分安卓在聚焦 <16px 的输入框/下拉/文本域时自动 zoom，
   学员管理等含搜索/筛选控件的页面点击即被放大、需手动缩小。统一提到 16px 即不触发浏览器自动缩放（桌面端保持原样）。 */
@media (max-width:768px){
  input, select, textarea{ font-size:16px !important; }
}

/* ===== 顶部演员下拉 · 自定义分组下拉（方案B：全部可见/手动可见 分组 + 彩色标签） ===== */
.actor-select{ position:relative; display:inline-block; min-width:0; }
.as-trigger{ display:flex; align-items:center; gap:6px; padding:5px 10px; border-radius:10px; background:rgba(255,255,255,0.7); border:1px solid var(--line); cursor:pointer; font-size:13px; font-weight:600; color:var(--text); max-width:210px; transition:background .15s,border-color .15s; }
.as-trigger:hover{ background:#fff; border-color:var(--primary-soft); }
.as-trigger--disabled{ cursor:default; opacity:.85; }
.as-emoji{ font-size:15px; line-height:1; }
.as-name{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:140px; }
.as-caret{ font-size:10px; color:var(--muted); transition:transform .15s; margin-left:2px; }
.actor-select.open .as-caret{ transform:rotate(180deg); }
.as-panel{ position:absolute; top:calc(100% + 6px); left:0; min-width:240px; max-height:min(62vh,430px); overflow:auto; background:rgba(255,255,255,0.97); backdrop-filter:blur(18px) saturate(160%); -webkit-backdrop-filter:blur(18px) saturate(160%); border:1px solid var(--glass-border); border-radius:14px; box-shadow:0 18px 48px rgba(168,85,247,0.22); padding:6px; z-index:120; display:none; }
.actor-select.open .as-panel{ display:block; }
.as-group{ padding:3px 0; }
.as-group + .as-group{ border-top:1px dashed var(--line); }
.as-group-title{ font-size:11px; font-weight:700; color:var(--muted); padding:7px 10px 4px; letter-spacing:.3px; display:flex; align-items:center; justify-content:space-between; gap:8px; }
.as-group-count{ font-size:10px; font-weight:600; color:var(--muted); background:var(--accent-soft); border-radius:8px; padding:1px 7px; }
.as-item{ display:flex; align-items:center; gap:8px; padding:7px 10px; border-radius:9px; cursor:pointer; transition:background .12s; }
.as-item:hover{ background:var(--hover-soft); }
.as-item--active{ background:var(--accent-soft); }
.as-item--active .as-name{ color:var(--accent-strong); font-weight:700; }
.as-item .as-name{ flex:1 1 auto; }
.as-tag{ font-size:10px; font-weight:700; border-radius:8px; padding:2px 8px; white-space:nowrap; flex-shrink:0; }
.as-tag--all{ color:#1d7a4d; background:#E2F7EC; }
.as-tag--manual{ color:#a85b14; background:#FFF1DD; }
.as-tag--hidden{ color:#6b7280; background:#EEF0F3; }
.as-item--hidden{ opacity:.6; }
.as-empty{ padding:16px 12px; text-align:center; font-size:12px; color:var(--muted); }

/* 移动端底部抽屉挂载在 body 下，避免被顶栏 backdrop-filter 创建 containing block 截断 */
#actor-select-sheet{ display:none; }
.as-scrim{ display:none; }
@keyframes asSheetUp{ from{ transform:translateY(100%); opacity:.55 } to{ transform:translateY(0); opacity:1 } }
@media (max-width:768px){
  .as-trigger{ max-width:none; flex:1 1 auto; width:100%; }
  .as-name{ max-width:none; flex:1 1 auto; }
  /* 移动端：#actor-select 内的面板隐藏，改用 body 层级的 #actor-select-sheet */
  #actor-select > .as-scrim, #actor-select > .as-panel{ display:none !important; }
  #actor-select-sheet{
    display:block; position:fixed; inset:0; z-index:115;
    pointer-events:none; opacity:0; visibility:hidden;
    transition:opacity .25s ease, visibility .25s ease;
  }
  #actor-select-sheet.open{ pointer-events:auto; opacity:1; visibility:visible; }
  #actor-select-sheet.open .as-panel{ display:block; }
  #actor-select-sheet .as-scrim{
    display:block; position:absolute; inset:0;
    background:rgba(15,12,32,.42); z-index:1;
  }
  #actor-select-sheet .as-panel{
    position:absolute; left:0; right:0; top:auto;
    bottom:calc(70px + env(safe-area-inset-bottom));
    width:100%; min-width:0;
    max-height:min(calc(100dvh - 84px - env(safe-area-inset-bottom)), 420px); overflow:auto;
    -webkit-overflow-scrolling:touch;
    background:rgba(255,255,255,0.97);
    backdrop-filter:blur(18px) saturate(160%); -webkit-backdrop-filter:blur(18px) saturate(160%);
    border:1px solid var(--glass-border); border-bottom:none;
    border-radius:20px 20px 0 0;
    box-shadow:0 -10px 40px rgba(0,0,0,.22);
    padding:8px 6px 14px;
    z-index:2;
    animation:asSheetUp .3s cubic-bezier(.2,.8,.2,1);
  }
}

/* 月度时段配置：月份自定义下拉（替代原生 select 平铺展示） */
.sp-month{ position:relative; display:inline-block; min-width:180px; }
.sp-month-trigger{ display:flex; align-items:center; justify-content:space-between; gap:8px; padding:7px 12px; border-radius:10px; border:1px solid var(--line); background:rgba(255,255,255,0.7); cursor:pointer; font-size:13px; font-weight:600; color:var(--text); transition:background .15s,border-color .15s; }
.sp-month-trigger:hover{ background:#fff; border-color:var(--primary-soft); }
.sp-month-caret{ color:var(--muted); transition:transform .15s; flex-shrink:0; }
.sp-month.open .sp-month-caret{ transform:rotate(180deg); }
.sp-month-panel{ position:absolute; top:calc(100% + 6px); left:0; min-width:100%; background:rgba(255,255,255,0.97); backdrop-filter:blur(18px) saturate(160%); -webkit-backdrop-filter:blur(18px) saturate(160%); border:1px solid var(--glass-border); border-radius:14px; box-shadow:0 18px 48px rgba(168,85,247,0.22); padding:6px; z-index:120; max-height:60vh; overflow:auto; }
.sp-month-item{ padding:9px 12px; border-radius:9px; cursor:pointer; font-size:13px; color:var(--text); transition:background .12s; white-space:nowrap; }
.sp-month-item:hover{ background:var(--hover-soft); }
.sp-month-item.on{ background:var(--accent-soft); color:var(--accent-strong); font-weight:700; }
@media (max-width:768px){
  .sp-month{ min-width:0; flex:1 1 auto; width:100%; }
  .sp-month-panel{ left:0; right:0; }
}

/* ===== 演员开放时段总览（周/月热图） ===== */
.ov-wrap{ font-size:13px; color:#1f1f1f; --ov-rh:18px; }
.ov-stat{ font-size:13px; color:#444; margin-bottom:10px; }
.ov-top{ display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; margin-bottom:8px; }
.ov-legend{ display:flex; gap:14px; font-size:12px; color:#444; margin-top:10px; flex-wrap:wrap; }
.ov-legend span{ display:flex; align-items:center; gap:5px; white-space:nowrap; }
.ov-sw{ width:11px; height:11px; border-radius:3px; border:0.5px solid #b4b2a9; display:inline-block; }
@media (max-width:480px){
  .ov-legend{ gap:8px 10px; font-size:10px; margin-top:8px; }
  .ov-legend span{ gap:3px; }
  .ov-sw{ width:9px; height:9px; border-radius:2px; }
  /* 资格名单弹窗：手机端单列，添加学员区固定显示4人 */
  .fxq-panel-grid{ grid-template-columns:1fr; gap:10px; }
  .fxq-panel{ padding:10px; }
  .fxq-panel-title{ font-size:13px; }
  .fxq-list{ max-height:168px; }
  .fxq-row{ gap:6px; padding:5px 6px; }
  .fxq-name{ font-size:12px; }
  .fxq-add, .fxq-remove{ font-size:11px; padding:3px 8px; }
}
.ov-sw--open{ background:#a5d6a7; }
.ov-sw--bk{ background:#6aa0e0; }
.ov-sw--pending{ background:#f0d49a; }
.ov-sw--move{ background:#f0a93a; }
.ov-sw--cancel{ background:#e24b4a; }
.ov-sw--cp{ background:#fde3e6; }
.ov-nav{ display:flex; gap:6px; flex-wrap:wrap; }
.ov-sub{ font-size:12px; color:#5f5e5a; margin-bottom:6px; }
.ov-hint{ font-size:11px; color:#757575; margin-bottom:6px; padding:6px 10px; background:#fffde7; border:1px solid #fff9c4; border-radius:6px; }
.ov-scroll{ max-height:46vh; overflow:auto; border:1px solid #ececec; border-radius:8px; padding:2px; background:#fff; }
.ov-grid{ display:grid; grid-template-columns:46px repeat(var(--cols), minmax(0,1fr)); gap:4px; }
.ov-head{ position:sticky; top:0; background:#fff; z-index:3; margin-bottom:2px; box-shadow:0 1px 0 #eee; }
.ov-head .ov-time-col{ grid-template-rows: var(--ov-rh,18px); }
.ov-time-col{ display:grid; grid-template-rows:repeat(var(--rows,38), var(--ov-rh,18px)); gap:1px; position:sticky; left:0; background:#fff; z-index:2; }
.ov-time-label{ font-size:10px; color:#888; line-height:var(--ov-rh,18px); height:var(--ov-rh,18px); text-align:right; padding-right:4px; white-space:nowrap; }
.ov-col-h{ text-align:center; font-size:11px; font-weight:500; color:#444; padding-bottom:4px; }
.ov-date{ font-weight:400; color:#5f5e5a; font-size:10px; }
.ov-body{ }
.ov-col{ display:grid; grid-template-rows:repeat(var(--rows,38), var(--ov-rh,18px)); gap:1px; }
.ov-cell{ position:relative; border:0.5px solid #d9d9d9; border-radius:2px; height:var(--ov-rh,18px); min-height:var(--ov-rh,18px); box-sizing:border-box; overflow:hidden; }
.ov-cell--open{ background:#a5d6a7; }
.ov-cell--booked{ background:#6aa0e0; }
.ov-cell--pending{ background:#f0d49a; }
.ov-cell--move{ background:#f0a93a; }
.ov-cell--refunded{ background:#e24b4a; }
.ov-cell--off{ background:#eceff1; }
/* 2026-09-17 删除 .ov-cell--closed/.ov-sw--closed：9/14 方案A 已把所有 cancelled（含关闭型 isClosed）归正为 refunded，「已关闭」分支成死代码，与「退约」红格同义 */
.ov-cell--cancelpending{ background:#fde3e6; }
.ov-name{ display:block; font-size:9px; line-height:var(--ov-rh,18px); text-align:center; color:#2c2c2a; padding:0 1px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; pointer-events:none; }
.ov-cell--refunded .ov-name{ color:#fff; }
.ov-cell--move .ov-name{ color:#2c2c2a; }
.ov-tag{ position:absolute; top:0; right:1px; font-size:8px; line-height:10px; padding:0 2px; border-radius:2px; background:rgba(0,0,0,.32); color:#fff; pointer-events:none; }
.ov-cell:hover{ outline:1px solid #90a4ae; }
.ov-loading{ padding:40px 20px; text-align:center; color:#888; font-size:14px; }
.ov-summary{ margin-top:10px; border:1px solid #ececec; border-radius:8px; padding:8px 10px; background:#fafafa; max-height:11.5em; overflow-y:auto; }
.ov-summary-title{ font-size:12px; font-weight:700; color:#555; margin-bottom:6px; }
.ov-sum-row{ display:flex; justify-content:space-between; gap:8px; font-size:12px; line-height:1.8; }
.ov-sum-date{ color:#444; flex:0 0 auto; }
.ov-sum-range{ color:#2e7d32; font-weight:500; text-align:right; }
.ov-sum-range--closed{ color:#888; font-weight:400; }
.ov-foot{ display:flex; justify-content:flex-end; gap:8px; margin-top:12px; }
@media (max-width:768px){
  .ov-grid{ grid-template-columns:40px repeat(var(--cols), minmax(0,1fr)); }
  .ov-top{ flex-direction:column; align-items:flex-start; }
  .ov-scroll{ max-height:40vh; }
  .ov-wrap{ --ov-rh:16px; }
}
/* 开放时段总览 · 点击格子后的底部详情浮窗 */
.ov-detail-sheet{ position:sticky; bottom:0; left:0; right:0; z-index:10; background:#fff; border-top:1px solid #e0e0e0; border-radius:12px 12px 0 0; box-shadow:0 -4px 16px rgba(0,0,0,.08); padding:12px 14px calc(12px + env(safe-area-inset-bottom)); margin:0 -14px -14px; }
.ov-detail-inner{ display:flex; align-items:center; gap:10px; }
.ov-detail-info{ flex:1 1 auto; font-size:13px; color:#333; line-height:1.5; }
.ov-cell{ cursor:pointer; }
.ov-cell--active{ outline:2px solid #7d4fd1 !important; outline-offset:-1px; }

/* 2026-08-30 进行中工单锁定表现（四表格统一）：
   · .cell-locked → bcancel 进行中灰显「处理中」，覆盖各日行底色 */
.cell-locked{ background:#f3f4f6 !important; color:#9aa1b5 !important; border-color:#e2e5ea !important; }
.cell-locked .day-name, .cell-locked .day-st, .cell-locked .day-time{ color:#9aa1b5 !important; }
.mg-cell{ position:relative; }

/* 2026-08-30 防月历格在 375px 屏下变形/溢出 */
@media (max-width:380px){
  .month-grid{ grid-template-columns:repeat(7, minmax(0,1fr)); gap:2px; }
  .mg-cell{ min-height:70px; padding:2px 3px; font-size:10px; }
  .mg-cell .mg-date{ font-size:10px; }
  .mg-cell .mg-hint, .mg-cell .mg-bk{ font-size:9px; }
  .mg-cell .mg-hint-time{ white-space:nowrap; overflow:visible; font-size:9px; }
  .mg-cell .mg-hint .mg-badge{ font-size:8px; padding:0 3px; min-width:12px; height:12px; line-height:12px; }
  .mg-cell .mg-count-row{ gap:2px; margin-top:1px; }
  .mg-cell .mg-count-row .mg-dot{ min-width:14px; height:14px; font-size:8px; padding:0 3px; }
  .bk-month .mg-free, .bk-month .mg-booked{ font-size:9px; padding:1px 3px; }
  .mg-cell .mg-empty{ margin-top:4px; }
  /* split 徽标在 375px 极窄列保持横向（inline），仅缩小字号/内边距/间距使其落在格内不溢出 */
  .mg-badge.mg-badge--split{ gap:2px; }
  .mg-badge.mg-badge--split .mg-num{ font-size:8px; padding:0 2px; border-radius:3px; }
  .mg-cell .dc-dots{ margin-top:2px; gap:2px; }
  .mg-cell .bk-dot-mini{ width:5px; height:5px; }
  .mg-dots{ gap:2px; }
  .mg-dot{ width:5px; height:5px; }
}

/* ===== 手机端字号分级归一（2026-09-02）=====
   统一同类元素字号，消除散乱。以本块为准，覆盖上方零散 font-size。
   档位：L1 20 顶层大标题 / L2 16 卡片主标题 / L3 14 区块标题(semibold)
        L4 14 正文·按钮 / L5 12 次要·标签 / L6 11 表头·角标 / L7 10 密集表(≤480再降) */
@media (max-width:768px){
  body{ font-size:14px; }

  /* L1 顶层大标题 */
  .login-card h1,.dash-hero .dh-greet{ font-size:20px; }

  /* L2 卡片主标题 */
  .card-title,.sub-h,.modal-head,.dash-title,.tk-type,.receipt-head,.ac-pf-name,.act-card__name{ font-size:16px; }

  /* L3 区块标题（semibold 区分层级） */
  .dash-tbl-title,.mv-rule-sec-t,.myf-tl-title,.mv-card-h,.flow-hist-title,.fd-title,.mv-rule-h-t,.fx-year-title{ font-size:14px; font-weight:600; }

  /* L4 正文 + 按钮 */
  .day-name,.nc-item-body,.myf-detail,.tk-row,.bf-tl-meta,.nc-item-head,.ac-m-stu,.tf-pick-t,.mv-tab,.sp-toggle,.slot-chip,.btn,.btn-sm{ font-size:14px; }

  /* L5 次要文字 + 标签 + 角标 */
  .f-item label,.card-title .sub,.muted,.st,.day-st,.mg-date,.dash-bar,.flow-sub,.fx-year-cnt,.ac-cnt,.myf-panel-empty,.bf-tl-rev,.myf-tl-rev,.tf-pick-warn,.role-badge{ font-size:12px; }

  /* L6 表头 / 角标 / 极辅助 */
  .dash-table th,.nc-item-time,.nc-item-dot,.nc-item-hint,.rate-pct,.myf-head,.tk-tbl th,.tk-tbl td,.act-tbl th,.act-tbl td,.st-tbl th,.st-tbl td,.bt-tbl th,.bt-tbl td,.acc-tbl th,.acc-tbl td,.rl-tbl th,.rl-tbl td,.mv-tl-body span,.myf-tl-time,.myf-idx,.myf-type,.myf-ap,.bf-tl-time,.mg-badge,.nav-badge{ font-size:11px; }

  /* L7 密集表格 / 月历（≤480 已有更小覆盖） */
  table.sched,.mg-cell,.sched-cal td{ font-size:10px; }
  .cell-note,.cell-badge{ font-size:9px; }

  /* 输入类特例：手机端 ≥16px 防止聚焦自动缩放 */
  .f-item input,.f-item select,.f-item textarea,.modal-body input,.modal-body select,.modal-body textarea,.quick-bar input[type=text],.filter-bar select,.filter-bar input,.mf-filter-bar select,.mf-filter-bar input,.mv-field select,.sp-search,.login-form input{ font-size:16px; }
}


/* 全站列表/筛选下拉统一画风（覆盖 16px 防缩放）：业务流水、个人流水、固定表排位月份、dashboard 演员筛选等 */
@media (max-width:768px){
  .filter-bar select,.mf-filter-bar select,.myf-filter-bar select,.m-select{
    padding:6px 26px 6px 10px !important;
    border:1px solid #e5e3ef !important;
    border-radius:12px !important;
    background:#faf9fd url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238b8799' stroke-width='2.5'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 9px center !important;
    font-size:13px !important;
    color:var(--text) !important;
    min-height:34px !important;
    appearance:none !important; -webkit-appearance:none !important;
  }
  .mf-filter-bar select,.myf-filter-bar select{ width:100%; min-width:0; max-width:none; }
  .filter-bar select,.m-select{ width:auto; min-width:0; max-width:none; }
  /* 业务/个人流水的申请人筛选输入框：字号与下拉统一为 13px（覆盖 16px 防缩放） */
  .mf-filter-bar input,.myf-filter-bar input{
    padding:6px 10px !important;
    border:1px solid #e5e3ef !important;
    border-radius:12px !important;
    background:#faf9fd !important;
    font-size:13px !important;
    color:var(--text) !important;
    min-height:34px !important;
  }
}

/* 方案B：预约受理回执卡片分组 */
.receipt.rc-b{ background:#fdfaf2; }
.rc-card{ background:#fff; border:1px solid #efe7d2; border-radius:10px; padding:10px 12px; margin:8px 0; }
.rc-title{ font-size:12.5px; font-weight:700; color:#8a7a52; margin-bottom:6px; letter-spacing:.5px; }
.rc-grid{ display:grid; grid-template-columns:1fr 1fr; gap:6px 14px; }
.rc-grid>div{ display:flex; flex-direction:column; gap:1px; }
.rc-grid>div>span{ font-size:11px; color:#a89a76; }
.rc-grid>div>b{ font-size:13px; color:#3a331f; font-weight:600; }
.rc-chips{ display:flex; flex-wrap:wrap; gap:5px; }
.rc-chip{ display:inline-block; padding:3px 8px; background:#f4f0e6; border:1px solid #e6dcc4; border-radius:6px; font-size:11.5px; color:#5a4f33; }
.rc-chip.rc-more{ background:transparent; border:none; color:#a89a76; padding:3px 0; }
.rc-row{ display:flex; justify-content:space-between; padding:3px 0; font-size:13px; }
.rc-row>span{ color:#8a7a52; }
.rc-row>b{ color:#3a331f; }
.rc-eff{ font-size:12.5px; color:#5a4f33; line-height:1.6; }
.rc-warn{ margin:8px 0 2px; padding:8px 10px; border:1px solid #e6b3b3; background:#fff5f5; border-radius:8px; font-size:12.5px; color:#b23b3b; line-height:1.5; }
@media (max-width:768px){
  .rc-card{ padding:9px 10px; }
  .rc-grid{ grid-template-columns:1fr 1fr; }
  .rc-chip{ font-size:11px; }
}

/* 方案B：固定位状态徽章 + 生效流程三步状态条 */
.rc-badge-row{ display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.rc-badge{ display:inline-flex; align-items:center; padding:3px 10px; border-radius:12px; font-size:12px; font-weight:600; line-height:1.4; }
.rc-badge.on{ background:#eafaf1; color:#10976a; border:1px solid #b9ecd2; }
.rc-badge.off{ background:#f2f2f5; color:#7a7785; border:1px solid #e2e2e8; }
.rc-badge.sub{ background:#EEEDFE; color:#534AB7; border:1px solid #ddd9fb; }
.rc-flow{ display:flex; align-items:flex-start; padding:4px 0 2px; }
.rc-step{ display:flex; flex-direction:column; align-items:center; gap:5px; flex:0 0 auto; width:62px; }
.rc-step .dot{ width:14px; height:14px; border-radius:50%; background:#e2e2e8; border:2px solid #cfcfd8; box-sizing:border-box; }
.rc-step.done .dot{ background:#534AB7; border-color:#534AB7; }
.rc-step.current .dot{ background:#fff; border-color:#534AB7; box-shadow:0 0 0 3px rgba(83,74,183,.18); }
.rc-step .lbl{ font-size:11px; color:#7a7785; line-height:1.25; text-align:center; }
.rc-step.done .lbl{ color:#3a331f; font-weight:600; }
.rc-step.current .lbl{ color:#534AB7; font-weight:700; }
.rc-line{ flex:1; height:2px; background:#e2e2e8; margin-top:6px; min-width:14px; }
.rc-line.done{ background:#534AB7; }
@media (max-width:768px){
  .rc-step{ width:56px; }
  .rc-badge{ font-size:11px; padding:3px 9px; }
  .rc-step .lbl{ font-size:10.5px; }
}

/* 方案B：固定位变更「确认提交」分组确认弹窗（与回执风格一致） */
.rc-confirm .rc-chips{ margin-top:2px; }
.rc-chip--add{ background:#eafaf1; border-color:#b9ecd2; color:#10976a; }
.rc-chip--del{ background:#fff5f5; border-color:#e6b3b3; color:#b23b3b; }
.rc-empty{ font-size:11.5px; color:#b3a988; font-style:italic; }
.rc-info{ display:flex; flex-direction:column; gap:6px; }
.rc-info-row{ display:flex; align-items:flex-start; gap:8px; font-size:12.5px; line-height:1.45; }
.rc-info-row>span{ flex:0 0 64px; color:#a89a76; }
.rc-info-row>b{ color:#3a331f; font-weight:600; }
.rc-note{ font-size:11.5px; color:#a89a76; line-height:1.5; padding-left:72px; margin-top:-2px; }
.rc-info-warn>span{ color:#b23b3b; }
.rc-info-warn>b{ color:#b23b3b; }
.rc-notice-blue{ margin:10px 0 2px; padding:9px 11px; border-radius:8px; background:#eef4ff; border:1px solid #cddcff; color:#2f5fc4; font-size:12px; line-height:1.5; }
.rc-confirm-actions{ display:flex; gap:10px; margin-top:12px; }
.rc-confirm-actions .btn{ flex:1; justify-content:center; }
@media (max-width:768px){
  .rc-info-row>span{ flex:0 0 58px; }
  .rc-confirm-actions .btn{ font-size:12px; padding:7px 8px; }
}
/* ⑬ 2026-09-09/10 固定位选位周期卡：超管操作区两按钮（锁定/解锁固定表 + 资格名单）手机端横排平分不换行 */
.fx-cycle-lock-actions{ display:inline-flex; gap:6px; flex-wrap:wrap; vertical-align:middle; }
@media (max-width:600px){
  .fx-cycle-lock-actions{ display:flex; width:100%; gap:8px; flex-wrap:nowrap; margin-top:6px; }
  .fx-cycle-lock-actions .btn{ flex:1 1 0; min-width:0; white-space:nowrap; padding:6px 8px; font-size:12px; }
}
