:root{
  --bg:#f4f6fb; --card:#fff; --ink:#1e2433; --ink-2:#6b7488; --ink-3:#a3abbb;
  --line:#e6eaf2; --grid-line:#eef1f7; --brand:#2563eb;
  --tw:48px;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB","Helvetica Neue",Arial,sans-serif;
  background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;
  padding:16px 12px 48px;
}
.wrap{max-width:1180px;margin:0 auto}

/* ---------- 顶部工具条 ---------- */
.top{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  flex-wrap:wrap;margin-bottom:14px;
}
/* v4.2 顶栏左侧 → v8.1 改为课表选择器（家长头像/姓名移除，账号信息在设置里） */
.brand{display:flex;align-items:center;gap:9px;min-width:0;max-width:60%}
/* v8.5.9 课表选择器：自定义下拉面板（两列：归属/名称 + 自己的课表可改名 + 新建入口）
 * 原生 select 废弃——点击其区域会冒泡到 .brand 的"跳设置"监听，B 切不回自己的课表 */
.tt-picker{position:relative}
.tt-picker #tt-btn{
  border:1px solid var(--line);background:#fff;color:var(--ink);
  font:700 14.5px/1 inherit;font-family:inherit;
  padding:9px 30px 9px 14px;border-radius:10px;cursor:pointer;outline:none;
  max-width:44vw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2364748b' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 11px center;
}
.tt-picker #tt-btn:focus{border-color:var(--brand)}
.tt-picker .tt-menu{
  display:none;position:absolute;top:calc(100% + 6px);left:0;z-index:320;
  min-width:280px;max-width:86vw;max-height:60vh;overflow-y:auto;
  background:#fff;border:1px solid var(--line);border-radius:12px;
  box-shadow:0 8px 28px rgba(15,23,42,.14);padding:6px;
}
.tt-picker .tt-menu.open{display:block}
.tt-menu .ttm-sec{font-size:11px;color:var(--ink-3);padding:8px 10px 3px;font-weight:700;letter-spacing:.5px}
.tt-menu .ttm-row{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:9px;cursor:pointer}
.tt-menu .ttm-row:hover{background:#f1f5fb}
.tt-menu .ttm-row.on{background:#eef4ff}
.tt-menu .ttm-chk{flex:none;width:17px;height:17px;accent-color:var(--brand);cursor:pointer;pointer-events:none}   /* v8.5.10 首列选中标记：纯展示，点击由行接管 */
.tt-menu .ttm-owner{flex:none;font-size:11px;color:var(--ink-3);max-width:6em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tt-menu .ttm-name{flex:1;min-width:0;font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tt-menu .ttm-row.on .ttm-name{color:var(--brand)}
.tt-menu .ttm-ren{flex:none;font-size:12px;color:var(--brand);padding:3px 8px;border-radius:7px;border:1px solid var(--line);background:#fff}
.tt-menu .ttm-del{flex:none;font-size:12px;color:#dc2626;padding:3px 8px;border-radius:7px;border:1px solid #fecaca;background:#fef2f2}
.tt-menu .ttm-del:disabled{opacity:.5}
.tt-menu .ttm-new{margin-top:4px;border-top:1px dashed var(--line);padding:9px 10px;font-size:13.5px;color:var(--brand);font-weight:700;cursor:pointer;border-radius:0 0 9px 9px}
.tt-menu .ttm-new:hover{background:#f1f5fb}
/* 会员徽章：等级与充值档位挂钩（5.9=VIP1 / 9.9=VIP2 / 19.9=VIP3） */
.vip-badge{display:inline-flex;align-items:center;gap:2px;border-radius:7px;padding:2.5px 7px;
  font-size:10px;font-weight:800;letter-spacing:.5px;flex:none;line-height:1.2;
  border:1px solid transparent}
.vip-badge::before{content:"♛";font-size:9px}
.vip-badge.v1{background:#f1f5f9;color:#64748b;border-color:#cbd5e1}
.vip-badge.v2{background:linear-gradient(120deg,#fdf3e3,#fce8cc);color:#b45309;border-color:#f0c58a}
.vip-badge.v3{background:linear-gradient(120deg,#1f2937,#374151);color:#f6b17c;border-color:#4b5563}
/* v8.1 顶栏图标按钮：铃铛/打印/设置 统一白色方按钮（同尺寸同风格） */
.btn-set.tt-icon{padding:9px 11px}
.btn-set.tt-icon svg{display:block;opacity:.85}
/* v8.8.8 修复：删掉 .btn.btn-primary 白底覆盖（v8.1 历史遗留，把全部主按钮染白）。
 * 此前 #sc-go、.cc-main-btn 都是为绕开它打的补丁；根因移除后 .btn-primary 恢复品牌蓝。 */
.top-right{display:flex;align-items:stretch;gap:10px}
.acts{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
/* 孩子卡右侧"录入课程"按钮（v4.3：推到屏幕最右边） */
.kid-acts{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-left:auto}
.btn.btn-entry{
  background:var(--brand);color:#fff;border-color:var(--brand);font-weight:700;
  padding:8px 15px;border-radius:10px;white-space:nowrap
}
.btn.btn-entry:hover{background:#1d4ed8;border-color:#1d4ed8}
.btn.btn-entry:active{transform:scale(.97)}
/* 手机端 mk-head 里的录入按钮（同样推到最右） */
.mk-head{flex-wrap:wrap}
.mk-head .sp{flex:1}
.mk-head .btn-entry{padding:7px 12px;font-size:12.5px}
.btn-set{
  display:inline-flex;align-items:center;gap:6px;
  border:1px solid var(--line);background:#fff;color:var(--ink);
  padding:9px 18px;border-radius:10px;font-size:14px;font-weight:600;
  cursor:pointer;font-family:inherit;transition:.15s;white-space:nowrap;
}
.btn-set:hover{border-color:#c9d2e3;background:#f6f8fc;transform:translateY(-1px)}
.btn-set svg{opacity:.75}
@media (max-width:560px){
  .btn-set{padding:8px 12px;font-size:12.5px;gap:4px}
  .btn-set.tt-icon{padding:8px 9px}
  .tt-picker select{padding:8px 26px 8px 11px;font-size:13px}
  .top-right{gap:5px}
  .acts{gap:5px}
  .acts .btn{padding:8px 10px;font-size:12.5px}
  .acts .btn svg{width:13px;height:13px}
  /* 顶栏一行：品牌区收窄、昵称省略号、整体不换行 */
  .top{flex-wrap:nowrap;align-items:center;gap:8px;margin-bottom:10px}
  .brand{max-width:44%;gap:6px}
  .brand-avatar{width:26px;height:26px;border-radius:8px;font-size:12px}
  .brand-user{font-size:14px}
  .top-right{flex:1;min-width:0;justify-content:flex-end;flex-wrap:nowrap}
  .top-right .acts{flex-wrap:nowrap}
}
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:5px;border:1px solid var(--line);
  background:#fff;color:var(--ink);padding:7px 12px;border-radius:9px;
  font-size:13px;cursor:pointer;font-family:inherit;transition:.15s;
}
.btn:hover{border-color:#c9d2e3}
.btn-primary{background:var(--brand);color:#fff;border-color:var(--brand);font-weight:700}
.btn-primary:hover{background:#1d4ed8;border-color:#1d4ed8;color:#fff}
.btn-danger{color:#dc2626}
.btn svg{width:14px;height:14px}

/* ---------- 录入区 ---------- */
.panel{
  background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:14px;margin-bottom:14px;box-shadow:0 1px 3px rgba(20,30,60,.05);
}
.panel h3{font-size:14px;font-weight:700;margin-bottom:10px;display:flex;align-items:center;gap:8px}
.panel h3 .tag{font-size:11px;font-weight:500;color:var(--ink-3)}

/* ---------- Sheet 页签 ---------- */
.tabbar{display:flex;align-items:center;gap:6px;border-bottom:1px solid var(--line);margin:-2px -4px 12px;padding:0 4px}
.tabbar .sp{flex:1}
.tab{
  border:none;background:none;padding:9px 14px;font-size:14px;font-weight:600;color:var(--ink-3);
  cursor:pointer;font-family:inherit;position:relative;transition:color .15s;
}
.tab:hover{color:var(--ink-2)}
.tab.on{color:var(--brand)}
.tab.on::after{content:"";position:absolute;left:10px;right:10px;bottom:-1px;height:2.5px;border-radius:2px;background:var(--brand)}
.tabpane{min-height:80px}
.pane-tip{font-size:12.5px;color:var(--ink-2);line-height:1.7;margin:0 0 10px}
.pane-tip code{background:#f1f5f9;padding:1px 6px;border-radius:5px;font-size:11px;color:#475569}

/* +孩子按钮：醒目色，页签最左 */
.btn.btn-addkid{
  background:#ec4899;border-color:#ec4899;color:#fff;font-weight:700;
  padding:7px 14px;border-radius:10px;box-shadow:0 2px 8px rgba(236,72,153,.35);
}
.btn.btn-addkid:hover{background:#db2777;border-color:#db2777}

/* 开始识别按钮：请求中状态 */
#smart-go:disabled{
  opacity:.6;cursor:not-allowed;background:#6b7488;border-color:#6b7488;
}

/* 冲突课程强提醒：持续闪烁（2026-09-27 分组配色：--cf 由 JS 按冲突组注入，同组同色不同组不同色） */
.cls.conflict{--cf:#dc2626;animation:conflictBlink 1s ease-in-out infinite}
@keyframes conflictBlink{
  0%,100%{outline:3px solid var(--cf);box-shadow:0 0 0 0 color-mix(in srgb,var(--cf) 70%,transparent)}
  50%{outline:3px solid color-mix(in srgb,var(--cf) 15%,transparent);box-shadow:0 0 0 6px color-mix(in srgb,var(--cf) 0%,transparent)}
}
/* color-mix 兜底（老浏览器）：退化为原红色系闪烁，仍可辨识 */
@supports not (color: color-mix(in srgb, red 50%, blue)){ 
  @keyframes conflictBlink{
    0%,100%{outline:3px solid var(--cf);box-shadow:0 0 0 0 rgba(220,38,38,.7)}
    50%{outline:3px solid rgba(220,38,38,.15);box-shadow:0 0 0 6px rgba(220,38,38,0)}
  }
}

/* ---------- 课程卡片：电话提醒徽章（两态）+ 删除叉 ----------
   参考 Material Design 两态图标 + Google Calendar 日程徽标惯例：
   · 未设置 = 幽灵小圆钮：半透明白底灰话筒，悬停/选中卡片时才出现，浏览课表零干扰
   · 已设置 = 常显绿徽章：绿底白话筒 + 白描边 + 投影，任何课程底色上一眼可辨，不再隐藏 */
.cls{cursor:pointer}
.cls .del{
  position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;
  border:none;background:rgba(255,255,255,.92);color:#dc2626;font-size:13px;line-height:1;
  cursor:pointer;font-family:inherit;display:none;place-items:center;padding:0;
  box-shadow:0 1px 4px rgba(15,23,42,.3);
}
.cls .del:hover{background:#fff;color:#991b1b}
/* 未设置态：幽灵小钮 */
.cls .cc{
  position:absolute;top:3px;left:3px;width:19px;height:19px;border-radius:50%;
  border:none;background:rgba(255,255,255,.92);color:#94a3b8;line-height:1;
  cursor:pointer;font-family:inherit;display:none;place-items:center;padding:0;
  box-shadow:0 1px 4px rgba(15,23,42,.3);
}
.cls:hover .cc{display:grid}                /* 悬停即出现（未设时也能一眼找到入口） */
.cls .cc:hover{background:#fff;color:#475569}
.cls .cc svg{width:10px;height:10px}
/* 已设置态：常显绿色大徽章（大一圈、白描边托底，深浅课程色上都醒目） */
.cls .cc.on{
  top:5px;left:5px;width:26px;height:26px;display:grid;
  background:#10b981;color:#fff;border:2px solid rgba(255,255,255,.95);
  box-shadow:0 2px 8px rgba(16,185,129,.55);
}
.cls .cc.on:hover{background:#059669;transform:scale(1.12)}
.cls .cc.on svg{width:14px;height:14px}
/* 待命态（接听人已取关）：常显黄色徽章 + 呼吸灯闪烁（用户要求：一眼看出"怎么一直在闪"） */
.cls .cc.standby{
  top:5px;left:5px;width:26px;height:26px;display:grid;
  background:#f59e0b;color:#fff;border:2px solid rgba(255,255,255,.95);
  animation:ccBreathe 1.6s ease-in-out infinite;
}
.cls .cc.standby:hover{background:#d97706;transform:scale(1.12);animation:none}
.cls .cc.standby svg{width:14px;height:14px}
@keyframes ccBreathe{
  0%,100%{box-shadow:0 0 0 0 rgba(245,158,11,.75),0 2px 8px rgba(245,158,11,.55)}
  50%{box-shadow:0 0 0 7px rgba(245,158,11,0),0 2px 8px rgba(245,158,11,.25)}
}
/* v9.8.2 用户暂停态：黄色徽章 + 斜杠（静态；区别于待命态的呼吸闪烁——待命=送不到，暂停=自己关的） */
.cls .cc.paused{
  top:5px;left:5px;width:26px;height:26px;display:grid;
  background:#eab308;color:#fff;border:2px solid rgba(255,255,255,.95);
}
.cls .cc.paused:hover{background:#ca8a04;transform:scale(1.12)}
.cls .cc.paused svg{width:14px;height:14px}
.cls .cc.paused::after{
  content:"";position:absolute;width:22px;height:2.5px;background:#fff;
  transform:rotate(-45deg);border-radius:2px;box-shadow:0 0 3px rgba(15,23,42,.4);
}
/* 电话中心管理卡：暂停中卡片弱化 + 恢复按钮 */
.cc-card.paused{opacity:.72;border-style:dashed}
.cc-c-tag.paused{background:#fef9c3;color:#a16207}
.cc-c-acts button.resume{border-color:#16a34a;color:#16a34a;font-weight:600}
/* 今日已取消态（接听人临时取消今天这通）：琥珀静态徽章 + 斜杠电话图标 */
.cls .cc.today-cancel{
  top:5px;left:5px;width:26px;height:26px;display:grid;
  background:#94a3b8;color:#fff;border:2px solid rgba(255,255,255,.95);
}
.cls .cc.today-cancel:hover{background:#64748b;transform:scale(1.12)}
.cls .cc.today-cancel svg{width:14px;height:14px}
.cls .cc.today-cancel::after{
  content:"";position:absolute;width:22px;height:2.5px;background:#fff;
  transform:rotate(-45deg);border-radius:2px;box-shadow:0 0 3px rgba(15,23,42,.4);
}
.cls.sel .cc{display:grid}
.cls.sel{outline:2.5px solid #2563eb;outline-offset:1px;z-index:5}
.cls.sel .del{display:grid}
.cls.sel .del:hover{transform:scale(1.08)}

/* ---------- 模态二次确认框 ---------- */
.modal{position:fixed;inset:0;background:rgba(15,23,42,.5);z-index:300;display:flex;align-items:center;justify-content:center;padding:16px}
#del-modal{z-index:400}   /* 删除确认要盖在设置弹层之上 */.modal-box{background:#fff;border-radius:16px;width:100%;max-width:340px;box-shadow:0 20px 60px rgba(15,23,42,.28);padding:20px 18px 16px;animation:modalIn .18s ease-out}
@keyframes modalIn{from{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}
.modal-box p{font-size:14.5px;line-height:1.7;color:var(--ink);margin-bottom:16px;text-align:center}
.modal-btns{display:flex;gap:8px}
.modal-btns .btn{flex:1;justify-content:center;padding:10px 0;border-radius:11px;font-size:14.5px}
.btn-del{background:#dc2626;border-color:#dc2626;color:#fff;font-weight:700}
.btn-del:hover{background:#b91c1c;border-color:#b91c1c}

/* ---------- 课表预览区孩子名双击可改 ---------- */
.who h2{cursor:default;user-select:none;border-radius:6px;padding:1px 6px;margin-left:-6px}
.who h2[contenteditable]{cursor:text;outline:2px dashed var(--kc);background:rgba(0,0,0,.04)}

/* ---------- 孩子昵称双击编辑 ---------- */
.kc-head .kidname{cursor:default;user-select:none}
.kc-head .kidname[contenteditable]{cursor:text;background:#334155;outline:none;box-shadow:0 0 0 3px rgba(255,255,255,.35)}
.kc-head .kidname small{font-weight:400;font-size:10px;opacity:.75;margin-left:4px}

.kidcard{border:1px solid var(--line);border-radius:12px;padding:12px;margin-bottom:10px;background:#fcfdff}
.kidcard:last-child{margin-bottom:0}
.kc-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.kc-head .kidname{
  border-radius:8px;padding:5px 12px;font-size:14px;font-weight:700;
  color:#fff;background:var(--kc);font-family:inherit;letter-spacing:.5px;
}
.kc-head .kidname::after{content:"";}
.themes{display:flex;gap:5px}
.themes button{
  width:20px;height:20px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0;
}
.themes button.on{border-color:var(--ink)}
.kc-head .sp{flex:1}

.kc-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.days{display:flex;gap:4px}
.days button{
  width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:#fff;
  font-size:12.5px;cursor:pointer;color:var(--ink-2);font-family:inherit;padding:0;
}
.days button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.kc-form input[type=time]{
  border:1px solid var(--line);border-radius:8px;padding:6px 6px;font-size:13px;font-family:inherit;
  background:#fff;color:var(--ink);height:30px;
}
/* 科目搜索框 */
.subjbox{position:relative;display:flex;align-items:center}
.subjbox .sdot{
  position:absolute;left:9px;width:8px;height:8px;border-radius:50%;background:#cbd5e1;
  transition:background .15s;pointer-events:none;
}
.kc-form input.subj{
  border:1px solid var(--line);border-radius:8px;padding:6px 10px 6px 24px;font-size:13px;font-family:inherit;
  height:30px;width:172px;background:#fff;color:var(--ink);
}
.kc-form input.subj:focus{outline:none;border-color:#8ea3c8;box-shadow:0 0 0 3px rgba(63,94,170,.1)}
.subj-pop{
  display:none;position:absolute;left:0;top:34px;width:260px;max-height:298px;overflow:auto;
  background:#fff;border:1px solid var(--line);border-radius:10px;z-index:50;
  box-shadow:0 10px 26px rgba(15,23,42,.14);padding:4px;
}
.subj-pop .pp-t{
  font-size:11px;color:var(--ink-3);padding:5px 8px 4px;letter-spacing:.3px;
}
.subj-pop .pp-item{
  display:flex;align-items:center;gap:7px;padding:6px 8px;border-radius:7px;cursor:pointer;font-size:13px;
}
.subj-pop .pp-item i{width:9px;height:9px;border-radius:3px;flex:none}
.subj-pop .pp-item b{font-weight:600;color:var(--ink);flex:none}
.subj-pop .pp-item span{color:var(--ink-3);font-size:11px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.subj-pop .pp-item em{
  font-style:normal;font-size:10px;color:var(--ink-3);background:#f3f6fb;
  padding:1px 5px;border-radius:5px;flex:none;
}
.subj-pop .pp-item.on,.subj-pop .pp-item:hover{background:#eef3fc}
.subj-pop .pp-empty{padding:14px 10px;font-size:12.5px;color:var(--ink-2);text-align:center;line-height:1.6}
.subj-pop .pp-empty span{color:var(--ink-3);font-size:11px}
.sep{color:var(--ink-3);font-size:12px}
/* 敏感词即时提示：输入框下方红字 */
.subj-warn{
  display:none;width:100%;margin-top:5px;padding:6px 10px;border-radius:8px;
  background:#fef2f2;border:1px solid #fecaca;color:#dc2626;font-size:12.5px;line-height:1.5;
}
.kc-form input.subj.bad{border-color:#dc2626;box-shadow:0 0 0 3px rgba(220,38,38,.12)}
.quick{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:10px}
.quick button{
  border:1px dashed var(--line);background:#fff;border-radius:20px;padding:3px 10px;
  font-size:11.5px;color:var(--ink-2);cursor:pointer;font-family:inherit;
}
.quick button:hover{border-style:solid;border-color:#c9d2e3}
.quick button.more{border-style:solid;border-color:#dbe3f0;color:#4f6ea8;font-weight:600}

.kc-list{list-style:none;border-top:1px dashed var(--line);padding-top:8px}
.kc-list li{
  display:flex;align-items:center;gap:8px;padding:5px 2px;font-size:13px;border-bottom:1px solid #f5f7fb;
}
.kc-list li:last-child{border-bottom:none}
.kc-list .d{width:34px;color:var(--ink-2);font-size:12px;flex:none}
.kc-list .t{width:96px;color:var(--ink-2);font-size:12px;flex:none;font-variant-numeric:tabular-nums}
.kc-list .n{flex:1;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kc-list .sw{width:9px;height:9px;border-radius:3px;flex:none}
.kc-list .x{
  border:none;background:none;color:var(--ink-3);cursor:pointer;font-size:16px;line-height:1;
  padding:2px 5px;font-family:inherit;
}
.kc-list .x:hover{color:#dc2626}
.kc-list .warn{color:#dc2626;font-size:11px}
.empty{color:var(--ink-3);font-size:12.5px;padding:8px 2px}

.hint{font-size:11.5px;color:var(--ink-3);line-height:1.7;margin-top:8px}

/* ---------- 课表卡片 ---------- */
.kid{
  background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:14px 14px 12px;margin-bottom:14px;position:relative;overflow:hidden;
  box-shadow:0 1px 3px rgba(20,30,60,.05);
}
.kid::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--kc)}
.kid-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.who{display:flex;align-items:center;gap:10px}
.avatar{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-size:16px;font-weight:700;color:#fff;flex:none;background:var(--kc)}
.who h2{font-size:18px;font-weight:700;letter-spacing:1px}
.who .sub{font-size:11.5px;color:var(--ink-3);margin-top:2px}
.stats{display:flex;gap:6px;flex-wrap:wrap}
.stat{border:1px solid var(--line);border-radius:8px;padding:5px 10px;text-align:center;min-width:66px;background:#fbfcfe}
.stat b{display:block;font-size:14.5px;font-weight:700;line-height:1.2;color:var(--kc)}
.stat span{font-size:10.5px;color:var(--ink-3)}

.sched{display:grid;grid-template-columns:var(--tw) repeat(7,minmax(0,1fr));border:1px solid var(--line);border-radius:10px;overflow:hidden}
.sched .h{padding:6px 2px;font-size:12px;font-weight:600;text-align:center;border-bottom:1px solid var(--line);border-left:1px solid var(--line);letter-spacing:.5px}
.sched .h.corner{border-left:none}
.sched .h{background:var(--ks);color:var(--kc)}
.sched-b{position:relative;grid-column:1/-1;display:grid;grid-template-columns:var(--tw) repeat(7,minmax(0,1fr));min-height:460px}
.glines{position:absolute;inset:0;pointer-events:none}
.glines i{position:absolute;left:0;right:0;height:1px;background:var(--grid-line)}
.tcol{border-right:1px solid var(--line);display:flex;flex-direction:column}
.tslot{border-bottom:1px dashed var(--grid-line);display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.15;flex:none}
.tslot:last-child{border-bottom:none}
.tslot b{font-size:13px;font-weight:600;color:var(--ink-2);letter-spacing:2px}
.dcol{position:relative;border-left:1px solid var(--line)}
.dcol.we{background:#fafbfd}
.cls{
  position:absolute;left:3px;right:3px;border-radius:12px;padding:6px 4px;color:#fff;min-height:48px;
  display:flex;flex-direction:column;justify-content:center;align-items:center;gap:3px;
  overflow:hidden;line-height:1.2;box-shadow:0 1px 3px rgba(15,23,42,.14);
}
.cls.conflict{outline:2px solid var(--cf,#dc2626);outline-offset:-2px}
.cls.pending{opacity:.75}
.cls .n{font-size:27px;font-weight:700;letter-spacing:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;text-align:center}
.cls .t{font-size:17px;font-weight:500;opacity:.9;white-space:nowrap;letter-spacing:-.2px;text-align:center}

.legend{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;padding-top:9px;border-top:1px dashed var(--line)}
.lg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-2);background:#fafbfd;border:1px solid var(--line);padding:3px 9px;border-radius:20px}
/* 冲突组图例（2026-09-27）：同色框=同组互相冲突 */
.lg-cfhead{color:#b91c1c;background:#fff7f7;font-weight:600}
.lg-cf{--cf:#dc2626;color:var(--cf);background:color-mix(in srgb,var(--cf) 6%,#fff);border-color:color-mix(in srgb,var(--cf) 35%,#fff);font-weight:500}
.lg-cf .cf-dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--cf);box-shadow:0 0 0 2px color-mix(in srgb,var(--cf) 25%,transparent)}
.dot{width:8px;height:8px;border-radius:50%;flex:none}

.notice{
  background:#fffbeb;border:1px solid #fde68a;color:#92400e;border-radius:10px;
  padding:9px 12px;font-size:12.5px;margin-bottom:12px;line-height:1.6;
}
.notice b{font-weight:700}

@media (max-width:820px){
  :root{--tw:40px}
  body{padding:12px 8px 32px}
  .kid{padding:11px 9px 10px}
  .sched .h{font-size:10.5px;padding:5px 1px;letter-spacing:0}
  .tslot b{font-size:10px;letter-spacing:1px}
  .cls{padding:4px 6px;border-radius:8px;min-height:38px;gap:2px}
  .cls .t{font-size:12.5px}
  .cls .n{font-size:19px;letter-spacing:0}
  .who h2{font-size:16px}
  .stat{min-width:56px;padding:4px 7px}
  .lg{font-size:10px;padding:2px 7px}
  .brand{font-size:15px}
}
/* ---------- 手机端：卡片两行式、字号加大 ---------- */
@media (max-width:560px){
  :root{--tw:36px}
  .kid{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .sched{min-width:600px}
  .kc-form input.subj{width:150px}
  .subj-pop{width:100%;min-width:200px}
  /* 课程卡片：上下两行，上科目下时间，字大 */
  .cls{gap:2px;padding:4px 7px;min-height:48px}
  .cls .t{font-size:15px;line-height:1.2}
  .cls .n{font-size:24px;font-weight:700;line-height:1.25}
  .who h2{font-size:18px}
}

/* ---------- 手机端：按天大卡片视图（≤560px，隐藏桌面网格） ---------- */
#mview{display:none}
@media (max-width:560px){
  #board{display:none}
  #mview{display:block}
}
.mkid{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px 12px 12px;margin-bottom:14px;box-shadow:0 1px 3px rgba(20,30,60,.05)}
.mk-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.mk-head .avatar{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;background:var(--kc);color:#fff;font-size:13px;font-weight:700}
.mk-head h2{font-size:18px;font-weight:800;border-radius:6px;padding:1px 6px;margin-left:-6px}
.mk-head h2[contenteditable]{cursor:text;outline:2px dashed var(--kc);background:rgba(0,0,0,.04)}
.mk-sub{font-size:11px;color:var(--ink-3)}
.mday{border:1px solid var(--line);border-radius:12px;margin-bottom:9px;overflow:hidden}
.mday.empty{opacity:.55}
.mday-h{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:#f8fafc;border-bottom:1px solid var(--line)}
.mday-h span{font-size:14px;font-weight:700}
.mday-h i{font-style:normal;font-size:11px;color:var(--ink-3)}
.mday-none{padding:10px 12px;color:var(--ink-3);font-size:12.5px}
.mcls{display:flex;align-items:center;gap:8px;padding:11px 12px 11px 10px;border-bottom:1px solid var(--line);position:relative;background:#fff}
.mcls::before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:4px;border-radius:0 3px 3px 0;background:var(--sc,#94a3b8)}
.mcls:last-child{border-bottom:none}
.mcls-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.mcls-main .n{font-size:16px;font-weight:700;line-height:1.25;color:var(--ink)}
.mcls-main .t{font-size:12.5px;opacity:.75;color:var(--ink-2)}
.mcls-main .t::before{content:"";display:inline-block;width:7px;height:7px;border-radius:2px;margin-right:5px;vertical-align:0;background:var(--sc,#94a3b8)}
.mcls-btns{display:flex;gap:6px;flex:none}
.mcls-btns .cc,.mcls-btns .del{
  width:34px;height:34px;border-radius:50%;border:none;display:grid;place-items:center;
  background:#f1f5f9;cursor:pointer;font-family:inherit;padding:0;
  box-shadow:0 1px 3px rgba(15,23,42,.12);
}
/* 未设置：浅灰幽灵钮；已设置：常显绿色实心徽章（放大 + 白描边 + 绿投影） */
.mcls-btns .cc{color:#94a3b8}
.mcls-btns .cc svg{width:15px;height:15px}
.mcls-btns .cc.off:active{color:#64748b}
.mcls-btns .cc.on{
  background:#10b981;color:#fff;border:2px solid rgba(255,255,255,.95);
  box-shadow:0 2px 8px rgba(16,185,129,.55);
}
.mcls-btns .cc.on svg{width:17px;height:17px}
/* 手机课卡：待命态黄灯（与桌面 cc.standby 一致，呼吸同款） */
.mcls-btns .cc.standby{
  background:#f59e0b;color:#fff;border:2px solid rgba(255,255,255,.95);
  animation:ccBreathe 1.6s ease-in-out infinite;
}
.mcls-btns .cc.standby svg{width:17px;height:17px}
/* 手机课卡：今日已取消态（灰底白斜杠，与桌面一致） */
.mcls-btns .cc.today-cancel{
  background:#94a3b8;color:#fff;border:2px solid rgba(255,255,255,.95);position:relative;
}
.mcls-btns .cc.today-cancel svg{width:17px;height:17px}
.mcls-btns .cc.today-cancel::after{
  content:"";position:absolute;width:26px;height:3px;background:#fff;
  transform:rotate(-45deg);border-radius:2px;box-shadow:0 0 3px rgba(15,23,42,.4);
}
.mcls-btns .del{color:#dc2626;font-size:15px}
.mcls-btns .cc:active,.mcls-btns .del:active{transform:scale(.94)}
.mcls-btns .cc.on:active{transform:scale(.92)}
.mcls.conflict{outline:2.5px solid var(--cf,#dc2626);outline-offset:-2.5px}

/* ---------- 打印：A4 横向 ---------- */
@media print{
  @page{size:A4 landscape;margin:5mm}
  *{-webkit-print-color-adjust:exact !important;print-color-adjust:exact !important;color-adjust:exact !important}
  html,body{background:#fff !important;padding:0;margin:0}
  .no-print{display:none !important}
  #mview{display:none !important}
  #board{display:block !important}
  .wrap{max-width:none}
  :root{--tw:9mm}
  .kid{
    break-inside:avoid;page-break-inside:avoid;box-shadow:none;
    margin-bottom:1.5mm;padding:1.8mm 2.5mm 1.6mm;border:1px solid #d9dfe9;border-radius:2.5mm;
    height:var(--kidh,95mm);display:flex;flex-direction:column;
  }
  .kid.pb{break-after:page;page-break-after:always}
  .kid:last-child{margin-bottom:0}
  .tcol{min-height:0;overflow:hidden}
  .tslot{align-items:center;justify-content:center;overflow:hidden}
  .glines i{background:#eef1f7}
  .sched-b{position:relative;min-height:0}
  .sched{flex:1;min-height:0;display:grid;grid-template-columns:var(--tw) repeat(7,minmax(0,1fr));grid-template-rows:auto 1fr;border-radius:1.8mm}
  .sched-b{grid-column:1/-1;grid-row:2;min-height:0}
  .kid-head{margin-bottom:1.8mm;gap:3mm;flex-wrap:nowrap}
  .avatar{width:14px;height:14px;border-radius:3px;font-size:8px}
  .who{gap:2mm}
  .who h2{font-size:11pt;letter-spacing:0}
  .who .sub{font-size:6pt;margin-top:0}
  .stats{gap:2mm}
  .stat{padding:0.4mm 2mm;min-width:0;border-radius:1.5mm}
  .stat b{font-size:8pt;line-height:1.15}
  .stat span{font-size:5.8pt}
  .sched .h{padding:0.7mm 0.5mm;font-size:7.8pt;letter-spacing:0}
  .tslot{flex-direction:column;gap:0;border-bottom:1px dashed #eef1f7}
  .tslot b{font-size:7pt;line-height:1.25}
  .tslot span{font-size:5.6pt;line-height:1.25}
  .cls{left:0.6mm;right:0.6mm;border-radius:1.4mm;padding:0.6mm 1.6mm;gap:0.3mm;box-shadow:none;line-height:1.15;min-height:10mm;cursor:auto;align-items:center}
  .cls .del{display:none !important}
  .cls .cc{display:none !important}   /* 打印稿不出现操作钮/提醒徽章 */
  .cls.sel{outline:none}
  .cls .t{font-size:8pt;letter-spacing:-.1pt}
  .cls .n{font-size:13pt;letter-spacing:0}
  .legend{margin-top:1.2mm;padding-top:1mm;gap:0.8mm}
  .lg{font-size:5.8pt;padding:0.2mm 1.8mm;gap:0.8mm;border-radius:3mm}
  .dot{width:5px;height:5px}
}

/* ============ 智能导入（sheet 内嵌） ============ */
#smart-text{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font:13px/1.6 inherit;color:var(--ink);resize:vertical;min-height:110px}
#smart-text:focus{outline:none;border-color:#8ea3c8;box-shadow:0 0 0 3px rgba(63,94,170,.1)}
.smart-bar{display:flex;gap:8px;margin-top:10px;align-items:center}
.smart-bar select{border:1px solid var(--line);border-radius:8px;padding:6px 10px;font:13px inherit;color:var(--ink);background:#fff}
.smart-bar .btn{margin-left:0}
.smart-result{margin-top:12px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;max-height:240px;overflow:auto}
.smart-result .sr-title{font-size:12px;color:var(--ink-3);margin-bottom:6px}
.sr-row{display:flex;align-items:center;gap:8px;padding:5px 4px;border-bottom:1px dashed #eef2f7;font-size:13.5px}
.sr-row:last-child{border-bottom:none}
.sr-row input[type=checkbox]{accent-color:#3f5eaa;width:15px;height:15px}
.sr-row b{font-weight:600;min-width:56px}
.sr-row span{color:var(--ink-2)}
.sr-row .sr-warn{color:#dc2626;font-size:11px}
.sr-amb{display:inline-flex;gap:4px;flex-shrink:0}
.sr-amb-btn{border:1px solid #f59e0b;background:#fffbeb;color:#b45309;font-size:11px;padding:2px 8px;border-radius:6px;cursor:pointer;line-height:1.5}
.sr-amb-btn:active{background:#fef3c7}
.sr-amb-ok{color:#059669;font-size:11px;flex-shrink:0}
.smart-apply{display:flex;gap:8px;margin-top:12px;justify-content:flex-end}
.smart-loading{font-size:13px;color:var(--ink-2);padding:14px 0;text-align:center}

/* ============ 手机端课表长图弹层 ============ */
.img-share-box{max-width:420px;padding:16px 14px 14px}
.img-share-title{font-size:13.5px;margin-bottom:10px;color:var(--ink-2)}
#img-share-wrap{max-height:62vh;overflow-y:auto;-webkit-overflow-scrolling:touch;border-radius:10px;background:#f2f4f9}
#img-share{display:block;width:100%;height:auto;user-select:none;-webkit-user-select:none;-webkit-touch-callout:default}

/* ============ 账号 / 登录注册弹层 ============ */
.btn-user{background:linear-gradient(135deg,#0ea5e9,#2563eb);color:#fff;border:none;font-weight:600}
.btn-user.logged{background:linear-gradient(135deg,#10b981,#059669)}
.login-box{max-width:376px;padding:22px 22px 18px}
.lg-tabs{display:flex;gap:6px;margin-bottom:14px}
.lg-tab{flex:1;border:none;background:#f1f5f9;color:var(--ink-2);padding:8px 0;border-radius:8px;font:600 14px inherit;cursor:pointer}
.lg-tab.on{background:#eef4ff;color:#3f5eaa;box-shadow:inset 0 -2px 0 #3f5eaa}
.lg-form{display:flex;flex-direction:column;gap:10px}
.lg-form input{border:1px solid var(--line);border-radius:8px;padding:10px 12px;font:14px inherit;color:var(--ink)}
.lg-form input:focus{outline:none;border-color:#8ea3c8;box-shadow:0 0 0 3px rgba(63,94,170,.1)}
.btn-block{width:100%;margin-top:2px}
.lg-tip{font-size:12px;color:var(--ink-3);margin:2px 0 0;line-height:1.6}
.lg-close{position:absolute;top:10px;right:12px;border:none;background:none;font:16px inherit;color:var(--ink-3);cursor:pointer;padding:4px}
.lg-err{font-size:12.5px;color:#dc2626;background:#fef2f2;border-radius:6px;padding:6px 10px;display:none}

/* ============ 电话提醒（已并入设置页签；接听人选择/孩子开关/学期设置共用下面样式） ============ */
.cl-sec{margin-bottom:16px;padding-bottom:14px;border-bottom:1px dashed #eef2f7}
.cl-sec:last-child{border-bottom:none;margin-bottom:4px;padding-bottom:4px}
.cl-sec-h{font-size:13.5px;font-weight:700;margin-bottom:10px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.cl-sec-h span{font-size:11.5px;font-weight:400;color:var(--ink-3)}
.cl-form{display:flex;gap:8px;margin-bottom:8px}
.cl-form select,.cl-form input{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px;padding:10px 12px;font:14px inherit;color:var(--ink);background:#fff}
.cl-form input:focus,.cl-form select:focus{outline:none;border-color:#8ea3c8}
.cl-contacts{display:flex;flex-direction:column;gap:8px}
.cl-contact{display:flex;align-items:center;gap:8px;border:1.5px solid var(--line);border-radius:10px;padding:11px 13px;cursor:pointer;transition:.15s}
.cl-contact:hover{border-color:#c9d2e3}
.cl-contact.on{border-color:#059669;background:#f0fdf9}
.cl-contact input{accent-color:#059669;width:16px;height:16px;flex:none}
.cl-callee{font-size:14px;font-weight:600}
.cl-tel{font-size:12.5px;color:var(--ink-3);flex:1}
.cl-c-del{border:none;background:none;color:var(--ink-3);font-size:13px;cursor:pointer;padding:4px 6px;border-radius:6px;flex:none}
.cl-c-del:hover{color:#dc2626;background:#fef2f2}
/* 删除接听人文字钮（替代原 ✕，2026-09-27 用户要求更清晰） */
.cl-c-del.ct-del-txt{
  width:auto;padding:0 9px;font-size:11.5px;line-height:22px;border:1px solid #e2e8f0;background:#fff;color:#64748b;border-radius:8px;
}
.cl-c-del.ct-del-txt:hover{border-color:#dc2626;color:#dc2626;background:#fef2f2}
/* 冲突拦截弹层（2026-09-27：导出/打印前强提示） */
.cf-box{max-width:420px;width:92%;background:#fff;border-radius:16px;padding:20px 18px;box-shadow:0 20px 60px rgba(15,23,42,.25)}
.cf-head{font-size:17px;font-weight:700;color:#b91c1c}
.cf-sub{font-size:13px;color:#475569;margin:8px 0 10px;line-height:1.6}
.cf-list{max-height:44vh;overflow:auto;background:#fef2f2;border:1px solid #fecaca;border-radius:10px;padding:6px 10px}
.cf-row{display:flex;gap:8px;align-items:baseline;padding:7px 2px;border-bottom:1px dashed #fecaca;font-size:12.5px;line-height:1.5}
.cf-row:last-child{border-bottom:none}
.cf-row b{flex:none;color:#b91c1c;max-width:5em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cf-row span{color:#7f1d1d}
.cf-btns{display:flex;gap:10px;margin-top:14px}
.cf-btns .btn{flex:1}
/* 孩子管理行：改名+删除两个钮的间距 */
.kid-manage-row .ct-verify-btn{margin-left:0}
.kid-manage-row{gap:6px}
/* ===== 账号页（2026-09-27 重排）===== */
.acc-card .acc-head{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.acc-avatar{width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,#0ea5e9,#2563eb);color:#fff;display:grid;place-items:center;font-size:19px;font-weight:700;flex:none}
.acc-meta{display:flex;flex-direction:column;gap:2px;min-width:0}
.acc-meta b{font-size:15.5px;font-weight:700;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.acc-meta span{font-size:12px;color:var(--ink-3)}
/* 退出：底部居中小条（文字钮，弱化存在感） */
.acc-logout{margin-top:16px;padding-top:14px;border-top:1px dashed var(--line);text-align:center}
.acc-logout p{font-size:11.5px;color:var(--ink-3);margin-bottom:8px}
.acc-logout-btn{border:none;background:none;color:#dc2626;font-size:13px;font-weight:600;cursor:pointer;padding:6px 14px;border-radius:8px;font-family:inherit}
.acc-logout-btn:hover{background:#fef2f2}
.cl-kid-row{display:flex;align-items:center;gap:8px;padding:11px 13px;border:1.5px solid var(--line);border-radius:10px;margin-bottom:8px}
.cl-kid-row.on{border-color:#059669;background:#f0fdf9}
.cl-kid-dot{width:8px;height:8px;border-radius:50%;background:#cbd5e1;flex:none}
.cl-kid-row.on .cl-kid-dot{background:#059669}
.cl-kid-name{font-size:14px;font-weight:600}
.cl-kid-sub{font-size:12px;color:var(--ink-3);flex:1}
.cl-kid-row .btn{padding:5px 12px;font-size:12.5px}
.cl-tip{font-size:12.5px;color:var(--ink-3);line-height:1.65;margin:4px 0 10px}
/* ============ 学期设置（v2.4） ============ */
.tm-bk-row{display:flex;align-items:center;gap:8px;font-size:12.5px;border:1.5px dashed var(--line);border-radius:8px;padding:6px 10px;margin-bottom:6px}
.tm-bk-row span:first-child{font-weight:600}
.tm-bk-row span:nth-child(2){color:var(--ink-3);flex:1}
.tm-bk-x{border:none;background:none;color:var(--ink-3);cursor:pointer;padding:2px 6px;border-radius:4px;font-size:13px}
.tm-bk-x:hover{color:#dc2626;background:#fef2f2}
.cl-list{border:1px solid var(--line);border-radius:10px;padding:4px 12px;max-height:240px;overflow:auto;background:#fcfdff}
.cl-row{display:flex;align-items:center;gap:8px;font-size:13px;padding:8px 2px;border-bottom:1px dashed #eef2f7}
.cl-row:last-child{border-bottom:none}
.cl-row .st{font-size:11px;padding:1px 8px;border-radius:99px;flex-shrink:0}
.st.pending{background:#fff7e8;color:#b45309}
.st.locked,.st.dialing{background:#eef4ff;color:#3f5eaa}
.st.done{background:#eafaf4;color:#047857}
.st.failed{background:#fef2f2;color:#b91c1c}
.st.canceled{background:#f1f5f9;color:#64748b}
.cl-row .cl-btn-cancel{margin-left:auto;border:none;background:none;color:#dc2626;font-size:12px;cursor:pointer;padding:2px 4px}
.cl-row .cl-btn-cancel:disabled{color:#cbd5e1;cursor:default}
.cl-empty{font-size:13px;color:var(--ink-3);text-align:center;padding:14px 0;line-height:1.6}

/* ============ 设置页（五页签：接听人 / 电话提醒 / 提醒记录 / 孩子管理 / 账号） ============
 * 2026-09-20 重设计：PC 居中占屏宽 2/3（上限 880px、下限 520px）；手机全宽近全屏；
 * 字号 ≥13px 不换行挤压；触控目标 ≥40px；表单一行排满不临时换行 */
.set-box{
  width:66vw;max-width:880px;min-width:0;max-height:86vh;
  padding:0 0 6px;overflow:hidden;
  display:flex;flex-direction:column;border-radius:18px;
}
@media (min-width:1000px){ .set-box{width:880px} }               /* 大屏固定 2/3 上限档 */
@media (max-width:999px) and (min-width:721px){ .set-box{width:82vw;max-height:88vh} }
@supports (width:min(66vw,880px)){ .set-box{width:min(66vw,880px);max-height:min(88vh,780px)} }
.set-head{display:flex;align-items:center;justify-content:space-between;padding:18px 26px 0;flex:none}
.set-head h3{margin:0;font-size:18px;font-weight:700}
.st-x{border:none;background:none;font:18px inherit;color:var(--ink-3);cursor:pointer;width:38px;height:38px;border-radius:10px;flex:none}
.st-x:hover{color:var(--ink);background:#f1f5f9}

/* ============ v9.1 设置页：iOS 式目录（灰底 + 白分组卡 + 行+值预览；编辑下沉子页） ============ */
#settings-modal .set-box{flex-direction:column;align-items:stretch;padding:0;gap:0}
.st-body{flex:1;min-height:0;display:flex;flex-direction:column;position:relative;overflow:hidden}
.st-scroll{flex:1;min-width:0;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;
  background:#f3f5f9;padding:2px 16px 26px;display:flex;flex-direction:column}
.st-group{scroll-margin-top:0;padding:0;margin-top:18px}
.st-group:first-child{margin-top:0}
.st-group-h{font-size:12.5px;font-weight:600;color:#7a8699;letter-spacing:.8px;margin:0 4px 8px;
  display:flex;align-items:baseline;gap:8px;text-transform:uppercase}
.st-group-h::before{content:none}
.st-group-h span{font-size:11px;font-weight:400;color:#9aa5b5;letter-spacing:0}
/* 行：图标 + 标签 + 值 + 箭头（iOS 列表行） */
.st-rows{background:#fff;border-radius:14px;overflow:hidden;box-shadow:0 1px 2px rgba(15,39,71,.04)}
.st-row{display:flex;align-items:center;gap:12px;width:100%;padding:13px 16px;background:none;border:none;
  border-bottom:1px solid #f1f4f8;font:500 14.5px/1.3 inherit;color:var(--ink);cursor:pointer;
  text-align:left;text-decoration:none;transition:background .12s}
.st-rows .st-row:last-child{border-bottom:none}
button.st-row:hover{background:#f8fafc}
button.st-row:active{background:#eef2f7}
.st-row-ic{flex:none;width:30px;height:30px;border-radius:8px;background:#f1f4f8;display:inline-flex;
  align-items:center;justify-content:center;font-size:16px}
.st-row-label{flex:none;font-weight:600}
.st-row-val{flex:1;min-width:0;text-align:right;font-size:13px;color:#8a94a6;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.st-row-val.strong{color:var(--ink);font-weight:700;font-size:14px}
.st-row-arrow{flex:none;color:#c2cad6;font-size:17px;line-height:1;font-weight:600}
/* 子页：覆盖在 st-body 上的白底页（同级切换，不叠 scroll） */
.st-page{position:absolute;inset:0;display:none;flex-direction:column;background:#fff;z-index:5}
.st-page.on{display:flex}
.st-sub-head{flex:none;display:flex;align-items:center;gap:6px;padding:10px 14px;border-bottom:1px solid #f1f4f8}
.st-back{border:none;background:none;font:600 24px/1 inherit;color:var(--brand,#2563eb);cursor:pointer;
  width:34px;height:34px;border-radius:9px;flex:none}
.st-back:hover{background:#f1f5f9}
.st-sub-head b{font-size:15.5px}
.st-page-body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;
  padding:14px 16px 26px}
.st-page-tip{font-size:12.5px;color:#7a8699;margin:0 2px 10px}
/* 学期子页分步引导提示 */
.tm-step-hint{margin:14px 2px 0;font-size:13px;color:#7a8699;line-height:1.7;
  padding:14px;border-radius:12px;background:#f6f8fb;text-align:center}
/* v9.2 微信绑定状态小字（头像旁，未绑灰/已绑绿） */
.wx-state{font-style:normal;font-size:11px;color:#9aa5b5;display:inline-flex;align-items:center;gap:4px}
.wx-state::before{content:"";width:6px;height:6px;border-radius:50%;background:#c2cad6}
.wx-state.on{color:#059669}
.wx-state.on::before{background:#10b981}
/* v9.2 学期子页：城市行的"修改"小按钮 */
.tm-mini-btn{flex:none;border:1px solid var(--line,#e3e8f0);background:#fff;color:var(--brand,#2563eb);
  border-radius:8px;padding:4px 12px;font:600 12px inherit;font-family:inherit;cursor:pointer}
.tm-mini-btn:hover{background:#f0f6ff}
/* v9.4 学期子页大卡片（城市/学年） */
.tm-big-cards{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0 0 14px}
.tm-big-card{background:#fff;border:1px solid #e3e8f0;border-radius:16px;padding:16px 14px;
  display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer;transition:.15s;min-height:96px}
.tm-big-card.plain{cursor:default;background:#fbfcfe}
.tm-big-card:hover{border-color:#b9d0f5}
.tm-big-ic{font-size:22px}
.tm-big-card b{font-size:16.5px;color:var(--ink);text-align:center;line-height:1.35;word-break:break-all}
.tm-big-card i{font-style:normal;font-size:10.5px;color:#9aa5b5}
/* v9.6 学期大卡片重排版：
 * 上区：📍城市（大字）+「点击修改」；下区：学年三段横排小卡（学年/学期/起止），分隔线分组 */
.tm-one-card{background:#fff;border:1px solid #e3e8f0;border-radius:18px;padding:0;margin:0 0 14px;
  cursor:pointer;transition:.15s;overflow:hidden}
.tm-one-card:hover{border-color:#b9d0f5}
.tm-oc-top{display:flex;align-items:center;gap:10px;padding:16px 18px 12px}
.tm-oc-top .tm-big-ic{font-size:20px}
.tm-oc-top b{font-size:18px;font-weight:700;flex:1;min-width:0}
.tm-oc-top i{font-style:normal;font-size:10.5px;color:#9aa5b5;flex:none}
.tm-oc-grid{display:grid;grid-template-columns:auto 1fr;gap:6px 12px;
  border-top:1px dashed #e8edf4;padding:12px 18px 14px;margin:0 18px;
  border-left:none;border-right:none}
.tm-oc-k{font-size:11.5px;color:#9aa5b5;display:flex;align-items:center;gap:5px;white-space:nowrap}
.tm-oc-v{font-size:14px;color:var(--ink);font-weight:600;line-height:1.5}
/* 兼容旧结构类名（JS 未换新类前的兜底） */
/* v9.6 设置页滚动区顶部留白（我的信息不再贴顶） */
.st-scroll{padding-top:14px}
/* v9.6 联系人卡：操作按钮行可换行不溢出 */
#ct-list .sm-mem-card .sm-mem-head{flex-wrap:wrap}
#ct-list .sm-mem-card .ct-right{flex-wrap:wrap;justify-content:flex-end;max-width:100%}
#ct-list .sm-mem-card .cl-c-del{white-space:nowrap}
/* v9.6 电话概览图标美化（白底品牌色描边线性电话，替换蓝黑方块） */
.cco-ic{background:#fff;border:2px solid var(--brand,#2563eb);position:relative;overflow:hidden}
.cco-ic::before{content:"";position:absolute;inset:0;
  background:center/24px 24px no-repeat url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%232563eb" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>')}
/* v9.5 记录页三筛选一行 */
#cc-rec-log .rec-filter{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0 0 10px}
#cc-rec-log .rec-filter select{width:100%;margin:0}
@media (max-width:400px){ #cc-rec-log .rec-filter{grid-template-columns:1fr 1fr;} #cc-rec-log .rec-filter select:last-child{grid-column:1 / -1;} }
/* v9.5 引导态 hero 收紧 */
.cc-hero{padding:22px 16px}
/* v9.4 电话提醒概览大卡片 */
.cc-overview{display:flex;align-items:center;gap:14px;background:linear-gradient(150deg,#eef5ff,#f8faff);
  border:1px solid #d5e4fa;border-radius:18px;padding:18px 20px;margin:0 0 14px}
.cco-ic{width:46px;height:46px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:0;flex:none}
.cco-main{display:flex;align-items:baseline;gap:6px}
.cco-main b{font-size:38px;font-weight:800;line-height:1;color:var(--ink)}
.cco-main span{font-size:14px;color:#5b6b84;font-weight:600}
/* v9.3 余额两张大卡片（大气不拥挤） */
.bal-cards{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:4px 0 0}
.bal-card{background:linear-gradient(160deg,#f0f6ff,#fafbff);border:1px solid #dbe7fb;border-radius:18px;
  padding:18px 16px 14px;display:flex;flex-direction:column;align-items:flex-start;min-height:150px}
.bal-card.paid{background:linear-gradient(160deg,#fff7ec,#fffbf5);border-color:#f3e2c8}
.bal-card-top{display:flex;align-items:center;gap:7px;font-size:13px;color:#5b6b84}
.bal-ic{font-size:17px}
.bal-card-num{margin:10px 0 auto;display:flex;align-items:baseline;gap:4px}
.bal-card-num span{font-size:42px;font-weight:800;line-height:1;color:var(--ink);letter-spacing:-1px}
.bal-card-num i{font-style:normal;font-size:14px;color:#8a94a6;font-weight:600}
.bal-card-link{border:none;background:none;padding:6px 0 0;font:600 12.5px inherit;font-family:inherit;
  color:var(--brand,#2563eb);cursor:pointer}
.bal-card-charge{border:none;background:var(--brand,#2563eb);color:#fff;border-radius:11px;width:100%;
  padding:10px 0;font:700 14px inherit;font-family:inherit;letter-spacing:2px;cursor:pointer;margin-top:10px}
.bal-card-charge:active{transform:scale(.98)}
/* v9.3 孩子跨课表行 */
.kid-all-row{background:#fff;border-radius:14px;padding:12px 14px;margin-bottom:9px;
  box-shadow:0 1px 2px rgba(15,39,71,.05)}
.kid-all-head{display:flex;align-items:center;gap:10px}
.kid-all-head .cl-callee{font-weight:700;font-size:15px}
.kid-all-meta{flex:1;font-size:12px;color:#8a94a6}
.kid-all-tts{margin-top:7px;font-size:11.5px;color:#9aa5b5;line-height:1.6;
  padding-top:7px;border-top:1px dashed #f0f3f8}
/* v9.3 联系人邀请主按钮（零输入直拉邀请） */
.ct-invite-main{display:flex;flex-direction:column;align-items:center;gap:3px;width:100%;
  padding:15px;border:2px dashed #c9d9f6;background:#f6faff;border-radius:15px;
  font:700 14.5px inherit;font-family:inherit;color:var(--brand,#2563eb);cursor:pointer;transition:.15s}
.ct-invite-main span{font-size:11.5px;font-weight:400;color:#8a94a6}
.ct-invite-main:hover{background:#eef5ff;border-color:var(--brand,#2563eb)}
/* v9.3 家人提醒即将开放小字 */
.cc-cta-note{text-align:center;font-size:12px;color:#9aa5b5;margin:8px 0 0}
/* v9.3 日历设备识别条 */
.cal-device{display:flex;align-items:center;gap:8px;margin:-4px 0 12px;padding:10px 13px;
  background:#f0f7f2;border:1px solid #d3e8d8;border-radius:11px;font-size:12.5px;color:#2f6b3a}
.cal-device b{font-size:13px}
.cal-device .os{margin-left:auto;font-size:11px;color:#6b8f73}
/* v9.3 头像无感刷新转圈 */
.spin-ava{animation:avaSpin 1s linear infinite}
@keyframes avaSpin{to{transform:rotate(360deg)}}
.spin-ava img,.spin-ava:not(:has(img)){border-radius:50%!important}
/* v9.2 假期勾选行（勾=生效不打提醒） */
.tm-bk-check{display:flex;align-items:center;gap:12px;background:#fff;border-radius:13px;
  padding:12px 14px;margin-bottom:8px;box-shadow:0 1px 2px rgba(15,39,71,.04)}
.tm-bk-check.off{opacity:.5}
.tm-bk-check input[type=checkbox]{width:20px;height:20px;flex:none;accent-color:var(--brand,#2563eb)}
.tm-bk-check .tm-bk-info{flex:1;min-width:0}
.tm-bk-check .tm-bk-info b{display:block;font-size:14px}
.tm-bk-check .tm-bk-info span{font-size:12px;color:#8a94a6}
.tm-bk-check .tm-bk-src{flex:none;font-size:10.5px;color:#b6bfcc}
/* 联系人加载失败提示条（v9.0：失败绝不清空列表） */
.ct-error-bar{background:#fef2f2;border:1px solid #fecaca;color:#b91c1c;border-radius:10px;
  padding:8px 12px;font-size:12px;line-height:1.6;margin:0 0 8px}
.ct-error-bar a{color:#dc2626;font-weight:700;text-decoration:underline;text-underline-offset:2px}
/* v9.0 付费身份卡（我的信息组内） */
.paid-id{display:flex;align-items:center;gap:11px;margin-top:12px;padding:11px 13px;
  border-radius:12px;background:linear-gradient(120deg,#eff6ff,#f0f7ff);border:1px solid #c7dcfa}
.paid-id.loyal{background:linear-gradient(120deg,#fffbeb,#fdf6e3);border-color:#f0c58a}
.paid-id-ic{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;flex:none;
  background:#dbeafe;font-size:16px}
.paid-id.loyal .paid-id-ic{background:#fde68a}
.paid-id-main b{display:block;font-size:13.5px;font-weight:800;color:#1d4ed8}
.paid-id.loyal .paid-id-main b{color:#b45309}
.paid-id-main span{display:block;font-size:11.5px;color:var(--ink-2);margin-top:1px}
/* 昵称旁小徽章 */
.st-paid-badge{display:inline-block;vertical-align:2px;margin-left:6px;font-size:10px;font-weight:700;
  padding:2px 7px;border-radius:999px;background:#dbeafe;color:#1d4ed8;letter-spacing:.5px}
.st-paid-badge.loyal{background:linear-gradient(120deg,#fde68a,#fbbf24);color:#7c2d12}
/* 页签：分段控件（segmented control），一行五枚不换行 */
.set-tabs{display:flex;gap:2px;margin:14px 26px 0;padding:4px;background:#eef2f7;border-radius:12px;flex:none}
.set-tab{
  flex:1 1 0;min-width:0;border:none;background:none;color:var(--ink-2);
  padding:9px 4px;border-radius:9px;font:600 14px inherit;cursor:pointer;transition:.15s;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.set-tab:hover{color:var(--ink)}
.set-tab.on{background:#fff;color:#3f5eaa;box-shadow:0 1px 4px rgba(20,30,60,.14)}
/* ============ v8.8.9 分享弹窗三态 tab：当前态品牌蓝底白字（强标识）============ */
.sm-tabs .set-tab{position:relative;border-radius:9px}
.sm-tabs .set-tab.on{background:var(--brand,#2563eb);color:#fff;box-shadow:0 2px 8px rgba(37,99,235,.35)}
.sm-tabs .set-tab.on::after{content:"";position:absolute;right:7px;top:7px;width:6px;height:6px;border-radius:50%;background:#fff;opacity:.9}
/* ---------- v8.8.9 分享状态卡（私密/公开 当前态的视觉主角） ---------- */
.sm-state-card{display:flex;align-items:flex-start;gap:12px;background:#f8fafc;border:1px solid var(--line);
  border-radius:13px;padding:14px 15px;margin:2px 0 4px}
.sm-state-card.ok{background:#f0f7ff;border-color:#c7dcfa}
.sm-state-ic{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;flex:none;
  background:#e2e8f0;font-size:18px}
.sm-state-card.ok .sm-state-ic{background:#dbeafe}
.sm-state-main{flex:1;min-width:0}
.sm-state-main b{display:block;font-size:14.5px;font-weight:700;color:var(--ink);line-height:1.4}
.sm-state-main span{display:block;font-size:12px;color:var(--ink-2);line-height:1.6;margin-top:3px}
/* 公开 tab 亮点行 */
.sm-pub-tips{margin:10px 0 0}
.sm-tip-row{display:flex;align-items:flex-start;gap:9px;font-size:12.5px;color:var(--ink);line-height:1.65;padding:5px 2px}
.sm-tip-ic{flex:none;width:20px;text-align:center}
/* ---------- v8.8.9 成员 tab：选人列表（头像行）+ 成员厚卡片 ---------- */
/* 选人列表：圆形头像 + 微信名 + 勾选框 */
.sm-pick-row{display:flex;align-items:center;gap:11px;padding:9px 10px;border-radius:11px;cursor:pointer;transition:background .12s}
.sm-pick-row:hover{background:#f4f7fb}
.sm-pick-row input[type=checkbox]{flex:none;width:19px;height:19px;accent-color:var(--brand,#2563eb);cursor:pointer}
.sm-ava{flex:none;border-radius:50%;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;
  font-weight:700;color:#fff;user-select:none;background:var(--ava-bg,#64748b)}
.sm-pick-row .sm-ava{width:38px;height:38px;font-size:15px}
.sm-pick-row .sm-ava img{width:100%;height:100%;object-fit:cover;display:block}
.sm-pick-name{flex:1;min-width:0;font-size:14px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sm-pick-name .needset{font-size:11px;color:#b45309;font-weight:500;margin-left:2px}
.sm-pick-sub{flex:none;font-size:11.5px;color:var(--ink-3)}
/* 已添加成员：厚卡片（一人一张） */
.sm-mem-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:13px 14px;margin-bottom:10px;
  box-shadow:0 1px 4px rgba(20,30,60,.06);transition:border-color .15s}
.sm-mem-card:hover{border-color:#c9d2e3}
.sm-mem-head{display:flex;align-items:center;gap:11px}
.sm-mem-head .sm-ava{width:44px;height:44px;font-size:17px}
.sm-mem-head .sm-ava img{width:100%;height:100%;object-fit:cover;display:block}
.sm-mem-name{flex:1;min-width:0}
.sm-mem-name b{display:block;font-size:15px;font-weight:700;color:var(--ink);line-height:1.35;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sm-mem-name b .wxsrc{font-size:11px;color:var(--ink-3);font-weight:400;margin-left:6px}
.sm-mem-name .badges{display:flex;align-items:center;gap:5px;margin-top:4px;flex-wrap:wrap}
.sm-mem-name .badges .ct-badge{font-size:10.5px;padding:2px 7px}
/* 卡片操作区：第二行 */
.sm-mem-acts{display:flex;align-items:center;gap:8px;margin-top:11px;padding-top:11px;border-top:1px dashed #eef1f6}
.sm-mem-acts .sp{flex:1}
.sm-edit-sw{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2);cursor:pointer;user-select:none}
.sm-edit-sw input{width:17px;height:17px;accent-color:var(--brand,#2563eb);cursor:pointer}
.set-body{flex:1;min-height:0}
.set-pane{padding:16px 26px 12px;max-height:calc(86vh - 130px);overflow:auto}
@supports (width:min(1px,1px)){ .set-pane{max-height:calc(min(88vh,780px) - 130px)} }
.set-pane-tip{font-size:12.5px;color:var(--ink-3);margin:0 0 12px;line-height:1.6}
.ct-badge{font-size:11px;padding:2px 9px;border-radius:99px;background:#eef1f6;color:#64748b;flex:none}
.ct-badge.ok{background:#eafaf4;color:#047857}
.ct-badge.me{background:#e8f1ff;color:#2563eb}
.ct-badge.wait{background:#fff7e8;color:#b45309}
.ct-badge.warn{background:#fdf0f0;color:#b91c1c}
.cl-contact.dim{opacity:.75;cursor:default}
.ct-verify-btn,.ct-goto-verify{border:1px solid #3f5eaa;background:#eef4ff;color:#3f5eaa;font-size:12.5px;border-radius:8px;padding:5px 12px;cursor:pointer;flex:none}
.ct-verify-btn:hover,.ct-goto-verify:hover{background:#dfe9ff}
/* v3.0 邀请/停止按钮（接听人行右侧） */
.ct-inv-btn{flex:none;border:1px solid #3f5eaa;background:#eef4ff;color:#3f5eaa;font:600 12.5px inherit;border-radius:8px;padding:5px 13px;cursor:pointer;white-space:nowrap}
.ct-inv-btn:hover{background:#dfe9ff}
.ct-inv-btn.primary{background:#3f5eaa;color:#fff}
.ct-inv-btn.primary:hover{background:#33518f}
.ct-inv-btn.stop{border-color:#f3c6c6;background:#fff;color:#dc2626}
.ct-inv-btn.stop:hover{background:#fef2f2}
.ct-inv-btn:disabled{opacity:.55;cursor:default}
.ct-exp{font-size:11px;color:#94a3b8;flex:none;white-space:nowrap}
/* 取关待命提示条（接听人卡片下方，全宽） */
.ct-sub-tip{background:#fffbeb;border:1px solid #fde68a;border-radius:0 0 10px 10px;color:#92400e;font-size:12px;line-height:1.55;padding:6px 12px;margin:-4px 0 10px}
.ct-form input{border:1px solid var(--line);border-radius:8px;padding:10px 13px;font:14px inherit;color:var(--ink);background:#fff}
.ct-form input:focus{outline:none;border-color:#8ea3c8}
/* 接听人行：昵称+号码居左，验证码一组（输入+按钮/已验证）+删除✕ 居右 */
.ct-row{flex-wrap:nowrap}
.ct-row .cl-callee{flex:none;max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ct-row .cl-tel{flex:1;min-width:0;text-align:left}
.ct-right{margin-left:auto;display:flex;align-items:center;gap:8px;flex:none}   /* 状态徽章+操作钮靠右 */
/* 手机端：一行放不下徽章+两个操作钮 → 接听人行改两行（上行：称呼+号码+删除；下行：徽章+按钮组右对齐） */
@media (max-width:720px){
  .ct-row{flex-wrap:wrap;row-gap:8px}
  .ct-right{margin-left:0;width:100%;justify-content:flex-end;gap:6px}
  .ct-right .ct-exp{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:0 1 auto}
  .ct-right .ct-inv-btn{padding:4px 8px;font-size:12px;border-radius:7px}
  .ct-right .ct-badge{padding:2px 7px;font-size:10.5px}
}
#ct-list{margin-top:12px}
.ct-tip{font-size:12.5px;color:var(--ink-3);line-height:1.6;margin:2px 0 4px}
.ct-migrate-tip a{color:#3f5eaa}

/* ---------- v3.0 邀请授权弹层 ---------- */
.inv-box{background:#fff;border-radius:16px;width:min(92vw,460px);padding:24px 22px;box-shadow:0 12px 40px rgba(15,23,42,.22)}
.inv-title{font-size:17px;font-weight:700;margin-bottom:4px}
.inv-sub{font-size:12.5px;color:#64748b;line-height:1.6;margin-bottom:14px}
.inv-steps{background:#f8fafc;border-radius:10px;padding:12px 14px;margin-bottom:12px}
.inv-step{display:flex;gap:10px;font-size:13.5px;line-height:1.7;color:#334155}
.inv-step b{flex:none;width:20px;height:20px;border-radius:50%;background:#3f5eaa;color:#fff;font-size:12px;display:grid;place-items:center;margin-top:3px}
.inv-dot{display:inline-block;border:1px solid #cbd5e1;border-radius:4px;padding:0 5px;font-weight:700;letter-spacing:1px;background:#fff}
.inv-link{width:100%;border:1px dashed #c9d2e3;border-radius:8px;padding:9px 10px;font:12.5px ui-monospace,Consolas,monospace;color:#334155;background:#fafbfc;margin-bottom:12px}
.inv-btns{display:flex;gap:10px}
.inv-btns .btn{flex:1;height:44px}
.inv-tip{font-size:11.5px;color:#94a3b8;margin-top:12px;line-height:1.6}
/* 设置内通用表单行：电话提醒/学期设置等（PC 一行排满，不 wrap） */
.set-pane .cl-form{flex-wrap:nowrap}
.set-pane .cl-form input,.set-pane .cl-form select{font:13.5px inherit;padding:10px 12px}
/* 电话提醒页签：步骤小标题更醒目 */
.set-pane[data-pane="calls"] .cl-sec-h{font-size:14px}
.set-pane[data-pane="calls"] .cl-sec-h span{font-size:12px}
.cl-list-toggle{margin-left:auto;border:1px solid var(--line);background:#fff;color:var(--ink-2);font:600 12.5px inherit;border-radius:8px;padding:5px 12px;cursor:pointer;white-space:nowrap;flex:none}
.cl-list-toggle:hover{border-color:#c9d2e3;color:var(--ink)}
.cl-kid-row .btn{padding:7px 16px;font-size:13.5px}

/* ---- 手机端（≤720px）：设置页全宽近全屏，字号不缩太小，页签可横滑 ---- */
@media (max-width:720px){
  .modal{padding:0}
  .set-box{width:100vw;min-width:0;height:100dvh;max-height:100dvh;border-radius:0}
  .set-head{padding:14px 16px 0}
  .set-head h3{font-size:17px}
  .st-x{width:40px;height:40px;font-size:19px}
  .set-tabs{margin:10px 12px 0;padding:3px;gap:2px;overflow-x:auto;scrollbar-width:none}
  .set-tabs::-webkit-scrollbar{display:none}
  .set-tab{font-size:13.5px;padding:8px 10px;border-radius:8px}
  .set-pane{padding:12px 14px 10px;max-height:calc(100dvh - 112px)}
  .set-pane .cl-form{flex-wrap:wrap}
  .set-pane .cl-form input,.set-pane .cl-form select{min-width:140px;font-size:14px;padding:11px 12px}
  .cl-form .btn{padding:10px 16px;font-size:14px}
  .ct-row .cl-callee{max-width:88px}
  .ct-row .cl-tel{min-width:100px}
  #tm-dates input[type="date"]{min-width:128px}
}

/* ============ 提醒记录（v2.3：筛选 + 分页） ============ */
.rec-filter{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:12px}
.rec-filter select{border:1px solid var(--line);border-radius:8px;padding:8px 6px;font:13px inherit;color:var(--ink);background:#fff;min-width:0;cursor:pointer}
.rec-filter select:focus{outline:none;border-color:#8ea3c8}
.rec-list{max-height:min(48vh, 420px);min-height:120px;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:2px 12px}
.rec-row{display:flex;flex-direction:column;gap:3px;padding:9px 0;border-bottom:1px dashed #eef2f7;font-size:13px}
.rec-row:last-child{border-bottom:none}
.rec-main{display:flex;align-items:center;gap:8px;min-width:0}
.rec-course{flex:1;min-width:0;color:var(--ink);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rec-dur{flex:none;width:34px;color:var(--ink-3);font-variant-numeric:tabular-nums;text-align:right}
.rec-badge{flex:none;font-size:11px;padding:2px 9px;border-radius:99px}
.rec-sub{display:flex;align-items:center;gap:8px;min-width:0;font-size:11.5px;color:var(--ink-3)}
.rec-time{flex:none;color:var(--ink-3);font-variant-numeric:tabular-nums}
.rec-who{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rec-who i{font-style:normal;color:var(--ink-3);opacity:.85}
.rec-badge.ok{background:#eafaf4;color:#047857}
.rec-badge.miss{background:#fef2f2;color:#b91c1c}
.rec-badge.wait{background:#fff7e8;color:#b45309}
.rec-badge.off{background:#f1f5f9;color:#64748b}
.rec-more{width:100%;margin-top:8px;padding:9px;font-size:13px;color:var(--ink-2)}
@media (max-width:560px){
  .rec-filter{grid-template-columns:repeat(2,1fr)}
}


/* ============ 单课提醒弹层 ============ */
.cc-title{font-size:15px;font-weight:700;margin-bottom:8px}
.cc-course{font-size:13.5px;color:var(--ink-2);background:#f8fafc;border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin-bottom:12px;text-align:center}
.cc-form{display:flex;gap:8px;margin-bottom:8px}
.cc-form select{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px;padding:9px 10px;font:13.5px inherit;color:var(--ink);background:#fff}
.cc-form select:focus{outline:none;border-color:#8ea3c8}
.cc-form .btn{flex:none}
.cc-tip{font-size:11.5px;color:var(--ink-3);line-height:1.6;margin:2px 0 10px}
/* v5.6.17 设置态重排：三段小页签（接听人 / 提前多久 / 提醒多久） */
.cc-blk{margin-bottom:13px}
.cc-blk:last-of-type{margin-bottom:12px}
.cc-lb{font-size:12px;font-weight:700;color:var(--ink);margin-bottom:7px;display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.cc-lb span{font-size:10.5px;font-weight:400;color:var(--ink-3)}
.cc-lead-g,.cc-rep{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.cc-lead-g>div,.cc-rep-g{text-align:center;border:1.5px solid #d9dfe9;background:#fff;border-radius:8px;padding:8px 0;font-size:12px;color:var(--ink-2);cursor:pointer;user-select:none;transition:border-color .15s,background .15s}
.cc-lead-g>div.on,.cc-rep-g.on{border-color:var(--brand);background:#eef3ff;color:var(--brand);font-weight:700}
.cc-lead-g>div:active,.cc-rep-g:active{transform:scale(.97)}
/* 查看态：设置摘要三行 */
.cc-sum{margin:0 0 10px;border-top:1px dashed var(--line);padding-top:2px}
.cc-sum-r{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--ink-2);padding:7px 0;border-bottom:1px dashed #eef2f7}
.cc-sum-r:last-child{border-bottom:none}
.cc-sum-r b{color:var(--ink);font-weight:600}
/* 弹窗底部按钮：关闭 + 设置提醒 并排 */
#cc-modal .modal-btns{display:flex;gap:9px}
#cc-modal .modal-btns .btn{flex:1}
/* 查看态：提醒给谁 */
.cc-on{display:flex;align-items:center;gap:10px;background:#f0fdf6;border:1px solid #bbf0d4;border-radius:10px;padding:12px;margin-bottom:12px}
.cc-on-ic{width:34px;height:34px;border-radius:50%;background:#059669;color:#fff;display:grid;place-items:center;flex:none}
.cc-on-ic svg{width:17px;height:17px}
.cc-on-txt{display:flex;flex-direction:column;gap:2px;min-width:0}

/* ---------- v8.7.4 电话提醒查看态重设计：下次来电做视觉主角 + 单主行动按钮 ---------- */
/* 主角卡：时间大字居中，品牌蓝渐变底，与 sc-go 确认按钮同一色系 */
.cc-next-card{background:linear-gradient(135deg,var(--brand,#2563eb),#1d4ed8);border-radius:14px;padding:16px 14px 14px;text-align:center;color:#fff;margin:2px 0 12px}
.cc-next-lb{font-size:12px;opacity:.85;letter-spacing:2px}
.cc-next-t{font-size:24px;font-weight:700;line-height:1.3;margin:4px 0 2px;font-variant-numeric:tabular-nums}
.cc-next-sub{font-size:12px;opacity:.8}
/* 主行动按钮：品牌蓝通栏（同 sc-go 样式语言，绕开 .btn.btn-primary 全局白底覆盖） */
.cc-main-btn{display:block;width:100%;margin:2px 0 0;box-sizing:border-box;padding:12px 0;border:none;border-radius:12px;background:var(--brand,#2563eb);color:#fff;font:600 15px/1 inherit;font-family:inherit;cursor:pointer;text-align:center}
.cc-main-btn:hover{background:#1d4ed8}
/* 危险操作降级为居中文字链接（低频、防误触） */
.cc-off-link{display:block;width:100%;margin:10px 0 0;padding:6px 0;border:none;background:none;font:12.5px/1.6 inherit;font-family:inherit;color:#94a3b8;cursor:pointer;text-align:center}
.cc-off-link:hover{color:#dc2626}
.cc-off-link:disabled{opacity:.5;cursor:default}
/* 结束态按钮组（续上/删除）沿用旧按钮行样式 */
.cc-end-btns{display:flex;gap:9px;margin-top:10px}
.cc-end-btns .btn{flex:1}
.cc-on-txt b{font-size:14px;color:#065f46}
.cc-on-txt span{font-size:12px;color:#047857;opacity:.85}
.cc-view-btns{margin-top:2px}
.cc-view-btns .btn{flex:1}
/* 查看态：待命警告条（接听人已取关） */
.cc-standby-tip{background:#fffbeb;border:1px solid #fde68a;border-radius:10px;color:#92400e;font-size:12.5px;line-height:1.6;padding:10px 12px;margin:0 0 12px}
.cc-cancel-tip{background:#f1f5f9;border:1px solid #cbd5e1;border-radius:10px;color:#334155;font-size:12.5px;line-height:1.6;padding:10px 12px;margin:0 0 12px}

/* ---------- 课程编辑弹层（v3.2：点课程卡修改星期/时间/科目） ---------- */
#ce-modal .ce-box{max-width:420px;width:92vw;padding:22px 20px 16px}
.ce-title{font-size:17px;margin-bottom:2px}
.ce-course{font-size:13px;color:var(--ink-3);margin:0 0 14px}
.ce-form{display:grid;grid-template-columns:44px 1fr;gap:10px 12px;align-items:center}
.ce-lb{font-size:13px;color:var(--ink-2);text-align:right}
.ce-input{width:100%;height:42px;border:1.5px solid #d9dfe9;border-radius:10px;padding:0 12px;font:14px/1 inherit;font-family:inherit;background:#fff;color:var(--ink)}
.ce-input:focus{outline:none;border-color:var(--acc,#2563eb);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
/* 星期：7 个圆钮一排（手机 375px 放得下：7*38+6*6=302px） */
.ce-days{display:flex;gap:6px;justify-content:space-between}
.ce-day{flex:1;max-width:44px;height:38px;border-radius:10px;border:1.5px solid #d9dfe9;background:#fff;color:var(--ink-2);font:600 13.5px/1 inherit;font-family:inherit;cursor:pointer;padding:0;transition:all .12s}
.ce-day.on{background:var(--acc,#2563eb);border-color:var(--acc,#2563eb);color:#fff}
.ce-day:active{transform:scale(.94)}
/* 时间行 */
.ce-times{display:flex;align-items:center;gap:8px}
.ce-times .ce-time{flex:1;min-width:0;text-align:center}
.ce-sep{color:var(--ink-3);flex:none}
/* 多天提醒迁移提示 */
.ce-rule-tip{grid-column:1/-1;background:#eff6ff;border:1px solid #bfdbfe;border-radius:10px;color:#1e40af;font-size:12px;line-height:1.55;padding:8px 11px;margin:4px 0 0}
.ce-btns{grid-column:1/-1;display:flex;gap:8px;margin-top:14px}
.ce-btns .btn{flex:1;padding:0 6px}
.ce-btns #ce-del{color:#dc2626;border-color:#fecaca;background:#fff}
.ce-btns #ce-del:hover{background:#fef2f2}
/* 手机端：底部弹层（拇指可达） */
@media (max-width:560px){
  #ce-modal{align-items:flex-end}
  #ce-modal .ce-box{border-radius:16px 16px 0 0;width:100vw;max-width:100vw;padding-bottom:calc(16px + env(safe-area-inset-bottom))}
  .ce-lb{display:none}                    /* 手机窄屏藏标签，控件占满 */
  .ce-form{grid-template-columns:1fr;gap:8px}
  .ce-days{gap:5px}
  .ce-day{height:42px}
  .ce-btns{margin-top:16px}
}

/* ============ 微信登录 ============ */
.lg-wx{margin-top:14px}
.lg-wx-or{position:relative;text-align:center;margin:4px 0 10px;color:var(--ink-3);font-size:12px}
.lg-wx-or::before,.lg-wx-or::after{content:"";position:absolute;top:50%;width:38%;height:1px;background:var(--line)}
.lg-wx-or::before{left:0}
.lg-wx-or::after{right:0}
.btn-wx{background:linear-gradient(135deg,#22c55e,#16a34a);color:#fff;border:none;font-weight:600}
.btn-wx:active{transform:scale(.98)}
.btn-wx svg{vertical-align:-2px;margin-right:4px}
/* PC 扫码登录浮层 */
.qr-box{margin-top:12px;text-align:center}
/* 纯扫码登录框：官方 stylelite=1 面板（160px 码 + 快捷登录），高度刚好铺满不滚动 */
.login-qr-box{max-width:300px;padding:20px 20px 16px;overflow:hidden}
.lg-title{margin:0 0 4px;font-size:17px;text-align:center;font-weight:600}
.login-qr-box .qr-box{margin-top:6px}
.qr-frame{width:210px;height:210px;margin:0 auto;border-radius:12px;overflow:hidden;background:#fff;display:flex;align-items:center;justify-content:center}
.qr-frame img{width:200px;height:200px;object-fit:contain;display:block}
.qr-frame iframe{width:100%;height:100%;scrolling:no}
.qr-status{font-size:12.5px;color:var(--ink-2);margin-top:8px;min-height:18px}
.qr-refresh{margin-top:6px;padding:6px 16px;font-size:12.5px}
#qr-back{margin:6px 6px 0}
.login-qr-box,.login-qr-box *{scrollbar-width:none;-ms-overflow-style:none}
.login-qr-box ::-webkit-scrollbar,.qr-frame::-webkit-scrollbar,.qr-frame iframe::-webkit-scrollbar{display:none;width:0;height:0}
/* 手机浏览器登录引导层 */
.lg-mobile{padding:10px 4px 4px;text-align:center}
.lg-mobile-ico{width:56px;height:56px;margin:6px auto 10px;border-radius:50%;background:#f0fdf4;display:flex;align-items:center;justify-content:center}
.lg-mobile-p{font-size:13.5px;color:var(--ink-2);line-height:1.7;margin:0 0 14px}

/* ============ 电话提醒屏蔽模式（后端 CALLS_OFF=1 时 body 加 no-calls） ============ */
body.no-calls .cls .cc{display:none!important}           /* 课程卡片小电话图标 */
body.no-calls .mcls-btns .cc{display:none!important}     /* 手机端小电话图标 */
body.no-calls .set-tab[data-set="calls"]{display:none!important}     /* 设置-电话提醒页签 */
body.no-calls .set-pane[data-pane="calls"]{display:none!important}
body.no-calls .set-tab[data-set="records"]{display:none!important}   /* 设置-提醒记录页签 */
body.no-calls .set-pane[data-pane="records"]{display:none!important}



/* ============ v4.2 首页改版 ============ */
/* +添加孩子：孩子卡片区底部通栏按钮（最后一个孩子下方） */
.addkid-row{margin:2px 0 16px}
.addkid-btn{
  width:100%;display:flex;align-items:center;gap:12px;
  background:#fff;border:1.5px dashed #c3ccdd;border-radius:14px;
  padding:13px 16px;cursor:pointer;font-family:inherit;transition:.15s;text-align:left
}
.addkid-btn:hover{border-color:var(--brand);background:#f8fafc}
.addkid-btn:active{transform:scale(.99)}
.ak-plus{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;flex:none;
  background:#f1f5f9;color:var(--ink-2);font-size:19px;font-weight:600;transition:.15s}
.addkid-btn:hover .ak-plus{background:var(--brand);color:#fff}
.ak-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ak-txt b{font-size:14.5px;font-weight:700;color:var(--ink)}
.ak-txt small{font-size:11px;color:var(--ink-3)}
.ak-arrow{flex:none;color:var(--ink-3);font-size:18px;line-height:1}
.addkid-btn:hover .ak-arrow{color:var(--brand)}

/* 录入课程模态框（AI 识别 + 手动添加；仅右上角 X 关闭） */
#entry-modal{z-index:340}
.entry-box{max-width:560px;width:94vw;max-height:86vh;overflow-y:auto;padding:0 0 18px}
.entry-box .set-head{padding:16px 18px 0}
.entry-box .tabbar{margin:10px 0 14px;padding:0 14px}
.entry-box .tabpane{padding:0 16px}
@media (max-width:560px){
  #entry-modal{align-items:flex-end}
  .entry-box{border-radius:16px 16px 0 0;width:100vw;max-width:100vw;max-height:90vh;
    padding-bottom:calc(16px + env(safe-area-inset-bottom))}
  .kid-acts{width:100%;justify-content:space-between}
  .btn.btn-entry{padding:8px 18px}
  .addkid-row{margin:2px 0 14px}
}
@media print{.addkid-row,.btn-entry{display:none!important}}
/* v5.9.7 打印页净化：屏幕附加信息不进打印稿（banner/日期/假·上学小字/黄底/今天蓝底）。
 * 第三档异常徽章（待定/待复核/冲突）按用户要求保留显示。 */
@media print{
  .cal-banner{display:none !important}
  .sched .h i{display:none !important}                 /* 列头日期与 ·假/·上学 小字 */
  .sched .h.cal-mark{background:var(--ks) !important}  /* 假期列头恢复默认底色 */
  .h.today{background:var(--ks) !important;color:inherit !important}
  .h.today i{display:none !important}
  .today-col-rim{display:none !important}
}

/* 页脚：公司版权 + 备案号 */
.footer-bar{
  display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:6px;
  padding:16px 12px 8px;font-size:11.5px;color:var(--ink-3)
}
.footer-bar .fb-dot{opacity:.5}
.footer-bar .fb-icp{color:inherit;text-decoration:none}
.footer-bar .fb-icp:hover{color:var(--ink-2)}

/* ============ v4.2 电话提醒中心模态（与设置同体系） ============ */
#calls-modal{z-index:340}
.calls-box{max-width:560px;width:min(92vw,560px)}
.calls-body{padding:6px 22px 16px;max-height:calc(88vh - 76px);overflow-y:auto;overscroll-behavior:contain}
/* 余额卡 */
.pc-bal{display:flex;align-items:center;gap:13px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 15px;margin:4px 0 4px;box-shadow:0 1px 3px rgba(20,30,60,.05)}
.pc-bal-ic{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;flex:none;background:linear-gradient(135deg,#10b981,#059669);color:#fff;box-shadow:0 3px 8px rgba(5,150,105,.28)}
.pc-bal.guest .pc-bal-ic{background:linear-gradient(135deg,#f6b17c,#f59e0b);box-shadow:0 3px 8px rgba(245,158,11,.28)}
.pc-bal-main{flex:1;min-width:0}
.pc-bal-lb{font-size:11.5px;color:var(--ink-3);letter-spacing:.5px}
.pc-bal-num{font-size:24px;font-weight:800;line-height:1.25;font-variant-numeric:tabular-nums}
.pc-bal-num small{font-size:12px;font-weight:600;color:var(--ink-3);margin-left:2px}
.pc-bal.guest .pc-bal-num{font-size:17px}
.pc-bal-sub{font-size:11.5px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pc-bal-btn{background:var(--brand);color:#fff;border:none;border-radius:10px;padding:11px 22px;font:700 13.5px/1 inherit;font-family:inherit;cursor:pointer;white-space:nowrap}
.pc-bal-btn:active{transform:scale(.97)}
.pc-bal-btn.dim{background:#c3ccdd;cursor:not-allowed}
/* 低量预警 */
.pc-warn{display:flex;align-items:center;gap:8px;background:#fff7ed;border:1px solid #f6b17c;border-radius:10px;padding:9px 12px;margin:2px 0 6px;font-size:12.5px;color:#9a3412}
.pc-warn .dot{width:8px;height:8px;border-radius:50%;background:#f59e0b;flex:none;animation:pcw 1.6s ease-in-out infinite}
@keyframes pcw{0%,100%{opacity:1;box-shadow:0 0 0 0 rgba(245,158,11,.4)}50%{opacity:.6;box-shadow:0 0 0 5px rgba(245,158,11,0)}}
/* 智能邀请卡（位置由 JS 决定：非会员/告急=顶部，会员够用=底部） */
.pc-invite{display:flex;align-items:center;gap:10px;background:#ecfdf5;border:1px solid #6ee7b7;border-radius:13px;padding:12px 14px;margin:6px 0 10px}
.pc-invite .pci-ic{font-size:22px;flex:none}
.pc-invite .pci-tx{flex:1;min-width:0}
.pc-invite .pci-tx b{display:block;font-size:13.5px;color:#065f46}
.pc-invite .pci-tx span{font-size:11px;color:#047857}
.pc-invite .pci-btn{background:#059669;color:#fff;border:none;border-radius:10px;padding:10px 14px;font:700 12.5px/1 inherit;font-family:inherit;cursor:pointer;white-space:nowrap}
.pc-invite .pci-btn:active{transform:scale(.97)}
/* 档位区 */
.pc-sec-h{font-size:13px;font-weight:700;margin:16px 0 8px}
.pc-sec-h span{font-weight:400;font-size:11px;color:var(--ink-3);margin-left:6px}
.pc-plans{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.pc-plan{position:relative;border:1.5px solid var(--line);border-radius:13px;padding:11px 5px 10px;text-align:center;cursor:pointer;transition:.15s;background:#f5f8ff}
.pc-plan:hover{border-color:#93b4f5;background:#eff5ff}
.pc-plan input{position:absolute;opacity:0;pointer-events:none}
.pc-plan.cur{border-color:var(--brand);box-shadow:0 0 0 1.5px var(--brand);background:#fff}
.pc-plan .cur-tag{position:absolute;top:-9px;left:50%;transform:translateX(-50%);background:var(--brand);color:#fff;font-size:10px;font-weight:800;border-radius:6px;padding:1.5px 9px;white-space:nowrap}
.pc-plan .nm{font-size:12px;color:var(--ink-2)}
.pc-plan .pr{font-size:18.5px;font-weight:800;font-variant-numeric:tabular-nums;margin:1px 0 0}
.pc-plan .pr small{font-size:10.5px;font-weight:500;color:var(--ink-3)}
.pc-plan .cl{font-size:12.5px;font-weight:700}
.pc-plan .ex{font-size:10.5px;color:var(--ink-3);margin-top:2px}
/* 次数包 */
.pc-packs{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:6px}
.pc-pack{position:relative;display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:10px;border:1.5px solid var(--line);border-radius:13px;padding:13px 14px;cursor:pointer;transition:.15s;background:#f5f8ff}
.pc-pack:hover{border-color:#93b4f5;background:#eff5ff}
.pc-pack input{position:absolute;opacity:0;pointer-events:none}
.pc-pack.cur{border-color:var(--brand);box-shadow:0 0 0 1.5px var(--brand);background:#fff}
.pc-pack b{font-size:16.5px;font-variant-numeric:tabular-nums}
.pc-pack span{font-size:11.5px;color:var(--ink-2)}
.pc-pack i{position:absolute;bottom:-9px;left:50%;transform:translateX(-50%);font-style:normal;font-size:9.5px;color:#b45309;background:#fff7ed;border:1px solid #f6b17c;border-radius:6px;padding:1px 7px;white-space:nowrap}
.pc-note{font-size:11px;color:var(--ink-3);text-align:center;margin:15px 0 2px}
/* 通话详单 */
.pc-recs{background:#fff;border:1px solid var(--line);border-radius:13px;overflow:hidden}
.pc-rec{display:flex;align-items:center;gap:11px;padding:11px 13px;border-bottom:1px solid #f1f5f9}
.pc-rec:last-child{border-bottom:none}
.pc-rec .ric{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;flex:none;background:#ecfdf5;color:#047857}
.pc-rec .ric.miss{background:#fef2f2;color:#b91c1c}
.pc-rec .ric.todo{background:#f1f5f9;color:#64748b}
.pc-rec .rtx{flex:1;min-width:0}
.pc-rec .rtx b{display:block;font-size:13.5px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pc-rec .rtx span{font-size:11.5px;color:var(--ink-3)}
.pc-rec .rst{flex:none;font-size:11px;font-weight:700;border-radius:99px;padding:2px 9px}
.pc-rec .rst.done{background:#eafaf4;color:#047857}
.pc-rec .rst.miss{background:#fef2f2;color:#b91c1c}
.pc-rec .rst.todo{background:#fff7e8;color:#b45309}
.pc-rec .rst.canceled{background:#f1f5f9;color:#64748b}
.pc-rec-more{display:block;width:100%;border:none;background:#fff;border-top:1px solid var(--line);padding:11px;font:600 13px/1 inherit;font-family:inherit;color:var(--ink-2);cursor:pointer}
.pc-rec-more:active{background:#f8fafc}
.pc-rec-empty{text-align:center;padding:28px 16px;color:var(--ink-3);font-size:13px}
.spin{display:inline-block;width:15px;height:15px;border:2px solid #cbd5e1;border-top-color:#059669;border-radius:50%;animation:pcsp .8s linear infinite;vertical-align:-3px;margin-right:6px}
@keyframes pcsp{to{transform:rotate(360deg)}}
.pc-foot{font-size:11.5px;color:var(--ink-3);text-align:center;margin-top:16px}
/* 手机端：电话中心贴全屏（同设置页），顶栏压成一行 */
@media (max-width:720px){
  .calls-box{width:100vw;min-width:0;height:100dvh;max-height:100dvh;border-radius:0}
  .calls-body{padding:6px 14px 14px;max-height:calc(100dvh - 70px)}
  .pc-bal{padding:12px 13px}
  .pc-bal-num{font-size:21px}
  .pc-plans{gap:7px}
  .pc-plan .pr{font-size:17px}
}

/* v4.3 电话中心子页容器（同 set-pane 滚动行为，独立 class 防串扰） */
.ctab-pane{padding:16px 26px 12px;max-height:calc(86vh - 130px);overflow:auto}
@supports (width:min(1px,1px)){ .ctab-pane{max-height:calc(min(88vh,780px) - 130px)} }
@media (max-width:720px){
  .ctab-pane{padding:12px 14px 10px;max-height:calc(100dvh - 112px)}
}

/* ============ v4.4 会员状态卡 + 充值 Sheet（双通道分段 + 吸底带价 CTA） ============ */
/* 双行状态卡：月卡+次数并行（像话费+流量并存，不是二选一） */
.vstatus{display:flex;align-items:stretch;gap:0;background:#fff;border:1px solid var(--line);
  border-radius:14px;padding:14px 16px;margin:4px 0 6px;box-shadow:0 1px 3px rgba(20,30,60,.05)}
.vs-row{flex:1;display:flex;align-items:center;gap:10px;min-width:0}
.vs-ic{font-size:24px;flex:none;line-height:1}
.vs-main{flex:1;min-width:0}
.vs-main b{display:block;font-size:14px;font-weight:800;color:var(--ink);line-height:1.35}
.vs-main span{display:block;font-size:11.5px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vs-div{width:1px;background:var(--line);margin:2px 12px;flex:none}
.vstatus.sm{padding:11px 14px;margin-bottom:10px}
.vstatus.sm .vs-ic{font-size:20px}
.vstatus.sm .vs-main b{font-size:13px}
/* 概览页大 CTA */
.vs-cta{display:block;width:100%;background:var(--brand);color:#fff;border:none;border-radius:13px;
  padding:14px 16px;font-family:inherit;cursor:pointer;text-align:left;transition:.15s;
  display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:4px}
.vs-cta b{font-size:15.5px;font-weight:800}
.vs-cta span{font-size:11px;opacity:.75}
.vs-cta:active{transform:scale(.99)}
.vs-cta:hover{background:#1d4ed8}
/* 充值 Sheet 容器：底部弹起（手机）/ 居中（桌面） */
#buy-modal{z-index:420}
.buy-box{max-width:440px;width:92vw;max-height:86vh;display:flex;flex-direction:column;padding:0 0 0;overflow:hidden}
.buy-body{padding:2px 18px 4px;overflow-y:auto;overscroll-behavior:contain;flex:1}
/* v5.0.2：两通道等高（月卡3列 vs 次卡4项，切 tab 弹窗高度不跳） */
.buy-ch{min-height:150px}
.buy-ch .pc-plans, .buy-ch .pc-packs{margin-bottom:4px}
.pc-packs{grid-template-columns:repeat(2,1fr);gap:8px}
.pc-pack{flex-direction:row;justify-content:space-between;padding:13px 14px;gap:10px}
.pc-pack b{font-size:17px}
.pc-pack span{font-size:12px}
.pc-pack i{position:static;transform:none;align-self:center}
@media (max-width:560px){
  .pc-packs{grid-template-columns:repeat(2,1fr)}
  .buy-ch{min-height:140px}
}
/* 分段切换 */
.seg{display:flex;background:#eef2f7;border-radius:11px;padding:3px;margin:2px 0 12px}
.seg-btn{flex:1;border:none;background:transparent;font:600 14px/1 inherit;font-family:inherit;
  color:var(--ink-2);padding:10px 0;border-radius:9px;cursor:pointer;transition:.15s;
  display:flex;align-items:center;justify-content:center;gap:6px}
.seg-btn.on{background:#fff;color:var(--ink);box-shadow:0 1px 3px rgba(15,23,42,.14);font-weight:700}
/* v5.0.4 tab 状态徽标：月卡=VIP 等级+剩余，次卡=余额；未开通灰、在用金 */
.seg-badge{font-size:10px;font-weight:600;border-radius:6px;padding:2px 6px;background:#e2e8f0;color:var(--ink-3);white-space:nowrap}
.seg-badge.on{background:linear-gradient(120deg,#fdf3e3,#fce8cc);color:#b45309;font-weight:700}
/* 吸底 CTA */
.buy-foot{flex:none;padding:12px 18px calc(12px + env(safe-area-inset-bottom));
  border-top:1px solid var(--line);background:#fff}
.buy-go{display:block;width:100%;background:var(--brand);color:#fff;border:none;border-radius:13px;
  padding:15px 0;font:800 15.5px/1 inherit;font-family:inherit;cursor:pointer;transition:.15s}
.buy-go:hover{background:#1d4ed8}
.buy-go:active{transform:scale(.99)}
.buy-go.dim{background:#c3ccdd;cursor:not-allowed}
/* 设置页·会员入口行 */
.member-entry{display:flex;align-items:center;gap:12px;width:100%;background:#fff;border:1px solid var(--line);
  border-radius:13px;padding:13px 15px;cursor:pointer;font-family:inherit;text-align:left;transition:.15s;margin:0 0 12px}
.member-entry:hover{border-color:#c3ccdd;background:#f8fafc}
.member-entry .me-ic{font-size:24px;flex:none}
.member-entry .me-main{flex:1;min-width:0}
.member-entry .me-main b{display:block;font-size:14.5px;font-weight:700;color:var(--ink)}
.member-entry .me-main span{display:block;font-size:11.5px;color:var(--ink-3);margin-top:1px}
.member-entry .me-arrow{flex:none;font-size:20px;color:var(--ink-3);line-height:1}
.member-entry:hover .me-arrow{color:var(--brand)}
/* 手机端：充值 Sheet 贴底 */
@media (max-width:720px){
  #buy-modal{align-items:flex-end;padding:0}
  .buy-box{border-radius:16px 16px 0 0;width:100vw;max-width:100vw;max-height:88dvh}
  .vstatus{padding:12px 13px}
  .vs-ic{font-size:21px}
}

/* v4.5 设置页·会员与充值页签：小节标题 + 状态卡间距 */
.mb-sec-h{font-size:13px;font-weight:700;color:var(--ink);margin:16px 0 8px}
.mb-sec-h span{font-weight:400;font-size:11px;color:var(--ink-3);margin-left:6px}
#mb-vstatus{margin:2px 0 4px}

/* v4.5 修复：状态卡长文案不截断——允许换行；手机端两行改上下堆叠给足宽度 */
.vs-main span{white-space:normal;line-height:1.5}
@media (max-width:720px){
  .vstatus{flex-direction:column;gap:8px;padding:12px 14px}
  .vs-div{width:auto;height:1px;margin:0}
  .vs-row{width:100%}
}

/* v4.5 录入课程标题：上下文孩子名（多孩子=可点击切换的 pill） */
.entry-who-btn{background:#eff6ff;color:#2563eb;border:1px solid #bfdbfe;border-radius:8px;
  padding:3px 10px;font:600 12.5px/1.4 inherit;font-family:inherit;cursor:pointer;margin-left:2px;vertical-align:1px}
.entry-who-btn:hover{background:#dbeafe}
.entry-who-btn:active{transform:scale(.97)}

/* v4.6 退款按钮 */
.mb-refund-btn{flex:none;background:#fff;border:1px solid #fca5a5;color:#dc2626;border-radius:9px;
  padding:8px 14px;font:600 12.5px/1 inherit;font-family:inherit;cursor:pointer;transition:.15s}
.mb-refund-btn:hover{background:#fef2f2}
.mb-refund-btn:disabled{color:#94a3b8;border-color:#e2e8f0;cursor:default;background:#fff}

/* v4.6.2 退款深入口：会员页签最底部的小灰字按钮 + 抽屉 */
.refund-entry{display:block;margin:18px auto 4px;background:none;border:none;color:var(--ink-3);
  font:400 11.5px/1 inherit;font-family:inherit;cursor:pointer;padding:6px 12px;opacity:.75;transition:.15s}
.refund-entry:hover{opacity:1;color:var(--ink-2);text-decoration:underline;text-underline-offset:3px}
.refund-drawer{margin-top:10px;animation:modalIn .18s ease-out}
.refund-note{font-size:10.5px;color:var(--ink-3);line-height:1.7;margin:8px 2px 0}

/* v4.8 修复：日历订阅面板要盖在设置弹层之上弹出（同 z-index 时 DOM 靠前者被盖） */
#cal-modal{z-index:430}

/* v4.8.1 日历订阅面板：上下堆叠布局（手机不再挤压变形）
 * v9.2 修 iPhone 底部空白遮挡：弹体用弹性高度（不再 86vh 写死），底部留 safe-area */
#cal-modal{align-items:stretch;padding:0}
#cal-modal .modal-box{max-height:100dvh;height:100dvh;border-radius:0;display:flex;flex-direction:column;
  padding-bottom:env(safe-area-inset-bottom,0px)}
@media (min-width:721px){
  #cal-modal{align-items:center;padding:16px}
  #cal-modal .modal-box{max-width:420px;max-height:min(88vh,780px);height:auto;border-radius:18px;
    padding-bottom:0}
  #cal-modal .cal-body{max-height:calc(88vh - 120px)}
}
.cal-body{flex:1;min-height:0;padding:14px 22px calc(18px + env(safe-area-inset-bottom,0px));overflow-y:auto;overscroll-behavior:contain}
.cal-intro{font-size:12.5px;color:var(--ink-2);line-height:1.7;margin:0 0 14px}
.cal-intro b{color:var(--ink)}
/* 一键订阅主按钮（iPhone 显示） */
.cal-subscribe-btn{display:block;width:100%;background:#2563eb;color:#fff;border:none;border-radius:12px;
  padding:13px 0;font:700 14.5px/1 inherit;font-family:inherit;cursor:pointer;margin-bottom:14px;transition:.15s}
.cal-subscribe-btn:active{transform:scale(.98)}
.cal-subscribe-btn:disabled{background:#c3ccdd}
/* 二维码：SVG 强制适应容器（修 width=240 溢出遮挡） */
.cal-qr-wrap{width:172px;height:172px;margin:0 auto 6px;background:#fff;border:1px solid var(--line);
  border-radius:12px;padding:6px;display:grid;place-items:center;overflow:hidden}
.cal-qr-wrap svg{width:100%!important;height:100%!important;display:block}
.cal-qr-loading{font-size:11px;color:var(--ink-3)}
.cal-qr-tip{font-size:11px;color:var(--ink-3);text-align:center;margin:0 0 14px}
.cal-qr-tip b{color:var(--ink-2)}
/* 分步指引 */
.cal-steps{display:flex;flex-direction:column;gap:10px;margin-bottom:14px}
.cal-step{background:#f8fafc;border:1px solid var(--line);border-radius:11px;padding:10px 13px}
.cal-step b{display:block;font-size:12.5px;color:var(--ink);margin-bottom:3px}
.cal-step span{font-size:12px;color:var(--ink-2);line-height:1.6}
/* 复制按钮 + 链接 + 小字 */
.cal-copy-btn{display:block;width:100%;background:#fff;border:1.5px solid var(--brand);color:var(--brand);
  border-radius:12px;padding:11px 0;font:600 13.5px/1 inherit;font-family:inherit;cursor:pointer;margin-bottom:10px}
.cal-copy-btn:active{background:#eff6ff}
.cal-url{background:#f8fafc;border:1px dashed var(--line);border-radius:10px;padding:8px 12px;
  font-size:10.5px;color:var(--ink-3);word-break:break-all;margin-bottom:12px}
.cal-notes{font-size:11px;color:var(--ink-3);line-height:1.8;margin:0}
.cal-notes a{color:#2563eb}
/* v4.8.3 安卓日历不支持订阅 → ICSx5 折叠指引 */
.cal-fallback{margin:0 0 14px;border:1px solid var(--line);border-radius:11px;background:#fff}
.cal-fallback summary{list-style:none;cursor:pointer;padding:11px 13px;font-size:12.5px;font-weight:600;
  color:var(--ink);display:flex;align-items:center;user-select:none}
.cal-fallback summary::-webkit-details-marker{display:none}
.cal-fallback summary::before{content:"▸";color:var(--brand);margin-right:7px;transition:transform .18s;font-size:13px}
.cal-fallback[open] summary::before{transform:rotate(90deg)}
.cal-fb-body{padding:2px 13px 13px}
.cal-fb-body>p{font-size:12px;color:var(--ink-2);line-height:1.75;margin:0 0 8px}
.cal-fb-body>p b{color:var(--ink)}
.cal-fb-step{background:#f8fafc;border:1px solid var(--line);border-radius:10px;padding:9px 12px;margin-bottom:8px}
.cal-fb-step b{display:block;font-size:12.5px;color:var(--ink);margin-bottom:3px}
.cal-fb-step span{font-size:12px;color:var(--ink-2);line-height:1.7}
.cal-fb-step span b{display:inline;color:var(--ink)}
@media (max-width:560px){
  .cal-body{padding:12px 16px 16px}
  .cal-qr-wrap{width:150px;height:150px}
}

/* ================= v5.0 站内消息 ================= */
/* 顶栏铃铛红点（v8.1 按钮白化后：白描边改灰底描边+投影，角标在白色按钮上清晰可见） */
#btn-msgs .msg-dot{position:absolute;top:2px;right:2px;min-width:16px;height:16px;border-radius:9px;
  background:#ef4444;color:#fff;font-size:9.5px;font-weight:700;line-height:16px;text-align:center;
  padding:0 3px;border:2px solid #fff;box-sizing:content-box;box-shadow:0 1px 4px rgba(239,68,68,.45);z-index:5}
/* 家人反馈消息角标同色系（course_issue 走统一红点，无区分色需求） */
/* 高优未读横幅（notice 同款风格，蓝底强调） */
.msg-banner{display:flex;align-items:center;gap:10px;background:linear-gradient(120deg,#eff6ff,#e0edff);
  border:1px solid #bfdbfe;border-radius:12px;padding:11px 14px;margin-bottom:12px;font-size:13px;color:#1e40af}
.msg-banner #msg-banner-text{flex:1;line-height:1.5}
.msg-banner #msg-banner-go{color:#2563eb;font-weight:700;white-space:nowrap}
.msg-banner #msg-banner-x{border:none;background:none;color:#93c5fd;cursor:pointer;font-size:12px;padding:4px}
/* 消息面板列表 */
#msg-list .msg-item{display:flex;gap:10px;padding:12px 8px;border-bottom:1px solid #eef2f7;cursor:pointer}
#msg-list .msg-item:last-child{border-bottom:none}
#msg-list .msg-item:active{background:#f8fafc}
.msg-ico{width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  font-size:16px;flex:none;background:#f1f5f9}
.msg-ico.member_expire{background:#fef3c7}
.msg-ico.pack_expire{background:#fce7f3}
.msg-ico.low_balance{background:#fee2e2}
.msg-ico.refund{background:#dbeafe}
.msg-main{flex:1;min-width:0}
.msg-title{font-size:13px;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:6px}
.msg-title .unread-mark{width:6px;height:6px;border-radius:50%;background:#ef4444;flex:none}
.msg-body{font-size:12px;color:var(--ink-2);line-height:1.65;margin-top:3px;word-break:break-word}
.msg-meta{font-size:10.5px;color:var(--ink-3);margin-top:5px;display:flex;align-items:center;gap:8px}
.msg-act{color:#2563eb;font-weight:600;font-size:11.5px}
.msg-empty{text-align:center;color:var(--ink-3);font-size:12.5px;padding:36px 0}

/* ================= v5.1 PC 扫码支付弹层 ================= */
.payqr-box{width:220px;height:220px;margin:0 auto;border:1px solid var(--line);border-radius:14px;
  background:#fff;display:flex;align-items:center;justify-content:center;overflow:hidden;padding:8px}
.payqr-box svg{width:100%!important;height:100%!important}
.payqr-wait{font-size:12.5px;color:var(--ink-2);margin:14px 0 0;display:flex;align-items:center;justify-content:center;gap:8px}
.payqr-spin{width:13px;height:13px;border:2px solid #cbd5e1;border-top-color:var(--brand);border-radius:50%;
  display:inline-block;animation:payqrSpin 0.9s linear infinite}
@keyframes payqrSpin{to{transform:rotate(360deg)}}
.payqr-done{font-size:14px;font-weight:700;color:#059669;margin:14px 0 0}

/* ================= v5.5 本人接听确认 ================= */
.sc-ck{display:flex;gap:10px;align-items:flex-start;background:#f8fafc;border:1.5px solid var(--line);
  border-radius:12px;padding:11px 12px;margin:0 0 10px;cursor:pointer;transition:.15s}
.sc-ck.on{border-color:var(--brand);background:#f5f8ff}
.sc-ck input{margin-top:3px;flex:none;width:16px;height:16px;accent-color:var(--brand)}
.sc-ck .t{font-size:13px;font-weight:700;color:var(--ink);display:block}
.sc-ck .d{font-size:11.5px;color:var(--ink-3);display:block;margin-top:3px;line-height:1.5}
.sc-ck .d b{color:var(--ink-2)}
/* v5.6.10 授权书正文（本人确认弹窗内嵌滚动区，与被邀请人版 .doc 同观感） */
.sc-doc{max-height:38vh;overflow-y:auto;border:1px solid var(--line,#e2e8f0);border-radius:10px;
  padding:12px 14px;margin:0 0 10px;font-size:12.5px;color:#334155;background:#fafbfc;line-height:1.65}
.sc-doc h1{font-size:14.5px;margin:0 0 6px}
.sc-doc h2{font-size:13px;margin:10px 0 4px}
.sc-doc p{margin:5px 0}
.sc-doc ul{padding-left:16px;margin:4px 0}
.sc-doc li{margin:2px 0}
.sc-doc-hint{font-weight:400;font-size:11px;color:var(--ink-3,#8a93a6)}
/* v5.6.11 本人确认弹窗防截屏水印：只覆盖弹窗盒体，尾号+时间戳，30s 换位重绘 */
.modal-box{position:relative}   /* 水印层的定位基准（无 position 的盒体加此行不影响布局） */
.sc-wm{position:absolute;inset:0;pointer-events:none;overflow:hidden;border-radius:inherit;z-index:5}
.sc-wm span{position:absolute;color:rgba(100,116,139,.12);font-size:12px;white-space:nowrap;transform:rotate(-24deg);user-select:none}



/* ================= v5.6.4 通用弹窗（替代系统 prompt/confirm） ================= */
.ux-box{max-width:340px;width:88vw}
.ux-box h3{margin:2px 0 8px;font-size:16.5px}
.ux-msg{font-size:13px;color:var(--ink-2);line-height:1.7;margin:0 0 6px;white-space:pre-line}
.ux-input-wrap{margin:4px 0 2px}
#ux-input{width:100%;box-sizing:border-box;border:1.5px solid var(--line);border-radius:10px;
  padding:10px 12px;font:500 14px/1.3 inherit;font-family:inherit;outline:none;transition:.15s;background:#fff}
#ux-input:focus{border-color:var(--brand)}
#ux-input.ux-bad{border-color:#dc2626;background:#fef2f2}
.ux-err{font-size:11.5px;color:#dc2626;margin:6px 2px 0;line-height:1.5;display:none}
.ux-err::before{content:"⚠ "}

/* ============ v5.6.20 电话提醒中心·双态首屏 + 设置页重排 ============ */
/* --- 余额条（管理态置顶；不足变黄可点） --- */
.cc-bal{display:flex;align-items:center;gap:10px;width:100%;background:#fff;border:1px solid var(--line);
  border-radius:12px;padding:11px 13px;margin:0 0 12px;cursor:pointer;font-family:inherit;text-align:left;transition:.15s}
.cc-bal:hover{border-color:#c3ccdd;background:#f8fafc}
.cc-bal.low{background:#fffbeb;border-color:#fde68a}
.cc-bal.low:hover{background:#fef6e0}
.cc-bal.low .cc-bal-main b{color:#b45309}
.cc-bal-ic{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;flex:none;
  background:linear-gradient(135deg,#10b981,#059669);font-size:16px}
.cc-bal.low .cc-bal-ic{background:linear-gradient(135deg,#fbbf24,#f59e0b)}
.cc-bal-main{flex:1;min-width:0}
.cc-bal-main b{display:block;font-size:13.5px;font-weight:700;line-height:1.35}
.cc-bal-main span{font-size:11.5px;color:var(--ink-3)}
.cc-bal-go{font-size:12.5px;color:var(--brand);font-weight:600;flex:none}
.cc-bal.low .cc-bal-go{color:#b45309}

/* --- A 引导态 --- */
.cc-hero{background:linear-gradient(160deg,#f0f5ff,#e8f0ff 55%,#fdf3e8);border:1px solid #dbe6fb;
  border-radius:16px;padding:20px 18px 16px;margin:2px 0 14px;text-align:center}
.cc-hero-t{font-size:20px;font-weight:800;line-height:1.42;color:#16213d;letter-spacing:-.2px}
.cc-flow{font-size:12.5px;color:#5b6b8c;margin:9px 0 15px;letter-spacing:.2px}
.cc-demo{display:flex;align-items:center;gap:11px;width:100%;text-align:left;background:#fff;
  border:1.5px solid #d7e3fb;border-radius:13px;padding:13px 13px;cursor:pointer;font-family:inherit;transition:.15s;
  box-shadow:0 2px 8px rgba(30,60,120,.07)}
.cc-demo:hover{border-color:var(--brand);box-shadow:0 4px 14px rgba(37,99,235,.16)}
.cc-demo-ic{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;flex:none;
  background:linear-gradient(135deg,#60a5fa,#2563eb);font-size:18px;color:#fff}
.cc-demo-main{flex:1;min-width:0}
.cc-demo-main b{display:block;font-size:13.5px;color:var(--ink);line-height:1.4}
.cc-demo-main span{font-size:11.5px;color:var(--ink-3)}
.cc-demo-arrow{font-size:20px;color:var(--ink-3);flex:none}
.cc-demo.playing .cc-demo-ic{background:linear-gradient(135deg,#fbbf24,#f59e0b)}
.cc-demo-log{margin-top:9px;background:#fff;border:1px dashed #d7e3fb;border-radius:11px;padding:11px 12px;text-align:left}
.cc-demo-log .dl-t{font-size:11px;color:var(--ink-3);margin-bottom:6px}
.cc-demo-log .dl-b{font-size:13px;line-height:1.7;color:var(--ink)}
.cc-demo-log .dl-b b{color:var(--brand)}
.cc-hero-price{font-size:11.5px;color:#7b88a3;margin:13px 0 0;line-height:1.6}

.cc-cta{display:block;width:100%;background:var(--brand);color:#fff;border:none;border-radius:12px;
  padding:14px 0;font:700 15px/1 inherit;font-family:inherit;cursor:pointer;box-shadow:0 3px 10px rgba(37,99,235,.28)}
.cc-cta:active{transform:scale(.99)}
.cc-cta-sub{display:block;width:100%;background:#fff;color:var(--ink-2);border:1.5px solid var(--line);
  border-radius:12px;padding:11px 0;font:600 13.5px/1 inherit;font-family:inherit;cursor:pointer;margin-top:8px}
.cc-cta-sub:hover{border-color:#c3ccdd;color:var(--ink)}

/* --- B 管理态：按接听人分卡 --- */
.cc-cards{display:flex;flex-direction:column;gap:10px;margin:2px 0 4px}
.cc-card{border:1.5px solid var(--line);border-radius:14px;background:#fff;padding:13px 14px;transition:.15s}
.cc-card:hover{border-color:#c9d2e3}
.cc-card.sby{border-color:#fde68a;background:#fffdf7}
.cc-c-hd{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.cc-c-who{font-size:15px;font-weight:700;color:var(--ink)}
.cc-c-tag{font-size:10.5px;padding:1.5px 8px;border-radius:99px;background:#eafaf4;color:#047857;font-weight:600;flex:none}
.cc-c-tag.sby{background:#fef3c7;color:#b45309}
.cc-c-tag.self{background:#eef2ff;color:#4338ca}
.cc-c-st{margin-left:auto;font-size:11.5px;color:var(--ink-3);flex:none}
.cc-c-row{font-size:12.5px;color:var(--ink-2);line-height:1.75;display:flex;gap:7px}
.cc-c-row .k{color:var(--ink-3);flex:none;width:52px}
.cc-c-row .v{color:var(--ink);flex:1;min-width:0}
.cc-c-row .v em{font-style:normal;color:var(--brand);font-weight:600}
.cc-c-acts{display:flex;gap:7px;margin-top:11px;padding-top:10px;border-top:1px dashed #eef2f7}
.cc-c-acts button{flex:1;border:1px solid var(--line);background:#fff;color:var(--ink-2);
  border-radius:9px;padding:7px 0;font:600 12.5px/1 inherit;font-family:inherit;cursor:pointer}
.cc-c-acts button:hover{border-color:#c3ccdd;color:var(--ink)}
.cc-c-acts button.warn{color:#dc2626;border-color:#fecaca}
.cc-c-acts button.warn:hover{background:#fef2f2}
.cc-add-card{border:1.5px dashed #cbd5e1;border-radius:14px;background:#fbfcfe;padding:15px 14px;
  text-align:center;cursor:pointer;font-family:inherit;width:100%;transition:.15s}
.cc-add-card:hover{border-color:var(--brand);background:#f5f8ff}
.cc-add-card b{display:block;font-size:14px;color:var(--brand);font-weight:700}
.cc-add-card span{font-size:11.5px;color:var(--ink-3)}

/* --- 向导折叠区 --- */
.cc-wiz{margin:4px 0 8px;padding:14px 14px 4px;background:#f8fafd;border:1px solid var(--line);border-radius:14px}
.cc-wiz-hd{display:flex;align-items:center;margin-bottom:12px}
.cc-wiz-hd b{font-size:14px;color:var(--ink)}
.cc-wiz-x{margin-left:auto;border:none;background:none;color:var(--ink-3);font:600 12.5px inherit;
  font-family:inherit;cursor:pointer;padding:4px 6px;border-radius:6px}
.cc-wiz-x:hover{color:var(--ink);background:#eef2f7}

/* --- 已结束的提醒（永久保留折叠区） --- */
.cc-fin{margin:14px 0 4px;border-top:1px dashed var(--line);padding-top:12px}
.cc-fin-tog{display:flex;align-items:center;width:100%;background:none;border:none;font:600 13px/1.4 inherit;
  font-family:inherit;color:var(--ink-2);cursor:pointer;padding:4px 0;text-align:left}
.cc-fin-tog:hover{color:var(--ink)}
.cc-fin-tog em{font-style:normal;color:var(--ink-3);font-weight:400;margin-left:3px}
.cc-fin-ar{margin-left:auto;transition:.2s;color:var(--ink-3)}
.cc-fin-tog.open .cc-fin-ar{transform:rotate(180deg)}
.cc-fin-list{margin-top:8px;display:flex;flex-direction:column;gap:8px}
.cc-fin-card{border:1px solid var(--line);border-radius:12px;background:#fafbfd;padding:11px 12px}
.cc-fin-hd{display:flex;align-items:center;gap:7px;margin-bottom:6px}
.cc-fin-hd b{font-size:13.5px;color:var(--ink-2)}
.cc-fin-why{font-size:11.5px;color:var(--ink-3)}
.cc-fin-when{font-size:11px;color:var(--ink-3);margin-bottom:8px}
.cc-fin-acts{display:flex;gap:7px}
.cc-fin-acts button{flex:1;border:1px solid var(--line);background:#fff;color:var(--ink-2);border-radius:8px;
  padding:6px 0;font:600 12px/1 inherit;font-family:inherit;cursor:pointer}
.cc-fin-acts button.pri{border-color:var(--brand);color:var(--brand)}
.cc-fin-acts button.pri:hover{background:#f0f4ff}
.cc-fin-acts button.del:hover{border-color:#dc2626;color:#dc2626;background:#fef2f2}
.cc-fin-note{font-size:11px;color:var(--ink-3);margin:8px 0 0;line-height:1.6}

/* --- 记录页子筛选 --- */
.cc-rec-seg{margin:2px 0 12px}

/* --- 设置页：添加接听人折叠 + 电话提醒入口 --- */
.ct-add-tog{display:block;width:100%;background:#fff;border:1.5px dashed #cbd5e1;border-radius:11px;
  padding:11px 0;font:600 13.5px/1 inherit;font-family:inherit;color:var(--brand);cursor:pointer;margin:0 0 10px}
.ct-add-tog:hover{border-color:var(--brand);background:#f5f8ff}
.ct-add-tog.on{border-style:solid;border-color:var(--line);color:var(--ink-3)}
#st-calls-entry .me-main b{color:var(--ink)}
#st-calls-entry{margin-bottom:14px}

/* --- v5.6.29 视觉引导（两步截图，无功能纯指引） --- */
.cc-guide{margin:4px 0 8px;padding:14px 14px 8px;background:#f8fafd;border:1px solid var(--line);border-radius:14px}
.cc-guide-step{margin-bottom:14px}
.cc-guide-n{font-size:13.5px;font-weight:700;color:var(--ink);margin-bottom:8px}
.cc-guide-step img{display:block;width:100%;border-radius:10px;border:1px solid #e3e9f4;box-shadow:0 2px 8px rgba(15,23,42,.08)}
.cc-guide-p{font-size:12px;color:var(--ink-2);line-height:1.75;margin:8px 0 0}
.cc-guide-p b{color:var(--ink)}
.cc-guide-go{margin-top:9px;border:none;background:#fff;color:var(--brand);font:600 12.5px/1 inherit;font-family:inherit;
  border:1px solid #c7d6f5;border-radius:9px;padding:8px 14px;cursor:pointer}
.cc-guide-go:hover{background:#f0f4ff}

/* v5.7.7 引导页「去设置」大按钮：高亮可点，替代原文字链 */
.cc-guide-go-big{
  display:flex;align-items:center;justify-content:center;gap:6px;width:100%;
  margin-top:10px;padding:12px 0;border:none;border-radius:11px;cursor:pointer;
  background:var(--brand);color:#fff;font:700 14.5px/1 inherit;font-family:inherit;
  box-shadow:0 4px 14px rgba(37,99,235,.32);transition:transform .12s,box-shadow .12s;
}
.cc-guide-go-big:active{transform:scale(.97);box-shadow:0 2px 8px rgba(37,99,235,.28)}

/* v5.7.8 引导截图设备自适应：PC 视口显示 PC 悬停图、移动视口显示手机操作图。
 * 同一位置两张图都存在（img.cc-shot-pc / img.cc-shot-mobile），按断点二选一显示。
 * 断点 560px 与全站移动端判定一致。 */
.cc-guide .cc-shot-mobile{display:none}
.cc-guide .cc-shot-pc{display:block}
@media (max-width:560px){
  .cc-guide .cc-shot-pc{display:none}
  .cc-guide .cc-shot-mobile{display:block}
}

/* ================= v5.8.0 微信语音条（听一听演示音频） =================
 * 交互对齐微信语音消息：绿底圆角条 + 播放中声波动画 + 右侧秒数。
 * 上方保留一句"奶奶接到的电话就是这样的"话术气泡（cc-demo-log 复用）。 */
.wave-anim .wv-wave{display:none}        /* 兜底：老结构引用不报错 */
.wx-voice{
  display:flex;align-items:center;gap:10px;width:78%;min-width:210px;max-width:300px;
  margin:10px auto 0;padding:12px 14px;border:none;border-radius:12px;cursor:pointer;
  background:#95ec69;box-shadow:0 2px 10px rgba(60,140,40,.18);
  font-family:inherit;transition:transform .12s,box-shadow .12s;position:relative;
}
.wx-voice:active{transform:scale(.97)}
.wx-voice.playing{box-shadow:0 4px 16px rgba(60,140,40,.28)}
/* 声波：16 根小竖条，默认低平；playing 时跳动 */
.wv-wave{display:flex;align-items:center;gap:2.5px;flex:1;height:18px}
.wv-wave i{flex:1;max-width:3px;height:4px;border-radius:2px;background:rgba(20,80,20,.55);transition:height .18s}
.wx-voice.playing .wv-wave i{animation:wvJump 0.9s ease-in-out infinite}
.wx-voice.playing .wv-wave i:nth-child(3n+1){animation-delay:.12s}
.wx-voice.playing .wv-wave i:nth-child(3n+2){animation-delay:.24s}
.wx-voice.playing .wv-wave i:nth-child(4n+3){animation-delay:.36s}
@keyframes wvJump{0%,100%{height:4px}45%{height:15px}60%{height:8px}}
/* 右侧小红点（微信语音未读点语义，这里作"新样例"提示，播过后隐藏） */
.wv-dot{width:8px;height:8px;border-radius:50%;background:#fa5151;flex:none;transition:opacity .2s}
.wv-dot.off{opacity:0}
.wv-sec{flex:none;font:600 12.5px/1 inherit;color:rgba(20,80,20,.8)}
.wv-tip{margin:8px 0 0;text-align:center;font-size:11.5px;color:#7b88a3}
/* 话术气泡：默认隐藏，点击语音条后展开（复用旧 cc-demo-log 样式，微调居中） */
.cc-demo-log{margin-top:9px;background:#fff;border:1px dashed #d7e3fb;border-radius:11px;padding:11px 12px;text-align:left}

/* ===== v5.9.5 周视图日历：真实日期 + 假期/调休标记 ===== */
.cal-banner{margin:0 0 10px;padding:10px 14px;border-radius:10px;font-size:13px;line-height:1.5}
.cal-holiday{background:#fef3c7;color:#92400e;border:1px solid #fde68a}
.cal-workday{background:#dbeafe;color:#1e40af;border:1px solid #bfdbfe}
.h i{display:block;font-style:normal;font-size:9.5px;font-weight:600;color:var(--ink-3);margin-top:1px;white-space:nowrap}
.h.cal-mark{background:#fef3c7}
.h.cal-mark i{color:#92400e}
.mday-h .md{font-style:normal;font-size:10.5px;color:var(--ink-3);margin-left:4px}
.mday.cal-mark{opacity:.62}
.mday.cal-mark .mcls{filter:grayscale(.4)}
.cal-tag{font-style:normal;font-size:10px;font-weight:700;color:#92400e;background:#fef3c7;border-radius:6px;padding:1px 6px}
.mday.cal-mark[data-workday="1"] .cal-tag{color:#1e40af;background:#dbeafe}

/* ===== v5.9.6 当天高亮：电流环绕游动边框 =====
 * conic-gradient 旋转实现"电流"沿边框游动；假期日背景置灰但边框照常游动（需求 1）。 */
@keyframes calBolt { to { transform: rotate(360deg); } }
/* v5.9.6b：v1 旋转光圈已停用（用户否决），电光游走改走 .today-svg（见文件末尾） */
.h.today::before,.mday.today::before{content:none !important}
.today-rim{position:relative;z-index:1}
.today-rim::before{
  content:"";position:absolute;inset:-3px;border-radius:inherit;z-index:-1;
  background:conic-gradient(from 0deg, transparent 0deg, transparent 290deg, #2563eb 330deg, #60c8ff 352deg, transparent 360deg);
  animation:calBolt 1.6s linear infinite;
}
.today-rim::after{
  content:"";position:absolute;inset:0;border-radius:inherit;z-index:-1;
  background:var(--card,#fff);
}
/* 桌面列头（.h.today）：::before=游动电流边框（z:0），::after=背景板（z:-1），内容自提 z:1 */
.h.today{background:var(--pri,#2563eb);color:#fff}
.h.today i{color:#dbeafe !important}
.h.today.cal-mark{background:#1d4ed8}   /* 假期/调休 + 今天：深蓝底白字 */
.h.today.cal-mark i{color:#bfdbfe !important}
.mday.today{position:relative;z-index:1;border-radius:14px}
.mday.today::before{
  content:"";position:absolute;inset:-3px;border-radius:14px;z-index:2;pointer-events:none;
  background:conic-gradient(from 0deg, transparent 0deg, transparent 290deg, #2563eb 330deg, #60c8ff 352deg, transparent 360deg);
  animation:calBolt 1.6s linear infinite;
  -webkit-mask:linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;padding:3px;
}
.mday.today::after{
  content:"";position:absolute;inset:0;border-radius:14px;z-index:-1;
  background:var(--card,#fff);
}
.mday.today.cal-mark::after{background:#eceff3}   /* 假期今天：置灰 */
.mday.today .mday-h{position:relative;z-index:1}
/* 尊重系统减弱动效设置 */
@media (prefers-reduced-motion: reduce){
  .h.today::before,.mday.today::before,.today-rim::before{animation-duration:6s}
}

/* ===== v5.9.6b 当天边框 v2：电光沿边框来回游走（替换旋转光圈） ===== */
/* 原理：边框路径画在 SVG rect 上，一段短光斑 + 渐隐拖尾沿周长往返（stroke-dashoffset）。 */
@keyframes boltRun {
  0%   { stroke-dashoffset: 0; }
  45%  { stroke-dashoffset: -700; }
  55%  { stroke-dashoffset: -700; }
  100% { stroke-dashoffset: -1400; }
}
.today-col-rim{position:relative;z-index:3;pointer-events:none;min-width:0}
@media (min-width:561px){.today-col-rim{display:none !important}}   /* v5.9.6e PC 端不显示电光 */
.today-svg{position:absolute;inset:0;width:100%;height:100%;z-index:3;pointer-events:none;display:block;overflow:visible}
.today-svg rect{
  x:1.5px;y:1.5px;width:calc(100% - 3px);height:calc(100% - 3px);
  fill:none;stroke-width:3;stroke-linecap:round;vector-effect:non-scaling-stroke;
  stroke:#2563eb;
  stroke-dasharray:90 610;          /* 亮段 90，暗段 610（pathLength=700 归一，往返无缝） */
  filter:drop-shadow(0 0 5px #60c8ff) drop-shadow(0 0 2px #2563eb);
  animation:boltRun 3.2s ease-in-out infinite;
}
/* 桌面列头：格子窄高比大，电光贴内沿不外溢，不影响相邻列 */
.today-svg-h{inset:0}

/* ================= v8.2 家人视角 + 问题课标记 ================= */
/* 问题课黄角标「?」：家人反馈待家长处理（家长端）/ 已反馈核对中（家人端） */
.cls, .mcls { position: relative; }
.issue-badge{
  position:absolute;top:-7px;right:-7px;z-index:3;
  min-width:19px;height:19px;border-radius:10px;
  background:#f59e0b;color:#fff;font-size:12px;font-weight:800;line-height:19px;text-align:center;
  border:2px solid #fff;box-shadow:0 1px 4px rgba(245,158,11,.4);
  box-sizing:content-box;padding:0 2px;pointer-events:none;
}
.mcls .issue-badge{top:6px;right:8px;position:absolute}
/* 家人视角：只读——藏编辑类按钮（JS 已 inline 隐藏，这里兜底滚动重渲染等场景）
 * v8.6.6 电话按钮（.cc）不藏：提醒是打给自己的个人设置，A/B 视角都能设 */
body.guest-view .btn-entry,
body.guest-view .addkid-row,
body.guest-view .cls .del,
body.guest-view .mcls .del{display:none !important}
/* 家人视角课块指针与轻反馈 */
body.guest-view .cls, body.guest-view .mcls{cursor:pointer}
body.guest-view .cls:hover, body.guest-view .mcls:hover{filter:brightness(1.04)}
/* 家人视角隐藏家长专属入口：分享按钮/电话提醒按钮（家人没有账号与钱包）；
 * 铃铛/打印/设置保留（铃铛给 course_issue 已读，设置可退出家人视角说明） */
body.guest-view #btn-share, body.guest-view #btn-calls{display:none !important}

/* ===== v8.6 新建课表浮层 ===== */
.ntt-box{background:#fff;border-radius:16px;width:100%;max-width:400px;padding:20px 18px;max-height:82vh;overflow:auto}
.ntt-box h3{font-size:16px;margin-bottom:10px}
.ntt-lbl{font-size:13px;color:var(--mut);margin:12px 0 6px}
.ntt-lbl small{font-weight:400}
#ntt-name,#ntt-newkid{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font:15px/1.4 inherit;font-family:inherit;outline:none;background:#fff;color:var(--ink)}
#ntt-name:focus,#ntt-newkid:focus{border-color:var(--brand)}
.ntt-kids{display:flex;flex-direction:column;gap:6px;max-height:180px;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:8px}
.ntt-kid{display:flex;align-items:center;gap:8px;padding:7px 6px;border-radius:8px;cursor:pointer}
.ntt-kid:hover{background:var(--bg-2,#f6f8fb)}
.ntt-kid input{flex:none;width:17px;height:17px;accent-color:var(--brand)}
.ntt-kid span{font-size:14.5px;font-weight:600}
.ntt-kid small{margin-left:auto;font-size:11.5px;color:var(--ink-3)}
.ntt-kid.new span{color:var(--brand)}
.ntt-empty{font-size:13px;color:var(--ink-3);text-align:center;padding:10px 0}
.ntt-newkid-row{display:flex;gap:8px;margin-top:8px}
.ntt-newkid-row .btn{flex:none;padding:9px 14px}
.ntt-err{display:none;color:#dc2626;font-size:13px;margin-top:8px;min-height:0}
.ntt-btns{display:flex;gap:10px;margin-top:14px}
.ntt-btns .btn{flex:1}
.ntt-copy{display:block;margin:12px auto 0;background:none;border:none;color:var(--ink-3);font-size:12.5px;text-decoration:underline;cursor:pointer;font-family:inherit}
.ntt-copy:disabled{opacity:.5}

/* v8.6 课表内孩子卡片「移出」按钮：弱化样式（次操作，别抢录入课程风头） */
.kid-out-btn{padding:7px 10px;font-size:12.5px;color:#dc2626!important;border-color:#fecaca!important;background:#fff!important}
.kid-out-btn:hover{background:#fef2f2!important}
.mk-head .kid-out-btn{flex:none;padding:6px 9px;font-size:12px}

/* v8.8.4 设置页·余额与充值重构：赠送行右侧按钮 / 记录弱化入口 */
.mb-grant-btn{flex:none;font-size:12px;color:var(--brand,#2563eb);padding:6px 12px;border-radius:8px;border:1px solid rgba(37,99,235,.35);background:#f0f5ff;cursor:pointer;font-weight:600}
.mb-grant-btn:active{background:#dbe7ff}
.mb-logs-toggle{display:flex;align-items:center;justify-content:space-between;font-size:12.5px;color:var(--ink-2);padding:10px 4px;cursor:pointer;border-bottom:1px dashed var(--line)}
.mb-logs-toggle:hover{color:var(--ink)}
