/* ════════════════════════════════════════════════════════════════════════════
   迈乐教务 · 视觉覆盖层 —— 「A · 横版」设计层（2026-10-07 上线）
   引法：base.html / frag_base.html 里**紧跟 style.css 之后**引本文件；
        style.css 原样不动，删掉那个 <link> 即回滚。
   —— 与线上唯一差别：这一层样式。DOM / 文案 / 区块 / 按钮 一字未动。
      html.preset-* / html.opt-* 是预览期的档位开关，线上不挂这些类、不生效。
   ═════════════════════════════════════════════════════════════════════════ */

/* ── A 款原味 · 2026-10-06 定稿配色（米底 #F5F1EA / 海军蓝 #1E3A5F / teal #2A9D8F / 暖橙 #E76F51）
      + 横版导航（顶部横排 · 白底 · 顶上 3px 三色带 · 选中海军蓝实底胶囊）
   —— 这一层就是「A·横版」的全部变量；颜色/圆角/字体/阴影/色带比例与定稿 A 款逐项一致。 ── */
:root{
  --v-brand:#1E3A5F; --v-accent:#E76F51; --v-accent-d:#D4553A; --v-teal:#2A9D8F;
  --v-bg:#F5F1EA; --v-card:#FFFFFF; --v-soft:#F1EBE1; --v-soft-ink:#5C6B7A;
  --v-line:#E8E2D8; --v-line-2:#F2EEE7;
  --v-ink:#1C2833; --v-muted:#6E7A86; --v-muted-2:#9AA4AE;
  --v-page-bg:#F5F1EA; --v-brand-soft:#F1EBE1; --v-warn:#C1502E;
  --v-r-lg:18px; --v-r-md:12px; --v-r-sm:12px; --v-r-pill:999px;
  --v-num:33px; --v-h1:26px; --v-h2:14.5px;
  --v-panel-pad:18px; --v-page-pad:24px;
  --v-card-bd:1px solid var(--v-line);
  --v-sh-1:0 1px 2px rgba(30,58,95,.05), 0 8px 22px rgba(30,58,95,.05);
  --v-sh-2:0 2px 6px rgba(30,58,95,.06), 0 18px 44px rgba(30,58,95,.09);
  --v-dot:radial-gradient(rgba(30,58,95,.045) 1px, transparent 1px); --v-dot-size:19px 19px;
  --v-top-bg:#FFFFFF; --v-top-ink:#1E3A5F; --v-top-sub:#9AA4AE;
  --v-top-nav:#5C6B7A; --v-top-hover:#F1EBE1;
  --v-top-line:#E8E2D8; --v-top-active-bg:#1E3A5F; --v-top-active-ink:#FFFFFF;
  --v-top-sh:0 1px 0 #E8E2D8, 0 6px 20px rgba(30,58,95,.05);
  --v-band:linear-gradient(90deg,#1E3A5F 0 62%,#2A9D8F 62% 90%,#E76F51 90% 100%);
  --v-th-bg:#FAF7F2; --v-row-hover:#FAF7F2;
  --v-topbar-bg:#FFFFFF;
  --v-hero:linear-gradient(135deg,#1E3A5F,#2A9D8F);
  --v-hero-sh:0 16px 40px rgba(30,58,95,.18);
}

/* ── 1. 底色 / 背景肌理 ─────────────────────────────────────────────────── */
body{ background:var(--v-bg); color:var(--v-ink); }
.layout{ background-image:var(--v-dot); background-size:var(--v-dot-size); }

/* ── 2. 顶栏（横向导航条） ─────────────────────────────────────────────── */
.sidebar{ background:var(--v-top-bg); color:var(--v-top-ink); box-shadow:var(--v-top-sh);
  background-image:var(--v-band); background-repeat:no-repeat;
  background-size:100% 3px; background-position:center top; }
.brand{ color:var(--v-top-ink); letter-spacing:.5px; }
.brand span{ color:var(--v-accent); }
.sidebar nav{ border-top:1px solid var(--v-top-line); gap:4px;
  padding-top:9px; padding-bottom:9px; }
.sidebar nav a{ color:var(--v-top-nav); border-radius:var(--v-r-pill);
  padding:8px 15px; transition:.16s; }
.sidebar nav a:hover{ background:var(--v-top-hover); color:var(--v-top-ink); }
.sidebar nav a.active{ background:var(--v-top-active-bg); color:var(--v-top-active-ink);
  font-weight:600; box-shadow:none; }
.uname{ color:var(--v-top-ink); }
.urole{ color:var(--v-top-sub); }
.logout{ color:var(--v-top-nav); border:1px solid var(--v-top-line);
  border-radius:var(--v-r-pill); padding:5px 14px; }
.logout:hover{ background:var(--v-top-hover); color:var(--v-top-ink); }
/* 加强档：选中胶囊带一点投影 */
html.preset-b .sidebar nav a.active{ box-shadow:0 8px 18px rgba(30,58,95,.26); }

/* ── 3. 页头标题行 ────────────────────────────────────────────────────── */
.topbar{ background:var(--v-topbar-bg); border-bottom:1px solid var(--v-line);
  padding-top:18px; padding-bottom:16px; }
.topbar h1{ color:var(--v-brand); font-size:var(--v-h1); font-weight:800;
  letter-spacing:.2px; position:relative; padding-left:15px; }
.topbar h1::before{ content:""; position:absolute; left:0; top:50%; margin-top:-10px;
  width:5px; height:20px; border-radius:3px; background:var(--v-accent); }
.heading-sub{ color:var(--v-muted-2); }

/* ── 4. 页容器留白（只动纵向，横向左轨 36px 保持与顶栏对齐） ───────────────── */
.page{ padding-top:var(--v-page-pad); padding-bottom:var(--v-page-pad); }

/* ── 5. 卡片 / 数字 / 分区标题 ─────────────────────────────────────────── */
.panel,.stat,.cls-card,.vip-card{ border-radius:var(--v-r-lg);
  border:var(--v-card-bd); box-shadow:var(--v-sh-1); }
.panel{ background:var(--v-card); padding:var(--v-panel-pad); }
.stat{ background:var(--v-card); padding:20px 22px; }
.panel h2{ font-size:var(--v-h2); font-weight:700; color:var(--v-brand); letter-spacing:.2px; }
.stat .num{ font-size:var(--v-num); font-weight:800; color:var(--v-brand);
  letter-spacing:-.5px; line-height:1.12; }
.stat .lbl{ font-size:12.5px; color:var(--v-muted); letter-spacing:.6px; }
/* 加强档：分区标题加一根短色条 */
html.preset-b .panel h2{ position:relative; padding-left:12px; }
html.preset-b .panel h2::before{ content:""; position:absolute; left:0; top:50%; margin-top:-8px;
  width:4px; height:16px; border-radius:2px; background:var(--v-accent); }

/* ── 6. Hero（仪表盘欢迎块） ───────────────────────────────────────────── */
.home-hero{ background:var(--v-hero); border-radius:var(--v-r-lg); box-shadow:var(--v-hero-sh); }

/* ── 7. 按钮 / 表单控件 ───────────────────────────────────────────────── */
.btn{ border-radius:var(--v-r-pill); background:var(--v-accent);
  box-shadow:0 6px 16px rgba(231,111,81,.22); }
.btn:hover{ background:var(--v-accent-d); }
.btn.ghost{ background:transparent; color:var(--v-brand); border:1px solid var(--v-line-2); }
.btn.ghost:hover{ background:var(--v-soft); }
.btn.gray{ background:var(--v-soft); color:var(--v-soft-ink); box-shadow:none; }
.btn.danger{ background:#C1502E; }
.field input,.field select,.field textarea{ border-radius:var(--v-r-sm); border-color:var(--v-line); }
.field input:focus,.field select:focus,.field textarea:focus{ border-color:var(--v-brand); }

/* ── 8. 胶囊类（勾选 chip / 标签 / 状态药丸） ───────────────────────────── */
.chip span,.chip-busy,.tag,.state-badge{ border-radius:var(--v-r-pill); }
.chip input:checked + span{ background:var(--v-top-active-bg); border-color:var(--v-top-active-bg); }

/* ── 9. 表格 ──────────────────────────────────────────────────────────── */
.grid th{ background:var(--v-th-bg); color:var(--v-muted); border-bottom:1px solid var(--v-line-2); }
.grid td{ border-bottom:1px solid var(--v-line); }
.grid tr:hover td{ background:var(--v-row-hover); }
.tablewrap{ border:1px solid var(--v-line); border-radius:var(--v-r-md); }

/* ── 10. 登录页（不带后台顶栏，单独收一下） ─────────────────────────────── */
.loginwrap{ background:var(--v-bg); }
.lgbar{ background:var(--v-hero); }
.loginbox{ border-radius:var(--v-r-lg); border:var(--v-card-bd); box-shadow:var(--v-sh-1); }
.loginbox h1{ color:var(--v-brand); }
.loginbox .field input{ border-radius:var(--v-r-sm); }
.loginbox .btn{ background:var(--v-accent); border-radius:var(--v-r-pill); }
.loginbox .btn:hover{ background:var(--v-accent-d); }

/* ══════════════════════════════════════════════════════════════════════════
   细节开关（对比页可逐个勾选试，勾完把结论告诉我即可）
   ══════════════════════════════════════════════════════════════════════════ */

/* ① 顶栏三色带 —— 关掉 */
html.opt-nb .sidebar{ background-image:none; }

/* ② 教室表 / 时段列暖化 —— 预览开关 html.opt-wr 一并弃用（2026-10-09）：
      该方案她拍板「不做」（原本 10-09 上午曾随 d314967 升格常驻，当天下班前撤回），
      线上教室表维持 E0–E23 的冷色调。对比页 skin_ahi.css 里仍留着自己的副本，互不影响。 */

/* ③ 登录页升级版式：左品牌大色块 + 右登录卡（DOM 不动，纯 CSS 重排） */
html.opt-lb .lgbar{ display:none; }
html.opt-lb .lgpane{ padding:0; display:grid;
  grid-template-columns:minmax(300px,1.05fr) minmax(320px,1fr); align-items:stretch; }
html.opt-lb .lgpane::before{ content:"迈乐英语  WHY LEARNING\A\A每一节课都有迹可循\A雅思 · 托福 · TZ 学术英语 · REF / PW";
  white-space:pre-line; background:linear-gradient(150deg,#1E3A5F 0%,#0F2440 100%); color:#fff;
  display:flex; flex-direction:column; justify-content:center;
  padding:56px 52px; font-size:24px; font-weight:800; line-height:1.55; letter-spacing:.02em; }
html.opt-lb .loginbox{ align-self:center; justify-self:center; width:380px; max-width:100%;
  border:0; box-shadow:0 20px 52px rgba(30,58,95,.14); }
html.opt-lb .loginbox .btn{ background:var(--v-accent); }
html.opt-lb .loginbox .btn:hover{ background:var(--v-accent-d); }
@media(max-width:820px){
  html.opt-lb .lgpane{ grid-template-columns:1fr; }
  html.opt-lb .lgpane::before{ display:none; }
}

/* ══════════════════════════════════════════════════════════════════════════
   ③ 统计卡 · 把「深蓝日历卡 + 4 项概览条」改成 4 张独立大数字卡
   （纯 CSS，不动模板；只在仪表盘生效 —— .dash-* 是仪表盘独有类名）
   ══════════════════════════════════════════════════════════════════════════ */
html.opt-st .dash-head{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;
  align-items:stretch;margin-bottom:18px;}
html.opt-st .dash-head .dh-cal{display:none;}
html.opt-st .dash-head .dash-bar{grid-column:1/-1;background:transparent;border:0;
  padding:0;margin:0;display:block;}
html.opt-st .dash-bar .db-items{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  gap:16px;max-width:none;margin:0;}
html.opt-st .dash-bar .db-item{background:var(--v-card);border:var(--v-card-bd);
  border-right:var(--v-card-bd);border-radius:var(--v-r-lg);box-shadow:var(--v-sh-1);
  padding:20px 22px;align-items:flex-start;gap:7px;text-align:left;}
html.opt-st .dash-bar .db-item b{font-size:var(--v-num);line-height:1;font-weight:800;
  color:var(--v-brand);letter-spacing:-1px;}
html.opt-st .dash-bar .db-item span{font-size:13.5px;color:var(--v-muted);}
html.opt-st .dash-bar .db-item:first-child{background:linear-gradient(140deg,#2A9D8F,#1F7E74);
  border-color:transparent;box-shadow:0 14px 32px rgba(42,157,143,.28);}
html.opt-st .dash-bar .db-item:first-child b,
html.opt-st .dash-bar .db-item:first-child span{color:#fff;}
html.opt-st .dash-bar .db-item:first-child span{color:rgba(255,255,255,.86);}
html.opt-st .dash-bar .db-note{max-width:none;margin-top:14px;border-top:0;padding-top:0;
  text-align:left;font-size:13px;}
@media (max-width:900px){
  html.opt-st .dash-head{grid-template-columns:repeat(2,minmax(0,1fr));}
  html.opt-st .dash-bar .db-items{grid-template-columns:repeat(2,minmax(0,1fr));}
  html.opt-st .dash-bar .db-item b{font-size:30px;}
}

/* ══════════════════════════════════════════════════════════════════════════
   A 款原味校正 —— 与 preview_visual_v2 的 A·横版逐项对齐
   ══════════════════════════════════════════════════════════════════════════ */
.topbar h1{ padding-left:0; font-size:var(--v-h1); }
.topbar h1::before{ display:none; }

/* ══════════════════════════════════════════════════════════════════════════
   仪表盘 / 各页自带的内联 <style>（旧色 #0D3568 · #e6dcc9 · 圆角 12）会盖在皮肤之上，
   这里抬一级优先级、把它们对齐回 A 款色号与圆角。只改外观，不碰结构。
   ══════════════════════════════════════════════════════════════════════════ */
.layout .panel{ background:var(--v-card); border:var(--v-card-bd);
  border-radius:var(--v-r-lg); padding:var(--v-panel-pad); box-shadow:var(--v-sh-1); }
.layout .panel h2{ color:var(--v-brand); font-size:var(--v-h2); }
.layout .dash-bar{ background:var(--v-card); border:1px solid var(--v-line);
  border-radius:var(--v-r-lg); box-shadow:var(--v-sh-1); padding:16px 22px 12px; }
.layout .dash-bar .db-item{ border-right:1px dashed var(--v-line); }
.layout .dash-bar .db-item b{ color:var(--v-brand); }
.layout .dash-bar .db-item span{ color:var(--v-muted); }
.layout .dash-bar .db-note{ color:var(--v-muted-2); border-top:1px dashed var(--v-line); }
.layout .dh-cal{ background:var(--v-hero); border-radius:var(--v-r-lg); box-shadow:var(--v-hero-sh); }
.layout .dh-cal:before{ background:var(--v-accent); }
.layout table.grid.roster th{ background:var(--v-th-bg); color:var(--v-muted); }
.layout .roster-edit.stu{ color:var(--v-brand); border-color:var(--v-line); background:var(--v-soft); }
.layout .cls-card{ border-radius:var(--v-r-lg); border-color:var(--v-line); background:var(--v-card); }
.layout .cls-card:hover{ border-color:var(--v-brand); }

/* ══════════════════════════════════════════════════════════════════════════
   2026-10-07 · 教室页（/rooms）A 款专属设计层 + 状态图例 / 课表面板收口
   ──────────────────────────────────────────────────────────────────────────
   为什么要单独做这一层：
   上一版皮肤实际只「换了色号」—— 教室页吃到的仍是「线上原样 + 海军蓝色相微调」：
   场地分组头还是灰褐 #DED8C9 / 土黄 #F0D7B0、教室名行还是冷蓝 #CFE0F0、
   数据格还是冷蓝 #EAF2FB / 冷灰 #EDF2F8、时段列还挂着一根 3px 深蓝竖条。
   和 A 款（米底 / 海军蓝 / teal / 珊瑚橙 / 留白 / 圆角）摆在一起就是两种风格。
   这一层按 A 款语言重做：留白格卡表（gap + 圆角小卡）+ teal / coral 双场地色
   + 暖中性时段列 + 悬浮日期导航。
   DOM / 区块 / 按钮 / 拖拽逻辑一律不动，只动外观。
   ══════════════════════════════════════════════════════════════════════════ */

/* ── ① 周视图外壳：裸掉外框，让 5px 格缝透出页面的点阵底 ─────────────────── */
.tablewrap:has(> .room-week-grid-table),
.tablewrap:has(> .room-day-table){ border:0; border-radius:0; background:transparent; }
@supports not (selector(:has(*))){
  .room-week-grid-table,.room-day-table{ background:transparent; }
}

/* ── ② 周视图骨架：密线表 → 留白格卡 ─────────────────────────────────── */
.room-week-grid-table{ border-collapse:separate; border-spacing:5px; table-layout:fixed;
  background:transparent; font-size:13px; }
.room-week-grid-table th,
.room-week-grid-table td{ border:0; padding:6px 8px; }

/* 左上角「周 / 教室」+ 每天行里的「教室」：不再是深色块，退成安静的列说明 */
.rw-corner,
.room-week-grid-table .rw-day-rooms-row .rw-rooms-corner{ background:transparent;
  color:var(--v-muted-2); font-size:11px; font-weight:700; letter-spacing:.14em;
  text-align:left; vertical-align:middle; padding-left:2px; }

/* 场地分组头 2302 / 2312：极浅色带 + 同族深色字（teal / coral） */
.rw-group-row .rw-group-head{ background:#EAF4F2; color:#1F7E74; border-radius:10px;
  font-size:12px; font-weight:700; letter-spacing:.2em; padding:7px 8px; }
.rw-group-row .rw-group-head.loc-2312{ background:#FCEDE7; color:#C1502E; }

/* 教室名行 */
.rw-room{ background:transparent; color:var(--v-brand); border-radius:10px;
  font-size:13.5px; font-weight:700; letter-spacing:.04em; }
.rw-room.loc-2302{ background:#E4F1EE; color:#215A55; }
.rw-room.loc-2312{ background:#FBEAE3; color:#A8432C; }
.rw-room small{ color:var(--v-muted-2); font-weight:400; }

/* 每天行里的教室名（.rw-dc） */
.room-week-grid-table .rw-day-rooms-row .rw-dc{ background:#FBF9F5; color:var(--v-muted);
  border:0; border-radius:10px; font-size:12.5px; font-weight:700; padding:6px; }
.room-week-grid-table .rw-day-rooms-row .rw-dc.loc-2302{ background:#F1F8F6; color:#2F6D66; }
.room-week-grid-table .rw-day-rooms-row .rw-dc.loc-2312{ background:#FDF4F0; color:#A8432C; }

/* 时段列：退成安静的「行标」（原来那条 3px 深蓝竖条 + 冷蓝底不是 A 款） */
.rw-slot{ background:transparent; border:0; box-shadow:none; border-radius:0;
  padding:8px 8px 8px 2px; text-align:left; vertical-align:middle; }
.rw-slot .slot-name{ color:var(--v-muted-2); font-size:10.5px; font-weight:700;
  letter-spacing:.16em; }
.rw-slot .slot-time{ color:var(--v-brand); font-size:13px; font-weight:700; margin-top:3px; }

/* 日期分组行：一条细线把每一天隔开，不再用深色横杠 */
.rw-day-head td{ background:transparent; border:0; border-top:1px solid var(--v-line);
  padding:16px 10px 7px; }
.rw-day-label b{ color:var(--v-brand); font-size:15px; }
.rw-day-label span{ color:var(--v-muted); font-weight:600; }
.rw-day-label em{ color:var(--v-accent); }
.rw-day-fold{ background:var(--v-soft); color:var(--v-muted); border-radius:var(--v-r-pill);
  padding:2px 11px; }

/* 数据格：白底小卡（+ 极浅场地色） */
.rw-cell{ background:var(--v-card); border:1px solid var(--v-line-2); border-radius:10px;
  min-height:60px; height:auto; padding:6px 7px; vertical-align:top; }
.rw-cell.loc-2302{ background:#F7FBFA; border-color:#E4EEEB; }
.rw-cell.loc-2312{ background:#FEF8F6; border-color:#F3E3DC; }
.rw-cell:empty{ background:#FBF9F5; border-style:dashed; border-color:var(--v-line); }
.rw-cell:empty::after{ color:#D9D2C6; }
.rw-cell.drop-on{ background:#EAF4F2; border-color:transparent;
  box-shadow:inset 0 0 0 2px var(--v-teal); }
.rw-cell.drop-bad{ background:#FCEDE7; border-color:transparent;
  box-shadow:inset 0 0 0 2px #D4574E; }
.rw-cell.drop-same{ background:var(--v-soft); border-color:transparent;
  box-shadow:inset 0 0 0 2px var(--v-line); }

/* 午休：斜纹空带（原来是一整条暖橙实底 + 咖色字） */
.rw-lunch-cell{ background:repeating-linear-gradient(45deg,transparent 0 7px,
    rgba(30,58,95,.05) 7px 14px); color:var(--v-muted-2); font-size:10.5px;
  font-weight:700; letter-spacing:.2em; border-radius:10px; padding:6px 10px; }
.rw-lunch-clock{ opacity:.7; }
.rw-lunch-handle:hover,.rw-lunch-handle.on{ background:rgba(42,157,143,.35); }

/* 无课日折叠行 */
.rw-day-collapsed td{ background:transparent; border:0;
  border-top:1px dashed var(--v-line); color:var(--v-muted-2); padding:9px 10px; }
.rw-day-collapsed a{ color:var(--v-accent); }

/* 两场地分界：用「透明右边框 + background-clip」造一条更宽的缝，替掉原来的金棕粗线 */
.rw-room.rw-gap,.rw-dc.rw-gap,.rw-cell.rw-gap{
  border-right:7px solid transparent; background-clip:padding-box; }

/* ── ③ 每日视图（同一套格卡语言） ─────────────────────────────────────── */
.room-day-table{ border-collapse:separate; border-spacing:5px; background:transparent; }
.room-day-table th,.room-day-table td{ border:0; padding:6px 8px; }
.room-day-table thead th{ background:#EAF4F2; color:#1F7E74; border-radius:10px;
  text-align:center; font-size:12.5px; font-weight:700; }
.room-day-table thead th b{ display:block; font-size:13.5px; }
.room-day-table thead th small{ color:#2F6D66; opacity:.8; }
.room-day-table thead th:first-child{ background:transparent; color:var(--v-muted-2);
  font-size:11px; letter-spacing:.14em; text-align:left; }
.room-day-table thead th.room-unassigned-col{ background:#FCEDE7; color:#C1502E; }
.room-day-table tbody th{ background:transparent; color:var(--v-brand); font-weight:700;
  text-align:left; white-space:nowrap; }
.room-day-table td{ background:var(--v-card); border:1px solid var(--v-line-2);
  border-radius:10px; vertical-align:top; min-height:56px; }
.room-day-table td.room-unassigned-col{ background:#FEF8F6; border-color:#F3E3DC; }
.room-day-table td:empty{ background:#FBF9F5; border-style:dashed; border-color:var(--v-line); }
.room-day-table td:empty::after{ color:#D9D2C6; }
.room-day-table td.empty{ background:transparent; border:0; color:var(--v-muted-2); }

/* ── ④ 每月视图 ───────────────────────────────────────────────────────── */
.room-month{ background:transparent; gap:6px; border:0; }
.room-month-head>div{ background:#EAF4F2; color:#1F7E74; border-radius:10px; }
.room-month-day{ background:var(--v-card); border:1px solid var(--v-line-2);
  border-radius:12px; }
.room-month-day.outside{ background:#FBF9F5; color:var(--v-muted-2); }
.room-month-day>a{ background:#E4F1EE; color:#215A55; border-radius:8px; }
.room-month-day>a.unassigned{ background:#FBEAE3; color:#A8432C; }
.room-month-week h2{ color:var(--v-brand); }
.room-month-week h2 span{ color:var(--v-muted); }
.room-month-pending{ background:var(--v-card); border:1px solid var(--v-line);
  border-left:4px solid var(--v-accent); border-radius:var(--v-r-md); }
.room-week-month th.outside,.room-week-month td.outside{ background:#FBF9F5; color:var(--v-muted-2); }
.room-week-month th,.room-week-month td{ border-color:var(--v-line-2); }
.room-week th,.room-week td{ border-color:var(--v-line-2); }

/* ── ⑤ 待分配 / 提示条 / 悬浮日期导航 ───────────────────────────────────── */
.room-unassigned-box{ background:var(--v-card); border:1px solid var(--v-line);
  border-left:4px solid var(--v-accent); border-radius:var(--v-r-lg);
  box-shadow:var(--v-sh-1); padding:14px 16px; }
.room-unassigned-box h2{ color:var(--v-brand); font-size:14px; }
.room-unassigned-box h2 span{ background:var(--v-accent); color:#fff;
  border-radius:var(--v-r-pill); padding:1px 9px; }
.room-unassigned-box h2 em{ color:var(--v-muted); }
.room-unassigned-item small{ color:var(--v-muted); }
.room-pending{ background:var(--v-card); border:1px solid var(--v-line);
  border-left:4px solid var(--v-accent); border-radius:var(--v-r-lg); box-shadow:var(--v-sh-1); }
.room-pending h2 span{ background:var(--v-accent); border-radius:var(--v-r-pill); }
.room-alert{ background:#FCEBE6; color:#A8432C; border:1px solid #F4D6CC;
  border-radius:var(--v-r-md); }
.room-drag-tip{ background:var(--v-soft); border:1px dashed var(--v-line);
  border-radius:var(--v-r-md); color:var(--v-muted); }
.room-drag-tip b{ color:var(--v-brand); }
.rw-daynav{ background:var(--v-card); border:1px solid var(--v-line); border-radius:16px;
  box-shadow:var(--v-sh-1); padding:9px 6px; }
.rw-daynav-t{ color:var(--v-muted-2); border-bottom:1px dashed var(--v-line); }
.rw-daynav a{ background:var(--v-soft); color:var(--v-muted); border-radius:9px; }
.rw-daynav a.has{ background:#EAF4F2; color:#1F7E74; }
.rw-daynav a:hover{ background:var(--v-brand); color:#fff; }
.rw-daynav a.on{ background:var(--v-accent); color:#fff; }

/* ══════════════════════════════════════════════════════════════════════════
   状态图例 + 状态药丸：语义一个字不改，只把色相转进 A 款的暖盘
   （线上是「淡蓝 / 淡绿 / 淡粉 / 淡黄 / 灰米」的方角小签，摆进 A 款一眼就是两套）
   ══════════════════════════════════════════════════════════════════════════ */
.schedule-legend{ display:inline-flex; width:max-content; max-width:100%; align-items:center;
  gap:8px; flex-wrap:wrap; margin:2px 0 16px; padding:9px 16px;
  background:var(--v-card); border:var(--v-card-bd); border-radius:var(--v-r-pill);
  box-shadow:var(--v-sh-1); }
.schedule-legend>span:last-child{ color:var(--v-muted); font-size:12.5px; }
.schedule-legend .lg{ display:inline-flex; align-items:center; gap:5px;
  font-size:12.5px; color:var(--v-muted); }
.schedule-legend .sw{ width:14px; height:14px; border-radius:5px;
  box-shadow:inset 0 0 0 1px rgba(30,58,95,.07); }

.state-badge{ border-radius:var(--v-r-pill); padding:2px 10px; font-size:11.5px;
  font-weight:700; border:1px solid transparent; }
.state-badge.state-pending{ background:#EDF1F6; border-color:#DCE3EC; color:#1E3A5F; }
.state-badge.state-done{ background:#E6F3EF; border-color:#CFE7E0; color:#1F7E74; }
.state-badge.state-leave{ background:#FCEBE6; border-color:#F4D6CC; color:#C1502E; }
.state-badge.state-change{ background:#FBF0DC; border-color:#EFDCB8; color:#8A5A1E; }
.holiday-pill{ background:#F1EDE5; border-color:#E5DFD2; color:#7A6A55;
  border-radius:var(--v-r-pill); padding:2px 10px; font-size:11.5px; font-weight:700; }

/* ══════════════════════════════════════════════════════════════════════════
   班课 / VIP 学生课表（cd2 面板）收口
   —— 图例下方那条「深蓝扁梯 + 白描边按钮」的月课表横幅，和面板里几处冷灰蓝
      （#f5f7fa / #FBFCFE / #8a97a1）仍是线上原样，一并转进 A 款。
   ══════════════════════════════════════════════════════════════════════════ */
.cd2-tabs{ gap:8px; }
.cd2-tab{ border-radius:var(--v-r-pill); background:var(--v-soft); color:var(--v-muted);
  padding:7px 20px; }
.cd2-tab:hover{ background:#E8E1D6; color:var(--v-brand); }
.cd2-tab.on{ background:var(--v-brand); color:#fff; }

.cd2-monthbar{ background:var(--v-hero); border-radius:var(--v-r-lg) var(--v-r-lg) 0 0;
  padding:16px 22px; box-shadow:var(--v-hero-sh); }
.cd2-mb-name{ font-size:16px; font-weight:800; letter-spacing:.02em; }
.cd2-mb-center{ font-size:16px; font-weight:800; letter-spacing:.02em; }
.cd2-mb-nav a{ border:0; background:rgba(255,255,255,.16); border-radius:var(--v-r-pill);
  padding:5px 14px; font-weight:600; }
.cd2-mb-nav a:hover{ background:var(--v-accent); }
.cd2-month{ border-radius:0 0 var(--v-r-lg) var(--v-r-lg); border:1px solid var(--v-line);
  border-top:0; }
.cd2-wknd{ background:#FAF7F2 !important; }
.cd2-card,.cd2-bio{ background:var(--v-soft); border:1px solid var(--v-line); }
.cd2-card-t,.cd2-bio-t{ color:var(--v-muted-2); }
.cd2-stuline{ color:var(--v-muted); }
.term-cinfo,.term-cinfo.done,.term-cinfo.upcoming{ color:var(--v-muted-2); }
.cd2-hero{ border-radius:var(--v-r-lg); box-shadow:var(--v-hero-sh); }
.cd2-hero-period{ color:#F3B08C; }
.cd2-hero-time{ color:#F3B08C; }
.cd2-print{ background:var(--v-accent); border-radius:var(--v-r-pill); }
.cd2-les{ border-radius:9px; }

/* ── 各页内联 <style> 里的旧深蓝 #0D3568：抬一级优先级对齐 A 款海军蓝 ────── */
.layout .stu-chip{ border-color:var(--v-line); color:var(--v-brand); }
.layout .stu-chip:hover{ border-color:var(--v-brand); }
.layout .stu-chip.on{ background:var(--v-brand); border-color:var(--v-brand); color:#fff; }
.layout .view-tab{ border-color:var(--v-line); color:var(--v-brand);
  border-radius:var(--v-r-pill); }
.layout .view-tab.on{ background:var(--v-brand); border-color:var(--v-brand); color:#fff; }
.layout .cls-card.on,.layout .vip-card.on{ border-color:var(--v-brand);
  box-shadow:0 0 0 2px rgba(30,58,95,.10); }
.layout .cc-code,.layout .vc-name,.layout .ro-t,
.layout .rst-code a,.layout .pc-head,.layout .pc-name{ color:var(--v-brand); }
.layout .roster-edit.stu{ background:var(--v-soft); border-color:var(--v-line);
  color:var(--v-brand); }

/* ══════════════════════════════════════════════════════════════════════════════
   ⑥ 残留旧色收口（2026-10-07 10:5x）
   —— 皮肤 = style.css 全文 + 覆盖层。先前只盖了「主要面」，这一层把剩下
      **所有写死色号**的地方一次收进 A 款：token 兜底 + 逐页点名。
      只改颜色，不动尺寸 / 结构 / 语义。
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── A1. token 兜底：批次 W 那套「暖化一半」的变量，一次性对齐 A 款 ───────────
      （很多残留其实是 var(--green-bg)/var(--orange-bg)/var(--card-warm) 这类
        未被我覆盖的 token，换掉 token 就能一次收干净） */
:root{
  --card-warm:  #FBF8F3;
  --line-soft:  var(--v-line-2);
  --line-dash:  #D9D2C6;
  --line-cool:  #DCD6CB;
  --muted-warm: #6E7A86;
  --bluegray:   #5C6B7A;
  --teal-d:     var(--v-brand);
  --green:      #1F7E74;
  --green-soft: #2A9D8F;
  --green-bg:   #E6F3EF;
  --green-line: #CFE7E0;
  --orange-bg:  #FBF0DC;
  --orange-line:#EFDCB8;
  --ok:         var(--v-brand);
  --warn:       #C57A2B;
  --danger:     #C1502E;
  --beige:      #F1EBE1;
}

/* ── A2. 全局骨架：写死的暖灰线 / 冷白底 / 老深蓝 ─────────────────────────── */
.field input,.field select,.field textarea{ border-color:var(--v-line); }
.chip span{ border-color:var(--v-line); }
.roomrow input,.chip-search,.combo{ border-color:var(--v-line); }
.holidaycell span{ background:var(--v-line); border-color:var(--v-line); }
.grid th{ background:var(--v-th-bg); }
.combo-opt{ border-bottom-color:var(--v-line-2); }
.term-row,.vip-goal-item,.vip-teacher,.info-bio{ border-color:var(--v-line-2); }
.info-bio{ border-top-color:var(--v-line-2); }
.cell-expanded .cell-more,.month-expanded .month-more,.cell-more,.month-more{
  background:var(--v-soft); border-color:var(--v-line-dash,#D9D2C6); color:var(--v-brand); }
.cell-more:hover{ background:#E9E2D6; }
.home-hero{ background:var(--v-hero); box-shadow:var(--v-hero-sh); }
.qa2-head{ background:var(--v-hero); }
.ml-toast.info{ background:var(--v-brand); }
.rw-lunch-live,.rw-lunch-cell.live{ background:var(--v-brand); }
.lesson-detail-panel h2{ color:var(--v-brand); }
.month-head>div{ background:var(--v-soft); color:var(--v-muted); }
.month-day.outside{ background:#F6F3ED; color:var(--v-muted-2); }
.month-day.holiday{ background:#F8F5EF; }
.month-day.today{ box-shadow:inset 0 0 0 2px var(--v-accent); }
.month-day header b{ color:var(--v-muted); }
.mini-cal,.vip-group-card,.teacher-load-card{ background:#FBF8F3; }
.mini-day{ color:var(--v-muted-2); }
.progressbar{ background:#EFE9DE; }
.progressbar i,.progressbar.green i{ background:var(--v-teal); }
.availability-list>span{ background:#FCEBE6; color:var(--v-warn); }
.availability-list button{ color:var(--v-accent-d); }
.avail-mark-btn{ border-color:var(--v-line); color:var(--v-muted-2); }
.avail-btn{ border-color:#D9D2C6; }
.roomrow .muted,.room-lesson small,.muted{ color:var(--v-muted-2); }
.rw-day-fold{ color:var(--v-muted-2); border-top-color:var(--v-line); }
.rw-daynav-t{ color:var(--v-muted-2); }
.rw-daynav a{ background:var(--v-soft); color:var(--v-muted-2); }
.rw-day-fold .rw-fold-note{ color:var(--v-muted-2); border-top-color:var(--v-line); }
.term-mini-note b,.term-mini-note.empty{ color:var(--v-muted-2); }

/* 课次详情弹窗 / 月度小卡 */
.tm-cal .month-lesson.lv-vip{ border-color:#E9D3DC; border-left-color:#E9D3DC; color:#A05272; }
.tm-cal .month-lesson.lv-vip .t{ color:#8A4664; }
.tm-cal .month-lesson.lv-vip .state-badge{ background:#F7EEF2; color:#8A4664; }
.tm-cal .month-lesson.lv-blocked{ background:#F5F2EC; color:var(--v-muted-2);
  border-left-color:#D9D2C6; }
.tm-cal .ml-card.lv-blocked .ml-n,.tm-cal .ml-card.lv-vip .ml-n{ color:var(--v-muted-2); }
.tm-cal .month-lesson{ border-color:var(--v-line); }
.tm-cal .ml-slot .ml-card{ border-color:var(--v-line); }
.term-mini-day.k-vip{ background:#E9D3DC; }
.term-mini-day.k-both{ background:linear-gradient(135deg,var(--v-brand) 50%,#E9D3DC 50%); }
.term-mini-note.vip .tmn-t,.term-pill.vip{ background:#F7EEF2; border-color:#E9D3DC; color:#A05272; }
.tm-cal .ml-card.lv-vip .ml-n{ color:#8A4664; }

/* ── A3. 仪表盘（内联 <style>）：总览表 chip / 小圆点 / 计数 / 日历卡小字 ──── */
.layout .rst-chip{ background:var(--v-soft); border-color:var(--v-line); color:var(--v-ink); }
.layout .rst-time{ color:var(--v-muted-2); }
.layout .rst-dot.d-tz{ background:#7FA6C4; }
.layout .rst-dot.d-ielts{ background:#D9A15B; }
.layout .rst-dot.d-vip{ background:#B0607F; }
.layout .dh-ym,.layout .dh-dow{ color:rgba(255,255,255,.72); }
.layout .dh-stamp,.layout .dh-dow,.layout .dh-ym{ letter-spacing:.06em; }
.layout .dash-count{ background:#FCEBE6; color:var(--v-accent-d);
  border:1px solid #F4D6CC; }
.layout .dash-count.warn{ background:#FBF0DC; color:var(--v-warn); border-color:#EFDCB8; }
.layout .dash-note{ color:var(--v-muted-2); border-color:var(--v-line); }
.layout .tag.t-待上课,.layout .tag.t-咨询中{ background:#E8EEF5; color:var(--v-brand);
  border:1px solid #D3DEEC; }
.layout .empty{ color:var(--v-muted); }

/* ── A4. 班课 / VIP 卡片墙（内联 <style>）：进度条 / 名字 / 类型签 ──────────── */
.layout .cc-bar{ background:#EFE9DE; }
.layout .cc-bar>span{ background:var(--v-accent); }
.layout .cc-meta,.layout .vc-course{ color:var(--v-muted); }
.layout .cc-pct{ color:var(--v-muted-2); }
.layout .vc-name,.layout .vip-card.is-banke .vc-name{ color:var(--v-brand); }
.layout .vc-type{ color:#A05272; background:#F7EEF2; border-color:#E9D3DC; }
.layout .vc-type.vc-type-bk{ color:var(--v-brand); background:#E9EEF5; border-color:#D3DEEC; }

/* ── A5. 班级管理：进度条 / 名单 chip / 课次药丸 / 表单 ─────────────────────── */
.layout .ro-hint,.layout .ro-arrow{ color:var(--v-muted-2); }
.layout .ro-panel{ border-color:var(--v-line); }
.layout .ro-t{ color:var(--v-brand); }
.layout .ro-panel select,.layout .rst-add select{ border-color:var(--v-line); }
.layout .cls-meta,.layout .cls-progress{ color:var(--v-muted); }
.layout .cls-level,.layout .cls-next,.layout .ses-strip-title{ color:var(--v-muted); }
.layout .roster-name{ background:var(--v-soft); }
.layout .roster-name:hover{ background:var(--v-brand); color:#fff; }
.layout .ses-pill{ border-color:var(--v-line); color:var(--v-muted-2); background:#FBF8F3; }
.layout .ses-pill.done{ background:#E6F3EF; border-color:#CFE7E0; color:#1F7E74; }
.layout .ses-pill.leave{ background:#fff; border-color:#F4D6CC; color:var(--v-warn); }
.layout .ro-panels .ro-panel,.layout .sp-card{ border-color:var(--v-line); }

/* ── A6. 老师课表：可用时间签 / 负荷卡 ─────────────────────────────────────── */
.layout .availability-list>span{ background:#FCEBE6; color:var(--v-warn); }
.layout .availability-list button{ color:var(--v-accent-d); }
.layout .tt-sub{ color:var(--v-muted); }
.layout .span.room,.layout .span.code{ color:var(--v-muted); }

/* ── A7. 教室页：时段列 / 日期行 / 教室角标 / 月度链接 ─────────────────────── */
th.rw-slot,.rw-slot{ color:var(--v-muted); background:#F6F3EC; }
.rw-corner,.rw-day-rooms-row .rw-rooms-corner{ background:var(--v-soft); color:var(--v-brand); }
.rw-day-head td{ background:var(--v-soft); border-top-color:var(--v-brand); }
.rw-day-head td{border-top-width:4px;}
.rw-day-rooms-row td{ border-color:var(--v-line); }
.room-month-day>a{ background:var(--v-soft); color:var(--v-brand); }
.room-week-grid-table th,.room-day-table th{ border-color:var(--v-line); }
.rw-cell.drop-same{ background:var(--v-soft); box-shadow:inset 0 0 0 2px var(--v-line); }

/* ── A8. 排课台：课次卡默认底 / 时段名 / 弹窗 ─────────────────────────────── */
td.slotname,th.slotname{ color:var(--v-muted); }
.lp-empty .big{ color:var(--v-line); }
.lp-mode{ color:var(--v-muted); }
.lesson-detail-panel,.qa-dialog-sub{ color:var(--v-muted); }

/* ── A9. 设置页 ───────────────────────────────────────────────────────────── */
.layout .field label,.layout .pt-row{ color:var(--v-muted); }

/* ──────────────────────────────────────────────────────────────────────────────
   B. 课次卡配色：「线上冷蓝盘」→「A 暖盘」
      —— 挂在 .lv-* / .sub-* 上的一组 --lesson-* 变量，全站课次卡共用。
         每个课程 / 班型仍然**各自一色、彼此可辨**，只是把冷蓝族整体搬进
         A 款的海军蓝→teal→琥珀→珊瑚→梅→橄榄这个暖家族。
         线上默认即为 A 暖盘。
   ────────────────────────────────────────────────────────────────────────────── */
html .lesson,
html .wk-les,
html .month-lesson,
html .cd2-les{
  --lesson-color:#9AA4AE; --lesson-bg:#FBF8F3; --lesson-text:#1C2833; }

html .lv-tzs{ --lesson-color:#2A5C82; --lesson-bg:#F3F6F8; --lesson-text:#1C2833; }
html .lv-tz1{ --lesson-color:#5B93A8; --lesson-bg:#F4F8F9; --lesson-text:#22333F; }
html .lv-tz2{ --lesson-color:#3F7C97; --lesson-bg:#F2F7F8; --lesson-text:#1E3038; }
html .lv-tz3{ --lesson-color:#2A5C82; --lesson-bg:#F1F5F8; --lesson-text:#1C2833; }
html .lv-tz4{ --lesson-color:#1E3A5F; --lesson-bg:#F1F3F6; --lesson-text:#1C2833; }
html .lv-ielts{ --lesson-color:#C0392B; --lesson-bg:#FCF0EE; --lesson-text:#4A1A15; }   /* 雅思兜底色（没填科目时） */
html .lv-toefl{ --lesson-color:#2F6FA8; --lesson-bg:#EEF5FA; --lesson-text:#143A5A; }   /* 托福兜底色（没填科目时） */
html .lv-ref{   --lesson-color:#8E5A7A; --lesson-bg:#FAF5F8; --lesson-text:#43273A; }
html .lv-g9{    --lesson-color:#6E8B3D; --lesson-bg:#F6F8F1; --lesson-text:#2F3D19; }
html .lv-vip,
html .rw-vip{   --lesson-color:#E2D6C1; --lesson-bg:#FFFFFF; --lesson-text:#6E7A86; }
html .lv-leave{ --lesson-color:#C1502E; --lesson-bg:#FCEBE6; --lesson-text:#4F2117; }
html .lv-blocked{ --lesson-color:#8A5A1E; --lesson-bg:#F7F1E7; --lesson-text:#3F2910; }
html .lv-default{ --lesson-color:#BCB5A7; --lesson-bg:#FBF8F3; --lesson-text:#5C6B7A; }

html .sub-speak{    --lesson-color:#C1502E; --lesson-bg:#FCEBE6; --lesson-text:#4F2117; }
html .sub-listen{   --lesson-color:#2A9D8F; --lesson-bg:#EAF5F2; --lesson-text:#17453E; }
html .sub-write{    --lesson-color:#3F7C97; --lesson-bg:#F2F7F8; --lesson-text:#1E3038; }
html .sub-read{     --lesson-color:#D08B4F; --lesson-bg:#FDF8F2; --lesson-text:#5A3F22; }
html .sub-prep-readwrite{    --lesson-color:#1E3A5F; --lesson-bg:#F1F3F6; --lesson-text:#1C2833; }
html .sub-prep-listenspeak{  --lesson-color:#2A9D8F; --lesson-bg:#EAF5F2; --lesson-text:#17453E; }
html .sub-study{    --lesson-color:#CFC8BA; --lesson-bg:#FBF8F3; --lesson-text:#5C6B7A; }
html .sub-mock{     --lesson-color:#6B4E2E; --lesson-bg:#F7F2EA; --lesson-text:#2B1F11; }

/* 课次卡上的深色文字 / 次要行，随 A 款墨色一起收 */
html .lesson b,
html .rw-lesson b,
html .cd2-les b,
html .room-lesson b{ color:var(--v-ink); }
html .tw,.rw-lesson,.room-lesson.compact{ color:var(--v-ink); }

/* ══════════════════════════════════════════════════════════════════════════════
   ⑦ 二次收口（2026-10-07 11:0x）
   —— 上一轮把 token 与「主要面」收干净后，还剩三类漏网：
      ① --muted 本身没跟着 A 款走；② 各页内联 <style> 里的写死色号；
      ③ 课次卡的配色是**行内 CSS 变量**（--lesson-*）喂进来的，类选择器打不到。
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── B1. 次要文字色对齐 A 款（原来是 #6c7888 的冷灰，A 款是 #6E7A86） ──────── */
:root{ --muted:#6E7A86; }

/* ── B2. 详情面板（info-*）—— 班课/VIP 右侧那一大块说明文字 ────────────────── */
.info-outline li{ color:var(--v-muted); }
.info-outline li.done{ color:var(--v-muted-2); background:var(--v-soft); }
.info-outline li.done .io-t{ color:var(--v-muted-2); }
.info-outline b{ color:var(--v-brand); }
.info-outline i,.info-outline .io-x{ color:var(--v-muted-2); }
.info-outline .io-t{ color:var(--v-accent); }
.info-stage-lines li{ color:var(--v-muted); }
.info-stage-lines li::before{ background:var(--v-line); }
.info-kv-line{ color:var(--v-muted); }
.info-kv-line b{ color:var(--v-brand); }
.info-unit-h{ color:#B56F24; }
.info-unit-row{ color:var(--v-muted); }
.info-unit-row .n{ color:var(--v-brand); }
.info-unit-row i{ color:#A05272; }
.info-bio{ border-top-color:var(--v-line-2); }

/* ── B3. 各页内联 <style>：抬一级优先级，逐条对齐 A 款 ─────────────────────── */
.layout .cls-card,.layout .vip-card{ border-color:var(--v-line); }
.layout .cls-card:hover,.layout .vip-card:hover,
.layout .vip-card.is-banke{ border-color:var(--v-brand); border-left-color:var(--v-brand); }
.layout .cls-card.on,.layout .vip-card.on{ border-color:var(--v-brand); }
.layout .banke-hint{ color:var(--v-muted-2); }
.layout .cc-code{ color:var(--v-brand); }
.layout .stu-chip{ border-color:var(--v-line); color:var(--v-brand); background:#fff; }
.layout .stu-chip:hover{ border-color:var(--v-brand); }
.layout .stu-chip.on{ background:var(--v-brand); border-color:var(--v-brand); color:#fff; }
.layout .view-tab{ border-color:var(--v-line); color:var(--v-brand); background:#fff;
  border-radius:var(--v-r-pill); }
.layout .view-tab.on{ background:var(--v-brand); border-color:var(--v-brand); color:#fff; }

/* 仪表盘：快捷维护表单 / 待处理池 / 学员编辑 */
.layout .pc-item{ background:var(--v-soft); border-color:var(--v-line); }
.layout .pc-meta,.layout .pool-note{ color:var(--v-muted-2); }
.layout .pc-sel,.layout .pc-item input,.layout .pc-item select{ border-color:var(--v-line); }
.layout .dh-stamp{ color:rgba(255,255,255,.72); }
.layout .roster-edit{ background:#F7EEF2; border-color:#E9D3DC; color:#A05272; }
.layout .roster-edit.stu{ background:var(--v-soft); border-color:var(--v-line); color:var(--v-brand); }
.layout .pool-tag.done{ background:#E6F3EF; color:#1F7E74; }
.layout .cls-footnote{ color:var(--v-muted-2); }

/* 课次卡上的进度胶囊 + 学期/月历小签 */
.lesson .progress,.wk-les .progress,.cd2-les .progress,.cd2-dl-row .progress,.term-row .progress{
  color:var(--v-muted); background:var(--v-soft); }
.term-pill.cls{ background:var(--v-soft); }
.term-pill.vip{ background:#F7EEF2; border-color:#E9D3DC; color:#A05272; }
.term-mini-note.vip .tmn-t{ background:#F7EEF2; border-color:#E9D3DC; color:#A05272; }
a.lp-viewbtn{ background:var(--v-soft); }

/* 时段列 / 周末格 / 空位按钮 */
td.slotname,th.slotname{ background:#F6F3EC; color:var(--v-muted); }
td.day.week-cell.wknd,.week-cell.wknd{ background:#FAF7F2; }
.cd2-month .month-day.wknd,.month-day.wknd{ background:#FAF7F2 !important; }
.mini-day.off{ color:var(--v-muted-2); }

/* 老师课表：负荷卡 / 可用时间里的链接 */
.layout a.tt-link,.layout .tt-sub{ color:var(--v-muted); }
.lesson.lv-vip.done{ background:#F7F4EF; }
.lesson.qa-lesson.lv-vip.done{ background:#F7F4EF; }

/* ── B4. 旧深蓝按钮 / 药丸 ────────────────────────────────────────────────── */
.t-咨询中,.t-待上课{ background:#E8EEF5; color:var(--v-brand); border:1px solid #D3DEEC; }
#ptToast{ background:var(--v-brand) !important; }
#ptBar button{ border-color:var(--v-line); color:var(--v-brand); }
#ptBar button.on{ background:var(--v-brand); border-color:var(--v-brand); }
#ptPanel{ border-color:var(--v-line); }
#ptPanel h4,#ptPanel .row b{ color:var(--v-brand); }
#ptPanel .row{ border-bottom-color:var(--v-line-2); color:var(--v-muted); }
#ptPanel .row button{ border-color:var(--v-line); }
[data-pt-editing="1"]{ background:#FBF0DC; outline-color:var(--v-accent); }

/* ══════════════════════════════════════════════════════════════════════════════
   ⑧ 课次卡配色 A 化（默认生效）—— 课次卡的颜色是**行内 CSS 变量**喂进来的
      （timetable.py 的 course_style() → style="--lesson-color:…;--lesson-bg:…"），
      类选择器打不到，所以这里用两种手段：
        (a) 类兜底：没有行内变量、靠 .lv-* / .sub-* 取色的卡；
        (b) 按值命中：行内写了旧色号的卡，用属性选择器 + !important 盖掉变量。
      每个课程/科目仍然**各自一色、彼此可辨**，只是把冷蓝族搬进 A 款暖家族。
      线上默认即为 A 暖盘。
   ══════════════════════════════════════════════════════════════════════════════ */

/* (a) 类兜底 —— .lv-* / .sub-* 定义的变量 */
html .lv-tzs{--lesson-color:#2A5C82 !important;--lesson-bg:#F3F6F8 !important;--lesson-text:#1C2833 !important;}
html .lv-tz1{--lesson-color:#5B93A8 !important;--lesson-bg:#F4F8F9 !important;--lesson-text:#22333F !important;}
html .lv-tz2{--lesson-color:#3F7C97 !important;--lesson-bg:#F2F7F8 !important;--lesson-text:#1E3038 !important;}
html .lv-tz3{--lesson-color:#2A5C82 !important;--lesson-bg:#F1F5F8 !important;--lesson-text:#1C2833 !important;}
html .lv-tz4{--lesson-color:#1E3A5F !important;--lesson-bg:#F1F3F6 !important;--lesson-text:#1C2833 !important;}
html .lv-ielts{--lesson-color:#C0392B !important;--lesson-bg:#FCF0EE !important;--lesson-text:#4A1A15 !important;}
html .lv-toefl{--lesson-color:#2F6FA8 !important;--lesson-bg:#EEF5FA !important;--lesson-text:#143A5A !important;}
html .lv-ref{--lesson-color:#8E5A7A !important;--lesson-bg:#FAF5F8 !important;--lesson-text:#43273A !important;}
html .lv-g9{--lesson-color:#6E8B3D !important;--lesson-bg:#F6F8F1 !important;--lesson-text:#2F3D19 !important;}
html .lv-leave{--lesson-color:#C1502E !important;--lesson-bg:#FCEBE6 !important;--lesson-text:#4F2117 !important;}
html .lv-blocked{--lesson-color:#8A5A1E !important;--lesson-bg:#F7F1E7 !important;--lesson-text:#3F2910 !important;}
html .lv-default{--lesson-color:#BCB5A7 !important;--lesson-bg:#FBF8F3 !important;--lesson-text:#5C6B7A !important;}
html .rw-vip,
html .lv-vip{--lesson-color:#E2D6C1 !important;--lesson-bg:#FFFFFF !important;--lesson-text:#6E7A86 !important;}
html .sub-speak{--lesson-color:#C1502E !important;--lesson-bg:#FCEBE6 !important;--lesson-text:#4F2117 !important;}
html .sub-listen{--lesson-color:#2A9D8F !important;--lesson-bg:#EAF5F2 !important;--lesson-text:#17453E !important;}
html .sub-write{--lesson-color:#3F7C97 !important;--lesson-bg:#F2F7F8 !important;--lesson-text:#1E3038 !important;}
html .sub-read{--lesson-color:#D08B4F !important;--lesson-bg:#FDF8F2 !important;--lesson-text:#5A3F22 !important;}
html .sub-prep-readwrite{--lesson-color:#1E3A5F !important;--lesson-bg:#F1F3F6 !important;--lesson-text:#1C2833 !important;}
html .sub-prep-listenspeak{--lesson-color:#2A9D8F !important;--lesson-bg:#EAF5F2 !important;--lesson-text:#17453E !important;}
html .sub-study{--lesson-color:#CFC8BA !important;--lesson-bg:#FBF8F3 !important;--lesson-text:#6E7A86 !important;}
html .sub-mock{--lesson-color:#6B4E2E !important;--lesson-bg:#F7F2EA !important;--lesson-text:#2B1F11 !important;}

/* (b) 按值命中 —— 行内 --lesson-* 里的旧色号（实数据里只出现 7 组） */
html [style*="--lesson-color:#D9DED9"],
html [style*="--lesson-color:#d9ded9"]{
  --lesson-color:#CFC8BA !important;--lesson-bg:#FBF8F3 !important;--lesson-text:#6E7A86 !important;}
html [style*="--lesson-color:#48795E"],
html [style*="--lesson-color:#48795e"]{
  --lesson-color:#2A9D8F !important;--lesson-bg:#EAF5F2 !important;--lesson-text:#17453E !important;}
html [style*="--lesson-color:#CE9660"],
html [style*="--lesson-color:#ce9660"]{
  --lesson-color:#D08B4F !important;--lesson-bg:#FDF8F2 !important;--lesson-text:#5A3F22 !important;}
html [style*="--lesson-color:#B44A3F"],
html [style*="--lesson-color:#b44a3f"]{
  --lesson-color:#C1502E !important;--lesson-bg:#FCEBE6 !important;--lesson-text:#4F2117 !important;}
html [style*="--lesson-color:#3E7CB1"],
html [style*="--lesson-color:#3e7cb1"]{
  --lesson-color:#3F7C97 !important;--lesson-bg:#F2F7F8 !important;--lesson-text:#1E3038 !important;}
html [style*="--lesson-color:#2E8C94"],
html [style*="--lesson-color:#2e8c94"]{
  --lesson-color:#2A9D8F !important;--lesson-bg:#EAF5F2 !important;--lesson-text:#17453E !important;}
html [style*="--lesson-color:#345282"]{
  --lesson-color:#1E3A5F !important;--lesson-bg:#F1F3F6 !important;--lesson-text:#1C2833 !important;}

/* 极端兜底：既没有行内变量、也没有 .lv-* 类的卡（房间表里的 19 张「其他课次」） */
html .rw-lesson:not([style]),
html .lesson:not([style]),
html .room-lesson:not([style]){
  background:#FBF8F3; color:var(--v-ink); border-left-color:#BCB5A7; box-shadow:none; }
html .rw-lesson:not([style]) b,
html .lesson:not([style]) b{ color:var(--v-ink); }

/* 课次卡的深色标题随 A 款墨色，不再各卡一套灰 */
html .lesson b,
html .rw-lesson b,
html .cd2-les b,
html .room-lesson b,
html .month-lesson b{ color:inherit; }
html .rw-lesson .rw-t,
html .rw-lesson .rw-meta,
html .room-lesson small{ color:inherit; opacity:.82; }

/* ══════════════════════════════════════════════════════════════════════════════
   ⑨ 三次收口（2026-10-07 11:1x）—— 收尾：暖灰文字 / 表单描边 / 表头 / 内联色
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── C1. 暖灰旧文字 #6a6459 · 冷墨 #26383f · 淡灰 #a79e8f / #6a655d ────────── */
.month-day header b,
.tm-cal .month-day header b,
.cd2-month .month-day header b,
.month-schedule.cd2-month.tm-cal .month-day header b,
.schedule-legend .lg,
.info-card-text,.info-list li,
.vip-teacher p,.vip-study-list,
.sp-sec-t,.sp-next-m,.lp-msg.note,
.cd2-les .cd2-subj,.cd2-bio p,
.ip-grid label,.ip-ta,
.ql-form label,
.room-week tr>th:first-child{ color:var(--v-muted); }
.vip-minis .term-mini-label{ color:var(--v-muted); background:var(--v-soft);
  border-color:var(--v-line); }
.vip-minis .term-mini{ border-color:var(--v-line); }
.info-rows dd,.lesson-detail-body b{ color:var(--v-ink); }
.lesson-detail-body span,.lp-f .hint,.lp-empty,.stu-pane-empty,.ld-readonly-note{ color:var(--v-muted-2); }
.lesson-detail-close{ background:var(--v-soft); color:var(--v-muted); }
.info-unit-h,.info-stage-hours{ color:#C07C2E; }
.info-unit-row .c{ color:var(--v-muted); }

/* ── C2. 表单控件 / 浮层描边 ─────────────────────────────────────────────── */
.ql-form{ border-color:var(--v-line); box-shadow:0 10px 30px rgba(30,58,95,.16); }
.ql-form input,.ql-form select{ border-color:var(--v-line); }
.ql-tip{ color:var(--v-muted-2); }
.layout input,.layout select,.layout textarea{ border-color:var(--v-line); }
.layout select{ color:var(--v-ink); }
.layout .lp-foot{ background:#FBF8F3; border-top-color:var(--v-line); }
label.room-date-picker{ color:var(--v-muted-2); }
#ptPanel{ border-color:var(--v-line) !important; }

/* ── C3. 教室表：表头 / 时段列 / 分隔线 ─────────────────────────────────── */
.room-week-grid-table th,.room-week-grid-table td{ border-color:var(--v-line-2); }
.room-week-grid-table .rw-day-rooms-row th,
.room-week-grid-table .rw-day-rooms-row .rw-dc{ background:#F6F3EC; color:var(--v-muted-2); }
.room-week thead th{ background:#F6F3EC; }
.room-week tr>th:first-child{ background:#F6F3EC; }
.room-week th,.room-week td{ border-right-color:var(--v-line-2); border-bottom-color:var(--v-line-2); }
.rw-day-head td{ border-bottom-color:var(--v-line-2); }
.rw-group-row .rw-group-head{ border-color:var(--v-line-2); }
.calendar .slotname,td.slotname,th.slotname{ background:#F6F3EC; }

/* ── C4. 仪表盘：待处理池 / 快捷维护 ────────────────────────────────────── */
.pool-tag.done{ border-color:#CFE7E0; }
.pool-tag.refund{ background:#FBF0DC; color:var(--v-warn); border-color:#EFDCB8; }
.pool-cand,.pool-add{ border-color:var(--v-line-2); }

/* ── C5. 班级 / 老师课表次级元素 ─────────────────────────────────────────── */
.cls-content-line{ background:#FBF0DC; color:var(--v-accent-d); }
.layout .tl-students a{ background:var(--v-soft); color:var(--v-brand); }
.tl-head b a,.tl-sub,.cd-studentbar-title,.cd-class-chip b{ color:var(--v-brand); }
.cd-studentbar{ background:var(--v-soft); }
.cd-class-chip,.cd-student-chip{ border-color:var(--v-line); color:var(--v-brand); }
.cd-class-chip.on,.cd-student-chip.on{ background:var(--v-brand); border-color:var(--v-brand); }

/* ── C6. 设置页 / 页面文案编辑：写在内联 style 上的旧暖灰 ────────────────── */
.layout p[style*="color:#6a6459"],
.layout span[style*="color:#a79e8f"],
.layout span[style*="color:#a29a8b"]{ color:var(--v-muted-2) !important; }

/* ── C7. 班级管理：课次药丸里的 ✓ / 调课 小图标（颜色写在内联 style 上） ──── */
html .ses-pill i{ color:var(--v-brand) !important; }

/* ══════════════════════════════════════════════════════════════════════════════
   ⑩ 四次收口（2026-10-07 11:2x）
   —— 收尾最后一批：各页**内联 <style>**（写在 body 里，文档顺序在皮肤之后，
      同权重必压皮肤）→ 这里抬权重 / 用 !important 收干净。
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── D1. 月历日期数字（原为暖灰 #4A443B）──────────────────────────────────── */
.month-schedule.cd2-month.tm-cal .month-day header b,
.tm-cal .month-day header b,
.cd2-month .month-day header b,
.month-day header b{ color:var(--v-ink) !important; }
.month-schedule.cd2-month.tm-cal.dens-compact .month-day header b,
.month-schedule.cd2-month.tm-cal.dens-stack .month-day header b,
.month-schedule.cd2-month.tm-cal.dens-detail .month-day header b,
.month-schedule.cd2-month.tm-cal.dens-list .month-day header b{ color:var(--v-ink) !important; }

/* ── D2. 密度切换 / 周历左列（原 #0D3568 · #F1EADB · #F6F1E4 · #8A8377）───── */
.cd2-dens-a{ color:var(--v-muted) !important; }
.cd2-dens-a:hover,.cd2-dens-a.on{ background:var(--v-soft) !important; color:var(--v-brand) !important; }
.wk-wrap{ background:#F1EBE1 !important; border-color:var(--v-line) !important; }
.wk-table .wk-seg{ background:#F6F3EC !important; color:var(--v-muted) !important; }
.wk-table .wk-seg b{ color:var(--v-brand) !important; }
.wk-table .wk-seg small{ color:var(--v-muted-2) !important; }

/* ── D3. 仪表盘：快捷维护 / 待处理池（页面内联 <style>）──────────────────── */
.pool-add input,.pool-add select,.pc-item input,.pc-item select,.ua-input,.pc-sel{
  border-color:var(--v-line) !important; color:var(--v-ink) !important; }
.pool-tag.done{ border-color:#CFE7E0 !important; }
.pool-tag.refund{ background:#FBF0DC !important; color:var(--v-warn) !important;
  border-color:#EFDCB8 !important; }
.pool-cand,.pool-add{ border-color:var(--v-line-2) !important; }

/* ── D4. 教室页：新增教室/修改课程的浮层表单 + 可编辑字段提示 ─────────────── */
.ql-form{ border-color:var(--v-line) !important; }
.ql-form label,.room-toolbar label,.rw-rd-tip,.room-edit label{ color:var(--v-muted) !important; }
.ql-form input,.ql-form select,.room-edit select,.room-edit input{
  border-color:var(--v-line) !important; color:var(--v-ink) !important; }
.ql-tip{ color:var(--v-muted-2) !important; }
.datalist,option{ color:var(--v-ink); }
.rw-room[data-rd-kind]:hover,.rw-slot .slot-name[data-rd-kind]:hover,
.rw-slot .slot-time[data-rd-kind]:hover{ outline-color:var(--v-accent) !important; }
[data-rd-edit="1"]{ background:#FBF0DC !important; outline-color:var(--v-accent) !important; }

/* ── D5. 课次详情弹窗 ───────────────────────────────────────────────────── */
.lesson-detail-close{ background:var(--v-soft) !important; color:var(--v-muted) !important; }
.ld-readonly-note{ color:var(--v-muted-2) !important; }
.lesson-detail-body span{ color:var(--v-muted-2) !important; }
.lesson-detail-body b{ color:var(--v-ink) !important; }

/* ── D6. 全局：表单控件的旧暖灰描边（凡未点名的一律对齐 A 款）────────────── */
.layout input:not([type="checkbox"]):not([type="radio"]),
.layout select,
.layout textarea{ border-color:var(--v-line) !important; }
.layout label{ color:var(--v-muted); }

/* ── D7. 页面文案编辑工具条（page_texts.js 运行时注入 <style>，只能抬到 !important）── */
#ptBar,#ptPanel{ border-color:var(--v-line) !important; }
#ptBar button{ border-color:var(--v-line) !important; color:var(--v-brand) !important; }
#ptBar button:hover{ background:var(--v-soft) !important; }
#ptBar button.on{ background:var(--v-brand) !important; color:#fff !important;
  border-color:var(--v-brand) !important; }
#ptPanel h4,#ptPanel .row b{ color:var(--v-brand) !important; }
#ptPanel .row{ border-bottom-color:var(--v-line-2) !important; color:var(--v-muted) !important; }
#ptPanel .row button{ border-color:var(--v-line) !important; }
#ptPanel .all button{ border-color:#F4D6CC !important; color:var(--v-warn) !important; }
[data-pt-editing="1"]{ background:#FBF0DC !important; outline-color:var(--v-accent) !important; }
.layout input,.layout select,.layout textarea{ color:var(--v-ink) !important; }

/* ══════════════════════════════════════════════════════════════════════════
   收口 v2 —— 2026-10-07 12:1x
   起因：完整视图 / 老师课表「月历·完整」/ 我的课表 仍见线上旧配色。
   根因：style.css 的 :root 有一套旧变量（--teal / --ink / --muted / --line /
        --bg / --ok / --accent / --orange / --beige / --bluegray），全站模板
        大量引用它们；而本皮肤只定义了新变量 --v-*，**从未覆盖这套旧变量**
        → 凡是用旧变量的地方（链接色、正文色、表格线、强调橙…）全部原样保留。
   处方：① 覆盖旧变量（一次解决主力）② 深蓝渐变头补背景（之前只改了圆角）
        ③ 写死 hex 的窄口点名。仍然只加 CSS，style.css 一字未动。
   ═════════════════════════════════════════════════════════════════════════ */

/* ── E0. 覆盖 style.css 的旧变量 ────────────────────────────────────────── */
:root{
  --teal:#1E3A5F; --teal-d:#1E3A5F; --beige:#F1EBE1; --bluegray:#5C6B7A;
  --ink:#1C2833; --muted:#6E7A86; --line:#E8E2D8; --bg:#F5F1EA; --card:#FFFFFF;
  --ok:#1E3A5F; --warn:#C57A2B; --danger:#C1502E; --accent:#E76F51;
  --orange:#E76F51; --orange-d:#D4553A;
  /* 批次 W 遗留 token */
  --card-warm:#FBF8F3; --line-soft:#F2EEE7; --line-dash:#D9D2C6; --line-cool:#DCE3EC;
  --muted-warm:#8A8377; --green:#1F7E74; --green-soft:#2A9D8F; --green-bg:#E6F3EF;
  --green-line:#CFE7E0; --orange-bg:#FBF0DC; --orange-line:#EFDCB8;
}

/* ── E1. 深蓝渐变头：之前只改了圆角与阴影，漏改背景 ─────────────────────── */
.cd2-hero,.cd2-hero-vip,.tm-banner,.vip-stage{ background:var(--v-hero) !important; }
.cd2-hero-time,.cd2-hero-period{ color:#F3B08C !important; }

/* ── E2. 写死「强调橙 #CE9660」处 → A 款暖橙 ────────────────────────────── */
.hero-kicker{ color:var(--v-accent); border-color:#F4D6CC; }
.lesson .t,.month-lesson .t,.cd2-les .cd2-t,
.tm-cal .month-lesson .t,.tm-cal .ml-t{ color:var(--v-accent); }
.month-day.today{ box-shadow:inset 0 0 0 2px var(--v-accent); }
.mini-day.pending{ color:var(--v-accent); }
.mini-dot.pending{ border-color:var(--v-accent); }
.room-unassigned-box h2{ color:var(--v-accent); }
.rw-day-label em{ color:var(--v-accent); }
.rw-daynav a.on{ background:var(--v-accent); }
.rw-cell.drop-on{ background:#FCEBE6; box-shadow:inset 0 0 0 2px var(--v-accent); }
.cd2-today{ background:var(--v-accent); }
.info-outline .io-t{ color:var(--v-accent); }
.vip-block-t{ border-left-color:var(--v-accent); }

/* ── E3. 写死「VIP 粉 #B54F78 / #E7C6D6 / #FDF4F8」→ A 款珊瑚暖橙家族 ─── */
.tm-cal .month-lesson.lv-vip{ background:#fff; border-color:#F4D6CC;
  border-left-color:#F4D6CC; color:var(--v-accent-d); }
.tm-cal .ml-card.lv-vip .ml-n{ color:var(--v-accent-d); }
.term-mini-note.vip .tmn-t{ background:#FCEBE6; border-color:#F4D6CC; color:var(--v-accent-d); }
.term-group-label{ color:var(--v-accent-d); }
.term-pill.vip{ background:#FCEBE6; border-color:#F4D6CC; color:var(--v-accent-d); }
.lvl-dot.vip{ background:var(--v-accent-d); }
.vip-minis .term-mini-day.h-off{ color:var(--v-accent-d); }
.vip-minis .term-mini-day.h-work{ color:var(--v-teal); }
.term-legend .sw-txt{ color:var(--v-accent-d); }
.term-legend .sw-txt.work{ color:var(--v-teal); }
.vip-goal-aim b{ color:var(--v-accent-d); }
.cd2-bio-courses{ color:var(--v-accent-d); }
.term-note{ color:var(--v-accent-d); background:#FCEBE6; border-color:#F4D6CC; }
.info-stage-badge{ color:var(--v-accent-d); background:#FCEBE6; }
.info-unit-row i{ color:var(--v-accent-d); }
.term-src.vip{ color:var(--v-accent-d); background:#FCEBE6; border-color:#F4D6CC; }
.wk-les.lv-vip{ background:#FCEBE6; border-left-color:var(--v-accent-d); color:#8F3F3F; }
.wk-les.lv-vip .wk-t{ color:var(--v-accent-d); }
.dens-list .month-lesson.lv-vip{ background:var(--v-accent-d) !important; }

/* ── E4. 暖褐线 #E6DCC9 / #DED8C9 / #F1EADC / #F1E4CC → A 款暖灰线 ─────── */
.grid th{ background:var(--v-th-bg); }
.combo-opt{ border-bottom-color:var(--v-line); }
.rw-group-row .rw-group-head{ background:var(--v-soft); color:var(--v-brand); }
.rw-day-head td{ background:var(--v-soft); border-top-color:var(--v-line); }
.rw-day-collapsed{ border-top-color:var(--v-line); }
.rw-daynav a{ background:var(--v-soft); }
.cal-day.disabled{ background:var(--v-soft); border-color:var(--v-line); }
.wk-table .wk-seg,.wk-table .wk-day{ background:var(--v-th-bg); }
.wk-table .wk-day.wknd{ background:var(--v-soft); }
.wk-table td,.wk-table td.has{ background:var(--v-card); }
.term-mini-note .tmn-t{ border-color:var(--v-line); color:var(--v-muted); }

/* ── E5. 暖白底 → A 款 ─────────────────────────────────────────────────── */
.tm-cal .ml-slot.is-empty{ border-color:var(--v-line); background:var(--v-card); }
.tm-cal .ml-card{ background:var(--v-card); border-color:var(--v-line); }
.tm-cal .ml-b.pending{ background:#FBF0DC; color:#8A5A1E; }
.qa2-cancel{ border-color:var(--v-line); color:var(--v-muted); }
.qa2-d>select,.qa2-cancel,.qa2-datechip{ border-color:var(--v-line); color:var(--v-ink); }
.qa2-f>label,.qa2-hint,.qa2-datechip i{ color:var(--v-muted); }
.qa2-block-lbl{ color:var(--v-brand); }

/* ── E6. 暖灰文字 #938C7E / #8A8377 / #7A7264 / #8D8677 / #6E6A60 ─────── */
.mini-day,.tm-cal .month-lesson .progress,.tm-cal .month-lesson .code,
.cd2-les .cd2-tch,.cd2-study b,.cd2-startline,.cd2-card-t,.cd2-card-s,
.cd2-start,.cd2-bio-t,.cd2-footnote,.cd2-footer,
.term-row-tch,.term-row-room,.info-rows dt,.info-bio-c,.info-bio p,
.rc-level,.rc-next,.rc-stu-head,.rc-stu-edit,
.wk-les .wk-tch,.wk-hint,.cd2-dl-date small,.cd2-dl-tch,.term-group-n,
.lp-modehint,.dash-tip,.dash-maint .dash-note,.dash-core .dash-note,
.dash-coreform label,.month-lesson.cd2-les .tch,
.term-mini-day,.term-mini-day.out{ color:var(--v-muted); }
.tm-cal .ml-r{ color:var(--v-muted); }
.tm-cal .month-lesson.lv-blocked,.tm-cal .ml-card.lv-blocked .ml-n,
.wk-les.lv-blocked,.lesson.qa-lesson.lv-blocked b{ color:var(--v-muted); }
.cd2-card-t{ color:var(--v-muted); }

/* ── E7. 旧深蓝 #0D3568 / #345282 残留 ─────────────────────────────────── */
.grid th,.grid td{ color:var(--v-ink); }
.term-pill.cls{ background:var(--v-soft); border-color:var(--v-brand); color:var(--v-brand); }
.rc-stu-del{ color:var(--v-line); }
.lp-viewbtn{ border-color:var(--v-line); color:var(--v-ink); }
.lp-viewbtn.is-on{ background:var(--v-accent); border-color:var(--v-accent); color:#fff; }
.lp-modebar,.lp-msg.note,.lp-msg.warn{ border-color:var(--v-line); }
.lp-msg.warn{ border-left-color:var(--v-accent); color:#8A5A1E; }
.lesson-detail-panel{ border-color:var(--v-line); }
.room-day-table td:empty::after{ color:var(--v-line); }
.rw-day-collapsed a{ color:var(--v-accent-d); }
.rw-slot{ background:var(--v-soft); border-left-color:var(--v-brand); }
.rw-slot .slot-time{ color:var(--v-brand); }
.rw-corner,.rw-room,.rw-day-label b{ color:var(--v-brand); }
.rw-daynav a.has{ color:var(--v-brand); background:var(--v-soft); }
.term-mini-note.study .tmn-t{ background:var(--v-line-cool); border-color:var(--v-line); color:var(--v-muted); }
.term-mini-day.has{ color:var(--v-ink); }

/* ── E8. 我的课表（/my 桌面壳）：旧冷灰文字随变量已换，补几处写死的 ────── */
.mm-ink,.mm-wrap,.md,.mm-lp,.mm-dotrow,.mm-cell{ color:var(--v-ink); }
.mm-sub,.mm-hol{ color:var(--v-muted); }
.mm-hol{ color:var(--v-accent); }

/* ── E9. 课次卡「按值命中」补齐：style.css 的 .lv-* / .sub-* 全集 ─────────
   上一版只覆盖了实数据里出现的 7 组，其余（冷蓝族）在别的视图里露头。
   这里把 style.css 287-308 定义的全部色号都映射进 A 暖盘。               */
html [style*="--lesson-color:#244D7D"],html [style*="--lesson-color:#244d7d"]{
  --lesson-color:#2A5C82 !important;--lesson-bg:#F3F6F8 !important;--lesson-text:#1C2833 !important;}
html [style*="--lesson-color:#7DAEDC"],html [style*="--lesson-color:#7daedc"]{
  --lesson-color:#5B93A8 !important;--lesson-bg:#F4F8F9 !important;--lesson-text:#22333F !important;}
html [style*="--lesson-color:#477DBB"],html [style*="--lesson-color:#477dbb"]{
  --lesson-color:#3F7C97 !important;--lesson-bg:#F2F7F8 !important;--lesson-text:#1E3038 !important;}
html [style*="--lesson-color:#41799D"],html [style*="--lesson-color:#41799d"]{
  --lesson-color:#2A5C82 !important;--lesson-bg:#F1F5F8 !important;--lesson-text:#1C2833 !important;}
html [style*="--lesson-color:#A65A99"],html [style*="--lesson-color:#a65a99"]{
  --lesson-color:#8E5A7A !important;--lesson-bg:#FAF5F8 !important;--lesson-text:#43273A !important;}
html [style*="--lesson-color:#6B8F28"],html [style*="--lesson-color:#6b8f28"]{
  --lesson-color:#6E8B3D !important;--lesson-bg:#F6F8F1 !important;--lesson-text:#2F3D19 !important;}
html [style*="--lesson-color:#EFE8DD"],html [style*="--lesson-color:#efe8dd"]{
  --lesson-color:#E2D6C1 !important;--lesson-bg:#FFFFFF !important;--lesson-text:#6E7A86 !important;}
html [style*="--lesson-color:#C94B43"],html [style*="--lesson-color:#c94b43"]{
  --lesson-color:#C1502E !important;--lesson-bg:#FCEBE6 !important;--lesson-text:#4F2117 !important;}
html [style*="--lesson-color:#9A3F3F"],html [style*="--lesson-color:#9a3f3f"]{
  --lesson-color:#8A5A1E !important;--lesson-bg:#F7F1E7 !important;--lesson-text:#3F2910 !important;}
html [style*="--lesson-color:#9CA8CC"],html [style*="--lesson-color:#9ca8cc"]{
  --lesson-color:#BCB5A7 !important;--lesson-bg:#FBF8F3 !important;--lesson-text:#5C6B7A !important;}
html [style*="--lesson-color:#5F4525"],html [style*="--lesson-color:#5f4525"]{
  --lesson-color:#6B4E2E !important;--lesson-bg:#F7F2EA !important;--lesson-text:#2B1F11 !important;}
html [style*="--lesson-color:#4F84A1"],html [style*="--lesson-color:#4f84a1"]{
  --lesson-color:#5C6B7A !important;--lesson-bg:#FBF8F3 !important;--lesson-text:#1C2833 !important;}

/* ── E10. 点名收口（写死 hex、且不在 E0 变量覆盖范围内）───────────────── */
.info-card-t{ color:var(--v-brand); }
.info-card{ border-color:var(--v-line); }
.cd2-card-b,.cd2-courselines{ color:var(--v-ink); }
.cd2-dl-title,.cd2-tname{ color:var(--v-brand); }
.tm-cal .ml-n{ color:var(--v-brand); }
.tm-cal .ml-card.lv-vip .ml-n{ color:var(--v-accent-d); }
.term-day-date{ color:var(--v-brand); }
.term-hol{ color:var(--v-warn); }
.holiday-note{ background:var(--v-soft); color:#8F3F3F; }
.month-schedule.cd2-month.tm-cal{ background:var(--v-soft); }
.tm-cal .ml-slot.is-empty{ background:var(--v-card); border-color:var(--v-line); }
.tm-cal .ml-b.done{ background:var(--v-green-bg); color:var(--v-green); }
.tm-cal .ml-b.done{ border-color:var(--v-green-line); }
th.wk-day{ color:var(--v-muted); }
th.wk-day.today{ background:var(--v-brand); color:#fff; }
.layout small,.month-lesson.cd2-les .tch,.cd2-dl-tch,
.cd2-dl-date small{ color:var(--v-muted); }
a.avail-btn.sched{ color:var(--v-muted); }
.availability-box{ border-color:var(--v-line); }
.teacher-load-card{ border-color:var(--v-line); }
.lg,.sw{ color:var(--v-muted); }
li.term-legend-item,ul li{ color:var(--v-ink); }
.cd2-card-t[style*="#D97706"],.cd2-card-t[style*="#d97706"]{ color:var(--v-accent) !important; }
.cd2-card-b[style*="#1f2d3a"],.cd2-courselines[style*="#1f2d3a"]{ color:var(--v-ink) !important; }

/* ── E11. 行内 pill_style（main.py 生成 background/border/color 三属性）─────
   这是**行内样式**、不是 CSS 变量，只能按值命中 + !important。          */
html [style*="border:1px solid #3E7CB1"],html [style*="border:1px solid #3e7cb1"]{
  background:#F2F7F8 !important; border-color:#3F7C97 !important; color:#1E3038 !important; }
html [style*="border:1px solid #48795E"],html [style*="border:1px solid #48795e"]{
  background:#EAF5F2 !important; border-color:#2A9D8F !important; color:#17453E !important; }
html [style*="border:1px solid #7DAEDC"],html [style*="border:1px solid #7daedc"]{
  background:#F4F8F9 !important; border-color:#5B93A8 !important; color:#22333F !important; }
html [style*="border:1px solid #477DBB"],html [style*="border:1px solid #477dbb"]{
  background:#F2F7F8 !important; border-color:#3F7C97 !important; color:#1E3038 !important; }
html [style*="border:1px solid #2E8C94"],html [style*="border:1px solid #2e8c94"]{
  background:#EAF5F2 !important; border-color:#2A9D8F !important; color:#17453E !important; }
html [style*="border:1px solid #D5D8DC"],html [style*="border:1px solid #d5d8dc"]{
  background:var(--v-soft) !important; border-color:var(--v-line) !important; color:var(--v-muted) !important; }

/* ── E12. 行内 color（模板 style="color:#…"）───────────────────────────── */
html [style*="color:#48795E"],html [style*="color:#48795e"]{ color:#2A9D8F !important; }
html [style*="color:#CE9660"],html [style*="color:#ce9660"]{ color:#D08B4F !important; }
html [style*="color:#B44A3F"],html [style*="color:#b44a3f"]{ color:#C1502E !important; }
html [style*="color:#3E7CB1"],html [style*="color:#3e7cb1"]{ color:#3F7C97 !important; }
html [style*="color:#6a6459"]{ color:var(--v-muted) !important; }

/* ── E13. 多科日期格 / 迷你日历格（行内 background + border-bottom 三角）── */
html [style*="border-bottom:3px solid #76A4CF"],html [style*="border-bottom:3px solid #76a4cf"]{
  background:#F4F8F9 !important; border-bottom-color:#5B93A8 !important; }
html [style*="border-bottom:3px solid #447258"]{ background:#EAF5F2 !important; border-bottom-color:#2A9D8F !important; }
html [style*="border-bottom:3px solid #3A75A6"]{ background:#F2F7F8 !important; border-bottom-color:#3F7C97 !important; }
html [style*="border-bottom:3px solid #2B848B"]{ background:#EAF5F2 !important; border-bottom-color:#2A9D8F !important; }
html [style*="border-bottom:3px solid #4376B0"]{ background:#F2F7F8 !important; border-bottom-color:#3F7C97 !important; }
html [style*="border-bottom:3px solid #939EC0"]{ background:#FBF8F3 !important; border-bottom-color:#BCB5A7 !important; }
html [style*="border-bottom:3px solid #E1DAD0"]{ background:#FBF8F3 !important; border-bottom-color:#CFC8BA !important; }
html [style*="border-bottom:3px solid #CCD1CC"]{ background:#FBF8F3 !important; border-bottom-color:#CFC8BA !important; }
html [style*="border-top:1px dashed #ddd"],html [style*="border-top:1px dashed #DDD"]{
  border-top-color:var(--v-line) !important; }

/* ── E14. 特异性不足的残留（抬到 !important / 对齐 style.css 的选择器）── */
.wk-table .wk-day{ background:var(--v-th-bg) !important; color:var(--v-muted) !important; }
.wk-table .wk-day.wknd{ background:var(--v-soft) !important; }
.wk-table .wk-day.today{ background:var(--v-brand) !important; color:#fff !important; }
span.tch{ color:var(--v-muted) !important; }
.layout li{ background:var(--v-soft); }
.info-stage-head b,.info-bio b,.cd2-bio b{ color:var(--v-brand); }
.term-legend,.term-legend .lg,.term-legend .lg-t2{ color:var(--v-muted); }
.term-legend .lg-t{ color:var(--v-brand); }
html .month-lesson b,html .month-lesson b.t,html .cd2-les b{ color:var(--v-ink); }
html .cd2-card-t{ }
.room-edit>a{ color:var(--v-brand); }
.stu-pane{ border-color:var(--v-line); }
.tm-cal .ml-card{ background:var(--v-card); border-color:var(--v-line); }
html .tm-cal .ml-slot.is-empty{ background:var(--v-card) !important; border-color:var(--v-line) !important; }
html .tm-cal .ml-b.done{ background:var(--v-green-bg) !important; color:var(--v-green) !important;
  border-color:var(--v-green-line) !important; }
.month-schedule.tm-cal,.month-schedule.cd2-month{ background:var(--v-soft); }
/* ── E15. info 面板 / 课次块里的深蓝 b 与正文色 ─────────────────────────── */
.info-card b,.info-card strong,.cd2-side b,.cd2-side strong{ color:var(--v-brand) !important; }
.info-card p,.info-card li,.info-card dt,.info-card dd{ color:var(--v-ink); }
.month-lesson,.cd2-les{ color:var(--v-ink) !important; }
.cd2-daylist.on{ border-color:var(--v-line); }

/* ── E16. 老师月历：ml-card 底色/边框是写死的（style.css 926 等）────────── */
html .tm-cal .ml-card{ background:var(--v-card) !important; border-color:var(--v-line) !important; }
html .tm-cal .ml-card.lv-vip{ background:#FCEBE6 !important; border-color:#F4D6CC !important; }
html .tm-cal .ml-card.lv-blocked{ background:var(--v-soft) !important; }
html .tm-cal .ml-b.done{ background:var(--v-green-bg) !important; color:var(--v-green) !important; }
.tm-cal .ml-l1{ color:var(--v-ink); }
.month-schedule.tm-cal{ border-color:var(--v-line); }

/* ── E17. 我的课表（/my 桌面壳）：旧冷灰 / 旧冷蓝底 逐条点名 ───────────── */
html .mm-page .mm-arrow,html .mm-page .mm-cname,html .mm-page .mm-dnum,
html .mm-page .mm-title{ color:var(--v-ink) !important; }
html .mm-page .mm-range,html .mm-page .mm-legend,html .mm-page .mm-badge,
html .mm-page .mm-sub,html .mm-page .mm-cell{ color:var(--v-muted) !important; }
html .mm-page .mm-pill{ color:var(--v-accent) !important; }
html .mm-page .mm-month th{ background:var(--v-th-bg) !important; color:var(--v-muted) !important; }
html .mm-page .mm-badge{ background:var(--v-soft) !important; }
html .mm-page .mm-cell.today{ background:var(--v-soft) !important; }
html .mm-page .mm-slot,html .mm-page .mm-cell.off{ background:var(--v-soft) !important; }
html .mm-page .mm-dot.ok{ background:var(--v-brand) !important; }
html .mm-page .mm-hol{ color:var(--v-accent) !important; }
html .mm-page .md,html .mm-page .mm-dnum,html .mm-page .mm-hero{ color:var(--v-ink) !important; }
html .mm-page .mm-adminbar{ color:var(--v-muted) !important; }
html .mm-page .mm-slot,html .mm-page .mm-cell,html .mm-page .mm-range,
html .mm-page .mm-legend,html .mm-page b{ color:var(--v-muted) !important; }
html .mm-page a{ color:var(--v-brand) !important; }
html .mm-page a.mm-pill{ color:var(--v-accent) !important; border-color:var(--v-accent) !important; }
html .mm-page i.bar-done{ background:var(--v-green) !important; }
html .mm-page i.bar-off{ border-color:var(--v-accent) !important; }

/* ── E18. 列表日期 / 周历表头里的深蓝 b（探针定位）────────────────────── */
.cd2-dl-date b{ color:var(--v-brand) !important; }
.wk-table th.wk-day b{ color:var(--v-brand) !important; }

/* ── E19. 班级管理：学员面板 ─────────────────────────────────────────── */
.stu-pane b,.stu-pane strong{ color:var(--v-brand) !important; }
.stu-pane span,.stu-pane br{ color:var(--v-muted) !important; }

/* ── E20. 收尾：今日表头 b / 我的课表分段控件 / 进度条 ────────────────── */
.wk-table th.wk-day.today b{ color:#fff !important; }
html .mm-page #mmSegWeek.on{ background:var(--v-brand) !important; color:#fff !important; }
html .mm-page #mmSegMonth{ color:var(--v-muted) !important; }
html .mm-page .mm-col-slot,html .mm-page td.today,html .mm-page .mm-cell.today{
  background:var(--v-soft) !important; }
html .mm-page .mm-lp.today,html .mm-page .mm-lp.today span{
  background:var(--v-accent) !important; color:#fff !important; }
html .mm-page i.bar-ok{ border-color:var(--v-brand) !important; }
.wk-hint b{ color:var(--v-brand) !important; }
html .mm-page .mm-dnum.today,html .mm-page .mm-dnum.today span{
  background:var(--v-accent) !important; color:#fff !important; }

/* ══ E21.（2026-10-07 14:2x **已撤销**）完整视图整体放大 ══════════════════════
   13:5x 曾按预览 z2 把完整视图放大 1.22（课表卡 750→915、右栏 340→415）并放开 .page 宽度。
   Tiffany 反馈：「完整视图和月视图的比例是跳变的」→ 全部撤回，完整视图恢复**原比例**
   （.page max-width:1180px + 课表卡 750 + 右栏 340），与周历 / 月历同一尺度。
   ⚠️ 保留本注释是为了让后续审计知道：这段**不是漏做，是刻意不做**。
   ⚠️ 老师课表 / 班课 / VIP 三处完整视图的 `cd2-tf` 类**保留**（style.css 里它本来就是
      「完整视图」的布局外壳，不是本次新增的钩子；去掉放大后它只是恢复正常版式）。 */

/* ══ E22. 教室·每日：时段分组 + 午休分隔 + 表头吸顶（2026-10-07 方案 D） ══════════
   症结：当天时段行 = 有课的起始时刻（09:00/09:30/10:00 | 13:15…），上午与下午之间只有
        5px 表缝；一滚动表头与日期整段消失 → 下午那几行「不知道属于哪一天 / 是不是隔天」。
   ① 左列标 上午/下午/晚上：数据来自 <th data-band>（main.band_index_of_time 按真实时段算，
      不是写死的行号，每天时段不同也对）
   ② 表头常驻 + 表头里写明当天日期（<th data-day>，取页面上真实日期）
   ③ 上午↔下午之间撑开一条午休分隔带 */

/* ① 时段分组标签
   ⚠️ 2026-10-09 改版：左列已固定成 6 档（上午1 / 上午2 / lunch break / 下午1 / 下午2 /
      晚上），行里自带时段名 —— 原来那枚「上午 / 下午 / 晚上」小标签与行名重复，撤掉；
      band 只留作配色用（上午 / 下午 / 晚上三色，见下三行）。 */
.room-day-table tbody tr[data-band="上午"] > .room-slot-time{ color:#2F6D66; }
.room-day-table tbody tr[data-band="下午"] > .room-slot-time{ color:#A8432C; }
.room-day-table tbody tr[data-band="晚上"] > .room-slot-time{ color:#6E7A86; }

/* ② 午休分隔带（30px 空档）—— 2026-10-09 起由真正的「lunch break 行」取代，
      这条只作历史记录，已不生效（保留下面的 .rd-lunch~ 见 E24）。 */

/* ③ 表头里写明当天日期（吸顶时也一直看得到是哪一天） */
.room-day-table thead th:first-child::after{
  content:attr(data-day); display:block; margin-top:3px; font-size:10px; font-weight:800;
  letter-spacing:.06em; color:var(--v-accent-d);
}

/* ④ 冻结表头：把每日表放进一个「纵向可滚 + 横向可滚」的面板里，表头与时间列常驻。
   —— 不能直接给 .tablewrap 设 overflow:visible：这张表自然宽 1985px（12 列），
      放开后整页会被撑出横向滚动条（2151px > 1440px）。所以保持它当滚动容器，
      靠 max-height 让它纵向也能滚，表头/时间列就能在里面吸顶吸左。 */
@media (min-width:1100px){
  .tablewrap:has(> .room-day-table){
    max-height:calc(100vh - 208px); overflow:auto;
  }
  .room-day-table thead th{
    position:sticky; top:0; z-index:40;
    box-shadow:0 5px 10px -8px rgba(30,58,95,.55);
  }
  .room-day-table thead th:first-child{ left:0; z-index:50; }
  .room-day-table tbody .room-slot-time{
    position:sticky; left:0; z-index:30; background:var(--v-bg);
  }
}

/* ══ E23. 零星漏网（2026-10-07：换用 10-07 生产库重测后新增渲染出来的元素） ══════════
   这些元素依赖数据才出现（待处理池的「生效日」标签、VIP 同堂 1V3 角标、详情面板已读项），
   上一轮审计拿 10-06 快照时它们没渲染 → 没被列入。只改颜色，不动结构。
   ⚠️ .pool-eff 定义在 dashboard.html 的**内联 <style>**（文档里比皮肤更靠后），
      所以必须抬到 .layout 下才有同等以上的优先级。 */
.layout .pool-eff{ color:#8A5A1E; background:#FBF0DC; border-color:#EFDCB8; }
.cd2-les .cd2-note{ color:var(--v-accent-d); background:#FCEBE6; border-color:#F4D6CC; }

/* ══ E24. 教室页（2026-10-09 Tiffany 定的两件事，其中一件当场撤回） ══════════════
   一、教室表暖化 —— ❌ 她 2026-10-09 15:4x 明确回「不做」→ 下面那一段已删除。
       原方案（也是 `html.opt-wr` 预览开关的常驻版）把时段列 / 表头 / 场地分组头 /
       教室名 / 数据格 / 午休带 / 日期导航 / 待分配区 / 无科目课次卡全刷成暖沙色系；
       撤回后教室表回落 E0–E23 的冷色调（teal + 白卡），与周视图同源。
   ⚠️ 别再自动加回来。要恢复只能经她点头，且必须重新出一版对照页。
   二、每日视图改版配套 —— 左列为固定 6 档（上午1 / 上午2 / lunch break / 下午1 /
       下午2 / 晚上），行里「时段名 + 钟点」两行制；课次卡拖到任意格（.rd-cell）
       时的落点反馈也在这一节（配色一律对齐周视图同语义的 .rw-* 规则）。
   ⚠️ 本段放在全文件最后：同优先级下靠后即生效，不用提权。
   ⚠️ 不动语义色：课次卡的科目配色、每日左列 band 色（上午/下午/晚上）都不是「底色」，
      这里一律不碰（她明确否过「把班型区分度抹平」）。 */

/* ── 一 · 教室表暖化 —— 已撤回（2026-10-09 15:4x） ────────────────────
   删掉的 33 行：.rw-slot / .rw-slot .slot-name / .rw-corner / .rw-day-head td /
   .rw-group-row .rw-group-head(±loc-2312) / .rw-room(±loc-2302/2312) /
   .rw-day-rooms-row .rw-dc(±两场地) / .rw-cell.loc-2302/2312 / .rw-lunch-cell /
   .rw-lunch-handle / .rw-daynav a.has / .rw-day-collapsed(±a) / .room-unassigned-box /
   .room-lesson / .room-lesson small / .room-day-table thead th(±small)。
   这些元素现在取 E0–E23 里原有的冷调定义，不再被本段覆盖。 */

/* ── 二 · 每日视图：6 档固定行 ─────────────────────────────────────── */
/* 行里两行制：时段名（上午1）在上、钟点（08:00–10:00）在下 —— 与周视图左列同一层级 */
.room-day-table tbody .room-slot-time{ white-space:nowrap; }
.room-day-table tbody .room-slot-time b{ display:block; font-size:12.5px; font-weight:800;
  letter-spacing:.02em; }
.room-day-table tbody .room-slot-time small{ display:block; margin-top:2px; font-size:10.5px;
  font-weight:600; color:inherit; opacity:.72; font-variant-numeric:tabular-nums; }
/* 残留冷灰 #75706a（style.css 的 .room-lesson small/.muted）压掉：左列钟点跟着 band 色走 */
.room-day-table .room-slot-time small{ color:inherit; }
/* 午休行 = 独立一条斜纹带（原来那 30px 空档由真行取代）；
   斜纹与文字色对齐周视图 .rw-lunch-cell（冷调），不用暖沙 */
.room-day-table tbody tr.rd-lunch > .room-slot-time{ color:var(--v-muted-2); }
.room-day-table tbody tr.rd-lunch > .room-slot-time small{ opacity:.85; }
.room-day-table td.rd-lunch-cell{ height:22px; padding:2px 8px; border:0; border-radius:10px;
  background:repeating-linear-gradient(45deg,transparent 0 7px,
    rgba(30,58,95,.05) 7px 14px); }
.room-day-table td.rd-lunch-cell:empty::after{ content:none; }

/* ── 二 · 可拖拽落点反馈（周视图 .rw-cell 与每日视图 .rd-cell 共用一组取值） ──
   ⚠️ 这里是落点色的**唯一定义点**：一个选择器组同时管两边，避免一页两套语言。
      取值与周视图原本生效的值逐字相同（E0 的 .rw-cell.drop-* 再叠 ⑩ 批次的
      background/box-shadow 覆盖后，最终就是下面这三组）→ 周视图观感零变化。
   ⚠️ 每日视图那半边必须带 `.room-day-table` 前缀：每日表的空白格吃
      `.room-day-table td:empty`（特异性 0-2-1），比 `.rd-cell.drop-on`（0-2-0）高，
      不加前缀时**拖到空教室格**的底色会被它压掉、只剩内阴影（实测发现）。 */
.rw-cell.drop-on,.room-day-table .rd-cell.drop-on{ background:#FCEBE6; border-color:transparent;
  box-shadow:inset 0 0 0 2px var(--v-accent); }
.rw-cell.drop-bad,.room-day-table .rd-cell.drop-bad{ background:#FCEDE7; border-color:transparent;
  box-shadow:inset 0 0 0 2px #D4574E; }
.rw-cell.drop-same,.room-day-table .rd-cell.drop-same{ background:var(--v-soft); border-color:transparent;
  box-shadow:inset 0 0 0 2px var(--v-line); }


/* ══════════════════════════════════════════════════════════════════════════════
   E25（2026-10-09 22:5x · Tiffany 四条里的三条「颜色」）
     ① 排课的「不可排」要更明显的**亮橙铺色**（原来是棕灰虚线，老师看不出这是拦课）；
     ③ VIP 未识别科目的课次原来落「淡米色 / 近白空卡」（陈嘉毅的 VIP 校内就是这样），换掉；
        连同一向太淡的「研习」灰一起加深一档。
     （第 ② 条「老师课表不再用颜色区分待上/已上」是模板改动，不在这里；
       第 ④ 条命名修正在 labels.py / main.py。）
   ⚠️ 本段全是颜色，纯 CSS 覆盖层；**回滚 = 删掉 E25 整段**（skin_a.css 末尾）。
   ⚠️ 卡片颜色来自行内 CSS 变量，类选择器打不过它 → 这里一律 !important。
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── E25-① 「不可排」= 亮橙铺色 ─────────────────────────────────────────── */
html .lv-blocked{ --lesson-color:#E65100 !important; --lesson-bg:#FFE4C9 !important;
  --lesson-text:#7A3200 !important; }
/* 按值命中：行内/旧映射里的两种「不可排」色号一并拉齐 */
html [style*="--lesson-color:#9A3F3F"],html [style*="--lesson-color:#9a3f3f"],
html [style*="--lesson-color:#8A5A1E"],html [style*="--lesson-color:#8a5a1e"]{
  --lesson-color:#E65100 !important; --lesson-bg:#FFE4C9 !important; --lesson-text:#7A3200 !important; }
/* 排课台老师档的只读「不可排」卡（.qa-lesson.lv-blocked）：铺满亮橙 + 橙色虚线边 */
.lesson.qa-lesson.lv-blocked{ background:#FFE4C9 !important; border:1px dashed #E65100 !important;
  color:#7A3200 !important; box-shadow:none !important; }
.lesson.qa-lesson.lv-blocked b{ color:#7A3200 !important; font-weight:800 !important; }
/* 老师月历里的不可排卡
   ⚠️ 必须写成 `html .tm-cal .ml-card.lv-blocked`：上面 E16 段（第 1148 行）
   有 `html .tm-cal .ml-card.lv-blocked{ background:var(--v-soft) !important }`，
   而 --v-soft 恰好 = #F1EBE1 = 月历自己的底色（.month-schedule.tm-cal 也是 #F1EBE1），
   于是「不可排」卡的底色和背景色**完全相同**，看着像空卡（Tiffany 2026-10-10 截图指出）。
   两边都是 !important，只能靠「选择器同权重 + 写在后面」取胜。 */
html .tm-cal .month-lesson.lv-blocked,
html .tm-cal .ml-card.lv-blocked{ background:#FFE4C9 !important; border-left:4px solid #E65100 !important;
  color:#7A3200 !important; box-shadow:none !important; }
html .tm-cal .ml-card.lv-blocked .ml-n,
html .tm-cal .ml-card.lv-blocked .t,
html .tm-cal .ml-card.lv-blocked .ml-t,
html .tm-cal .ml-card.lv-blocked .ml-l1,
html .tm-cal .ml-card.lv-blocked b{ color:#7A3200 !important; }
html .tm-cal .ml-card.lv-blocked .state-badge{ background:#FFD9AE !important; color:#7A3200 !important; }
/* 老师周历里的「老师不可排时间」整格：原来是淡粉斜纹(#FBECEC) + 深红字(#8F3F3F)，
   与上面的「不可排课次」看起来是两回事 → 统一成同一套亮橙铺色（斜纹保留，改成橙色）。 */
html .week-cell.cell-blocked{
  background:repeating-linear-gradient(45deg,#FFE4C9,#FFE4C9 7px,#FFEFE0 7px,#FFEFE0 14px) !important;
  box-shadow:inset 0 0 0 2px #E65100 !important; }
html .avail-mark.blocked{ color:#7A3200 !important; font-weight:800 !important; }
html .week-cell.cell-blocked .avail-del-form .btn{
  border-color:#E65100 !important; color:#7A3200 !important; background:#FFF3E6 !important; }

/* ── E25-③a VIP 未识别科目（校内 / TZ1 / TZ4 / 补课…）= 暖橙棕，不再是空白米色 ──
   ⚠️ 判据必须带 `:not([style])`：模板是 `it.css or ('lv-vip' if it.is_vip else …)`，
      **只要是 VIP 就一定带 .lv-vip / .rw-vip 类**，哪怕它有科目色（行内 style 写着课程色）。
      无脑写 `html .lv-vip{…!important}` 会把写作蓝 / 听力绿 / 听口青等本来正确的课程色
      一并染成橙棕（2026-10-09 实测：林子轲基础雅思写作、张怡可托福听力、
      泊翰泽凯小托福语用&听力 全被误染）。收窄后只打「没有行内课程色」的卡。 */
html .lv-vip:not([style]),
html .rw-vip:not([style]),
html [style*="--lesson-color:#EFE8DD"],
html [style*="--lesson-color:#efe8dd"]{
  --lesson-color:#C77B4A !important; --lesson-bg:#FAEDE1 !important; --lesson-text:#7A3E13 !important; }
/* 压掉「既无行内变量也无课程色」的极端兜底（那条把底色写死成 #FBF8F3） */
html .rw-lesson.rw-vip:not([style]),
html .lesson.lv-vip:not([style]),
html .room-lesson.lv-vip:not([style]),
html .rw-lesson.rw-vip:not([style]) b,
html .lesson.lv-vip:not([style]) b{
  background:#FAEDE1; color:#7A3E13; border-left-color:#C77B4A; box-shadow:none; }
/* 月历里的「无科目 VIP」原来被写死成 白底 + 淡粉边（skin_a 951 / 1147 那两条），
   在月历模板里 .lv-vip 只在「没有科目色」时才出现 → 这组选择器天然只打该打的卡。 */
html .tm-cal .month-lesson.lv-vip,
html .tm-cal .cd2-les.lv-vip{
  background:#FAEDE1 !important; border-color:#E0B79A !important; color:#7A3E13 !important; }
html .tm-cal .month-lesson.lv-vip b,html .tm-cal .cd2-les.lv-vip b,
html .tm-cal .month-lesson.lv-vip .t{ color:#7A3E13 !important; }
html .tm-cal .month-lesson.lv-vip .state-badge{ background:#F6E0CE !important; color:#7A3E13 !important; }
html .tm-cal .ml-card.lv-vip{ background:#FAEDE1 !important; border-color:#E0B79A !important; }
html .tm-cal .ml-card.lv-vip .ml-n{ color:#7A3E13 !important; }
/* 学期清单 / 完整视图的 term-pill：无科目 VIP 的课族 accent 是 #EFE8DD（近白），换掉。
   pill 是**行内样式**（background/border/color 三属性写死），只能按值命中 + !important。 */
html [style*="border:1px solid #EFE8DD"],html [style*="border:1px solid #efe8dd"]{
  background:#FAEDE1 !important; border-color:#C77B4A !important; color:#7A3E13 !important; }

/* ── E25-③b 「研习」加深一档（原来 #CFC8BA 近白，课次卡看着像空卡） ────────── */
html .sub-study{ --lesson-color:#94A29A !important; --lesson-bg:#F1F4F2 !important;
  --lesson-text:#3C4A44 !important; }
html [style*="--lesson-color:#D9DED9"],html [style*="--lesson-color:#d9ded9"]{
  --lesson-color:#94A29A !important; --lesson-bg:#F1F4F2 !important; --lesson-text:#3C4A44 !important; }
/* 「研习」在完整视图 / 学期清单里是 term-pill（行内三属性），同样按值命中 */
html [style*="border:1px solid #D9DED9"],html [style*="border:1px solid #d9ded9"]{
  background:#F1F4F2 !important; border-color:#94A29A !important; color:#3C4A44 !important; }

/* ═══════════════════════════════════════════════════════════════════════════
   E26. 教室周历「楼层分表 · 双卡并排」（2026-10-10 Tiffany 定稿：丙C + 五条细化）
   ───────────────────────────────────────────────────────────────────────────
   她原话五条 → 落点：
     ① 「采用C 双卡并排，但是做到所有栏对齐」→ 2302 / 2312 各一张卡左右并排（flex 等分），
        同一「日 × 时段」行的 <tr> 由后端逐行给 inline height（week_row_h），
        **两卡同键同高** → 左右严格对齐，不会各漂各的；两卡 colgroup 完全相同 → 列也齐。
     ② 「时间栏下午1的时间为13:15-15:15」→ 时段列写固定钟点（见 main.py SLOT_DISPLAY）。
     ③ 「LUNCH BREAK 没有时间约束，只写 LUNCH BREAK」→ 午休带只留一条文字带，无时刻、无手柄。
     ④ 「过去的周一/周二自动折叠…只在最旁边显示三角箭头和周一就我们打开」→
        .rwk-dayhead.is-folded 收成一行，只留 ▶ + 周X（点整行开合）。
     ⑤ 「左侧时间栏布局整体居中 + 字体色号优化」→ .rwk-slotname 双向居中，
        时段名深蓝 800 / 钟点灰蓝 600，主次不再倒挂。
   她 13:2x 追加（答完 5 问 + 两条新要求）：
     ⑥「每日教室上端写一个 2302 和 2312 的对应」→ 每天的头行右侧 .rwk-dh-floor 写本卡楼层名。
     ⑦「整个教室如果每天都有了，最上端其实没必要重复」→ **卡头 .rwk-cardhd 整段撤掉**
        （卡顶的教室清单与每天重复）；模板里的 <header class="rwk-cardhd"> 同步删。
     ⑧「教室版面设计请根据截图 2」→ 列头改成**底部圆角 tab**：行底铺楼层色带，
        每格是一枚浅色圆角标签 + 楼层色下边线（要 border-collapse:separate 才能出圆角）。
     ⑨ 折叠态里给「今天」补一枚小标记（她答「可以给今天一个小标记」）。
   ⚠️ 纯 CSS 覆盖层；**回滚 = 删掉本段 + 三壳 ?v= 回到 a8**。
   ═══════════════════════════════════════════════════════════════════════════ */

html .rwk-wrap{
  display:flex; align-items:flex-start; gap:26px; position:relative;
  margin-top:2px;
}
/* 中缝：两卡之间一条柔和竖线（她要求「中间明显区分开来」，但不用 A/B 那种深蓝硬条） */
html .rwk-wrap::before{
  content:''; position:absolute; left:50%; top:6px; bottom:6px; width:1px;
  background:linear-gradient(180deg,rgba(220,211,194,0) 0,rgba(220,211,194,.9) 10%,
    rgba(220,211,194,.9) 90%,rgba(220,211,194,0) 100%);
}
html .rwk-card{
  flex:1 1 0; min-width:0; background:#fff;
  border:1px solid #E3D9C6; border-radius:12px; overflow:hidden;
  box-shadow:0 2px 10px rgba(13,53,104,.05);
}
/* ── 卡头（楼层色标题条）：**已撤**（她 2026-10-10 13:2x）———————————————
   「整个教室如果每天都有了，最上端其实没必要重复」→ 每天的头行本来就有整套教室名，
   卡顶再列一遍是重复。楼层名改到**每天的头行右侧**写（.rwk-dh-floor）。
   原来这里是一整段 .rwk-cardhd（楼层色条 + 教室清单），整段删除；连同模板里的
   <header class="rwk-cardhd"> 一起撤，回滚时两处一起加回。 */

/* ── 表骨架 ─────────────────────────────────────────────────────────── */
/* ⭐ border-collapse 必须是 separate：列头要做「圆角底部 tab」（她 2026-10-10 截图 2 的版式），
   collapse 模式下浏览器会忽略 td 的 border-radius（圆角不生效）。spacing 归零 → 观感与原来一致。 */
html .rwk-table{width:100%; table-layout:fixed; border-collapse:separate; border-spacing:0; font-size:12.5px}
html .rwk-table .rwk-c-time{width:88px}
html .rwk-table th,html .rwk-table td{
  border-bottom:1px solid #EFEAE0; padding:4px 6px; vertical-align:top;
}
/* 折叠时整块 body 隐藏（hidden 属性在 tr 上必须显式兜底） */
html .rwk-table tr[hidden]{display:none}

/* ── 列头（教室名）= 圆角底部 tab（她 2026-10-10 13:2x 截图 2 的版式）──────
   行底铺楼层色带，每间教室是自己一枚**底部圆角**的浅色标签 + 楼层色下边线；
   相邻两枚的圆角之间自然留出一道小缺口，露出下面的楼层色带。 */
html .rwk-card.rwk-f1 .rwk-table .rwk-thead{background:#D9E7F6}
html .rwk-card.rwk-f2 .rwk-table .rwk-thead{background:#F2E1C9}
html .rwk-table .rwk-thead .rwk-corner{
  background:#EDE9E0; color:#0D2B52; font-size:10.5px; font-weight:800;
  text-align:center; letter-spacing:1px; vertical-align:middle;
}
html .rwk-table .rwk-thead .rwk-rm{
  text-align:center; font-size:12.5px; font-weight:800; padding:9px 6px 7px;
  border-bottom:3px solid transparent; border-radius:0 0 14px 14px;
}
html .rwk-card.rwk-f1 .rwk-table .rwk-thead .rwk-rm{
  background:#F7FBFF; color:#1B3F66; border-bottom-color:#2E5C8A;
}
html .rwk-card.rwk-f2 .rwk-table .rwk-thead .rwk-rm{
  background:#FEFAF2; color:#7A4415; border-bottom-color:#B0692F;
}

/* ── 日头行（点整行开合） ────────────────────────────────────────────── */
html .rwk-table .rwk-dayhead{cursor:pointer}
html .rwk-table .rwk-dayhead td{
  height:34px; padding:4px 10px; background:#F4EEE1; border-top:2px solid #DED8C9;
}
html .rwk-table .rwk-dayhead:hover td{background:#EFE9DB}
html .rwk-table .rwk-dayhead.is-past td{background:#F1EEE8; border-top-color:#E2DDD3}
html .rwk-table .rwk-dayhead .rwk-dh-name{font-size:13px; font-weight:800; color:#0D2B52; margin-right:6px}
html .rwk-table .rwk-dayhead.is-past .rwk-dh-name{color:#6E675C}
html .rwk-table .rwk-dayhead .rwk-dh-date{font-size:11.5px; color:#8A8272; margin-right:8px}
html .rwk-table .rwk-dayhead .rwk-dh-today{
  font-style:normal; font-size:11px; font-weight:800; color:#E65100; margin-right:8px;
}
html .rwk-table .rwk-dayhead .rwk-dh-past{font-style:normal; font-size:11px; color:#9A9384; margin-right:8px}
html .rwk-table .rwk-dayhead .rwk-dh-note{font-style:normal; font-size:11px; color:#7A7264}
html .rwk-table .rwk-dayhead .rwk-dh-note.is-off{color:#B3AB9C}
/* ② 每天的头行右侧：写清这一层是 2302 还是 2312（她 2026-10-10 13:2x 截图 1 红框） */
html .rwk-table .rwk-dayhead .rwk-dh-floorcell{text-align:right; vertical-align:middle}
html .rwk-table .rwk-dayhead .rwk-dh-floor{
  font-size:11px; font-weight:800; letter-spacing:.6px; font-variant-numeric:tabular-nums;
}
html .rwk-card.rwk-f1 .rwk-table .rwk-dayhead .rwk-dh-floor{color:#2E5C8A}
html .rwk-card.rwk-f2 .rwk-table .rwk-dayhead .rwk-dh-floor{color:#B0692F}
html .rwk-table .rwk-toggle{
  border:0; background:transparent; color:#0D2B52; font-size:11px; line-height:1;
  cursor:pointer; padding:0 7px 0 0; vertical-align:1px;
}
html .rwk-card.rwk-f2 .rwk-toggle{color:#7A4415}
html .rwk-table .rwk-toggle:hover{color:#E65100}
/* ④ 折叠态：只留「▶ 周X」——日期 / 今天 / 已过去 / 节数全部收掉，行高压到 26px */
html .rwk-table .rwk-dayhead.is-folded td{
  height:26px; padding:1px 10px; background:#F6F2EA; border-top:1px solid #E8E1D4;
}
html .rwk-table .rwk-dayhead.is-folded .rwk-dh-date,
html .rwk-table .rwk-dayhead.is-folded .rwk-dh-today,
html .rwk-table .rwk-dayhead.is-folded .rwk-dh-past,
html .rwk-table .rwk-dayhead.is-folded .rwk-dh-note{display:none}
html .rwk-table .rwk-dayhead.is-folded .rwk-dh-name{font-size:11.5px; font-weight:700; color:#9A9384; margin-right:0}
/* 折叠态里的楼层名一起收掉（折叠行就是要短） */
html .rwk-table .rwk-dayhead.is-folded .rwk-dh-floor{display:none}
/* ⑥ 例外：折叠态里给「今天」补一枚小标记（她 2026-10-10 13:2x 答「可以给今天一个小标记」）
   → 今天若正好没课被折起来，也一眼看得出是今天。写在上面的 display:none 之后才生效。 */
html .rwk-table .rwk-dayhead.is-folded.is-today .rwk-dh-today{
  display:inline-block; margin:0 0 0 6px; padding:0 6px; line-height:15px;
  font-size:10px; font-weight:800; color:#E65100;
  background:#FFF3E6; border:1px solid rgba(230,81,0,.42); border-radius:999px;
}

/* ── 日头下的教室名行（间间对齐，滚动时不看错列） ────────────────────── */
html .rwk-table .rwk-names .rwk-corner2{
  background:#F7F4EC; color:#8A8272; font-size:10.5px; font-weight:700; text-align:center;
}
html .rwk-table .rwk-names .rw-dc{
  height:26px; padding:3px 4px; text-align:center; font-size:12px; font-weight:800; color:#3C4A58;
}
html .rwk-card.rwk-f1 .rwk-table .rwk-names .rw-dc{background:#EAF2FB; color:#1B3F66}
html .rwk-card.rwk-f2 .rwk-table .rwk-names .rw-dc{background:#FBF3E3; color:#7A4415}

/* ── ③ LUNCH BREAK：只写名字的视觉带 ─────────────────────────────────── */
html .rwk-table .rwk-lunch td{
  height:22px; padding:2px 8px; background:#F7F2E8; color:#8A6A3C;
  font-size:10.5px; font-weight:800; letter-spacing:2.4px; text-align:center;
}

/* ── ⑤ 时段列：整体居中 + 字号色号（主次不倒挂） ──────────────────────── */
html .rwk-table .rwk-slotname{
  background:#F7F4EC; text-align:center; vertical-align:middle; padding:4px 6px;
  border-right:1px solid #E9E2D3;
}
html .rwk-card.rwk-f1 .rwk-table .rwk-slotname{background:#F2F7FC; border-right-color:#D8E6F4}
html .rwk-card.rwk-f2 .rwk-table .rwk-slotname{background:#FCF7EF; border-right-color:#EEDFC7}
html .rwk-table .rwk-slotname .slot-name{
  display:block; font-size:12.5px; font-weight:800; color:#0D2B52; line-height:1.25; letter-spacing:.2px;
}
html .rwk-table .rwk-slotname .slot-time{
  display:block; margin-top:2px; font-size:10.5px; font-weight:600; color:#6C7A8C;
  font-variant-numeric:tabular-nums; letter-spacing:.2px;
}

/* ── 课次格：白底（与丙C 一致，楼层靠卡头/教室行区分），行高由后端钉死 ── */
html .rwk-table .rw-cell{
  padding:5px 6px; min-height:0; height:auto; vertical-align:top; background:#fff;
}
/* ⚠️ 落点反馈必须在这里**再写一遍**：上面那条 `html .rwk-table .rw-cell`（0-3-1）
   比皮肤里原有的 `.rw-cell.drop-on`（0-2-0，且没有 !important）特异性高 →
   不补的话拖拽时的高亮底色会被压成白底、只剩内阴影（同 E16 vs E25-① 的坑）。
   取值与文件末尾「落点色唯一定义点」逐字一致，且写在其后。 */
html .rwk-table .rw-cell.drop-on{background:#FCEBE6; border-color:transparent;
  box-shadow:inset 0 0 0 2px var(--v-accent);}
html .rwk-table .rw-cell.drop-bad{background:#FCEDE7; border-color:transparent;
  box-shadow:inset 0 0 0 2px #D4574E;}
html .rwk-table .rw-cell.drop-same{background:var(--v-soft); border-color:transparent;
  box-shadow:inset 0 0 0 2px var(--v-line);}
html .rwk-table .rw-lesson{padding:5px 7px; margin:0 0 6px}
html .rwk-table .rw-lesson:last-child{margin-bottom:0}
html .rwk-table tr>*:last-child{border-right:0}

/* 一间教室都没有时的空态 */
html .rwk-empty{
  flex:1 1 100%; background:#FFF8EC; border:1px dashed #E0C79B; border-radius:10px;
  padding:14px 16px; color:#8A5A1E; font-size:13px;
}


/* ══════════════════════════════════════════════════════════════════════════
   E27. 调课留痕 + 状态色统一（2026-10-10 Tiffany 定稿）

   这一段对应批 29 第 1 步（逻辑）里的「观感」部分，三件事：
     ① 原课位留痕卡 / 整节请假卡 = **同一款**（灰底 + 虚线左条 + 斜纹 + 红字）
        —— 她原话「请假和调课的显示应该一致，都是虚线斜纹款更直观」。
        原来的「请假」是砖红底（--v-leave 系），改后两态共用 `.lv-leave` 这一个类，
        靠右上角徽标（假 / 调）和文案区分，不用再加新 class。
     ② 「不可排」= 橙底 + **往右下**斜纹（45deg）。留痕卡是**往右上**（135deg）——
        方向相反 + 灰橙不同，同页也能一眼分开。她原话「不可排的不要这个，改为往右下的斜纹，橙色」。
     ③ `.rs-to` / `.rs-from` = 卡片里那两行说明（「已调至 10/17（周六）下午2」/「原 10/10（周六）下午2」），
        一律红字加粗（她原话「调课的原 x月x日字体颜色红色」）。

   ⚠️ 全部带 `html ` 前缀 + `!important` + 写在文件最末：
     皮肤里已有 `html .lv-leave{--lesson-color:…!important;…}`（第 718 行）与
     `html .lv-blocked{--lesson-bg:#FFE4C9!important}`（第 1320 行）——
     同权重就比「谁写在后面」，不写在这里会被静默吃掉（E16 vs E25-① 同源事故）。
   ⚠️ 回滚 = 删掉本段。
   ══════════════════════════════════════════════════════════════════════════ */

/* ── E27-① 原课位留痕 / 整节请假 = 灰底 + 虚线左条 + 斜纹 + 红字 ─────────── */
html .lv-leave{
  --lesson-color:#B9B3A6 !important;
  --lesson-bg:#F2F0EA !important;
  --lesson-text:#C62828 !important;
  border-left-color:#B9B3A6 !important;
  border-left-style:dashed !important;
  background-image:repeating-linear-gradient(
    135deg, rgba(13,43,82,.055) 0 6px, transparent 6px 12px) !important;
}
/* 卡内文字统一吃红字（模板里 b / .t / .code / .tch / .room 各有自己的色号） */
html .lv-leave b, html .lv-leave .t, html .lv-leave .code,
html .lv-leave .tch, html .lv-leave .room, html .lv-leave .wk-t,
html .lv-leave .wk-n, html .lv-leave .wk-tch, html .lv-leave .term-pill{
  color:#C62828 !important;
}
/* 月历卡：底色走 .ml-card 自己的 background 规则，必须再点一次名 */
html .tm-cal .ml-card.lv-leave,
html .tm-cal .month-lesson.lv-leave{
  background:#F2F0EA !important;
  background-image:repeating-linear-gradient(
    135deg, rgba(13,43,82,.055) 0 6px, transparent 6px 12px) !important;
  border-left:5px dashed #B9B3A6 !important;
}
html .tm-cal .ml-card.lv-leave .ml-n,
html .tm-cal .ml-card.lv-leave .ml-t,
html .tm-cal .ml-card.lv-leave .ml-l1,
html .tm-cal .ml-card.lv-leave .ml-r,
html .tm-cal .ml-card.lv-leave b{ color:#C62828 !important; }
html .tm-cal .ml-card.lv-leave .ml-b{ background:#F0D7D4 !important; color:#A8201A !important; }
/* 徽标同步改成红字系，跟留痕卡一致 */
html .lv-leave .state-badge.state-leave,
html .lv-leave .state-badge.state-change{ background:#F0D7D4 !important; color:#A8201A !important; }

/* ── E27-② 「不可排」= 橙底 + 往右下斜纹（45deg）───────────────────────────
   E25-①（第 1320 行）已把 --lesson-bg 刷成 #FFE4C9；这里只补「斜纹」这一层，
   所以写同权重（html .lv-blocked）但排在它后面 —— 先后定胜负。 */
html .lv-blocked{
  --lesson-color:#E65100 !important;
  background:#FFE4C9 !important;
  background-image:repeating-linear-gradient(
    45deg, rgba(230,81,0,.16) 0 6px, transparent 6px 12px) !important;
  border-left-style:solid !important;
}
/* 月历卡同样再点一次名（E16 段在这里有 background!important，见第 1148 行） */
html .tm-cal .ml-card.lv-blocked,
html .tm-cal .month-lesson.lv-blocked{
  background:#FFE4C9 !important;
  background-image:repeating-linear-gradient(
    45deg, rgba(230,81,0,.16) 0 6px, transparent 6px 12px) !important;
}
/* 排课台老师档那张只读橙卡，别被上面铺白底压掉 */
html .lesson.qa-lesson.lv-blocked{
  background:#FFE4C9 !important;
  border-color:#E65100 !important;
  background-image:repeating-linear-gradient(
    45deg, rgba(230,81,0,.16) 0 6px, transparent 6px 12px) !important;
}

/* ── E27-③ 留痕说明行（红字）───────────────────────────────────────────────
   「已调至 10/17（周六）下午2」/「原 10/10（周六）下午2」。
   两条只有 moved_to_lesson_id / moved_from_lesson_id 有值时才由模板吐出，
   所以普通课次（两列 NULL）拿到的 DOM 一个节点都不多 —— 734 条存量零变化。 */
html .rs-to, html .rs-from, html .ml-rs{
  display:block; margin-top:1px;
  font-size:10px; font-weight:800; line-height:1.3;
  color:#C62828 !important; white-space:nowrap;
}
/* 每日视图表格里的说明行（td 内 block） */
html td .rs-to, html td .rs-from{ margin-top:2px; }
/* ⚠️ 手机壳（/my）不引本皮肤，本轮也**不在** my_schedule.html 渲染说明行
   —— `/my` 是只读端定稿（铁律①），老师手机端保持零变化。
   后端 _mm_card 已备好 moved_to/moved_from 两个字段，她点头后加两行模板即可。 */


@media (max-width:900px){
  html .rwk-wrap{flex-direction:column}
  html .rwk-wrap::before{display:none}
}


/* ══ E28. 观感收口（2026-10-11 · Tiffany 定稿「批 29 观感那半」）════════════════
   四件事（纯 CSS 覆盖层，DOM 零改动；回滚 = 删掉 E28 整段）：
     ① 雅思 / 托福「没填科目」兜底色：雅思红 #C0392B / 托福蓝 #2F6FA8
     ② 基础 → 强化 → 学术高阶 = 四科原色的「浅 / 原 / 深」三档
     ③ 课次卡左侧色条 4px → 5px（全卡型统一）
     ④ 「已上 / 待上」取 D：已上 = 实心墨绿圆 + 白 ✓；待上 = 只一个空心圈
   ⚠️ 四科**原色本体**的位置与色值一律不动
      （听力 #2A9D8F / 阅读 #D08B4F / 写作 #3F7C97 / 口语 #C1502E）；这里只加深浅两档。
   ⚠️ v3 那套「雅思整体换红、托福整体换蓝」已被她否 —— 别改回去。
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── E28-① 兜底色（课族 class）：.lv-ielts / .lv-toefl 的色值在本文件上方已改。
   这里补的是「没有行内 style 的卡」—— 771 行的 `:not([style])` 会把底色刷成米色，
   所以必须用 !important + 直接属性把它压回来。 */
html .lesson.lv-ielts, html .wk-les.lv-ielts, html .month-lesson.lv-ielts,
html .room-lesson.lv-ielts, html .rw-lesson.lv-ielts{
  --lesson-color:#C0392B !important; --lesson-bg:#FCF0EE !important; --lesson-text:#4A1A15 !important;
  background:#FCF0EE !important; border-left-color:#C0392B !important; color:#4A1A15 !important;
  box-shadow:inset 5px 0 0 #C0392B; }
html .lesson.lv-toefl, html .wk-les.lv-toefl, html .month-lesson.lv-toefl,
html .room-lesson.lv-toefl, html .rw-lesson.lv-toefl{
  --lesson-color:#2F6FA8 !important; --lesson-bg:#EEF5FA !important; --lesson-text:#143A5A !important;
  background:#EEF5FA !important; border-left-color:#2F6FA8 !important; color:#143A5A !important;
  box-shadow:inset 5px 0 0 #2F6FA8; }
html .lesson.lv-ielts b, html .wk-les.lv-ielts b, html .month-lesson.lv-ielts b,
html .lesson.lv-toefl b, html .wk-les.lv-toefl b, html .month-lesson.lv-toefl b{
  color:inherit !important; }
/* 兜底色也会出现在「学期视图 / 月历列表」的行内 pill 上（E11 同款按值命中） */
html [style*="border:1px solid #C0392B"],html [style*="border:1px solid #c0392b"]{
  background:#FCF0EE !important; border-color:#C0392B !important; color:#4A1A15 !important; }
html [style*="border:1px solid #2F6FA8"],html [style*="border:1px solid #2f6fa8"]{
  background:#EEF5FA !important; border-color:#2F6FA8 !important; color:#143A5A !important; }

/* ── E28-② 三档深浅：基础（浅 tint32%）/ 强化（原色，不动）/ 学术高阶（深 shade24%）
   行内 --lesson-color 是 timetable.course_style() 按「旧色相 × 阶段」算出来的，
   这里按值命中换成 A 款的对应档。原色（强化 / 无档）沿用上面已有的映射，一字未动。 */
html [style*="--lesson-color:#749985"]{
  --lesson-color:#6EBCB3 !important;--lesson-bg:#F0F8F7 !important;--lesson-text:#12423C !important; }
html [style*="--lesson-color:#3B634D"],html [style*="--lesson-color:#3b634d"]{
  --lesson-color:#20776D !important;--lesson-bg:#DDEFED !important;--lesson-text:#0D2F2B !important; }
html [style*="--lesson-color:#DAAF86"],html [style*="--lesson-color:#daaf86"]{
  --lesson-color:#DFB087 !important;--lesson-bg:#FCF7F3 !important;--lesson-text:#573A21 !important; }
html [style*="--lesson-color:#A97B4F"],html [style*="--lesson-color:#a97b4f"]{
  --lesson-color:#9E6A3C !important;--lesson-bg:#F7ECE3 !important;--lesson-text:#3E2A18 !important; }
html [style*="--lesson-color:#6C9BC4"],html [style*="--lesson-color:#6c9bc4"]{
  --lesson-color:#7CA6B8 !important;--lesson-bg:#F2F6F8 !important;--lesson-text:#1A343F !important; }
html [style*="--lesson-color:#336691"]{
  --lesson-color:#305E73 !important;--lesson-bg:#E0EAEE !important;--lesson-text:#13252D !important; }
html [style*="--lesson-color:#C6756D"],html [style*="--lesson-color:#c6756d"]{
  --lesson-color:#D58871 !important;--lesson-bg:#FBF3F0 !important;--lesson-text:#512213 !important; }
html [style*="--lesson-color:#943D34"],html [style*="--lesson-color:#943d34"]{
  --lesson-color:#933D23 !important;--lesson-bg:#F5E3DE !important;--lesson-text:#3A180E !important; }
/* 同一批新旧色号在「行内 pill / 单字标签」上的副本（E11 / E12 同款） */
html [style*="border:1px solid #749985"]{background:#F0F8F7 !important;border-color:#6EBCB3 !important;color:#12423C !important;}
html [style*="border:1px solid #DAAF86"],html [style*="border:1px solid #daaf86"]{background:#FCF7F3 !important;border-color:#DFB087 !important;color:#573A21 !important;}
html [style*="border:1px solid #6C9BC4"],html [style*="border:1px solid #6c9bc4"]{background:#F2F6F8 !important;border-color:#7CA6B8 !important;color:#1A343F !important;}
html [style*="border:1px solid #C6756D"],html [style*="border:1px solid #c6756d"]{background:#FBF3F0 !important;border-color:#D58871 !important;color:#512213 !important;}
html [style*="border:1px solid #3B634D"],html [style*="border:1px solid #3b634d"]{background:#DDEFED !important;border-color:#20776D !important;color:#0D2F2B !important;}
html [style*="border:1px solid #A97B4F"],html [style*="border:1px solid #a97b4f"]{background:#F7ECE3 !important;border-color:#9E6A3C !important;color:#3E2A18 !important;}
html [style*="border:1px solid #336691"]{background:#E0EAEE !important;border-color:#305E73 !important;color:#13252D !important;}
html [style*="border:1px solid #943D34"],html [style*="border:1px solid #943d34"]{background:#F5E3DE !important;border-color:#933D23 !important;color:#3A180E !important;}
html [style*="color:#749985"]{color:#6EBCB3 !important;}
html [style*="color:#DAAF86"],html [style*="color:#daaf86"]{color:#DFB087 !important;}
html [style*="color:#6C9BC4"],html [style*="color:#6c9bc4"]{color:#7CA6B8 !important;}
html [style*="color:#C6756D"],html [style*="color:#c6756d"]{color:#D58871 !important;}
html [style*="color:#3B634D"],html [style*="color:#3b634d"]{color:#20776D !important;}
html [style*="color:#A97B4F"],html [style*="color:#a97b4f"]{color:#9E6A3C !important;}
html [style*="color:#336691"]{color:#305E73 !important;}
html [style*="color:#943D34"],html [style*="color:#943d34"]{color:#933D23 !important;}

/* ── E28-③ 色条 4px → 5px ─────────────────────────────────────────────────── */
html .lesson, html .wk-les, html .month-lesson, html .cd2-les, html .room-lesson{
  border-left-width:5px; }
html .tm-cal .month-lesson{ border-left-width:5px; }
html .rw-lesson{ box-shadow:inset 5px 0 0 var(--lesson-color,#9CA8CC); }
html .rw-lesson.clickable:hover{
  box-shadow:inset 5px 0 0 var(--lesson-color,#9CA8CC),0 3px 10px rgba(13,53,104,.16); }

/* ── E28-④ 「已上 / 待上」取 D ──────────────────────────────────────────────
   只作用于**课次卡里**的徽标；`.schedule-legend`（图例）与表格 td 里的文字徽标不动。 */
html .lesson .state-badge.state-done,
html .wk-les .state-badge.state-done,
html .month-lesson .state-badge.state-done,
html .cd2-les .state-badge.state-done{
  display:inline-flex !important; align-items:center; justify-content:center;
  width:16px !important; height:16px !important; min-width:16px !important; max-width:16px !important;
  padding:0 !important; border:0 !important; border-radius:50% !important;
  background:#2F7A5A !important; color:#fff !important;
  font-size:0 !important; line-height:1 !important; vertical-align:-3px; }
html .lesson .state-badge.state-done::after,
html .wk-les .state-badge.state-done::after,
html .month-lesson .state-badge.state-done::after,
html .cd2-les .state-badge.state-done::after{
  content:"\2713"; font-size:10.5px !important; font-weight:900 !important; line-height:1; }
html .lesson .state-badge.state-pending,
html .wk-les .state-badge.state-pending,
html .month-lesson .state-badge.state-pending,
html .cd2-les .state-badge.state-pending{
  display:inline-flex !important; align-items:center; justify-content:center;
  width:16px !important; height:16px !important; min-width:16px !important; max-width:16px !important;
  padding:0 !important; border:2px solid #B9B3A6 !important; border-radius:50% !important;
  background:transparent !important; color:transparent !important;
  font-size:0 !important; line-height:1 !important; vertical-align:-3px; }
