:root{  /* 批次 W：版式 A（舒适收窄） */
  --teal:#345282; --teal-d:#345282; --beige:#edf2f8; --bluegray:#4f84a1;
  --ink:#1f2d3a; --muted:#6c7888; --line:#e6dcc9; --bg:#f3f6fa; --card:#fff;
  --ok:#0D3568; --warn:#e0913a; --danger:#d4574e; --accent:#CE9660;
  --orange:#CE9660; --orange-d:#C93E00;
}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,"PingFang SC","Microsoft YaHei",Arial,sans-serif;
  color:var(--ink);background:var(--bg);font-size:15px;line-height:1.55}
a{color:var(--teal);text-decoration:none}

/* ── 布局（顶部纵向：header 最上，tab 栏其次） ── */
.layout{display:flex;flex-direction:column;min-height:100vh}
.sidebar{background:var(--teal);color:#dbe7ec;display:flex;flex-direction:column;
  position:sticky;top:0;z-index:20;box-shadow:0 2px 12px rgba(0,0,0,.18)}
/* 左轨：品牌字 / tab 字 / 页标题 / 正文 共用同一条左边缘，
   数值 = .page 的内容左边缘 max(36px, (100%-1180px)/2+36px)
   —— 批次 W：版式 A（舒适收窄），上限 1180、内距 36 */
.brandrow{display:flex;align-items:center;gap:14px;
  padding:12px max(36px, calc((100% - 1180px) / 2 + 36px))}
.brand{font-size:22px;font-weight:800;color:#fff;letter-spacing:.5px;white-space:nowrap}
.brand span{font-size:22px;font-weight:800;color:var(--orange);letter-spacing:.5px;margin-left:0}
/* tab 文字左对齐左轨：a 自身有 16px 内边距，故此处减掉 16 */
.sidebar nav{padding:7px max(20px, calc((100% - 1180px) / 2 + 20px));display:flex;flex-direction:row;gap:8px;
  justify-content:flex-start;
  overflow-x:auto;border-top:1px solid rgba(255,255,255,.12)}
.sidebar nav a{color:#d8e2ee;padding:9px 16px;border-radius:9px;font-size:16px;
  transition:.15s;white-space:nowrap;text-align:center}
.sidebar nav a:hover{background:rgba(255,255,255,.09);color:#fff}
.sidebar nav a.active{background:rgba(255,255,255,.14);color:#fff;font-weight:500;box-shadow:inset 0 -2px 0 var(--orange)}
.userbox{margin-left:auto;display:flex;align-items:center;gap:12px;white-space:nowrap}
.uname{font-size:16px;font-weight:600;color:#fff}
.urole{font-size:14px;color:#9fc0cd}
.logout{display:inline-block;color:#cfe0e7;font-size:14px;border:1px solid rgba(255,255,255,.25);
  padding:5px 14px;border-radius:6px}
.logout:hover{background:rgba(255,255,255,.1);color:#fff}

.content{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{display:flex;align-items:center;gap:14px;
  padding:14px max(36px, calc((100% - 1180px) / 2 + 36px));background:var(--card);
  border-bottom:1px solid var(--line)}
.topbar h1{font-size:19px;margin:0;flex:1;color:var(--teal);font-weight:800}
.heading-sub{display:inline-block;margin-left:8px;color:var(--muted);font-size:13px;font-weight:600;vertical-align:middle}
.topbar .actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.menubtn{display:none;font-size:22px;cursor:pointer}
.page{padding:26px 36px;max-width:1180px;margin:0 auto;width:100%}

/* ── 卡片 / 统计 ── */
.home-hero{background:linear-gradient(135deg,#345282,#0D3568);color:#fff;border-radius:18px;
  padding:26px 30px;margin-bottom:18px;box-shadow:0 16px 36px rgba(52,82,130,.18)}
.hero-kicker{display:inline-block;background:rgba(65,121,157,.18);color:#CE9660;border:1px solid rgba(206,150,96,.35);
  border-radius:999px;padding:4px 12px;font-size:13px;font-weight:800;letter-spacing:2px;margin-bottom:12px}
.home-hero h2{margin:0 0 8px;font-size:28px;line-height:1.2}
.home-hero p{margin:0;max-width:760px;color:#e6edf6;font-size:15px}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:16px;margin-bottom:24px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px 20px;box-shadow:0 8px 22px rgba(13,53,104,.05)}
.stat .num{font-size:30px;font-weight:700;color:var(--teal)}
.stat .lbl{color:var(--muted);font-size:14px;margin-top:2px}
.panel{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:20px;margin-bottom:20px;box-shadow:0 8px 22px rgba(13,53,104,.05)}
.panel h2{margin:0 0 14px;font-size:16px}

/* ── 按钮 ── */
.btn{display:inline-flex;align-items:center;gap:6px;background:var(--orange);color:#fff;border:none;
  padding:8px 16px;border-radius:8px;font-size:15px;cursor:pointer;font-family:inherit;
  white-space:nowrap}   /* 窄格里按钮不许竖排断字（2026-09-25：教室页「保存」被拆成上下两字） */
.btn:hover{background:var(--orange-d)}
.btn:disabled{opacity:.62;cursor:not-allowed}
.btn:disabled:hover{background:var(--orange)}
.btn.ghost{background:#fff;color:var(--teal);border:1px solid var(--teal)}
.btn.sm{padding:5px 10px;font-size:13px}
.btn.danger{background:var(--danger)}
.btn.gray{background:#eef1f4;color:#555}

/* ── 表格 ── */
table.grid{width:100%;border-collapse:collapse;background:var(--card);border-radius:12px;overflow:hidden}
.grid th{background:#f6f1e4;text-align:left;padding:11px 12px;font-size:13px;color:var(--muted);
  font-weight:600;border-bottom:1px solid var(--line);white-space:nowrap}
.grid td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
.grid tr:last-child td{border-bottom:none}
.grid tr:hover td{background:#fbf7ec}
.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:12px}
.tablewrap>.grid{min-width:860px}

/* ── 标签 / 状态 ── */
.tag{display:inline-block;padding:2px 9px;border-radius:20px;font-size:13px;font-weight:600}
.t-在读,.t-已完成{background:#e3f4ea;color:#2e7d4f}
.t-咨询中,.t-待上课{background:#e7eefaff;color:#3a6abf}
.t-已结束{background:#eceff2;color:#7f796e}
.t-已退费,.t-请假{background:#fdecea;color:#C94B43}
.t-调课{background:#fbf2e0;color:#b07a25}
.inline-status-form{margin:0}
.status-select{border:0;border-radius:20px;padding:3px 22px 3px 9px;font:600 13px inherit;
  max-width:94px;cursor:pointer;appearance:auto}

/* ── 表单 ── */
form.vform{display:grid;grid-template-columns:repeat(2,1fr);gap:16px 20px;max-width:760px}
form.vform .full{grid-column:1/-1}
.field label{display:block;font-size:14px;color:var(--muted);margin-bottom:5px;font-weight:600}
.field input,.field select,.field textarea{width:100%;padding:9px 11px;border:1px solid #e6dcc9;
  border-radius:8px;font-size:15px;font-family:inherit;background:#fff}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--teal);
  box-shadow:0 0 0 3px rgba(41,97,120,.12)}
.field textarea{min-height:80px;resize:vertical}
.formbar{display:flex;gap:10px;margin-top:8px}

/* ── 多选标签(chips) ── */
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{position:relative;cursor:pointer;user-select:none}
.chip input{position:absolute;opacity:0;width:0;height:0}
.chip span{display:inline-block;padding:7px 14px;border:1px solid #e6dcc9;border-radius:20px;
  font-size:14px;background:#fff;color:#555;transition:.12s;line-height:1}
.chip input:checked + span{background:var(--teal);color:#fff;border-color:var(--teal)}
.chip:hover span{border-color:var(--teal)}
.chip-busy{display:inline-block;padding:7px 14px;border:1px dashed #d9b3b0;border-radius:20px;
  font-size:14px;background:#fbeeec;color:#b06a63;line-height:1;cursor:not-allowed}
.chip.star span{border-color:#e0913a;background:#fff7ea;color:#a8651a}
.chip.star input:checked + span{background:#296178;color:#fff;border-color:#296178}
.roomrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.roomrow label{display:inline-flex;align-items:center;gap:3px;font-size:13px;color:var(--muted)}
.roomrow input{padding:6px 8px;border:1px solid #e6dcc9;border-radius:6px;font-size:14px}
.chip-search{width:100%;max-width:320px;padding:8px 11px;border:1px solid #e6dcc9;border-radius:8px;
  font-size:15px;margin-bottom:8px;display:block}
.chips.scroll{max-height:160px;overflow-y:auto;padding:8px;border:1px solid #eef0f3;border-radius:8px;background:#fbf7ec}

/* ── 搜索式下拉多选 ── */
.combo{position:relative;border:1px solid #e6dcc9;border-radius:8px;padding:6px 8px;background:#fff}
.combo-tags{display:flex;flex-wrap:wrap;gap:6px}
.combo-tags:empty{display:none}
.combo-tag{background:var(--teal);color:#fff;border-radius:16px;padding:3px 6px 3px 11px;font-size:14px;
  display:inline-flex;align-items:center;gap:6px;margin-bottom:4px}
.combo-tag b{cursor:pointer;font-weight:700;font-size:16px;line-height:1;opacity:.85}
.combo-tag b:hover{opacity:1}
.combo-input{border:none;outline:none;padding:6px 4px;font-size:15px;width:100%;font-family:inherit;background:transparent}
.combo-list{position:absolute;left:0;right:0;top:100%;z-index:30;background:#fff;border:1px solid #e6dcc9;
  border-radius:10px;margin-top:4px;max-height:220px;overflow-y:auto;box-shadow:0 10px 28px rgba(0,0,0,.14);display:none}
.combo-list.show{display:block}
.combo-opt{display:flex;align-items:center;gap:9px;padding:9px 13px;cursor:pointer;font-size:15px;border-bottom:1px solid #f6f1e4}
.combo-opt:last-child{border-bottom:none}
.combo-opt:hover{background:#f3f6f8}
.combo-opt input{margin:0;width:16px;height:16px;accent-color:var(--teal)}

/* ── 重复排课 ── */
.repeat-box{border:1px dashed #e6dcc9;border-radius:10px;padding:14px;background:#fbf7ec}
.repeat-box .wd{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.repeat-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cal{background:#fff;border:1px solid #e6e8ec;border-radius:10px;padding:12px;max-width:360px}
.cal-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.cal-head button{border:none;background:#eef1f4;border-radius:6px;width:28px;height:28px;cursor:pointer;font-size:16px;line-height:1}
.cal-head button:hover{background:#eae7e1}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.cal-wd{text-align:center;font-size:13px;color:var(--muted);padding:3px 0}
.cal-day{text-align:center;padding:7px 0;border-radius:7px;cursor:pointer;font-size:14px;border:1px solid transparent;user-select:none}
.cal-day:hover{background:#f8f3e8}
.cal-day.on{background:var(--teal);color:#fff;font-weight:600}
.cal-day.conflict{background:#fff1f0;border-color:#e19a94;color:#a33d35;font-weight:700}
.cal-day.on.conflict{background:#c85d55;color:#fff;border-color:#b64d45}
.cal-day.disabled{background:#eef0f1;color:#a49e95;border-color:#d7dde0;cursor:not-allowed;text-decoration:line-through}
.occ-row{display:flex;align-items:center;gap:8px;padding:5px 8px;border:1px solid #eceef1;border-radius:8px;margin-bottom:6px;background:#fff;flex-wrap:wrap}
.occ-row.conflict{border-color:#e8b0aa;background:#fff8f7;flex-wrap:wrap}
.occ-conflict-text{flex:1 1 100%;font-size:13px;color:#ad463e;margin-left:100px}
.occ-date{min-width:92px;font-size:14px;font-weight:600;color:#3a4a5a}
.occ-t{width:78px;padding:5px 8px;border:1px solid #e6dcc9;border-radius:6px;font-size:14px}
.occ-mini{width:104px;padding:5px 8px;border:1px solid #e6dcc9;border-radius:6px;font-size:13px}
.occ-subj{width:132px}.occ-teacher{width:112px}.occ-room{width:96px}
.occ-add{padding:4px 8px;font-size:12px}
.occ-x{margin-left:auto;cursor:pointer;color:#C94B43;font-weight:700;font-size:18px;line-height:1;padding:0 4px}
.auto-study-row{margin-top:12px;padding:10px;border:1px dashed #cbd7df;border-radius:10px;background:#f8fbfc;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.auto-study-row label{font-size:14px;color:#4a5a67;margin:0}
.auto-study-row input:not([type="checkbox"]){width:118px;padding:7px 9px}
.auto-study-row small{color:var(--muted);font-size:13px}
.auto-study-toggle{background:#fff}

/* ── 颜色选择 ── */
.swatches{display:flex;flex-wrap:wrap;gap:8px}
.swatch{width:30px;height:30px;border-radius:8px;cursor:pointer;position:relative;border:2px solid transparent;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
.swatch input{position:absolute;opacity:0;width:0;height:0}
.swatch:has(input:checked){border-color:#296178;box-shadow:0 0 0 2px #fff,0 0 0 4px #296178}
.dot{display:inline-block;width:14px;height:14px;border-radius:4px;vertical-align:-2px;margin-right:6px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1)}

/* ── 筛选条 ── */
.filterbar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px;align-items:center}
.filterbar input,.filterbar select{padding:8px 11px;border:1px solid #e6dcc9;border-radius:8px;font-size:15px}
.bulkbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:-4px 0 14px;
  background:#fff8f7;border:1px solid #f0d3d0;border-radius:10px;padding:9px 11px}
.bulkbar form{margin:0}.bulkbar span{color:#8a6662;font-size:13px}
.student-first-bar{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;background:#f4f1e9;
  border:1px solid #d5e7eb;border-radius:12px;padding:12px 14px;margin-bottom:16px}
.student-first-bar label{font-size:13px;color:var(--muted);font-weight:600}
.student-first-bar input{display:block;margin-top:5px;padding:8px 10px;border:1px solid #e6dcc9;
  border-radius:8px;background:#fff;font:inherit;min-width:220px}
.student-first-bar span{color:var(--teal);font-size:14px;font-weight:700}
.student-availability-box{background:#f7fbfc;border:1px solid #d8e8ed;border-radius:12px;padding:12px 14px}
.student-availability-box label{display:block;margin-bottom:7px}
.student-availability-status{font-size:14px;color:var(--muted);line-height:1.45}
.student-availability-status.ok{color:#257a50;font-weight:700}
.student-availability-status.warn{color:#b34a42;font-weight:700}
.student-upcoming{margin-top:9px;display:grid;gap:6px}
.student-upcoming small{color:var(--muted)}
.student-upcoming-title{font-size:13px;color:var(--teal);font-weight:700}
.student-upcoming-item{font-size:13px;color:#51646b;background:#fff;border:1px solid #e2edf0;border-radius:8px;padding:6px 8px}
.form-note{display:block;margin-top:7px;color:var(--muted);font-size:13px}
.form-note.warn{color:#a66a18}

/* ── 班课 / VIP 卡片 ── */
.class-board,.vip-board{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.class-card,.vip-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px;
  box-shadow:0 8px 22px rgba(13,53,104,.06);min-width:0;overflow:hidden}
.class-card-head,.vip-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}
.class-card h2,.vip-card h2{margin:0;color:var(--teal);font-size:17px;line-height:1.25}
.class-card p,.vip-card p{margin:4px 0 0;color:var(--muted);font-size:13px}
.class-count,.vip-count{background:#fff1e9;color:var(--orange);border-radius:999px;padding:3px 10px;
  font-size:13px;font-weight:800;white-space:nowrap}
.class-meta,.vip-meta{display:grid;gap:7px;margin:10px 0 12px}
.class-meta span,.vip-meta span{background:#f5f8fb;border:1px solid #e5edf3;border-radius:8px;
  padding:7px 9px;color:#405467;font-size:13px}
.class-progress,.vip-progress{margin:12px 0}
.class-progress>div:first-child,.vip-progress>div:first-child{display:flex;justify-content:space-between;gap:10px;
  color:#2f6242;font-size:13px;align-items:center}
.class-progress span,.vip-progress span{color:var(--muted);font-weight:600;text-align:right}
.progressbar{height:7px;background:#ede5d6;border-radius:999px;overflow:hidden;margin-top:8px}
.progressbar i{display:block;height:100%;background:#31a45b;border-radius:999px}
.class-students{border-top:1px dashed var(--line);padding-top:10px;margin-top:10px}
.class-students summary{cursor:pointer;color:var(--teal);font-size:13px;font-weight:800}
.class-students p{font-size:14px;color:#405467;line-height:1.7;margin:8px 0 0}
.class-actions,.vip-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:12px}
.class-actions form{margin:0}
.vip-overview{margin-bottom:16px}
.vip-overview h2{margin:0 0 10px;color:var(--teal);font-size:16px}
.vip-card.current{border-color:var(--orange);box-shadow:0 10px 26px rgba(65,121,157,.12)}

/* ── 课表周历 ── */
.weeknav{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.weeknav .lbl{font-weight:600;font-size:16px}
.schedule-view-tabs{display:inline-flex;gap:6px;align-items:center;flex-wrap:wrap}
.schedule-list-wrap{margin-top:8px}
.schedule-list{min-width:980px}
.muted-mini{color:var(--muted);font-size:13px;margin-top:2px;font-weight:500}
.student-picker{position:relative;width:310px}
.student-picker-search{width:100%;padding:9px 12px;border:1px solid #e6dcc9;border-radius:9px;
  background:#fff;font-size:15px;font-family:inherit;outline:none}
.student-picker-search:focus{border-color:var(--teal);box-shadow:0 0 0 3px rgba(41,97,120,.12)}
.student-picker-list{display:none;position:absolute;top:calc(100% + 5px);left:0;right:0;z-index:40;
  max-height:360px;overflow-y:auto;background:#fff;border:1px solid #e3ded4;border-radius:10px;
  box-shadow:0 12px 30px rgba(20,45,55,.18)}
.student-picker.open .student-picker-list{display:block}
.student-picker-group-title{position:sticky;top:0;background:#f3f0ea;color:#46616b;
  padding:6px 11px;font-size:13px;font-weight:700;z-index:1}
.student-picker-option{display:block;width:100%;border:0;border-bottom:1px solid #edf1f2;background:#fff;
  padding:9px 12px;text-align:left;font-family:inherit;font-size:14px;cursor:pointer;color:#26383f}
.student-picker-option:hover,.student-picker-option.current{background:#f0f7f9;color:var(--teal)}
.student-picker-option.current{font-weight:700}
.tt-sub{color:var(--muted);margin:-6px 0 16px;font-size:14px}
.calendar-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}
.calendar{width:100%;border-collapse:collapse;table-layout:fixed;background:#fff;
  border:1px solid var(--line);border-radius:10px;overflow:hidden;margin-bottom:26px}
.calendar th,.calendar td{border:1px solid #eceef1;padding:0;text-align:center;vertical-align:top}
.calendar thead.teacher th{background:var(--beige);color:var(--bluegray)}
.calendar thead.student th{background:var(--teal);color:#fff}
.calendar thead th{padding:6px 3px;font-size:13px;font-weight:600}
.calendar thead .datecell{font-size:13px;font-weight:500;padding:4px;background:#f3eddf;color:#4a5b73}
.calendar thead.student .datecell{background:#dbe9f3;color:#2f5496}
.calendar .slotname{width:78px;background:#fbf7ec;font-size:12px;color:#566;padding:5px;font-weight:600}
.calendar .slotname small{display:block;color:#a39b8c;font-weight:400;font-size:11px}
.calendar td.day{height:40px;padding:2px}
.calendar td.wknd{background:#fcf8ef}
.lesson{--lesson-color:#4f84a1;--lesson-bg:#edf5f8;--lesson-text:#1f2d3a;
  position:relative;border-radius:7px;padding:4px 30px 4px 7px;margin:1.5px 0;font-size:12px;
  font-weight:700;line-height:1.25;text-align:left;cursor:pointer;background:var(--lesson-bg);
  color:var(--lesson-text);border-left:4px solid var(--lesson-color);box-shadow:inset 0 0 0 1px rgba(79,132,161,.12)}
.lesson:hover{box-shadow:0 4px 12px rgba(32,70,82,.16);transform:translateY(-1px);z-index:4}
.lesson:focus{outline:2px solid rgba(41,97,120,.35);outline-offset:1px}
.lesson-delete-form{position:absolute;right:4px;top:4px;margin:0}
.lesson-delete-btn{border:0;border-radius:8px;background:rgba(255,255,255,.82);color:#9b3a34;
  padding:1px 5px;font:700 11px inherit;line-height:1.5;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.lesson-delete-btn:hover{background:#ffe8e5}
.calendar td.day .cell-extra{display:none}
.calendar td.day.cell-expanded .cell-extra,.calendar td.day:hover .cell-extra{display:block}
.cell-more{width:100%;border:1px dashed #c9bfb0;background:#f6f2e9;color:var(--teal);
  border-radius:6px;padding:3px 4px;margin-top:2px;font:600 12px inherit;cursor:pointer}
.cell-more:hover{background:#f3efe7}
.cell-expanded .cell-more,.month-expanded .month-more{background:#f3efe7;border-style:solid}
.lesson .t{font-weight:700;font-size:12px;color:#CE9660;display:block}
.lesson .tch{font-weight:400;font-size:11px;opacity:.7;display:block}
.lesson.done{filter:saturate(.55);opacity:.66}
.lesson.done b{text-decoration:line-through;text-decoration-color:rgba(39,118,74,.55)}
/* 班型 / 课程配色：左侧粗线 + 右侧浅色底 */
.lv-tzs{--lesson-color:#244D7D;--lesson-bg:#f2efe9;--lesson-text:#102338}
.lv-tz1{--lesson-color:#7DAEDC;--lesson-bg:#F2F7FC;--lesson-text:#384E63}
.lv-tz2{--lesson-color:#477DBB;--lesson-bg:#EDF2F8;--lesson-text:#203854}
.lv-tz3{--lesson-color:#41799D;--lesson-bg:#ECF2F5;--lesson-text:#1D3647}
.lv-tz4{--lesson-color:#345282;--lesson-bg:#EBEEF2;--lesson-text:#17253A}
.lv-ielts{--lesson-color:#41799D;--lesson-bg:#ECF2F5;--lesson-text:#1D3647}
.lv-toefl{--lesson-color:#CE9660;--lesson-bg:#FAF4EF;--lesson-text:#5D442B}
.lv-ref{--lesson-color:#A65A99;--lesson-bg:#F6EEF5;--lesson-text:#4B2845}
.lv-g9{--lesson-color:#6B8F28;--lesson-bg:#F0F4EA;--lesson-text:#304012}
.lv-vip{--lesson-color:#EFE8DD;--lesson-bg:#FDFDFC;--lesson-text:#6C6863}
.lv-leave{--lesson-color:#C94B43;--lesson-bg:#FAEDEC;--lesson-text:#5A221E}
.lv-blocked{--lesson-color:#9A3F3F;--lesson-bg:#F5ECEC;--lesson-text:#451C1C;border-style:dashed}
.lv-default{--lesson-color:#9CA8CC;--lesson-bg:#F5F6FA;--lesson-text:#464C5C}
/* 雅思与预备课细分 */
.sub-speak{--lesson-color:#B44A3F;--lesson-bg:#F8EDEC;--lesson-text:#51211C}
.sub-listen{--lesson-color:#48795E;--lesson-bg:#EDF2EF;--lesson-text:#20362A}
.sub-write{--lesson-color:#3E7CB1;--lesson-bg:#ECF2F7;--lesson-text:#1C3850}
.sub-read{--lesson-color:#CE9660;--lesson-bg:#FAF4EF;--lesson-text:#5D442B}
.sub-prep-readwrite{--lesson-color:#345282;--lesson-bg:#EBEEF2;--lesson-text:#17253A}
.sub-prep-listenspeak{--lesson-color:#2E8C94;--lesson-bg:#f4f0ea;--lesson-text:#153F43}
.sub-study{--lesson-color:#D9DED9;--lesson-bg:#FBFCFB;--lesson-text:#626462}
.sub-mock{--lesson-color:#5F4525;--lesson-bg:#EFECE9;--lesson-text:#2B1F11}
.lesson .code{display:block;font-weight:400;font-size:11px;opacity:.75}
.lesson .stu{display:block;font-weight:600;font-size:12px;margin-top:1px}
.lesson .room{display:block;font-weight:400;font-size:11px;opacity:.8}
.lesson .leave-note{display:block;width:max-content;max-width:100%;margin-top:3px;border-radius:9px;
  padding:1px 6px;background:rgba(255,255,255,.78);color:#a43732;font-size:11px;font-weight:700}
.lesson .progress,.wk-les .progress,.cd2-les .progress,.cd2-dl-row .progress,.term-row .progress{display:inline-block;margin-left:5px;padding:1px 5px;border-radius:9px;
  background:rgba(255,255,255,.72);color:#344b55;font-size:11px;font-weight:700}
.schedule-legend{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:-5px 0 12px}
.schedule-summary{display:grid;grid-template-columns:repeat(2,minmax(120px,180px));gap:10px;margin:-4px 0 14px}
.schedule-summary>div{background:#fff;border:1px solid #e6dcc9;border-radius:12px;padding:10px 12px}
.schedule-summary span{display:block;color:#75706a;font-size:13px;margin-bottom:2px}
.schedule-summary b{font-size:22px;color:var(--teal)}
.state-badge{display:inline-block;width:max-content;border-radius:10px;padding:1px 6px;
  font-size:11px;font-weight:700;line-height:1.45;white-space:nowrap}
.lesson>.state-badge{margin-top:3px}
.state-pending{background:#efeadf;color:#41648b;border:1px solid #bdcce0}
.state-done{background:#e3f3e9;color:#27764a;border:1px solid #add5bc}
.state-leave{background:#fde7e5;color:#b1423a;border:1px solid #e6a49f}
.state-change{background:#fff0d7;color:#a66a18;border:1px solid #e8c489}
.holiday-pill{display:inline-block;border-radius:10px;padding:1px 6px;background:#e6dcc9;color:#8F3F3F;
  border:1px solid #e0d7c6;font-size:11px;font-weight:700;line-height:1.45;white-space:nowrap}
.holidayrow td{background:#f6f7f8!important}
.holidaycell{text-align:left!important;padding:7px 9px!important;color:#8F3F3F;font-size:13px}
.holidaycell span{display:inline-block;background:#e6dcc9;border:1px solid #e0d7c6;border-radius:14px;
  padding:2px 8px;margin:2px}
/* 课表每日备注 */
.calendar tr.noterow td{background:#fffdf5;height:30px;padding:3px}
.calendar td.notecell{cursor:pointer;vertical-align:middle}
.calendar td.notecell:hover{background:#fff6da}
.calendar td.notecell .note{font-size:12px;color:#8a6d1f;line-height:1.25;text-align:left;white-space:pre-wrap}
.calendar td.notecell .noteadd{color:#d8c49a;font-size:15px}
.calendar td.notecell:hover .noteadd{color:#b89b50}

/* ── 课表月视图 ── */
.month-schedule{background:#eae6df;border:1px solid #eae6df;border-radius:12px;overflow:auto;
  max-width:100%;-webkit-overflow-scrolling:touch}
.month-head,.month-row{display:grid;grid-template-columns:repeat(7,minmax(130px,1fr));gap:1px;min-width:980px}
.month-head>div{background:#f3efe7;text-align:center;font-weight:700;color:#506a73;padding:9px;font-size:14px}
.month-day{background:#fff;min-height:138px;padding:7px;overflow:hidden}
.month-day:hover,.month-day.month-expanded{overflow:visible;position:relative;z-index:6}
.month-day.outside{background:#f6f7f8;color:#ada79f}
.month-day.today{box-shadow:inset 0 0 0 2px #CE9660}
.month-day.holiday{background:#f7f7f4}
.month-day header{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px}
.month-day header b{font-size:14px;color:#34535e}.month-day header span{font-size:11px;color:#fff;
  background:var(--teal);border-radius:9px;padding:1px 6px}
.holiday-note{font-size:12px;color:#8F3F3F;background:#e6dcc9;border-radius:7px;padding:3px 5px;margin-bottom:5px}
/* 法定节假日：高光落在「列表」的日期标签上（Tiffany 2026-09-27 定口径——日历里已有
   「假期」标注很明显，列表是纯数据，日期需要透橙高光）；月历格本身不再加橙底。
   2026-09-28 重申：只要日期那一行高光（align-self:flex-start 防止被 flex 拉成整列） */
.term-day.holiday .term-day-date{background:rgba(206,150,96,.18);border-radius:6px;padding:1px 6px;align-self:flex-start}
.term-hol{font-size:11px;color:#B7791F;margin-left:6px;font-weight:400;white-space:nowrap}
.cd2-dl-day.holiday .cd2-dl-date b{background:rgba(206,150,96,.18);border-radius:6px;padding:1px 6px;align-self:flex-start;width:fit-content}
.dl-hol{font-size:11px;color:#B7791F;font-style:normal;margin-left:6px;white-space:nowrap}
.month-lesson{padding:4px 5px;margin:3px 0;font-size:12px}
.month-lesson .t{font-size:11px;color:#CE9660;font-weight:700}.month-lesson .lesson-delete-form{display:none}
.month-day.wknd{background:#FBFCFE!important}
.month-day header b{color:#6a6459;font-weight:600}
.month-lesson{text-decoration:none;display:block;color:inherit}
/* 方案 B：月历日期格同样平时干净，鼠标移上去才浮现淡「＋」（纯提示）
   ⚠️ 只给「能排课」的页面用（排课台 .lp-cal）；老师课表 / 学生课表点格子不能排课，
   所以那里不显示这个 ＋，避免给出一个按了没反应的假入口。 */
.month-schedule.lp-cal .month-day{cursor:pointer}
.month-schedule.lp-cal .month-day::after{
  content:"＋"; position:absolute; right:6px; top:6px;
  width:20px; height:20px; line-height:18px; text-align:center;
  border-radius:10px; border:1px dashed #c9bfb0; background:#fff;
  color:#938c7e; font-size:13px;
  opacity:0; pointer-events:none; transition:opacity .12s ease}
.month-schedule.lp-cal .month-day:hover::after{ opacity:1 }
.month-day .month-extra{display:none}
.month-day.month-expanded .month-extra,.month-day:hover .month-extra{display:block}
.month-more{width:100%;border:1px dashed #c9bfb0;background:#f6f2e9;color:var(--teal);
  border-radius:6px;padding:3px 4px;margin-top:3px;font:700 12px inherit;cursor:pointer;text-align:center}
.month-more:hover{background:#f3efe7}

.lesson-detail-mask{position:fixed;inset:0;background:rgba(18,34,42,.22);z-index:80}
.lesson-detail-panel{position:fixed;right:22px;top:86px;width:min(360px,calc(100vw - 32px));max-height:calc(100vh - 120px);
  overflow:auto;background:#fff;border:1px solid #e6dcc9;border-radius:16px;box-shadow:0 20px 60px rgba(13,37,48,.28);
  z-index:81;padding:18px}
.lesson-detail-close{position:absolute;right:12px;top:10px;border:0;background:#f0f3f5;color:#6a655d;
  border-radius:50%;width:28px;height:28px;font-size:20px;line-height:1;cursor:pointer}
.lesson-detail-panel h2{margin:0 34px 12px 0;font-size:18px;color:#234d5b}
.lesson-detail-body{display:grid;gap:8px}
.lesson-detail-body div{display:grid;grid-template-columns:58px 1fr;gap:8px;border-bottom:1px dashed #efebe5;padding-bottom:7px}
.lesson-detail-body span{color:#75706a;font-size:13px}.lesson-detail-body b{font-size:14px;color:#26383f}
.lesson-detail-actions{display:flex;gap:8px;justify-content:flex-end;align-items:center;margin-top:14px}
.lesson-detail-actions form{margin:0}

.empty{color:var(--muted);text-align:center;padding:40px}
/* 备忘录 */
.memo{background:#fffdf5;border:1px solid #f0e6c8;border-radius:10px;padding:12px 14px;margin-bottom:18px}
.memo label{font-weight:600;font-size:14px;color:#a6802a;display:block;margin-bottom:6px}
.memo textarea{width:100%;border:1px solid #e6dcc0;border-radius:8px;padding:8px 10px;font-size:14px;
  font-family:inherit;min-height:48px;resize:vertical;background:#fff}
.memo .formbar{margin-top:8px}
.rowactions{display:flex;gap:6px;white-space:nowrap;align-items:center}
.bio{font-size:13px;color:#566;max-width:480px}
.entry-test{min-width:150px;max-width:280px;white-space:normal}
.date-cell{white-space:nowrap;color:#536970;font-size:14px}
.apply-tag{margin-left:5px;background:#edf7f2;color:#2d8056}
.plan-intro{background:#eef6f8;border:1px solid #d5e6eb;color:#4b6872;border-radius:10px;
  padding:11px 14px;margin-bottom:14px}
.plan-table input,.plan-table select{width:100%;min-width:105px;padding:7px 8px;
  border:1px solid #e6dcc9;border-radius:7px;background:#fff;font:inherit}
.plan-table td{padding:7px}
.plan-table th:first-child{min-width:145px}
.candidate-card{background:#fff;border:1px solid #e6dcc9;border-radius:14px;padding:16px;margin-bottom:16px}
.candidate-card h2{font-size:16px;margin:0 0 6px;color:#34535e}
.candidate-card p{margin:0 0 12px;color:var(--muted);font-size:13px}
.candidate-form{display:grid;grid-template-columns:repeat(3,minmax(160px,1fr));gap:12px}
.candidate-form label{font-size:13px;color:var(--muted);font-weight:600}
.candidate-form input,.candidate-form select{width:100%;margin-top:4px;padding:8px 10px;
  border:1px solid #e6dcc9;border-radius:8px;background:#fff;font:inherit}
.candidate-form .full{grid-column:1/-1}
.alert.error{background:#fdecea;color:#a64038;border:1px solid #f2c8c4;border-radius:9px;
  padding:10px 13px;margin-bottom:14px}
.alert.success{background:#e8f5ed;color:#287749;border:1px solid #c6e4d1;border-radius:9px;
  padding:10px 13px;margin-bottom:14px}
.lesson-detail-row{display:none}
.lesson-detail-row.show{display:table-row}
.lesson-detail-row>td{background:#f8fbfc;padding:14px!important}
.lesson-detail-panel{overflow:auto;max-height:72vh;border:1px solid #e6dcc9;border-radius:12px;background:#fff;
  box-shadow:0 12px 28px rgba(28,56,66,.10);-webkit-overflow-scrolling:touch}
.lesson-detail-title{position:sticky;top:0;z-index:3;display:flex;justify-content:space-between;gap:12px;
  align-items:center;background:#f4f1e9;border-bottom:1px solid #e6dcc9;padding:10px 12px;color:#34535e}
.lesson-detail-title span{font-size:13px;color:var(--muted);white-space:nowrap}
.lesson-detail-title .btn{margin-left:auto}
.lesson-detail-grid{min-width:820px}
.lesson-detail-grid td{vertical-align:top}
.selected-delete-form{margin:0}
.lesson-check{width:38px;text-align:center!important}
.lesson-check input{width:16px;height:16px}
.lesson-detail-grid thead th{position:sticky;top:39px;z-index:2;background:#f5fafb}
.lesson-detail-grid th:last-child,.lesson-detail-grid td:last-child{position:sticky;right:0;background:#fff;z-index:1;
  box-shadow:-8px 0 12px rgba(255,255,255,.9)}
.lesson-detail-grid thead th:last-child{z-index:3;background:#f5fafb}
.availability-box{background:#fff;border:1px solid #e6dcc9;border-radius:10px;padding:10px 13px;
  margin:0 0 14px}
.availability-box summary{cursor:pointer;color:var(--teal);font-weight:600}
.availability-form{display:flex;align-items:flex-end;gap:9px;flex-wrap:wrap;margin-top:10px}
.availability-form label{font-size:13px;color:var(--muted)}
.availability-form input,.availability-form select{display:block;margin-top:3px;padding:7px 8px;border:1px solid #e6dcc9;
  border-radius:7px;font:inherit}
.availability-list{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}
.availability-list>span{display:inline-flex;align-items:center;gap:5px;background:#f8eeee;color:#8b4b4b;
  border-radius:16px;padding:4px 5px 4px 10px;font-size:13px}
.availability-list form{display:inline}
.availability-list button{border:0;background:transparent;color:#a34343;cursor:pointer;
  font-size:16px;line-height:1}
.lesson-detail{position:relative}.lesson-detail>summary{list-style:none;white-space:nowrap}
.lesson-detail>summary::-webkit-details-marker{display:none}

/* ── 老师课时统计 ─────────────────────────────────────────── */
.teacher-hours-filter label{display:flex;align-items:center;gap:6px;color:#6a645c;font-size:14px}
.hours-cards{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:12px;margin-bottom:18px}
.hours-cards>div{background:#fff;border:1px solid #e8e4dc;border-radius:12px;padding:14px 16px}
.hours-cards span{display:block;color:#78726a;font-size:13px;margin-bottom:4px}
.hours-cards b{font-size:25px;color:var(--teal)}.hours-cards small{font-size:13px;font-weight:400}
.teacher-hours-summary td:not(:first-child){text-align:center}
.hours-detail-title{font-size:17px;color:#34535e;margin:24px 0 10px}
@media(max-width:760px){.hours-cards{grid-template-columns:repeat(2,1fr)}}

/* ── 学生请假汇总 ─────────────────────────────────────────── */
.leave-layout{display:grid;grid-template-columns:minmax(420px,2fr) minmax(220px,1fr);gap:16px;margin-bottom:20px}
.leave-form-card,.leave-ranking{background:#fff;border:1px solid #e8e4dc;border-radius:12px;padding:16px}
.leave-form-card h2,.leave-ranking h2{font-size:16px;margin:0 0 13px;color:#34535e}
.leave-form{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.leave-form label{font-size:13px;color:#706a62}.leave-form .full{grid-column:1/-1}
.leave-form input,.leave-form select,.leave-form textarea{display:block;width:100%;margin-top:4px;padding:8px 10px;
  border:1px solid #e3ded4;border-radius:7px;font:inherit;background:#fff}
.leave-form textarea{min-height:64px;resize:vertical}
.leave-ranking>div{display:flex;justify-content:space-between;border-bottom:1px solid #edf1f2;padding:8px 2px}
.leave-ranking>div b{color:var(--teal)}
@media(max-width:760px){.leave-layout{grid-template-columns:1fr}.leave-form{grid-template-columns:1fr}}

/* ── 登录（方案 B：顶部品牌条 + 纸底居中卡，2026-09-18 定稿） ── */
.loginwrap{min-height:100vh;display:flex;flex-direction:column;background:var(--bg)}
.lgbar{flex:0 0 62px;display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:0 26px;background:var(--teal-d);color:#fff}
.lgbar-l{display:flex;align-items:baseline;gap:10px;min-width:0}
.lgbar-l b{font-size:16px;font-weight:800;letter-spacing:.04em;white-space:nowrap}
.lgbar-l span{font-size:11px;font-weight:700;letter-spacing:.3em;color:rgba(255,255,255,.6);white-space:nowrap}
.lgbar-r{font-size:13px;letter-spacing:.16em;color:rgba(255,255,255,.78);white-space:nowrap}
.lgpane{flex:1;display:flex;align-items:center;justify-content:center;padding:22px}
.loginbox{background:#fff;border:1px solid var(--line);border-radius:12px;
  width:352px;max-width:100%;padding:30px 28px;box-shadow:0 10px 26px rgba(37,67,118,.07)}
.lgpill{display:inline-block;margin-bottom:14px;padding:4px 11px;border-radius:999px;
  background:var(--beige);color:var(--teal-d);font-size:12px;font-weight:700;letter-spacing:.12em}
.loginbox h1{margin:0 0 6px;font-size:26px;font-weight:800;color:var(--teal-d);letter-spacing:.02em}
.loginbox .lgsub{margin:0 0 24px;font-size:14px;color:var(--muted-warm);letter-spacing:.06em}
.loginbox .field{margin-bottom:14px}
.loginbox .field label{font-size:13px}
.loginbox .field input{padding:11px 12px;border-radius:6px}
.loginbox .btn{width:100%;justify-content:center;margin-top:6px;padding:12px;
  background:var(--teal-d);font-size:16px;font-weight:700;letter-spacing:.18em}
.loginbox .btn:hover{background:#1A325A}
.lgfoot{margin-top:18px;padding-top:14px;border-top:1px dashed var(--line-dash);
  font-size:12px;color:var(--muted);text-align:center}
.loginerr{background:#fdecea;color:#C94B43;padding:9px 12px;border-radius:8px;font-size:14px;margin-bottom:14px}
@media(max-width:520px){
  .lgbar{flex:0 0 auto;flex-direction:column;align-items:flex-start;gap:2px;padding:12px 18px}
  .lgbar-r{display:none}
  .lgbar-l span{letter-spacing:.2em}
}
.hint{font-size:13px;color:var(--muted);margin-top:14px;text-align:center}

/* ── 公开报名 ── */
.hp{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}
.applywrap{min-height:100vh;display:flex;align-items:flex-start;justify-content:center;
  background:linear-gradient(135deg,#296178,#1d4a5c);padding:30px 16px;overflow-x:hidden}
.applybox{background:#fff;padding:30px 26px;border-radius:18px;width:100%;max-width:420px;
  box-shadow:0 20px 50px rgba(0,0,0,.25)}
.applybox .orgname{font-size:16px;font-weight:700;color:var(--teal);letter-spacing:.5px;margin-bottom:6px}
.applybox h1{margin:0 0 4px;font-size:22px;color:var(--teal)}
.applybox p{margin:0 0 20px;color:var(--muted);font-size:14px}
.applybox .field{margin-bottom:14px}
.applybox .field label{display:block;font-size:14px;color:#555;margin-bottom:5px;font-weight:600}
.applybox input,.applybox select,.applybox textarea{width:100%;padding:10px 12px;border:1px solid #e6dcc9;
  border-radius:8px;font-size:16px;font-family:inherit}
.applybox textarea{resize:vertical}
.applybox .btn{width:100%;justify-content:center;padding:12px;margin-top:6px}
.applybox .intro{color:#5a6b72;font-size:14px;line-height:1.6;margin:0 0 22px;
  background:#f3f8fa;border-left:3px solid var(--teal);padding:10px 12px;border-radius:0 8px 8px 0}
.applybox .radio{display:inline-flex;align-items:center;gap:5px;margin-right:22px;font-size:16px;cursor:pointer}
.applybox .radio input{width:auto;margin:0}
.applybox .sub{font-size:13px;color:var(--muted);margin-top:5px}

@media(min-width:821px) and (max-width:1100px){
  .brandrow{padding:12px 22px}
  .brand{font-size:21px}
  .brand span{font-size:21px}
  .sidebar nav{padding:6px 9px;gap:10px}
  .topbar{padding:14px 22px}
  .sidebar nav a{padding:9px 13px;font-size:16px}
  .uname{font-size:14px}
  .urole{font-size:11px}
  .logout{padding:3px 7px;font-size:12px}
  .page{padding:22px 22px}
}

/* ── 响应式 ── */
@media(max-width:820px){
  .brandrow{padding:11px 16px;flex-wrap:wrap}
  .userbox{margin-left:auto}
  .brand{font-size:19px}
  .brand span{font-size:19px}
  .sidebar nav{padding:6px 4px;gap:8px;justify-content:flex-start}
  .sidebar nav a{padding:8px 12px;font-size:15px}
  .topbar{align-items:center;padding:12px 16px;gap:10px;flex-wrap:wrap}
  .topbar h1{font-size:17px;line-height:1.35;flex:1 1 0;
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;word-break:keep-all}
  .topbar .actions{width:100%;justify-content:flex-start;order:3}
  .topbar .actions .btn{padding:6px 10px;font-size:13px}
  .page{padding:16px 16px;max-width:none;overflow-x:hidden}
  form.vform{grid-template-columns:1fr}
  .candidate-form{grid-template-columns:1fr}
  .filterbar{gap:8px}
  .filterbar input,.filterbar select{flex:1 1 150px;min-width:0}
  .student-first-bar{align-items:stretch}
  .student-first-bar label,.student-first-bar input{width:100%;min-width:0}
  .student-picker{width:100%}
  .weeknav{gap:8px}
  .weeknav .btn{padding:6px 10px;font-size:13px}
  .calendar{min-width:760px}
  .calendar{font-size:13px}
  .calendar .slotname{width:64px}
  .calendar thead th{font-size:13px}
  .lesson{font-size:12px;padding-right:30px}
  .lesson .room,.lesson .tch,.lesson .code{font-size:10px}
  .lesson .t{font-size:11px}
  .lesson .progress,.state-badge,.holiday-pill{font-size:10px;padding:1px 5px}
  .schedule-legend{position:sticky;top:0;z-index:5;background:#f5f7f8;padding:6px 0;margin:0 0 10px}
  .month-head,.month-row{grid-template-columns:repeat(7,minmax(108px,1fr));min-width:760px}
  .month-day{min-height:112px;padding:5px}
  .month-head>div{padding:7px 4px;font-size:13px}
  .month-lesson{font-size:11px;line-height:1.25;padding:4px 5px}
  .month-lesson .leave-note{font-size:10px}
  .lesson-detail-panel{left:10px;right:10px;top:auto;bottom:10px;width:auto;max-height:68vh;border-radius:16px}
  .tablewrap{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .rowactions{flex-wrap:wrap;white-space:normal}
}
/* ── 教室使用情况 ─────────────────────────────────────────── */
.room-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px}
.room-views{display:flex;gap:5px;margin-right:auto}
.room-date-picker{display:inline-flex;align-items:center;gap:6px;color:#6a655e;font-size:13px}
.room-date-picker input{padding:6px 8px;border:1px solid #e6dcc9;border-radius:7px;background:#fff;
  color:#26383f;font-family:inherit}
.room-alert{background:#fff3cd;color:#7a5300;border:1px solid #f0d98a;padding:10px 14px;border-radius:10px;margin-bottom:14px}
.room-pending{background:#fff8e8;border:1px solid #f0d7a0;border-radius:14px;padding:14px;margin-bottom:16px}
.room-pending h2{font-size:16px;margin:0 0 10px}.room-pending h2 span{background:#d98716;color:#fff;border-radius:12px;padding:1px 8px}
.room-card-row{display:flex;gap:10px;flex-wrap:wrap}.room-card-row>div{min-width:180px}
.room-day-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.room-panel{background:#fff;border:1px solid #e6dcc9;border-radius:14px;overflow:hidden}
.room-panel>header{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;background:#eef5f7}
.room-panel>header small,.room-week th small,.room-week thead small{display:block;font-weight:normal;color:#75706a}
.room-panel>header span{font-size:13px;color:#5f5952}
.room-free{padding:28px 12px;text-align:center;color:#a29b8e}
.room-lesson{margin:10px;padding:10px;border-left:4px solid #43849b;background:#f5fafb;border-radius:7px;font-size:15px}
.room-lesson.compact{margin:4px 0;padding:7px;border-left-width:3px;min-width:128px}
.rl-title{font-weight:700}.room-lesson small,.muted{color:#75706a}.room-edit{margin-top:7px}
.room-edit form{display:flex;gap:5px}.room-edit select{min-width:0;max-width:130px;padding:4px}
.room-edit>a{display:inline-block;margin-top:5px;font-size:14px;color:#296178}
.room-week{border-collapse:separate;border-spacing:0;width:100%;min-width:1100px;background:#fff;font-size:14px}
.room-week th,.room-week td{border-right:1px solid #ede9e2;border-bottom:1px solid #ede9e2;vertical-align:top;padding:7px;min-width:135px}
.room-week tr>th:first-child{position:sticky;left:0;z-index:2;background:#f3f7f8;min-width:115px}
.room-week thead th{background:#f3efe7;position:sticky;top:0;z-index:3}
.room-month{display:grid;grid-template-columns:repeat(7,minmax(135px,1fr));background:#eae6df;gap:1px;border:1px solid #eae6df;min-width:980px}
.room-month-head{display:contents}.room-month-head>div{background:#f3efe7;text-align:center;font-weight:700;padding:9px}
.room-month-day{background:#fff;min-height:145px;padding:7px}.room-month-day.outside{background:#f5f6f6;color:#b0aaa1}
.room-month-day>a{display:block;background:#e8f4f7;color:#234d5b;margin-top:5px;padding:5px;border-radius:5px;font-size:14px;text-decoration:none}
.room-month-day>a.unassigned{background:#fff0d5;color:#865600}.room-month-day>a span{font-weight:700}
.room-month-week{margin-bottom:28px}.room-month-week h2{margin:0 0 10px;font-size:16px;color:#294c59}
.room-month-week h2 span{font-weight:400;color:#75706a;font-size:14px;margin-left:7px}
.room-month-pending{background:#fff8e8;border:1px solid #f0d7a0;border-radius:10px;padding:10px;margin-bottom:10px}
.room-week-month th.outside,.room-week-month td.outside{background:#f3f5f5;color:#a29c93}
.room-day-table{min-width:820px}
.room-day-table .room-slot-time{font-variant-numeric:tabular-nums;white-space:nowrap}
.room-day-table td:empty{background:#f8fbfc}
.room-day-table td:empty::after{content:"—";color:#ded8c9;display:block;text-align:center}
.room-unassigned-col{background:#fffaf0}
.room-day-table thead .room-unassigned-col{background:#f6ead0}
@media(max-width:760px){
  .room-toolbar strong{width:100%;order:-1}.room-day-grid{grid-template-columns:1fr}
  .room-month{overflow:auto}.room-views{margin-right:0}.room-date-picker{width:100%}
}

/* ═══ 2026-09-14 十点改版新增样式 ═══ */
/* 在读学生页 */
.roster-section{margin-bottom:26px}
.roster-section h2{font-size:16px;color:var(--teal);margin:0 0 12px}
.roster-count{font-size:13px;color:var(--muted);font-weight:400;margin-left:8px}
.roster-class-card{text-decoration:none;color:inherit;display:block}
.roster-names{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
.roster-name{display:inline-block;padding:3px 10px;border-radius:12px;background:#f6f2e9;
  color:var(--teal);font-size:13px;text-decoration:none;border:1px solid var(--line)}
a.roster-name:hover{background:var(--teal);color:#fff}
.class-roster{border-top:1px dashed var(--line);padding-top:8px}
.vip-pill-board{display:flex;flex-wrap:wrap;gap:10px}
.vip-pill{display:flex;flex-direction:column;gap:2px;padding:10px 18px;border-radius:12px;
  background:var(--card);border:1px solid var(--line);text-decoration:none;color:var(--teal);
  box-shadow:0 2px 8px rgba(13,53,104,.06)}
.vip-pill b{font-size:16px}
.vip-pill small{color:var(--muted);font-size:12px}
.vip-pill:hover{border-color:var(--teal);box-shadow:0 4px 12px rgba(13,53,104,.12)}

/* 班课卡片课次日历 */
.mini-cal{border:1px solid var(--line);border-radius:10px;padding:10px;margin:10px 0;background:#fafcfd}
.mini-cal-title{font-size:13px;color:var(--muted);margin-bottom:8px}
.mini-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.mini-wk{font-size:11px;color:var(--muted);text-align:center;padding:2px 0}
.mini-day{position:relative;font-size:12px;text-align:center;padding:4px 0;border-radius:6px;color:#938c7e}
.mini-day.outside{visibility:hidden}
.mini-day.today{outline:2px solid var(--teal)}
.mini-day.done{background:#FFFFFF;color:#1d7a4f;font-weight:700}
.mini-day.pending{background:#FFFFFF;color:#CE9660;font-weight:700}
.mini-day.leave{background:#FFFFFF;color:#8F3F3F}
.mini-day i{font-style:normal;font-size:10px;position:absolute;top:0;right:2px;color:inherit;opacity:.8}
.mini-cal-legend{font-size:12px;color:var(--muted);margin-top:8px;display:flex;gap:10px;align-items:center}
.mini-dot{display:inline-block;width:8px;height:8px;border-radius:4px}
.mini-dot.done{background:#FFFFFF;border:1px solid #1d7a4f}
.mini-dot.pending{background:#FFFFFF;border:1px solid #CE9660}
.mini-dot.leave{background:#FFFFFF;border:1px solid #8F3F3F}

/* VIP 课表总览（一行一 VIP） */
.vip-roster{display:flex;flex-direction:column;gap:14px}
.vip-row{display:flex;gap:16px;background:var(--card);border:1px solid var(--line);
  border-radius:14px;padding:16px;flex-wrap:wrap}
.vip-row-info{flex:0 0 220px;display:flex;flex-direction:column;gap:8px}
.vip-row-name{font-size:18px;font-weight:800;color:var(--teal);text-decoration:none}
.vip-row-sub{font-size:13px;color:var(--muted)}
.vip-row-groups{flex:1;display:flex;flex-wrap:wrap;gap:10px;align-content:flex-start}
.vip-group-card{flex:1 1 200px;border:1px solid var(--line);border-radius:10px;padding:10px;background:#fafcfd}
.vip-group-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.vip-group-head b{color:var(--teal)}
.vip-group-head span{font-size:12px;color:var(--muted)}
.vip-group-progress div:first-child{font-size:13px;margin-bottom:4px;color:#333}
.vip-group-actions{display:flex;gap:8px;margin-top:8px}

/* 班级具体课表 */
.cd-classbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.cd-class-chip{display:flex;flex-direction:column;padding:8px 14px;border-radius:10px;
  border:1px solid var(--line);text-decoration:none;background:var(--card)}
.cd-class-chip b{color:var(--teal);font-size:15px}
.cd-class-chip small{color:var(--muted);font-size:11px}
.cd-class-chip.on{background:var(--teal);border-color:var(--teal)}
.cd-class-chip.on b,.cd-class-chip.on small{color:#fff}
.cd-studentbar{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:14px;
  background:#f6f2e9;border-radius:10px;padding:8px 12px}
.cd-studentbar-title{font-size:14px;color:var(--teal);font-weight:700}
.cd-student-chip{padding:4px 12px;border-radius:14px;font-size:13px;text-decoration:none;
  color:var(--teal);background:#fff;border:1px solid var(--line)}
.cd-student-chip.on{background:var(--teal);color:#fff;border-color:var(--teal)}
.cd-student-label{position:fixed;left:18px;bottom:14px;z-index:30;background:var(--teal);color:#fff;
  padding:8px 16px;border-radius:10px;font-size:14px;font-weight:700;box-shadow:0 6px 16px rgba(13,53,104,.25)}
.dual-day{background:linear-gradient(135deg,#41799D 50%,#CE9660 50%) !important;color:#fff !important}
.dual-legend{font-size:12px;color:var(--muted)}

/* 排课台周历 + 弹窗 */
/* 方案 B：空格子平时完全干净，鼠标移上去才浮现淡「＋」（纯提示，不接收点击） */
.week-schedule-grid td.week-cell{min-width:120px;height:64px;vertical-align:top;position:relative;padding:4px}
.week-schedule-grid td.week-cell.is-empty{cursor:pointer}
.week-schedule-grid td.week-cell.is-empty::after{
  content:"＋"; position:absolute; right:6px; bottom:6px;
  width:22px; height:22px; line-height:20px; text-align:center;
  border-radius:11px; border:1px dashed #c9bfb0; background:#fff;
  color:#938c7e; font-size:14px;
  opacity:0; pointer-events:none; transition:opacity .12s ease}
.week-schedule-grid td.week-cell.is-empty:hover::after{ opacity:1 }
.week-schedule-grid td.week-cell.is-empty:hover{ background:#f7fafd }
.qa-lesson{position:relative;padding:5px 6px;margin-bottom:4px}
.qa-lesson.qa-status-请假{opacity:.65}
.qa-lesson.qa-status-调课{opacity:.65}
.qa-toggle{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted);cursor:pointer}
.qa-dialog{position:fixed;z-index:120;top:50%;left:50%;transform:translate(-50%,-50%);
  background:#fff;border-radius:14px;padding:20px;box-shadow:0 20px 60px rgba(0,0,0,.25);
  min-width:340px;max-width:92vw;max-height:86vh;overflow:auto}
.qa-dialog-wide{min-width:560px;padding:26px 30px}
.qa-dialog h3{margin:0 0 10px;color:var(--teal);font-size:18px}
.qa-dialog-sub{font-size:14px;color:var(--muted);margin:0 0 14px}
.qa-dialog-actions{display:flex;gap:10px;margin-top:16px;justify-content:flex-end}
.qa-form .qa-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.qa-form .qa-row label{flex:0 0 84px;font-size:14px;color:var(--muted)}
.qa-form .qa-row input,.qa-form .qa-row select{flex:1}
.qa-time-row input{width:110px;flex:none}
.qa-slots{display:flex;flex-wrap:wrap;gap:8px;flex:1}
.qa-slot{padding:6px 14px;border-radius:8px;border:1px solid var(--line);background:#f7fafc;
  color:var(--ink);font-size:14px;font-family:inherit;cursor:pointer;transition:.15s}
.qa-slot:hover{border-color:var(--teal);color:var(--teal)}
.qa-slot.on{background:var(--teal);border-color:var(--teal);color:#fff;font-weight:600}

/* 老师课表：瓦片 + 可排标记 + 档案/学员 */
.teacher-tile-board{display:flex;flex-wrap:wrap;gap:8px;padding:6px 0}
.teacher-tile{display:flex;flex-direction:column;padding:8px 16px;border-radius:10px;
  border:1px solid var(--line);text-decoration:none;background:var(--card)}
.teacher-tile b{color:var(--teal);font-size:15px}
.teacher-tile small{font-size:11px;color:var(--muted)}
.teacher-tile.on{background:var(--teal);border-color:var(--teal)}
.teacher-tile.on b,.teacher-tile.on small{color:#fff}
.avail-btn{width:26px;height:26px;border-radius:13px;border:1px dashed #c9bfb0;background:transparent;
  color:#938c7e;cursor:pointer;font-size:14px}
.avail-btn.ok{background:#e4f4ea;border-color:#1d7a4f;color:#1d7a4f;border-style:solid}
/* 2026-09-27 老师周课表空格两个动作拆开：「＋」= 跳排课台排课；「可排/不可排」= 只标注 */
.wk-empty-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
a.avail-btn.sched{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}
a.avail-btn.sched:hover{border-color:var(--orange);color:var(--orange)}
.avail-mark-btn{font-size:11px;border:1px dashed #d8cfbe;background:transparent;color:#a79e8f;
  border-radius:8px;padding:2px 7px;cursor:pointer;line-height:1.5}
.avail-mark-btn:hover{color:var(--teal);border-color:var(--teal)}
.avail-mark.blocked{display:inline-block;font-size:12px;color:#8F3F3F;font-weight:700}
.avail-del-form{display:inline}
.cell-blocked{background:repeating-linear-gradient(45deg,#fbecec,#fbecec 6px,#fff 6px,#fff 12px)}
.teacher-profile-panel{margin-top:20px}
.teacher-load-panel{margin-top:14px}
.teacher-load-grid{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px}
.teacher-load-card{flex:1 1 220px;border:1px solid var(--line);border-radius:10px;padding:10px;background:#fafcfd}
.tl-head{display:flex;justify-content:space-between;margin-bottom:6px}
.tl-head b a{color:var(--teal);text-decoration:none}
.tl-head span{font-size:12px;color:var(--muted)}
.tl-progress span{font-size:12px;color:var(--muted)}
.tl-students{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.tl-students a{font-size:12px;color:var(--teal);text-decoration:none;padding:2px 8px;
  border-radius:10px;background:#f6f2e9}
.tl-sub{font-size:14px;color:var(--teal);margin:16px 0 0}

/* 教室周格（2302/2312 双色） */
.room-unassigned-box{border:1px solid #e8d9bd;background:#fffaf0;border-radius:10px;
  padding:10px 14px;margin-bottom:14px}
.room-unassigned-box h2{font-size:14px;color:#CE9660;margin:0 0 8px}
.room-unassigned-box h2 span{font-weight:400;color:var(--muted)}
.room-unassigned-box h2 em{font-style:normal;font-weight:400;font-size:12px;color:var(--muted);margin-left:8px}
.room-unassigned-list{display:flex;flex-wrap:wrap;gap:10px}
/* 批次 Q：这里放的是可直接安排/拖拽的课次卡（不再是只读文字药丸） */
.room-unassigned-item{display:flex;flex-direction:column;gap:4px;min-width:210px;max-width:260px}
.room-unassigned-item small{font-size:12px;color:#7a5b2e;font-weight:700}
.room-unassigned-item .room-lesson{margin:0}
.room-lesson[draggable="true"]{cursor:grab}
.room-lesson.dragging{opacity:.4;cursor:grabbing}
.room-week-grid-table{border-collapse:collapse;width:100%;font-size:13px;table-layout:fixed}
.room-week-grid-table th,.room-week-grid-table td{border:1px solid var(--line);padding:6px 8px}
/* 列宽：时间列固定，教室列一律等分 */
.rw-col-time{width:104px}
.rw-corner{background:#efe7d8;font-size:13px;font-weight:800;color:#0D3568;
  text-align:center;vertical-align:middle}
/* 表头教室标注行：底色浓，便于一眼认出列归属 */
.rw-group-row .rw-group-head{background:#ded8c9;font-size:14px;font-weight:800;color:#0D3568;
  text-align:center;letter-spacing:2px;padding:6px 8px}
.rw-group-row .rw-group-head.loc-2312{background:#f0d7b0;color:#8a5a1e}
.rw-room{text-align:center;font-size:14px;font-weight:800;color:#0D3568}
.rw-room.loc-2302{background:#cfe0f0}
.rw-room.loc-2312{background:#f6e3c6;color:#8a5a1e}
.rw-room b{display:block;font-size:14px;color:inherit}
.rw-room small{font-size:12px;color:var(--muted)}
.rw-day-head td{background:#f3eddf;padding:6px 10px;border-top:2px solid #ded8c9}
.rw-day-top{display:flex;align-items:baseline;gap:9px;justify-content:center}
.rw-day-label b{color:#0D3568;font-size:15px;font-weight:800}
.rw-day-label span{color:var(--muted);font-size:13px}
.rw-day-label em{font-style:normal;color:#CE9660;font-size:13px;font-weight:800;margin-left:4px}
/* 每天行内的教室对照：一间教室一格，与下方时段格严格同列对齐 */
.rw-day-rooms-row .rw-rooms-corner{background:#efe7d8;font-size:12px;font-weight:800;
  color:#0D3568;text-align:center;padding:4px 6px}
.rw-dc{text-align:center;font-size:13px;font-weight:700;color:#3c4a58;padding:4px;
  background:#f8f4ea;border:1px solid var(--line);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
/* 两组场地全程双色：2302 冷蓝 / 2312 暖杏（白底淡彩，每天行与时段格同色系；2026-09-21 减淡避免发闷） */
.rw-dc.loc-2302{background:#edf4fc}
.rw-dc.loc-2312{background:#fbf3e3}
.rw-sub{font-style:normal;font-size:12px;opacity:.92;margin-left:4px}
/* 方案A 双行时刻（Tiffany 2026-09-21）：抽象时段名 + 实际钟点，滚动时一眼对得上 */
.rw-slot{background:#ece5d3;border-left:4px solid #0D3568;padding:6px 8px;
  text-align:left;vertical-align:middle;min-width:104px;width:104px;}
.rw-slot .slot-name{display:block;font-size:11px;font-weight:600;color:#8a8272;
  letter-spacing:1px;}
.rw-slot .slot-time{display:block;font-size:13px;font-weight:800;color:#0D3568;
  font-variant-numeric:tabular-nums;white-space:nowrap;margin-top:2px;}
/* 日子之间的分隔加强 + 无课日折叠（Tiffany 2026-09-21） */
.rw-day-head td{border-top:4px solid #0D3568;background:#f3eddf;padding:8px 10px;}
.rw-day-fold{font-style:normal;font-size:12px;font-weight:600;color:#a29a8b;
  background:#ece5d3;border-radius:999px;padding:2px 10px;margin-left:8px;}
.rw-day-collapsed td{background:#faf7ef;padding:4px 10px;font-size:12px;
  color:#a29a8b;border-top:1px dashed #ded8c9;}
.rw-day-collapsed a{color:#B54F78;text-decoration:none;font-weight:700;margin-left:12px;}
.rw-day-collapsed a:hover{text-decoration:underline;}
/* 周X 悬浮导航：右侧常驻，点击直接跳（解决课集中周末要一路滚的问题） */
.rw-daynav{position:fixed;right:18px;top:45%;z-index:60;display:flex;flex-direction:column;
  gap:4px;background:#fffdf7;border:1px solid #e6dcc9;border-radius:12px;padding:8px 6px;
  box-shadow:0 3px 12px rgba(13,53,104,.15);font-size:12px;}
.rw-daynav-t{font-size:10px;color:#a29a8b;text-align:center;line-height:1.3;
  padding-bottom:2px;border-bottom:1px dashed #e6dcc9;margin-bottom:2px;}
.rw-daynav a{display:block;width:24px;height:24px;line-height:24px;text-align:center;
  border-radius:8px;color:#a29a8b;text-decoration:none;font-weight:700;background:#f6f1e4;}
.rw-daynav a.has{color:#0D3568;background:#EDF2F8;}
.rw-daynav a:hover{background:#0D3568;color:#fff;}
.rw-daynav a.on{background:#CE9660;color:#fff;}
.rw-lunch-clock{font-variant-numeric:tabular-nums;opacity:.85;margin-right:6px;}
.rw-vip{--lesson-color:#EFE8DD;--lesson-bg:#FDFDFC;--lesson-text:#6C6863}
.rw-slot{font-size:13px;color:#4a5866;font-weight:700;background:#f6f3ea;
  text-align:left;vertical-align:middle}
/* 行高统一：lunch break 行最窄，其余时段行等高 */
.rw-cell{height:58px;vertical-align:top;padding:4px 6px}
.rw-lunch-cell{position:relative;text-align:center;vertical-align:middle;background:#f3e4d3;padding:3px 8px;
  font-size:11px;font-weight:800;color:#B26A1E;letter-spacing:2px}
/* 午休带拖拽（Tiffany 2026-09-24）：上下边缘可拖，5 分钟对齐；悬停高亮提示可拖 */
.rw-lunch-handle{position:absolute;left:0;right:0;height:8px;cursor:row-resize;z-index:4;touch-action:none}
.rw-lunch-handle.top{top:-2px}
.rw-lunch-handle.bottom{bottom:-2px}
.rw-lunch-handle:hover,.rw-lunch-handle.on{background:rgba(179,137,79,.5)}
.rw-lunch-tip{margin-left:10px;font-weight:400;letter-spacing:0;opacity:.55}
.rw-lunch-live{position:fixed;z-index:99;background:#254376;color:#fff;padding:3px 10px;
  border-radius:6px;font-size:12px;font-weight:600;letter-spacing:0;pointer-events:none;white-space:nowrap}
/* 数据格：2302 冷蓝 / 2312 暖杏，白底淡彩一眼区分两个场地 */
.rw-cell.loc-2302{background:#eef4fb}
.rw-cell.loc-2312{background:#fdf3e1}
.rw-cell.drop-on{background:#fff4e3;box-shadow:inset 0 0 0 2px #CE9660}
/* 两组场地分界（Grand | Holiday）：粗金棕竖线贯穿整列 */
.rw-room.rw-gap,.rw-dc.rw-gap,.rw-cell.rw-gap{border-right:3px solid #b3894f}
/* 教室页课块：配色跟随老师课表 / 学生课表（--lesson-* 三变量，来源 timetable.course_style）
   左色条用 inset box-shadow 而非 border-left，保证零位移（批次 T 2026-09-18） */
.rw-lesson{border-radius:6px;padding:4px 7px;margin-bottom:4px;font-size:13px;
  background:var(--lesson-bg,#F5F6FA);color:var(--lesson-text,#464C5C);
  box-shadow:inset 3px 0 0 var(--lesson-color,#9CA8CC)}
.rw-lesson b{display:block;font-size:13px}
.rw-lesson span{font-size:12px;opacity:.9}
.rw-lesson small{display:block;font-size:12px;opacity:.85}

/* 设置页统计 */
.settings-progress-row{display:flex;gap:24px;margin-top:16px;flex-wrap:wrap}
.settings-progress-item{flex:1 1 280px}
.settings-progress-item>div:first-child{display:flex;justify-content:space-between;
  font-size:14px;margin-bottom:6px}
.settings-progress-item span{color:var(--muted);font-size:13px}
.reset-pw-form{display:inline}

/* ── 老师课表：月历/学期历横幅 + 卡片（参考风格C） ── */
.tm-banner{background:linear-gradient(135deg,#0D3568,#0D3568);color:#fff;border-radius:16px;
  padding:16px 24px;margin:4px 0 18px;display:flex;align-items:center;gap:18px;
  box-shadow:0 14px 32px rgba(13,53,104,.22)}
.tm-banner-name{font-size:19px;font-weight:800;letter-spacing:.5px;white-space:nowrap}
.tm-banner-month{flex:1;text-align:center;font-size:21px;font-weight:800;letter-spacing:2px}
.tm-banner-total{margin-left:auto;font-size:14px;opacity:.92;white-space:nowrap}
.tm-banner-nav{display:flex;gap:8px}
.tm-banner-nav a{border:1px solid rgba(255,255,255,.55);color:#fff;border-radius:9px;
  padding:5px 13px;font-size:14px;white-space:nowrap}
.tm-banner-nav a:hover{background:rgba(255,255,255,.16)}
/* 老师月历：大格子 + VIP白底橙边 / 班课深蓝底白字 */
.tm-cal .month-day{min-height:132px;border-radius:10px}
.tm-cal .month-day header b{font-size:13px;color:#6a6459;font-weight:600}
.tm-cal .month-lesson{border-radius:9px;padding:6px 8px;margin:5px 0;font-size:13px;line-height:1.45;
  background:#fff;border:1px solid #e6dcc9;border-left:4px solid var(--lesson-color,var(--teal));
  color:#0D3568;box-shadow:0 1px 2px rgba(13,53,104,.05)}
.tm-cal .month-lesson .t{font-size:12px;color:#CE9660;font-weight:700;opacity:1}
.tm-cal .month-lesson .progress,.tm-cal .month-lesson .code{display:inline;font-size:12px;margin-left:2px;color:#6e6a60}
.tm-cal .month-lesson.lv-vip{background:#fff;border:1px solid #e7c6d6;border-left:4px solid #e7c6d6;color:#B54F78}
.tm-cal .month-lesson.lv-vip .t{color:#8F3B5C;opacity:1}
.tm-cal .month-lesson.lv-blocked{background:#f2f3f5;color:#938c7e;border-left-color:#c9bfb0;box-shadow:none}
.tm-cal .month-lesson.lv-leave{background:#FFFFFF;border:1px solid #f0cfca;border-left-color:#c94b43;color:#8f3f3f}
.tm-cal .month-lesson .state-badge{background:#f4f1e6;color:#34507a}
.tm-cal .month-lesson.lv-vip .state-badge{background:#fdf4f8;color:#8F3B5C}
.tm-cal .month-lesson.lv-leave .state-badge{background:#fff;border:1px solid #f0cfca;color:#c94b43}
/* 老师月历 · 五档固定槽位（Tiffany 2026-10-05 选「B 布局 + C 样式」）：
   一格 5 行 = 上午1/上午2/下午1/下午2/晚上，有课落在对应行、没课留极淡空档 ——
   同一时段在一周里永远同一高度，横扫一周即可对齐。只影响显示位置，不改课次时间。 */
.tm-cal .ml-slots{display:flex;flex-direction:column;gap:2px}
.tm-cal .ml-slot{border-radius:7px;min-width:0;min-height:28px}
.tm-cal .ml-slot.is-empty{border:1px dashed #F1EADC;background:#FDFCF9;font-size:0;line-height:0}
.tm-cal .month-day.outside .ml-slot.is-empty{border-color:#F4F1EA;background:#FAFAFA}
.tm-cal .ml-card{padding:3px 6px;margin:0 0 2px;font-size:12px;line-height:1.3;border-radius:7px;
  background:#fff;border:1px solid #e6dcc9;border-left:4px solid var(--lesson-color,var(--teal));
  color:#0D3568;box-shadow:0 1px 2px rgba(13,53,104,.05);overflow:hidden}
.tm-cal .ml-card:last-child{margin-bottom:0}
/* 时段底色（上午偏蓝 / 下午偏暖 / 晚上偏灰蓝）；VIP·不可排·请假沿用各自状态色 */
.tm-cal .ml-slot[data-band="0"] .ml-card:not(.lv-vip):not(.lv-blocked):not(.lv-leave),
.tm-cal .ml-slot[data-band="1"] .ml-card:not(.lv-vip):not(.lv-blocked):not(.lv-leave)
  {background:#F3F8FD;border-color:#DCE8F6}
.tm-cal .ml-slot[data-band="2"] .ml-card:not(.lv-vip):not(.lv-blocked):not(.lv-leave),
.tm-cal .ml-slot[data-band="3"] .ml-card:not(.lv-vip):not(.lv-blocked):not(.lv-leave)
  {background:#FDF6EA;border-color:#F1E4CC}
.tm-cal .ml-slot[data-band="4"] .ml-card:not(.lv-vip):not(.lv-blocked):not(.lv-leave)
  {background:#F3F4F9;border-color:#E3E6F0}
.tm-cal .ml-l1{display:flex;align-items:center;gap:4px;font-size:10px;line-height:1.2}
.tm-cal .ml-t{color:#CE9660;font-weight:700;flex:none}
.tm-cal .ml-r{font-style:normal;color:#8d8677;flex:1 1 auto;min-width:0;text-align:right;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tm-cal .ml-b{flex:none;font-size:9.5px;border-radius:999px;padding:1px 5px;
  background:#f4f1e6;color:#34507a;white-space:nowrap}
.tm-cal .ml-b.done{background:#EDF3EE;color:#3d6b4f}
.tm-cal .ml-b.pending{background:#FBF3E4;color:#8A6A22}
.tm-cal .ml-b.leave,.tm-cal .ml-b.change{background:#FBEDEC;color:#b04a42}
.tm-cal .ml-n{display:block;margin-top:1px;font-size:11.5px;font-weight:600;color:#0D3568;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tm-cal .ml-lv{font-style:normal;font-weight:400;color:#b04a42}
.tm-cal .ml-card.done{opacity:.62}
.tm-cal .ml-card.lv-vip .ml-n{color:#B54F78}
.tm-cal .ml-card.lv-blocked .ml-n{color:#938c7e}
@media(max-width:1040px){
  .tm-cal .ml-slot{min-height:26px}
  .tm-cal .ml-n{font-size:11px}
}
/* 学期历：总览迷你月历 + 按月列表 */
.term-sec-title{font-size:16px;font-weight:800;color:var(--teal);margin:8px 0 12px}
/* 批次 U：月历缩略图不平铺 —— 一行最多 3 个（第 4 个起自动换行）；
   日期格按卡片宽度等比排布、不锁死正方（轻微扁平，避免为了"方"而大面积留白） */
.term-minis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;
  margin-bottom:8px}
.term-mini{min-width:0;background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px}
.term-mini-label{text-align:center;font-size:14px;font-weight:800;color:var(--teal);margin-bottom:6px}
.term-mini-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.term-mini-wd{font-size:10px;color:var(--muted);text-align:center;padding:1px 0}
/* 普通日期数字：深暖灰（Tiffany 2026-09-26：原来 #ded8c9 太浅，读不清） */
.term-mini-day{font-size:11px;text-align:center;padding:3px 0;border-radius:6px;color:#7A7264;
  box-sizing:border-box;aspect-ratio:1/.85;display:flex;align-items:center;justify-content:center;
  line-height:1.1;overflow:hidden}
.term-mini-day.out{visibility:hidden}
.term-mini-day.today{outline:2px solid var(--orange);outline-offset:-2px}
.term-mini-day.k-class{background:var(--teal);color:#fff;font-weight:700}
.term-mini-day.k-vip{background:#e7c6d6;color:#fff;font-weight:700}
.term-mini-day.k-both{background:linear-gradient(135deg,var(--teal) 50%,#e7c6d6 50%);color:#fff;font-weight:700}
@media(max-width:1040px){.term-minis{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.term-minis{grid-template-columns:minmax(0,1fr)}}
/* 学期视图（2026-09-25 Tiffany）：每个月历卡内直接简注本月课次（9.26 课名）——
   学期视图只到这一层，下方按月完整列表只在完整视图出现，两视图不再重复 */
/* term-cell：月历卡 + 卡外简注（2026-09-25）—— 月历卡恒定为偏正方形，不被简注撑成长条；
   卡与简注之间留「空一行」的固定 14px（简注不铺满卡宽，左右各缩 2px 对齐卡边） */
.term-cell{min-width:0;display:flex;flex-direction:column}
.term-cell>.term-mini{flex:0 0 auto}
.term-mini-n{margin-left:7px;padding:1px 7px;border-radius:999px;font-size:11px;font-weight:800;
  letter-spacing:0;color:#fff;background:#CE9660;vertical-align:1px;white-space:nowrap}
.term-mini-notes{margin:14px 2px 0;padding:0;display:flex;flex-direction:column;gap:2px;
  max-height:232px;overflow-y:auto}
.term-mini-note{display:flex;align-items:baseline;gap:6px;font-size:11.5px;line-height:1.45;
  padding:2px 4px;border-radius:6px;cursor:pointer;color:#4a463d}
.term-mini-note:hover{background:#f7f4ec}
.term-mini-note b{flex:0 0 32px;font-weight:700;font-size:11px;color:#a29a8b;
  font-variant-numeric:tabular-nums}
.term-mini-note .tmn-t{flex:0 1 auto;max-width:100%;padding:1px 8px;border-radius:6px;
  font-size:11.5px;font-weight:600;background:#f0ece4;border:1px solid #41799D;color:#41799D;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.term-mini-note.vip .tmn-t{background:#fdf4f8;border-color:#e7c6d6;color:#B54F78}
.term-mini-note.study .tmn-t{background:#f6f7f9;border:1px dashed #ded8c9;color:#817b70;
  font-weight:500}
.term-mini-note.empty{color:#a29a8b;font-size:11px;cursor:default}
.term-mini-note.empty:hover{background:transparent}
@media print{.term-mini-notes{max-height:none;overflow:visible}}
.term-range{text-align:right;font-size:13px;color:var(--muted);margin:4px 0 16px}
.term-group{margin-bottom:18px}
.term-group-label{font-size:16px;font-weight:800;color:#B54F78;margin:0 0 8px}
.term-list{background:#fff;border:1px solid var(--line);border-radius:12px;padding:6px 14px}
.term-row{display:flex;align-items:center;gap:14px;padding:8px 4px;border-bottom:1px dashed #efe7d8}
.term-row:last-child{border-bottom:0}
.term-row-date{flex:0 0 118px;font-size:14px;color:var(--teal)}
.term-row-time{flex:0 0 108px;font-size:13px;color:var(--muted)}
.term-pill{display:inline-block;padding:3px 12px;border-radius:9px;font-size:13px;font-weight:600}
.term-pill.vip{background:#fdf4f8;border:1px solid #e7c6d6;color:#B54F78}
.term-pill.cls{background:#f0ece4;border:1px solid #41799D;color:#41799D}
/* 研习课次：视觉降一级（不给正课同等的面积与字重），且永远排在正课之后 */
.term-pill.study{padding:2px 9px;font-size:12px;font-weight:500;border-radius:7px;
  background:#f6f7f9;border:1px dashed #ded8c9;color:#817b70}
.month-lesson.cd2-study{padding-top:3px;padding-bottom:3px}
.month-lesson.cd2-study b{font-size:12px;font-weight:600}
.month-lesson.cd2-study .t{font-size:11px;font-weight:600;opacity:.85}
/* 班课课表：课次一排数字 */
.ses-strip{margin:10px 0}
.ses-strip-title{font-size:13px;color:var(--muted);margin-bottom:6px}
.ses-strip-grid{display:flex;flex-wrap:wrap;gap:5px}
.ses-pill{padding:3px 4px;border-radius:7px;font-size:11px;border:1px solid var(--line);
  background:#fdf4f8;color:#807a70;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  text-align:center;min-width:0}
.ses-pill.done{background:#e4f4ea;border-color:#0D3568;color:#1d7a4f;font-weight:600}
.ses-pill.leave{background:#FFFFFF;border-color:#d4574e;color:#8F3F3F}

/* ── 排课大弹窗（qa2，2026-09-14 重设计） ── */
.qa2{position:fixed;z-index:120;top:50%;left:50%;transform:translate(-50%,-50%);
  width:760px;max-width:94vw;max-height:92vh;overflow:auto;
  background:#fff;border-radius:18px;box-shadow:0 28px 80px rgba(13,53,104,.28)}
.qa2-head{background:linear-gradient(135deg,#345282,#0D3568);color:#fff;
  padding:18px 28px;display:flex;align-items:center;border-radius:18px 18px 0 0;
  position:sticky;top:0;z-index:2}
.qa2-head b{font-size:20px;font-weight:800;letter-spacing:.5px}
.qa2-close{margin-left:auto;border:0;background:rgba(255,255,255,.18);color:#fff;
  width:34px;height:34px;border-radius:10px;font-size:19px;cursor:pointer;line-height:1}
.qa2-close:hover{background:rgba(255,255,255,.32)}
.qa2-body{padding:22px 28px 26px;font-size:16px}
.qa2-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 18px}
.qa2-f{margin-bottom:14px}
.qa2-f>label{display:block;font-size:14px;font-weight:600;color:#6e6a60;margin-bottom:6px}
.qa2-f input,.qa2-f select{width:100%;padding:11px 14px;font-size:15.5px;
  border:1.5px solid #e6dcc9;border-radius:11px;background:#fff;color:#1f2d3a}
.qa2-f input:focus,.qa2-f select:focus{outline:none;border-color:var(--orange);
  box-shadow:0 0 0 3px rgba(206,150,96,.12)}
.qa2-block-lbl{display:block;font-size:15px;font-weight:700;color:#41799D;margin-bottom:8px}
.qa2-hint{font-weight:400;font-size:13px;color:#938c7e}
.qa2-slots{display:flex;flex-wrap:wrap;gap:12px}
.qa2-slot{border:0;background:transparent;color:#1f2d3a;font-size:16px;font-weight:800;
  padding:10px 18px;border-radius:12px;cursor:pointer;transition:all .15s}
.qa2-slot:hover{background:#f6f3ea}
.qa2-slot.on{background:#0D3568;color:#fff;box-shadow:0 6px 16px rgba(13,53,104,.3)}
.qa2-datectl{display:flex;align-items:center;gap:18px;margin-bottom:8px}
.qa2-mini{border:1.5px solid #e6dcc9;background:#fff;color:#0D3568;font-weight:700;
  font-size:14px;padding:7px 14px;border-radius:9px;cursor:pointer}
.qa2-mini:hover{border-color:#0D3568;background:#f2f6fb}
.qa2-repeat{font-size:15px;font-weight:700;color:#1f2d3a;display:flex;align-items:center;gap:8px}
.qa2-repeat input{width:64px;padding:7px 10px;font-size:15px;border:1.5px solid #e6dcc9;border-radius:9px}
.qa2-datechips{display:flex;flex-wrap:wrap;gap:8px;min-height:8px}
.qa2-datechip{background:#f1ece0;color:#0D3568;font-size:14px;font-weight:600;
  padding:6px 12px;border-radius:9px;display:inline-flex;align-items:center;gap:6px}
.qa2-datechip i{font-style:normal;cursor:pointer;color:#938c7e;font-weight:800;padding:0 2px}
.qa2-datechip i:hover{color:#c0392b}
.qa2-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:8px;
  border-top:1px solid #f3eddf;padding-top:18px}
.qa2-save{border:0;background:var(--orange);color:#fff;font-size:15.5px;font-weight:800;
  padding:11px 28px;border-radius:11px;cursor:pointer;box-shadow:0 6px 16px rgba(206,150,96,.28)}
.qa2-save:hover{background:#C93E00}
.qa2-cancel{border:1.5px solid #e6dcc9;background:#fff;color:#6e6a60;font-size:16px;
  padding:11px 22px;border-radius:11px;cursor:pointer}
@media(max-width:700px){.qa2-grid{grid-template-columns:1fr}}

/* ── 在读学生：层级分组 + 富班级卡（2026-09-14） ── */
.lvl-sec-title{font-size:17px;font-weight:800;color:var(--teal);margin:22px 0 12px;
  padding-left:12px;border-left:4px solid var(--orange)}
.rc-rich{padding:14px 16px}
.rc-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.rc-code{font-size:16px;font-weight:800;color:var(--teal);text-decoration:none}
.rc-code:hover{color:var(--orange)}
.rc-teacher{background:#0D3568;color:#fff;font-size:12px;font-weight:700;
  padding:3px 10px;border-radius:8px;white-space:nowrap}
.rc-level{font-size:12px;color:#938c7e;margin:2px 0 8px}
.rc-lines{font-size:13px;color:#4a5a6a;line-height:1.9}
.rc-progress-line{font-weight:700;color:#0D3568}
.rc-next{color:#938c7e;font-weight:400;margin-left:8px}
.rc-progressbar{height:5px;background:#f6f3ee;border-radius:99px;margin:6px 0 2px;overflow:hidden}
.rc-progressbar i{display:block;height:100%;background:#0D3568;border-radius:99px}
.rc-stu-head{font-size:13px;color:#6e6a60;font-weight:600;margin:8px 0 4px}
.rc-stu{display:inline-flex;align-items:center;gap:2px}
.rc-stu-edit{font-style:normal;text-decoration:none;color:#938c7e;font-size:12px;padding:0 2px}
.rc-stu-edit:hover{color:var(--teal)}
.rc-stu-del-form{display:inline;margin:0}
.rc-stu-del{border:0;background:transparent;color:#ded8c9;font-size:13px;font-weight:800;
  cursor:pointer;padding:0 2px;line-height:1}
.rc-stu-del:hover{color:#c0392b}
.rc-vip{display:inline-flex;align-items:center;gap:4px}
.rc-vip-name{text-decoration:none;color:inherit;display:inline-flex;flex-direction:column}

/* ── 班级/VIP具体课表 重设计（cd2，2026-09-14） ── */
.cd2-tabs{display:flex;gap:10px;margin:6px 0 16px}
.cd2-tab{padding:7px 20px;border-radius:10px;font-size:15px;font-weight:700;
  color:var(--muted);background:#f6f3ee;text-decoration:none}
.cd2-tab.on{background:#0D3568;color:#fff}
/* 月历深蓝月头 */
.cd2-monthbar{background:linear-gradient(135deg,#0D3568,#0D3568);color:#fff;
  border-radius:14px 14px 0 0;padding:14px 22px;display:flex;align-items:center;gap:16px}
.cd2-mb-name{font-size:17px;font-weight:800;white-space:nowrap}
.cd2-mb-center{flex:1;text-align:center;font-size:17px;font-weight:800;letter-spacing:1px}
.cd2-mb-center span{font-size:13px;font-weight:600;opacity:.85;margin-left:6px}
.cd2-mb-count{font-size:13px;font-weight:600;opacity:.85;margin-left:8px}
.cd2-mb-nav{display:flex;gap:8px;margin-left:auto}
.cd2-mb-nav a{border:1px solid rgba(255,255,255,.55);color:#fff;border-radius:9px;
  padding:5px 13px;font-size:14px;text-decoration:none;white-space:nowrap}
.cd2-mb-nav a:hover{background:rgba(255,255,255,.16)}
/* 月历格子 */
.cd2-month{border-radius:0 0 14px 14px;overflow:hidden}
.cd2-month .month-day{min-height:118px}
.cd2-month .month-day header b{font-size:13px;color:#6a6459;font-weight:600}
.cd2-wknd{background:#FBFCFE !important}
.cd2-today{background:#CE9660;color:#fff !important;border-radius:50%;
  width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center}
/* 月历课程卡 */
.cd2-les{background:#f4f1e6;border-left:3.5px solid #0D3568;border-radius:8px;
  padding:6px 9px;margin:5px 0;font-size:13px;line-height:1.5}
.cd2-les b{display:block;color:#0D3568;font-size:13px}
.cd2-les .cd2-subj{display:block;color:#6a6459;font-size:12px}
.cd2-les .cd2-t{display:block;color:#CE9660;font-weight:700;font-size:13px}
.cd2-les .cd2-tch{display:block;color:#938c7e;font-size:12px}
.cd2-les.lv-leave{background:#FFFFFF;border-left-color:#c94b43}
.cd2-les[style]{background:var(--lesson-bg);border-left-color:var(--lesson-color)}
.cd2-les[style] b{color:var(--lesson-text)}
.cd2-study{background:#f7f8fa;border-left-style:dashed;border-left-color:#c9bfb0}
.cd2-study b{color:#6e6a60;font-weight:600}
/* 角落备注：VIP 同堂超过 2 人（1V3/1V4…） */
.cd2-les{position:relative}
.cd2-les.has-note b{padding-right:34px}
.cd2-les .cd2-note{position:absolute;top:3px;right:4px;font-size:10px;font-weight:700;
  color:#B54F78;background:#fdf4f8;border:1px solid #e7c6d6;border-radius:8px;
  padding:0 5px;line-height:15px}
.cd2-study .cd2-note{background:#fff;color:#6e6a60;border-color:#e4dfd7}
.term-note{margin-left:6px;font-size:12px;font-weight:700;color:#B54F78;
  background:#fdf4f8;border:1px solid #e7c6d6;border-radius:8px;padding:1px 7px}
/* 学期视图深蓝班头 */
.cd2-hero{background:linear-gradient(135deg,#0D3568,#0D3568);color:#fff;border-radius:16px;
  padding:20px 26px;display:flex;align-items:center;gap:18px;margin:4px 0 14px;
  box-shadow:0 14px 32px rgba(13,53,104,.2)}
.cd2-hero-code{font-size:24px;font-weight:800;letter-spacing:.5px}
.cd2-hero-sub{font-size:13px;opacity:.85;margin-top:2px}
.cd2-hero-r{margin-left:auto;text-align:right;font-size:13px;opacity:.92;line-height:1.7}
.cd2-hero-period{color:#f0b27a;font-weight:700}
/* 班课页头两行式（2026-09-20）：第一行 班号｜学期课程安排；第二行 固定时间（橙色）；右侧 品牌+课程族 */
.cd2-hero-time{color:#f5b07f;font-size:16px;font-weight:700;margin-top:5px;letter-spacing:.5px}
.cd2-hero-brand{font-weight:700;font-size:14px}
.cd2-hero-rsub{opacity:.8;font-size:12px}
/* 列表行课程信息（仅 VIP：课次进度）——右对齐、灰色（Tiffany 2026-09-20） */
.term-cinfo{margin-left:auto;font-size:12px;font-weight:500;color:#8a97a1}
.term-cinfo.done,.term-cinfo.upcoming{color:#8a97a1}
.cd2-stuline{font-size:14px;color:#4a5a6a;margin:0 0 12px;font-weight:600}
.cd2-courselines{font-size:15px;color:#1f2d3a;font-weight:700;line-height:2;margin:0 0 12px}
.cd2-startline{font-size:14px;color:#6e6a60;font-weight:600}
/* 三张信息卡 */
.cd2-cards{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:18px}
.cd2-card{flex:1 1 220px;background:#f5f7fa;border:1px solid #f3efe8;border-radius:12px;padding:14px 16px}
.cd2-card-t{font-size:13px;color:#938c7e;font-weight:600;margin-bottom:6px}
.cd2-card-b{font-size:15px;color:#1f2d3a;font-weight:700;line-height:1.6}
.cd2-card-s{font-size:12px;color:#938c7e;margin-top:4px}
.cd2-start{margin-left:12px;font-size:13px;color:#938c7e;font-weight:600}
/* 学期布局：左主右栏 */
.cd2-termwrap{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap}
.cd2-term-main{flex:2 1 480px;min-width:320px}
.cd2-term-side{flex:1 1 300px;min-width:280px;display:flex;flex-direction:column;gap:14px}
/* 师资/研习卡 */
.cd2-bios{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.cd2-bio{background:#f5f7fa;border:1px solid #f3efe8;border-radius:12px;padding:14px 16px;flex:1 1 260px}
.cd2-bio-t{font-size:14px;color:#938c7e;font-weight:700;margin-bottom:8px}
.cd2-bio-item{margin-bottom:10px}
.cd2-bio b{color:#0D3568;font-size:15px}
.cd2-bio-courses{color:#B54F78;font-size:13px;margin-left:8px;font-weight:600}
.cd2-bio p{font-size:13px;color:#6a6459;line-height:1.8;margin:6px 0 0}
.cd2-bio-sub{font-size:13px !important}
.cd2-footnote{font-size:13px;color:#938c7e;margin:16px 0 4px}
.cd2-footer{font-size:13px;color:#938c7e;margin:14px 0 10px;text-align:left}
.cd2-print{border:0;background:var(--orange);color:#fff;font-size:15px;font-weight:800;
  padding:9px 22px;border-radius:10px;cursor:pointer;margin-bottom:18px}
.cd2-print:hover{background:#C93E00}
@media print{
  .sidebar,.topbar,.cd2-tabs,.cd2-print,.cd-classbar,.cd-studentbar{display:none !important}
  .main{margin:0 !important}
}

/* ── 在读学生：统计 chips + 搜索（2026-09-15）── */
.stu-toolbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:8px}
.stu-chips{display:flex;gap:8px;flex-wrap:wrap}
.stu-chip{padding:7px 16px;border-radius:999px;background:#fff;border:1px solid var(--line);
  color:var(--muted);font-size:14px;font-weight:600;text-decoration:none}
.stu-chip.on{background:var(--teal);border-color:var(--teal);color:#fff}
.stu-search input{width:220px}
.stu-note{font-size:13px;color:var(--muted);margin:0 0 14px}
.stu-card{padding:16px 18px}
.stu-card-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.stu-card-code{font-size:17px;font-weight:800;color:var(--ink);text-decoration:none}
.stu-card-code:hover{color:var(--teal)}
.stu-card-n{font-size:14px;font-weight:700;color:var(--accent);background:#fdf0e3;
  padding:2px 10px;border-radius:99px}
.stu-names{margin-top:10px}
.lvl-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--accent);margin-right:8px}
.lvl-dot.vip{background:#B54F78}

/* ── 班课课表：富卡片（2026-09-15）── */
.cls-rich{padding:18px 20px}
.cls-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.cls-code{margin:0;font-size:19px;font-weight:800;color:var(--ink)}
.cls-teachers{display:flex;gap:6px;flex-wrap:wrap}
.cls-teacher-tag{background:var(--teal);color:#fff;font-size:13px;font-weight:700;
  padding:3px 10px;border-radius:8px}
.cls-level{font-size:13px;color:var(--muted);margin:6px 0 2px;font-weight:600}
.cls-content-line{font-size:14px;color:var(--orange-d);background:#fdf4ea;
  border-left:3px solid var(--accent);padding:6px 10px;border-radius:0 8px 8px 0;margin:8px 0}
.cls-meta{display:flex;gap:18px;font-size:14px;color:#55606e;margin:8px 0;flex-wrap:wrap}
.cls-progress{font-size:14px;color:#55606e;margin:6px 0}
.cls-progress b{color:var(--ink)}
.cls-next{color:var(--muted);font-size:13px;margin-left:10px}
.cls-stu-head{font-size:14px;font-weight:700;color:var(--ink);margin:12px 0 8px}
.cls-stu-head .muted-mini{font-weight:400;margin-left:8px}
.ses-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(66px,1fr));gap:6px}
.ses-pill-form{margin:0;min-width:0}
.ses-pill-form .ses-pill{width:100%;cursor:pointer;font:inherit;text-align:center}
.ses-pill i{font-style:normal;font-weight:700;margin-left:3px}
.cls-skill-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  margin-top:12px;padding-top:10px;border-top:1px dashed var(--line)}
.cls-skill-actions .inline-form{margin:0}
.cls-footnote{margin-top:22px;font-size:13px;color:var(--muted);
  border-top:1px solid var(--line);padding-top:12px}
@media(max-width:700px){.ses-grid{grid-template-columns:repeat(3,1fr)}}

/* ═══════════════════════════════════════════════════════════════════════════
   VIP 课表 · 学期总览增强 + 完整视图右栏
   作用域全部限定在 .vip-minis / VIP 专属类内 —— 班级具体课表不受影响
   ═══════════════════════════════════════════════════════════════════════════ */
/* 月块整体纯白；「9月」标题条 = 浅米底深灰字（原来是深蓝封条，09-26 改） */
.vip-minis .term-mini{padding:0;overflow:hidden;background:#fff;border:1px solid #e6dcc9;border-radius:12px}
/* 「9月」标题条：深蓝封条 → 浅米底 + 深灰字（Tiffany 2026-09-26：深蓝色改为其他） */
.vip-minis .term-mini-label{margin:0;padding:7px 12px 8px;text-align:left;font-size:13px;
  font-weight:800;letter-spacing:2.5px;color:#4A443B;
  background:#F1EADB}
.vip-minis .term-mini-grid{padding:9px 10px 10px}
.vip-minis .term-mini-day{position:relative;padding:3px 0;box-sizing:border-box;min-height:26px;
  border-radius:6px;display:flex;flex-direction:column;align-items:center;justify-content:center;
  line-height:1.15}
.vip-minis .term-mini-day.has{font-weight:700}
.vip-minis .term-mini-day .hd{font-style:normal;font-size:7.5px;font-weight:800;letter-spacing:-.3px;
  margin-top:1px;white-space:nowrap;opacity:.95}
/* 节假日只标字、不加底色：日期与文字换色区分 */
.vip-minis .term-mini-day.h-off{color:#B54F78}
.vip-minis .term-mini-day.h-work{color:#41799D}
.vip-minis .term-mini-day.h-off .hd,
.vip-minis .term-mini-day.h-work .hd{color:inherit}
/* 科目图例 caption */
.term-legend{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin:2px 0 6px;
  font-size:12px;color:#6a6459;line-height:2}
.term-legend .lg-t{font-weight:800;color:#0D3568;font-size:13px}
.term-legend .lg{display:inline-flex;align-items:center;gap:5px}
.term-legend .sw{width:13px;height:13px;border-radius:4px;display:inline-block;box-sizing:border-box}
.term-legend .sw-txt{font-style:normal;font-size:11px;font-weight:800;padding:0 2px;color:#B54F78}
.term-legend .sw-txt.work{color:#41799D}
.term-legend .lg-t2{margin-left:auto;color:#a29a8b;font-size:12px}
/* 完整视图右栏：阶段卡 / 课程内容&目标 / 师资 / 研习 */
.vip-stage{background:linear-gradient(135deg,#0D3568,#0D3568);color:#fff;border-radius:14px;
  padding:14px 16px}
.vip-stage-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.vip-stage-head h3{margin:0;font-size:16.5px;font-weight:800;letter-spacing:.4px}
.vip-stage-badge{background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.5);
  color:#ffd9a8;font-size:12px;font-weight:700;border-radius:8px;padding:2px 9px}
.vip-stage-meta{font-size:13px;line-height:1.85;opacity:.92;margin-top:7px}
.vip-block,.vip-goals{background:#fff;border:1px solid #e6dcc9;border-radius:14px;padding:14px 16px}
.vip-block-t{font-size:14px;font-weight:800;color:#0D3568;margin-bottom:10px;
  padding-left:9px;border-left:3px solid #CE9660;line-height:1.2}
.vip-goal-item{padding:9px 0;border-bottom:1px dashed #efe7d8}
.vip-goal-item:last-child{border-bottom:0;padding-bottom:0}
.vip-goal-name{font-size:15px;font-weight:800;color:#0D3568;margin-bottom:6px}
.vip-goal-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin:0 6px 0 7px}
.vip-goal-name span{font-size:12px;font-weight:600;color:#938c7e;letter-spacing:.3px}
.vip-goal-list{margin:0 0 8px;padding-left:19px;font-size:13px;color:#1f2d3a;line-height:1.95}
.vip-goal-aim{background:#e6dcc9;border:1px solid #f0e3cd;border-radius:10px;padding:8px 11px;
  font-size:13px;color:#6a6459;line-height:1.85}
.vip-goal-aim b{color:#B54F78;font-weight:800;margin-right:6px}
.vip-teacher{padding:9px 0;border-bottom:1px dashed #efe7d8}
.vip-teacher:last-child{border-bottom:0;padding-bottom:0}
.vip-teacher-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.vip-teacher-h b{color:#0D3568;font-size:15px}
.vip-teacher p{margin:5px 0 0;font-size:13px;color:#6a6459;line-height:1.9}
.vip-study-lead{margin:0 0 8px;font-size:13px;font-weight:700;color:#1f2d3a}
.vip-study-list{margin:0;padding-left:18px;font-size:13px;color:#6a6459;line-height:2}
@media (max-width:900px){.cd2-term-side{width:100%}}

/* ── 2026-09-16 晚批次：班课/VIP 具体课表 三视图统一 + 右栏真实信息 + 课次可编辑 ── */
/* 左右分栏：主区 + 信息栏（月历/学期/完整三视图都带右栏） */
.cd2-layout{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap;margin-top:2px}
/* 月历 7 列硬性需要 ≥980px：主区优先拿满，右栏放不下时整体换到下方横排 */
.cd2-main{flex:1 1 660px;min-width:min(1000px,100%)}
.cd2-side{flex:1 1 320px;min-width:280px;display:flex;flex-direction:column;gap:12px}
@media (max-width:1420px){
  .cd2-side{flex:1 1 100%;flex-direction:row;flex-wrap:wrap;align-items:flex-start}
  .cd2-side>.info-card{flex:1 1 320px;min-width:0}
}
@media (max-width:1040px){.cd2-main{min-width:100%}}

/* 月历格式与老师课表完全对齐（.tm-cal 为准） */
.month-schedule.cd2-month.tm-cal .month-day{min-height:132px;border-radius:10px}
.month-schedule.cd2-month.tm-cal .month-day header b{font-size:13px;color:#6a6459;font-weight:600}
.month-lesson{cursor:pointer;position:relative}
.month-lesson:hover{box-shadow:0 4px 12px rgba(32,70,82,.16);transform:translateY(-1px);z-index:4}
.month-lesson .room{display:block;color:#a29a8b;font-size:11px}

/* 课表顶部图例（与老师课表同一套） */
.schedule-legend .lg{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#6a6459}
.schedule-legend .sw{width:13px;height:13px;border-radius:4px;display:inline-block;box-sizing:border-box}

/* 学期列表行可编辑 */
.term-row.clickable{cursor:pointer;border-radius:8px}
.term-row.clickable:hover{background:#f5f8fb}
.term-row-tch,.term-row-room{font-size:12px;color:#938c7e;white-space:nowrap}

/* 右栏信息卡 */
.info-card{background:#fff;border:1px solid #e6dcc9;border-radius:12px;padding:12px 14px}
.info-card-t{font-size:13px;font-weight:800;color:#0D3568;margin-bottom:8px;letter-spacing:.3px}
.info-card-text{font-size:13px;color:#6a6459;line-height:1.7;margin:0 0 8px}
.info-rows{display:flex;flex-direction:column;gap:5px;margin:0}
.info-rows>div{display:flex;gap:8px;align-items:flex-start}
.info-rows dt{flex:0 0 72px;white-space:nowrap;color:#938c7e;font-size:13px}
.info-rows dd{margin:0;flex:1;color:#26383f;font-weight:600;font-size:13px;word-break:break-word}
.info-list{margin:0;padding-left:16px;display:flex;flex-direction:column;gap:5px}
.info-list li{font-size:13px;color:#6a6459;line-height:1.65}
.info-outline{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;
  max-height:300px;overflow:auto}
.info-outline li{display:flex;align-items:center;gap:6px;font-size:12px;color:#3d4c59;
  padding:3px 6px;border-radius:7px;background:#f6f1e4}
.info-outline li.done{color:#8a857d;background:#f4f6f8}
.info-outline li.done .io-t{color:#b8876a}
.info-outline b{flex:0 0 36px;color:#0D3568}
.info-outline i{font-style:normal;color:#a29a8b;font-size:11px}
.info-outline .io-t{flex:0 0 84px;color:#CE9660;font-weight:700}
.info-outline .io-n{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.info-outline .io-x{flex:0 0 auto;color:#a29a8b;font-size:11px}
.info-empty{font-size:13px;color:#a29a8b}
.info-bio{padding:8px 0;border-top:1px dashed #efe7d8}
.info-bio:first-of-type{border-top:0;padding-top:0}
.info-bio b{font-size:13px;color:#0D3568}
.info-bio-c{font-size:12px;color:#938c7e;margin-left:6px}
.info-bio p{margin:4px 0 0;font-size:12px;color:#6e6a60;line-height:1.65}
.cd2-footnote{font-size:12px;color:#a29a8b;margin:10px 0 4px;line-height:1.7}

/* ── 2026-09-16 夜：布局比例修复（月历占满、内容居中）+ 教室安排课次卡可点 ── */
.room-lesson.clickable,.rw-lesson.clickable{cursor:pointer;transition:box-shadow .15s}
.room-lesson.clickable:hover{box-shadow:0 3px 12px rgba(13,53,104,.14)}
.rw-lesson.clickable:hover{box-shadow:inset 3px 0 0 var(--lesson-color,#9CA8CC),0 3px 10px rgba(13,53,104,.16)}
.rw-lesson[draggable="true"]{cursor:grab}
.rw-lesson.dragging{opacity:.4;cursor:grabbing}

/* ══ 2026-09-18 网页版批次 L：拖拽 2.0 + 轻提示 ══ */

/* 1) 老师课表 / 教室页课块右上角删除按钮 → hover（或键盘聚焦）才显形；月历视图始终隐藏 */
.lesson .lesson-delete-form{opacity:0;visibility:hidden;transition:opacity .12s}
.lesson:hover .lesson-delete-form,
.lesson:focus-within .lesson-delete-form{opacity:1;visibility:visible}
.month-lesson .lesson-delete-form{display:none}
@media (hover:none){
  /* 触屏没有 hover：按下去就显形，避免删不掉 */
  .lesson:active .lesson-delete-form{opacity:1;visibility:visible}
}

/* ══ 2026-09-18 批次 P：老师课表「月历 / 周历」鼠标悬停直接删课 ══
   红色 × 平时完全隐藏，鼠标移到课块上才浮现；点一下 = 删除这一次课，
   排课台 / 教室安排 / 课时统计同源同库，自动联动。 */
.tm-cal .month-lesson .lesson-delete-form,
.week-schedule-grid td.week-cell .lesson .lesson-delete-form{
  display:block;position:absolute;right:3px;top:3px;margin:0;z-index:3}
.tm-cal .month-lesson{padding-right:24px}
.tm-cal .month-lesson .lesson-delete-btn,
.week-schedule-grid td.week-cell .lesson .lesson-delete-btn{
  width:18px;height:18px;padding:0;border:0;border-radius:50%;
  font:700 13px/18px inherit;text-align:center;cursor:pointer;
  background:rgba(255,255,255,.94);color:#C94B43;
  box-shadow:0 1px 4px rgba(31,45,58,.18);opacity:.9}
.tm-cal .month-lesson .lesson-delete-btn:hover,
.week-schedule-grid td.week-cell .lesson .lesson-delete-btn:hover{
  background:#C94B43;color:#fff;opacity:1;transform:scale(1.08)}
.tm-cal .month-lesson:hover .lesson-delete-form,
.tm-cal .month-lesson:focus-within .lesson-delete-form,
.week-schedule-grid td.week-cell .lesson:hover .lesson-delete-form,
.week-schedule-grid td.week-cell .lesson:focus-within .lesson-delete-form{
  opacity:1;visibility:visible}
@media (hover:none){
  .tm-cal .month-lesson .lesson-delete-form,
  .week-schedule-grid td.week-cell .lesson .lesson-delete-form{opacity:1;visibility:visible}
}

/* 2) 拖拽落点：合法=陶土橙，非法（容量不足/冲突）=砖红，拖拽中同步给出文案 */
.rw-cell.drop-on{background:#fff4e3;box-shadow:inset 0 0 0 2px #CE9660}
.rw-cell.drop-bad{background:#fdeeed;box-shadow:inset 0 0 0 2px #D4574E}
.rw-cell.drop-same{background:#f6f2e9;box-shadow:inset 0 0 0 2px #e6dcc9}
.rw-drag-hint{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);z-index:60;
  background:#0D3568;color:#fff;border-radius:999px;padding:6px 14px;font:600 13px/1.4 inherit;
  box-shadow:0 6px 20px rgba(13,53,104,.28);pointer-events:none;opacity:0;transition:opacity .15s}
.rw-drag-hint.show{opacity:1}

/* 3) 全站轻提示 toast */
#mlToastBox{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);z-index:80;
  display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}
.ml-toast{background:#0D3568;color:#fff;border-radius:10px;padding:9px 16px;max-width:78vw;
  font:600 14px/1.45 inherit;box-shadow:0 8px 26px rgba(13,53,104,.3);
  opacity:0;transform:translateY(8px);transition:opacity .22s,transform .22s}
.ml-toast.show{opacity:1;transform:translateY(0)}
.ml-toast.warn{background:#D4574E}
.ml-toast.ok{background:#1D7A4F}
.ml-toast.info{background:#345282}

/* 教室页拖拽说明条 */
.room-drag-tip{margin:0 0 10px;padding:8px 12px;border-radius:8px;background:#EDF2F8;
  border:1px solid #e6dcc9;color:#6a6459;font-size:13px;line-height:1.6}

/* ══════════ 排课台右侧编辑面板（批次 M） ══════════ */
.lp-shell{display:grid;grid-template-columns:minmax(0,1fr) 420px;gap:0;align-items:start;}
.lp-shell.lp-solo{grid-template-columns:minmax(0,1fr);}
.lp-shell.lp-solo .lp-left{padding-right:0;}
.lp-left{min-width:0;padding-right:16px;}
.lp-pane{position:sticky;top:12px;background:#fff;border:1px solid #e6dcc9;border-radius:10px;
  display:flex;flex-direction:column;max-height:calc(100vh - 110px);overflow:hidden;}
.lp-head{background:var(--teal);color:#fff;padding:10px 14px;display:flex;
  justify-content:space-between;align-items:center;flex:0 0 auto;}
.lp-title{font-size:14px;font-weight:600;line-height:1.3;}
.lp-close{width:22px;height:22px;border-radius:50%;border:0;background:rgba(255,255,255,.18);
  color:#fff;font-size:15px;line-height:1;cursor:pointer;}
.lp-close:hover{background:rgba(255,255,255,.34);}
.lp-modes{display:flex;background:#fff;border-bottom:1px solid #efe7d8;flex:0 0 auto;}
.lp-mode{flex:1;padding:9px 2px;border:0;background:none;font-family:inherit;font-size:13px;
  color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;}
.lp-mode:hover{color:var(--teal);background:#f7fafd;}
.lp-mode.on{color:var(--teal);border-bottom-color:var(--accent);font-weight:600;}
.lp-body{padding:13px 15px;overflow-y:auto;flex:1 1 auto;}
.lp-foot{display:flex;justify-content:space-between;gap:8px;padding:10px 14px;
  border-top:1px solid #efe7d8;background:#fbfcfe;flex:0 0 auto;flex-wrap:wrap;}
.lp-foot .lp-grp{display:flex;gap:6px;}
.lp-card{background:#f7fafd;border:1px solid #e6dcc9;border-left:3px solid var(--accent);
  border-radius:6px;padding:9px 11px;margin-bottom:13px;font-size:13px;line-height:1.65;}
.lp-card .t{font-weight:600;color:var(--teal);font-size:14px;}
.lp-card .meta{color:var(--muted);font-size:12px;}
.lp-card .grid2{display:grid;grid-template-columns:1fr 1fr;gap:2px 10px;margin-top:6px;}
.lp-card .study{grid-column:1/-1;margin-top:5px;padding-top:5px;border-top:1px dashed #e6dcc9;
  color:#5c4a7a;}
.lp-sub{font-size:12px;color:var(--muted);margin:0 0 9px;}
.lp-f{margin-bottom:12px;}
.lp-f>label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px;}
.lp-f .hint{font-size:11px;color:#a79e8f;margin-top:4px;line-height:1.5;}
.lp-frow{display:grid;grid-template-columns:52px minmax(0,1fr);gap:8px;margin-bottom:12px;
  align-items:start;}
.lp-frow>.lb{font-size:12px;color:var(--muted);padding-top:4px;}
.lp-slots{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;}
.lp-slot{padding:5px 1px;border:1px solid #e6dcc9;background:#fff;border-radius:4px;cursor:pointer;
  font-size:11px;text-align:center;line-height:1.35;font-family:inherit;color:var(--muted);}
.lp-slot .t{display:block;font-weight:600;color:var(--ink);}
.lp-slot:hover{border-color:var(--teal);}
.lp-slot.on{background:var(--teal);border-color:var(--teal);color:#fff;}
.lp-slot.on .t{color:#fff;}
.lp-custom{display:flex;align-items:center;gap:4px;margin-top:6px;font-size:12px;color:var(--muted);flex-wrap:wrap;}
.lp-custom .lp-in{width:auto;padding:3px 6px;font-size:12px;}
.lp-tags{display:flex;flex-wrap:wrap;gap:5px;}
.lp-tag{padding:4px 9px;border-radius:12px;font-size:12px;cursor:pointer;border:1px solid #e6dcc9;
  background:#fff;color:var(--ink);display:inline-flex;align-items:center;gap:3px;font-family:inherit;}
.lp-tag:hover{border-color:var(--teal);}
.lp-tag.on{background:var(--teal);color:#fff;border-color:var(--teal);}
.lp-tag.off{background:#f1f4f8;color:#ded8c9;cursor:not-allowed;border-color:#f1ede6;}
.lp-tag .occ{background:var(--danger);color:#fff;border-radius:50%;width:14px;height:14px;
  display:inline-flex;align-items:center;justify-content:center;font-size:10px;}
.lp-tag.star{border-color:var(--accent);color:#8a6a3c;}
.lp-tag.on.star{background:var(--accent);border-color:var(--accent);color:#fff;}
.lp-chips{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:4px;}
.lp-chip{background:var(--teal);color:#fff;padding:3px 8px;border-radius:10px;font-size:12px;
  display:inline-flex;align-items:center;gap:4px;}
.lp-chip .x{cursor:pointer;opacity:.75;}
.lp-chip .x:hover{opacity:1;}
.lp-in,.lp-sel{width:100%;padding:5px 8px;border:1px solid #e6dcc9;border-radius:5px;
  font-size:13px;font-family:inherit;background:#fff;color:var(--ink);}
.lp-in:focus,.lp-sel:focus{outline:none;border-color:var(--teal);}
.lp-row2{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.lp-row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;}
.lp-msg{border-radius:5px;padding:6px 10px;font-size:12px;line-height:1.55;margin-top:6px;}
.lp-msg.bad{background:#fdf1f0;border-left:3px solid var(--danger);color:#a8392f;}
.lp-msg.good{background:#eef6f1;border-left:3px solid #2f7d5a;color:#22563d;}
.lp-msg.note{background:#f4f7fb;border-left:3px solid #ded8c9;color:#6a6459;}
.lp-msg.warn{background:#fdf6ec;border-left:3px solid #CE9660;color:#8a5a1f;}
.lp-msg.bad .lp-btn{margin-top:2px;}
.lp-btn{padding:5px 12px;border-radius:5px;border:1px solid #e6dcc9;background:#fff;
  font-family:inherit;font-size:13px;cursor:pointer;color:var(--ink);}
.lp-btn:hover{background:#f4f7fb;}
.lp-btn.pri{background:var(--teal);border-color:var(--teal);color:#fff;}
.lp-btn.pri:hover{background:#2b4470;}
.lp-btn.dgr{background:#fff;border-color:#e8b7b2;color:var(--danger);}
.lp-btn.dgr:hover{background:#fdf1f0;}
.lp-datechips{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:5px;}
.lp-datechip{background:#edf2f8;border:1px solid #e6dcc9;border-radius:12px;padding:2px 8px;
  font-size:12px;display:inline-flex;align-items:center;gap:4px;}
.lp-datechip .x{cursor:pointer;color:var(--danger);}
.lp-empty{padding:34px 14px;text-align:center;color:#a79e8f;font-size:13px;line-height:1.9;}
.lp-empty .big{display:block;font-size:26px;color:#e0d7c6;margin-bottom:8px;}

/* ══ 学员中控台 /students：左列表 + 右 420px 学员详情面板 ══════════ */
.stu-shell{display:grid;grid-template-columns:minmax(0,1fr) 420px;gap:0;align-items:start;}
.stu-left{min-width:0;padding-right:18px;}
.stu-pane{position:sticky;top:12px;background:#fff;border:1px solid #e6dcc9;border-radius:10px;
  min-height:216px;overflow:hidden;}
.stu-pane-empty{padding:44px 20px;text-align:center;color:#a79e8f;font-size:13px;line-height:2;}
.stu-pane-empty b{display:block;font-size:15px;font-weight:500;color:#345282;margin-bottom:5px;}
.stu-pane-empty span{color:#b4ab9b;}
.stu-pick{color:var(--teal);cursor:pointer;}
.stu-pick:hover{color:var(--orange-d);text-decoration:underline;}
.stu-pick.on{background:#345282;color:#fff;border-radius:999px;padding:1px 9px;text-decoration:none;}
.sp-head{background:var(--teal);color:#fff;padding:11px 14px;display:flex;align-items:center;gap:10px;}
.sp-avatar{width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.18);flex:none;
  display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:600;}
.sp-hmain{min-width:0;flex:1;}
.sp-name{font-size:15px;font-weight:600;line-height:1.3;}
.sp-sub{font-size:12px;color:#c3d4e4;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sp-course{font-style:normal;background:rgba(255,255,255,.16);border-radius:6px;padding:0 6px;margin-left:6px;}
.sp-close{color:#c3d4e4;font-size:17px;line-height:1;flex:none;}
.sp-close:hover{color:#fff;}
.sp-body{padding:12px 14px 14px;}
.sp-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:12px;}
.sp-stat{background:#f5f7fa;border-radius:8px;padding:7px 8px;text-align:center;}
.sp-stat span{display:block;font-size:12px;color:var(--muted);}
.sp-stat b{font-size:16px;color:#0D3568;}
.sp-sec-t{font-size:13px;font-weight:600;color:#6a6459;margin:0 0 6px;padding-top:10px;
  border-top:1px dashed #f0ebe3;display:flex;align-items:baseline;justify-content:space-between;}
.sp-sec-n{font-weight:400;font-size:12px;color:#b4ab9b;}
.sp-next{border-left:3px solid var(--orange);background:#fffaf4;border-radius:5px;padding:8px 10px;}
.sp-next-d{font-size:14px;font-weight:600;color:#0D3568;}
.sp-next-m{font-size:13px;color:#6a6459;margin-top:2px;}
.sp-room{color:#8f8879;margin-left:4px;}
.sp-none{font-size:13px;color:#b4ab9b;padding:5px 0;}
.sp-list{list-style:none;margin:0;padding:0;}
.sp-list li{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:13px;
  padding:5px 0;border-bottom:1px solid #f1f4f8;}
.sp-list li:last-child{border-bottom:none;}
.sp-d{color:#0D3568;font-weight:600;flex:none;}
.sp-t{color:#8f8879;flex:none;}
.sp-x{color:var(--ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sp-r{color:#8f8879;font-size:12px;}
.sp-lv{color:#8F3F3F;font-size:12px;}
.sp-info{font-size:13px;line-height:1.95;color:var(--ink);}
.sp-info span{display:inline-block;width:42px;color:var(--muted);}
.sp-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:13px;}
.sp-loading{padding:34px 14px;text-align:center;color:#b4ab9b;font-size:13px;}
/* 课次来源标注：班课（蓝）/ VIP（粉），仅用于「VIP 课表里混入的班课课次」 */
.sp-src{font-style:normal;font-size:11px;font-weight:700;line-height:15px;border-radius:6px;
  padding:0 5px;flex:none;color:#B54F78;background:#fdf4f8;border:1px solid #e7c6d6;}
.sp-src.bk{color:#345282;background:#EDF2F8;border-color:#345282;}
.les-src{font-size:10px;font-weight:700;line-height:15px;border-radius:6px;padding:0 5px;margin-left:5px;
  color:#345282;background:#EDF2F8;border:1px solid #345282;}
.term-src{font-size:11px;font-weight:700;line-height:15px;border-radius:6px;padding:0 5px;margin-left:6px;
  color:#345282;background:#EDF2F8;border:1px solid #345282;}
.term-src.vip{color:#B54F78;background:#FDF4F8;border-color:#E7C6D6;}
.month-lesson.cd2-banke{outline:1px dashed rgba(52,82,130,.45);outline-offset:-1px;}
.roster-edit.cen{border-color:#345282;color:#345282;font-weight:600;}
@media (max-width:1100px){
  .stu-shell{grid-template-columns:minmax(0,1fr);}
  .stu-left{padding-right:0;}
  .stu-pane{position:static;margin-top:14px;}
}


/* ============================================================================
   迈乐教务 · 只取色版（color-only，append-only）
   ----------------------------------------------------------------------------
   来源：`design_theme/palette-preview.html` 里那套定稿配色。
   与 theme-maile-c3.css 的区别：**只取色，不取形**。
     · 取：底色 / 线色 / 表头底 / 日历槽 / 状态药丸 / 小药丸 / 橙的用法
     · 不取：圆角三档（6/12/999）、色条 4px→6px、rw-lesson 实色块改浅底、
             编号牌 / 实心色块标题 / 虚线框（这些是"边的设计"，不是配色）
   纪律：本文只出现颜色声明（color / background / border-color / box-shadow 颜色）。
        不写 border-radius / border-width / padding / margin / font-size / 宽高，
        所以几何 100% 不变 —— 逐元素实测 0 位移。
   用法：整段追加到 app/static/style.css 末尾；删掉该段即回滚。
   ============================================================================ */


/* ============================================================================
   1. 颜色 token
      —— 只动"冷 → 暖"和新增档位，品牌蓝 #345282 / 强调橙 #CE9660
         / 状态三色（--ok/--warn/--danger）**全部保持原值**
   ============================================================================ */
:root{
  /* 底色：冷白 → 暖纸感 */
  --bg:          #FBF5E9;   /* 原 #f3f6fa */
  --card:        #FFFFFF;
  --card-warm:   #FFFDF7;   /* 次级卡面 / 浅色区块 */

  /* 线：冷灰 → 暖灰（原来是又冷又重的主分隔线色） */
  --line:        #E6DCC9;
  --line-soft:   #EFE7D8;
  --line-dash:   #C9BFB0;
  --line-cool:   #D6D1C7;   /* 需要保持中性时沿用（已脱离暖化映射，防二次替换）*/

  /* 文字 */
  --muted-warm:  #5C5850;

  /* 蓝：暖化两档 + 深一档（原 --teal-d 与 --teal 同值，等于没分档） */
  --beige:       #F1E9DA;   /* 原 #edf2f8 */
  --bluegray:    #4A6FA5;   /* 原 #4f84a1 */
  --teal-d:      #254376;   /* 原 #345282 —— 用于区块级色块 */

  /* 青绿：只做分类与装饰，不做状态 */
  --green:       #147773;
  --green-soft:  #57A79C;
  --green-bg:    #F1F7F5;
  --green-line:  #CFE5DE;

  /* 橙（暖底两档，橙值本身仍是 #CE9660） */
  --orange-bg:   #FDF7EF;
  --orange-line: #EBD5BC;
}


/* ============================================================================
   2. 壳：卡片 / 表格 / 输入控件
   ============================================================================ */
.stat,.panel,.class-card,.vip-card,.tablewrap{ border-color:var(--line); }

.grid th{ background:#F6F1E4; border-bottom-color:var(--line); }
.grid td{ border-bottom-color:var(--line-soft); }
.grid tr:hover td{ background:#FBF7EC; }

.field input,.field select,.field textarea,
.filterbar input,.filterbar select,
.roomrow input,.chip-search,.occ-t,.occ-mini,
.plan-table input,.plan-table select,
.candidate-form input,.candidate-form select,
.availability-form input,.availability-form select,
.applybox input,.applybox select,.applybox textarea,
.combo,.combo-list{ border-color:var(--line); }

.repeat-box{ border-color:var(--line-dash); background:#FBF7EC; }
.qa2-actions{ border-top-color:var(--line-soft); }
.qa2-repeat input{ border-color:var(--line); }


/* ============================================================================
   3. 日历 / 周视图沟槽
   ============================================================================ */
.calendar thead .datecell{ background:#F3EDDF; }
.calendar .slotname{ background:#F8F3E8; }
.calendar .slotname small{ color:#A69C8C; }
.calendar td.wknd{ background:#FCF8EF; }
.calendar td,.calendar th,.calendar thead th{ border-color:var(--line); }


/* ============================================================================
   4. 药丸 / 选择片
   ============================================================================ */
.chip span{ border-color:var(--line); background:var(--card); color:var(--muted-warm); }
.chip:hover span{ border-color:var(--teal); }
.chip input:checked + span{ background:var(--teal); border-color:var(--teal); color:#fff; }

.cal-day:hover{ background:#F8F3E8; }
.cal-day.disabled{ background:#F2EDE1; border-color:#DED8C9; }

.cell-more{ border-color:var(--line-dash); background:#F8F3E8; }
.cell-more:hover{ background:#F3EDDF; }
.cell-expanded .cell-more,.month-expanded .month-more{ background:#F3EDDF; }


/* ============================================================================
   5. 状态药丸：待上走"淡蓝底 + 品牌蓝字"，其余三态各自回位（语义不能糊）
       —— 原包写的是 `.state-badge{}`，会把已上/请假/调课一起吞成淡蓝，这里不复制那个坑
   ============================================================================ */
.state-badge.state-pending{
  background:#EBF0F7;
  border-color:#C3D0E0;
  color:var(--teal);
}
.state-badge.state-done{
  background:var(--green-bg);
  border-color:var(--green-line);
  color:#2F7A66;
}
.state-badge.state-leave{
  background:#FDF1F0;
  border-color:#F0CFCA;
  color:#8F3F3F;
}
.state-badge.state-change{
  background:var(--orange-bg);
  border-color:var(--orange-line);
  color:#8A6030;
}


/* ============================================================================
   6. 橙收口：橙只留给「冲突 / 提醒」，课次卡上的时间一律转灰
      （覆盖排课台 / 月历 / 学期视图 / VIP 卡四处，不留漏网的橙）
   ============================================================================ */
.lesson .t,
.month-lesson .t,
.tm-cal .month-lesson .t,
.cd2-les .cd2-t{ color:var(--muted); }

.lesson.conflict .t,
.lesson.is-warn .t,
.month-lesson.conflict .t,
.tm-cal .month-lesson.conflict .t{ color:var(--orange); }

.tm-cal .month-lesson.lv-vip .t{ color:#8F3B5C; }        /* VIP 卡时间维持玫红系 */


/* ============================================================================
   7. 课程卡：只换"底 / 边 / 字"的色，不动边框宽度与左色条
   ============================================================================ */
.tm-cal .month-lesson.lv-vip{ background:#FDF4F8; border-color:#EFD3E0; }
.tm-cal .month-lesson.lv-leave{ background:#FFF9F8; border-color:#F0CFCA; }
.tm-cal .month-lesson.lv-blocked{ background:#F6F2E9; }

.tm-cal .month-lesson .state-badge{ background:#F1F4F8; color:#34507A; }
.tm-cal .month-lesson.lv-vip .state-badge{ background:#FDF4F8; color:#8F3B5C; }
.tm-cal .month-lesson.lv-leave .state-badge{ background:#FFF9F8; border-color:#F0CFCA; color:#C94B43; }

.room-lesson{ background:var(--lesson-bg,#F9F7F1); border-left-color:var(--lesson-color,#43849B);
  color:var(--lesson-text,#1F2D3A); }

.cd2-les{ background:#F1F4F8; border-left-color:#0D3568; }
.cd2-les.lv-leave{ background:#FFF9F8; border-left-color:#C94B43; }


/* ============================================================================
   8. 小药丸（已上 / 待上 / 请假 / 课程族）
   ============================================================================ */
.mini-day.done{ background:var(--green-bg); color:#2F7A66; }
.mini-day.pending{ background:var(--orange-bg); color:#A8651A; }
.mini-day.leave{ background:#FDF1F0; color:#8F3F3F; }

.ses-pill.done{ background:var(--green-bg); border-color:var(--green-line); color:#2F7A66; }
.ses-pill.leave{ background:#FDF1F0; border-color:#F0CFCA; color:#8F3F3F; }

.term-pill.cls{ background:#EAF0F8; border-color:#41799D; color:#345282; }
.term-pill.vip{ background:#FDF4F8; border-color:#E7C6D6; color:#B54F78; }


/* ============================================================================
   9. 零星冷色收口（原来一律是冷蓝灰，与暖底打架）
   ============================================================================ */
.rw-cell.drop-same{ background:#F6F2E9; box-shadow:inset 0 0 0 2px var(--line-dash); }
.lp-datechip{ background:var(--beige); border-color:var(--line); }
.plan-intro{ background:#F7F2E6; border-color:var(--line); color:var(--muted-warm); }
.candidate-card{ border-color:var(--line); }

/* ── 2026-09-20：学期/完整视图两栏版式 —— 信息面板像「课程介绍」参考版式一样固定在右侧 ── */
.cd2-tf .cd2-main{min-width:0;flex:1 1 560px}
.cd2-tf .cd2-side{flex:0 0 340px;width:340px;min-width:0;flex-direction:column;position:sticky;top:14px;align-self:flex-start}
.cd2-tf .cd2-side>.info-card{flex:none;min-width:0}
/* 窄屏（<1080px）回到上下布局，右栏卡片横排铺底 */
@media (max-width:1080px){
  .cd2-tf .cd2-main{flex:1 1 100%}
  .cd2-tf .cd2-side{flex:1 1 100%;width:100%;position:static;flex-direction:row;flex-wrap:wrap}
  .cd2-tf .cd2-side>.info-card{flex:1 1 320px;min-width:0}
}

/* ── 2026-09-20 晚：无课程纲要（班级介绍）的班课 —— 右栏收窄 + 迷你月历缩小 ──
   雅思等班课没有按单元的大纲，右栏内容少，左长右短；收窄右栏、压缩月历留白 */
.cd2-side.side-narrow{flex:0 0 290px;width:290px;min-width:0}
.cd2-tf .cd2-side.side-narrow{flex:0 0 290px;width:290px}
.cd2-tf.no-intro .term-minis{gap:9px}
.cd2-tf.no-intro .term-mini{padding:7px}
.cd2-tf.no-intro .term-mini-label{font-size:12px;margin-bottom:4px}
.cd2-tf.no-intro .term-mini-grid{gap:1px}
.cd2-tf.no-intro .term-mini-wd{font-size:9px}
.cd2-tf.no-intro .term-mini-day{font-size:10px;padding:2px 0;border-radius:4px}
@media (max-width:1420px){
  .cd2-side.side-narrow{flex:1 1 100%;width:auto}
}
@media (max-width:1080px){
  .cd2-tf .cd2-side.side-narrow{flex:1 1 100%;width:100%}
}
/* 法定节假日「假期不上课」灰行：纯展示，不悬浮不成手型 */
.term-row-hol{cursor:default}
.term-row-hol:hover{background:transparent}
.term-row-hol .term-pill{font-weight:400}

/* ── 2026-09-20：信息面板内容库（课程阶段合并卡 + 缩略月历均衡分行） ── */
.info-stage{margin:2px 0 10px}
.info-stage-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.info-stage-head b{font-size:15px;color:#0D3568}
.info-stage-badge{font-size:11px;font-weight:700;color:#B54F78;background:#FBEEF3;
  border-radius:999px;padding:2px 9px}
.info-stage-lines{margin:0 0 6px;padding-left:0;list-style:none;display:flex;flex-direction:column;gap:5px}
.info-stage-lines li{font-size:12px;color:#3d4c59;line-height:1.65;padding-left:12px;position:relative}
.info-stage-lines li::before{content:"";position:absolute;left:0;top:.5em;width:5px;height:5px;
  border-radius:50%;background:#D9A441}
.info-stage-hours{font-size:12px;color:#B56F24;font-weight:700}
/* 缩略月历按数量均衡分行：mc2=2列 mc3=3列 mc4=4列（默认3列） */
.term-minis.mc2{grid-template-columns:repeat(2,minmax(0,1fr))}
.term-minis.mc4{grid-template-columns:repeat(4,minmax(0,1fr))}
@media(max-width:1040px){
  .term-minis.mc2,.term-minis.mc3,.term-minis.mc4{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:640px){
  .term-minis.mc2,.term-minis.mc3,.term-minis.mc4{grid-template-columns:minmax(0,1fr)}
}
/* VIP 学期视图（2026-09-25 Tiffany：赵一茉的月历卡太大）——
   月份只有 1–2 个时不再按 2 列把卡片拉宽，统一按 3 列自然宽度排；
   卡片宽度与班课学生课表的月份卡对齐（VIP 主区还有 340px 右栏，2 列会撑到近 2 倍宽）。 */
@media(min-width:1041px){
  .term-minis.vip-minis.mc1,.term-minis.vip-minis.mc2{grid-template-columns:repeat(3,minmax(0,1fr))}
}
/* 设置页横幅 */
.ok-banner{background:#EAF6EC;border:1px solid #BFE3C6;color:#1E7B34;border-radius:10px;
  padding:10px 14px;font-size:13px;margin:0 0 14px}
.err-banner{background:#FDECEA;border:1px solid #F5C6C0;color:#B3261E;border-radius:10px;
  padding:10px 14px;font-size:13px;margin:0 0 14px}

/* ── 2026-09-20 晚：班课页头/卡片 + 班级信息与单元大纲信息卡 ── */
.cd2-tname{color:#0D3568;font-size:16px}
.info-kv{display:flex;flex-direction:column;gap:6px;margin:2px 0 4px}
.info-kv-line{font-size:12.5px;line-height:1.7;color:#3d4c59}
.info-kv-line b{color:#0D3568;font-weight:700;margin-right:2px}
.info-units{display:flex;flex-direction:column;gap:4px;margin-top:2px}
.info-unit-h{font-size:12.5px;font-weight:800;color:#B56F24;margin:8px 0 2px}
.info-unit-h:first-child{margin-top:0}
.info-unit-row{display:flex;gap:7px;align-items:baseline;font-size:12px;color:#3d4c59;line-height:1.6}
.info-unit-row .n{flex:0 0 18px;font-weight:800;color:#0D3568}
.info-unit-row i{flex:0 0 52px;font-style:normal;color:#B54F78;font-weight:600;font-size:11px}
.info-unit-row .c{flex:1}

/* ── 2026-09-25 教室页周视图「视觉减负」（Tiffany：布局太拥挤）─────────────
   只改观感与留白，不动信息、不动交互、不动拖拽口径。四件事：
     ① 场地底色从每格满版蓝/杏退到近白 —— 彩色只留给课次卡，网格安静下来；
     ② 每天重复的「教室」行去掉格子感，压成一条浅色分隔；
     ③ 行高改自适应（空行 46、有课自己撑开），格子内距放宽；
     ④ 课次卡由四行收成两行（标题 · 时间/老师），不再挤成一团。 */
.room-week-grid-table th,.room-week-grid-table td{border-color:#f0ebe0;padding:7px 8px}
.room-week-grid-table .rw-day-rooms-row th,
.room-week-grid-table .rw-day-rooms-row .rw-dc{background:#faf7f0;border-color:transparent;
  font-size:11px;font-weight:600;color:#a29a8b;padding:3px 5px}
/* 分界金线在这条浅分隔条上要留着（否则两组场地在教室名行断开） */
.room-week-grid-table .rw-day-rooms-row .rw-dc.rw-gap{border-right-color:#d8bd93}
.rw-cell.loc-2302{background:#F1F6FC}
.rw-cell.loc-2312{background:#FDF7EA}
.rw-cell{height:auto;min-height:46px;vertical-align:top;padding:5px 7px}
.rw-day-head td{border-top:4px solid #0D3568;border-bottom-color:#f0ebe0;padding:9px 10px}
.rw-group-row .rw-group-head{border-color:#f0ebe0;letter-spacing:1px;padding:7px 8px}
.rw-lesson{padding:5px 8px;margin:0 0 6px;border-radius:7px;line-height:1.35}
.rw-lesson:last-child{margin-bottom:0}
.rw-lesson b{font-size:13px;line-height:1.3}
.rw-lesson .rw-meta{display:block;font-size:11.5px;opacity:.78;margin-top:1px;
  font-variant-numeric:tabular-nums}
/* 场地分界金线在浅底上要更细一点，别像一根柱子 */
.rw-room.rw-gap,.rw-dc.rw-gap,.rw-cell.rw-gap{border-right:2px solid #d8bd93}
/* 左时刻列：底色压淡，与格子落差缩小 */
.rw-slot{background:#f8f5ee;border-left:3px solid #2b4a74}
/* 每日 / 每月视图同源减负：网格线压淡、表头与首列统一成暖白、
   卡内「改教室」控件收成一行（原来 select／保存／修改课程 各占一行，把行高顶到 140px） */
.room-week th,.room-week td{border-right-color:#f0ebe0;border-bottom-color:#f0ebe0}
.room-week thead th{background:#f7f3ea}
.room-week tr>th:first-child{background:#faf7f0;color:#6a6459;font-weight:700;font-size:13px}
/* 每月视图：教室名贴行首，别悬在高行的正中（一行常常高过 300px，看着像断开了） */
.room-week-month tr>th:first-child{vertical-align:top;padding-top:9px}
.room-edit{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:6px}
.room-edit form{display:flex;gap:4px;align-items:center;margin:0;width:100%}
.room-edit select{flex:1 1 auto;min-width:56px;max-width:none;width:auto;padding:4px 6px}
.room-edit .btn{flex:0 0 auto;padding:4px 9px}
.room-edit>a{margin-top:0;font-size:12px;white-space:nowrap}

/* ── 2026-09-26 教室页周视图「综合版」（Tiffany：综合 A/B/C、以 B 为底）─────────
   ① 时间轴柔和化：B 的深蓝反白竖条太突兀 → 浅蓝灰底 + 中蓝左边线，钟点保持深蓝粗字；
   ② 双场地冷蓝 / 暖杏格底保留并略加深（蓝 vs 米色就是两个场地的区别）；
   ③ 行高收紧到 44（C 的紧凑）；课块标题单行截断兜底、名字班级名不折行；
     时间·老师行只许在「·」处分界，老师名整体不拆（宁可落到第三行也不拆字）；
   ④ 上端教室名 + 日期强调：教室名行加粗放大并按组上色，「周X」17px 粗字、日期加深；
   ⑤ 教室名首字母突出（Tiffany 2026-09-26 更正：突出的是教室名如 Access 的 A，不是老师名）。 */
.rw-slot{background:#EDF2F8;border-left:3px solid #A8C0DC}
.rw-slot .slot-name{color:#7C8DA6}
.rw-slot .slot-time{color:#0D3568}
.rw-cell.loc-2302{background:#EAF2FB}
.rw-cell.loc-2312{background:#FBF3E1}
.rw-cell{min-height:44px;padding:4px 6px}
.rw-lesson{padding:4px 6px}
/* 标题按「、」「·」分段换行（模板已切成 .rw-t 小段），段内不折行：名字只在分段处换行，绝不拆字截断 */
.rw-lesson b{font-size:12.5px;line-height:1.35;overflow:hidden;max-width:100%}
.rw-lesson b .rw-t{white-space:nowrap}
/* 多学员格（1V2 全名 / 1V3 留姓）：字号降一档 + 行高收紧 —— 名字恢复全名但不把格子撑高
   （Tiffany 2026-09-30：恢复全名、缩小字体、不要太多拉伸单元格） */
.rw-lesson b.is-multi{font-size:11.5px;line-height:1.25}
.rw-lesson b.is-multi .rw-sub{font-size:10.5px;margin-left:3px}
.rw-lesson .rw-meta{overflow:hidden;max-width:100%}
/* 每天行首的教室名：从 11px 灰字小条 → 12.5px 粗字 + 组色底，和上方课格对得上列 */
.room-week-grid-table .rw-day-rooms-row .rw-dc{font-size:12.5px;font-weight:800;
  padding:5px 6px;color:#3c4a58;background:#f4eedf}
.room-week-grid-table .rw-day-rooms-row .rw-dc.loc-2302{background:#E1EDF9;color:#0D3568}
.room-week-grid-table .rw-day-rooms-row .rw-dc.loc-2312{background:#F8ECD4;color:#8a5a1e}
/* 表头教室名同样抬一级 */
.rw-room{font-size:15px;letter-spacing:1px}
/* 日期条：周X 加大加粗、日期加深 */
.rw-day-label b{font-size:17px}
.rw-day-label span{color:#6E675C;font-weight:700}
/* 教室名首字母突出（Access 的 A）；老师名恢复正常、仅整名不拆字 */
.rw-room::first-letter{font-size:1.3em}
.room-week-grid-table .rw-day-rooms-row .rw-dc::first-letter{font-size:1.3em}
.rw-lesson .rw-teacher{display:inline-block;font-style:normal;white-space:nowrap}

/* ══════════════════════════════════════════════════════════════════════════
   学生课表三视图（Tiffany 2026-09-25）
   周历 / 月历 / 完整；月历与完整视图带苹果日历四档密度：紧凑 / 叠放 / 详细信息 / 列表
   风格 = 迈乐暖白（B）：米白 #FBF5E9 / 卡 #FFFDF8 / 线 #E6DCC9 / 品牌蓝 #0D3568 + 橙 #CE9660
   ══════════════════════════════════════════════════════════════════════════ */

/* ── 密度切换条（靠右、带图标的分段按钮 —— 与最初预览 demo 一致） ── */
.cd2-dens{display:flex;gap:2px;justify-content:flex-end;padding:10px 0 0;margin:0}
.cd2-dens-a{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:9px;
  font-size:12.5px;color:#8A8377;text-decoration:none}
.cd2-dens-a:hover{background:#F1EADB;color:#0D3568}
.cd2-dens-a.on{background:#F1EADB;color:#0D3568;font-weight:700}
.cd2-dens-a svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.6}

/* ── 月历日期数字（仅学生课表 / VIP 课表这几页，老师课表不受影响） ──
   ⚠️ 必须带满 .month-schedule.cd2-month.tm-cal 这条链：旧的
   `.month-schedule.cd2-month.tm-cal .month-day header b{font-size:13px;...}` 权重是 0-4-2，
   少写一层就会被它压掉（日期数字不放大）。
   字号 21px/800 → 17px/700（Tiffany 2026-09-26：21 过分大粗）；
   数字颜色 = 深暖灰（Tiffany 2026-09-26：不要蓝，配米白底 #4A443B） */
.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{font-size:17px;font-weight:700;
  color:#4A443B;letter-spacing:.3px}
.month-schedule.cd2-month.tm-cal .month-day header{align-items:center;margin-bottom:6px}
.month-schedule.cd2-month.tm-cal .month-day header span{font-weight:600}

/* ── 周历视图：时段 × 七天 ── */
.wk-wrap{background:#EFE7D8;border:1px solid #E6DCC9;border-radius:12px;overflow:auto}
.wk-table{width:100%;border-collapse:separate;border-spacing:1px;table-layout:fixed;min-width:900px}
.wk-table th{font-weight:600}
.wk-table .wk-seg{width:94px;background:#F6F1E4;border-radius:8px;padding:8px 10px;
  text-align:left;font-size:12px;color:#8A8377;vertical-align:middle}
.wk-table .wk-seg b{display:block;font-size:13px;color:#0D3568;font-weight:800}
.wk-table .wk-seg small{font-size:11px;font-variant-numeric:tabular-nums}
.wk-table .wk-day{background:#F6F1E4;border-radius:8px;padding:8px 4px;text-align:center;
  font-size:12px;color:#8A8377}
.wk-table .wk-day b{display:block;font-size:14px;color:#0D3568;font-weight:800}
.wk-table .wk-day small{font-size:11px;font-variant-numeric:tabular-nums}
.wk-table .wk-day.wknd{background:#F1EADB}
.wk-table .wk-day.today{background:#0D3568}
.wk-table .wk-day.today b,.wk-table .wk-day.today small{color:#fff}
.wk-table td{background:#FFFDF8;border-radius:8px;padding:5px;height:80px;vertical-align:top}
.wk-table td.has{background:#FFFDF8}
.wk-les{display:flex;flex-direction:column;gap:1px;padding:5px 7px;margin-bottom:4px;
  border-radius:8px;background:var(--lesson-bg,#F1F4F8);
  border-left:3px solid var(--lesson-color,#345282);
  color:var(--lesson-text,#33475F);cursor:pointer;transition:box-shadow .12s}
.wk-les:last-child{margin-bottom:0}
.wk-les:hover{box-shadow:0 2px 10px rgba(13,53,104,.16)}
.wk-les .wk-t{font-size:11px;font-weight:800;font-variant-numeric:tabular-nums;
  color:var(--lesson-text,#345282)}
.wk-les .wk-n{font-style:normal;font-size:12px;line-height:1.3;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wk-les .wk-tch{font-size:11px;color:#8A8377;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wk-les .state-badge{align-self:flex-start;margin-top:2px}
.wk-les.lv-vip{background:#FDF4F8;border-left-color:#B54F78;color:#8F3B5C}
.wk-les.lv-vip .wk-t{color:#B54F78}
.wk-les.lv-leave{background:#FFF6F5;border-left-color:#c94b43;color:#8f3f3f}
.wk-les.lv-leave .wk-t{color:#c94b43}
.wk-les.lv-blocked{background:#F2F3F5;border-left-color:#c9bfb0;color:#938c7e}
.wk-les.lv-blocked .wk-t{color:#938c7e}
.wk-hint{margin:10px 2px 0;font-size:12.5px;color:#8A8377;line-height:1.75}
.wk-hint b{color:#0D3568}

/* ── 月历四档密度：紧凑 / 叠放（只留标记）/ 列表（标记 + 下方按天列表） ── */
.month-schedule.cd2-month.tm-cal.dens-compact .month-day,
.month-schedule.cd2-month.tm-cal.dens-stack .month-day,
.month-schedule.cd2-month.tm-cal.dens-list .month-day{min-height:96px}
.dens-compact .month-lesson,
.dens-list .month-lesson{display:inline-block;width:8px;height:8px;min-height:0;
  margin:3px 3px 0 0;padding:0!important;border:0!important;border-radius:50%!important;
  background:var(--lesson-color,#345282)!important;box-shadow:none!important;
  overflow:hidden;font-size:0!important;line-height:0!important}
.dens-compact .month-lesson>*,
.dens-list .month-lesson>*{display:none!important}
.dens-stack .month-lesson{display:block;height:8px;min-height:0;margin:3px 0;
  padding:0!important;border:0!important;border-radius:999px!important;
  background:var(--lesson-color,#345282)!important;box-shadow:none!important;
  overflow:hidden;font-size:0!important;line-height:0!important}
.dens-stack .month-lesson>*{display:none!important}
.dens-compact .month-lesson.lv-vip,.dens-stack .month-lesson.lv-vip,
.dens-list .month-lesson.lv-vip{background:#B54F78!important}
.dens-compact .month-lesson.lv-leave,.dens-stack .month-lesson.lv-leave,
.dens-list .month-lesson.lv-leave{background:#c94b43!important}
.dens-compact .month-lesson.lv-blocked,.dens-stack .month-lesson.lv-blocked,
.dens-list .month-lesson.lv-blocked{background:#c9bfb0!important}
.dens-compact .month-day .holiday-note,
.dens-stack .month-day .holiday-note,
.dens-list .month-day .holiday-note{font-size:11px}

/* ── 月历「详细信息」档：课次卡收成预览 demo 的小条卡
   （时间加色 + 标题 + 老师，单行超出截断；点卡仍进编辑面板） ── */
.month-schedule.cd2-month.tm-cal.dens-detail .month-day{min-height:104px}
.month-schedule.cd2-month.tm-cal.dens-detail .month-lesson{padding:2px 6px;font-size:11.5px;
  line-height:1.5;border-radius:6px;margin:3px 0;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis}
.month-schedule.cd2-month.tm-cal.dens-detail .month-lesson b{font-size:11.5px}
.month-schedule.cd2-month.tm-cal.dens-detail .month-lesson .t{font-size:11px}
.month-schedule.cd2-month.tm-cal.dens-detail .month-lesson .tch{display:inline;font-size:11px;
  color:#8A8377;margin-left:4px}
/* VIP 学生月历卡：老师单列小字（不再并标题；Tiffany 2026-09-27 批次11） */
.month-lesson.cd2-les .tch{display:inline;font-size:11px;color:#8A8377;margin-left:4px}

/* ── 月历「列表」档：下方按天逐条列 ── */
.cd2-daylist{display:none}
.cd2-daylist.on{display:block;margin-top:18px;border-top:1px solid #E6DCC9;padding-top:10px}
.cd2-dl-title{font-size:14px;font-weight:800;color:#0D3568;margin-bottom:6px}
.cd2-dl-day{display:flex;gap:12px;padding:8px 2px;border-bottom:1px dashed #EFE7D8}
.cd2-dl-day:last-child{border-bottom:0}
.cd2-dl-date{flex:0 0 132px}
.cd2-dl-date b{display:block;font-size:13.5px;font-weight:800;color:#0D3568;
  font-variant-numeric:tabular-nums}
.cd2-dl-date small{font-size:11.5px;color:#8A8377}
.cd2-dl-rows{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
.cd2-dl-row{display:flex;align-items:center;gap:10px;padding:4px 8px;border-radius:8px;
  background:var(--lesson-bg,#F7F4EC);border-left:3px solid var(--lesson-color,#345282);
  cursor:pointer}
.cd2-dl-row:hover{filter:brightness(.98)}
.cd2-dl-t{flex:0 0 104px;font-size:12.5px;font-weight:700;color:var(--lesson-text,#33475F);
  font-variant-numeric:tabular-nums}
.cd2-dl-tch{font-size:12px;color:#8A8377}
.cd2-dl-row .term-pill.vip{background:#fff}

/* ── 完整视图：缩略月历（与最初预览 demo 对齐） ──
   格内不写科目文字（Tiffany 2026-09-26：恢复预览样式）；
   有课日 = 浅底 + 底部彩色条（subject_cell_paint 内联），叠放/详细信息/列表三档同一样式；
   紧凑档 = 卡片虚线框 + 圆点，节假日小字收起。 */
.tm-mark{display:none}
.tm-lab{display:none}
.cd2-tf .term-minis.dens-compact .term-mini{border-style:dashed}
.cd2-tf .term-minis.dens-compact .term-mini-day{min-height:26px;padding-top:4px}
.cd2-tf .term-minis.dens-compact .term-mini-day .hd{display:none}
/* 圆点只出在「有课」的日子（.has 带 subject_cell_paint 内联 --cell-dot），
   没课的格子 --cell-dot 未定义，若不加 .has 限定会全员显示圆点 */
.cd2-tf .term-minis.dens-compact .term-mini-day.has .tm-mark{display:block;width:5px;height:5px;
  border-radius:50%;margin:2px auto 0;background:var(--cell-dot,#345282)}

/* ── 完整视图：按月列表改「同一天只写一次日期」 ── */
.term-group-label{display:flex;align-items:baseline;gap:8px}
.term-group-n{font-size:11.5px;font-weight:600;color:#8A8377}
.term-daylist{background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:2px 14px}
.term-day{display:flex;gap:14px;padding:9px 2px;border-bottom:1px dashed #efe7d8}
.term-day:last-child{border-bottom:0}
.term-day-date{flex:0 0 118px;font-size:14px;font-weight:800;color:#0D3568;
  font-variant-numeric:tabular-nums;line-height:1.75}
.term-day-rows{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.term-day-rows .term-row{padding:3px 4px;border-bottom:0;border-radius:8px;gap:12px}
.term-day-rows .term-row.clickable:hover{background:#FAF7F0}
.term-day-rows .term-row-time{flex:0 0 108px}

/* ══════════════════════════════════════════════════════════════════════════
   2026-10-06 联动收口批次（Tiffany）——
   ① 排课台三档视图切换条（完整周课表 / 老师维度 / 学员维度）
   ② 教室页格子长宽比例放大（行高 44→60，时间列 104→92，卡片内距加大）
   ③ 老师维度网格里的「不可排」只读卡
   ══════════════════════════════════════════════════════════════════════════ */

/* ① 排课台三档视图切换条（2026-10-06；18:20 加大加粗 + 实色橙选中态，原来太素）
   注意：按钮类名用 lp-viewbtn，不能叫 lp-mode —— .lp-mode/.lp-modes 是右侧排课
   面板的「修改/新排课/调课/加课」页签，lesson_panel.js 靠 .lp-mode 查询。 */
.lp-modebar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  background:#fff;border:1px solid var(--line,#E6DCC9);border-left:4px solid var(--orange,#CE9660);
  border-radius:12px;padding:13px 16px;margin:0 0 12px;
  box-shadow:0 3px 12px rgba(13,53,104,.06)}
.lp-viewswitch{display:flex;gap:10px;flex-wrap:wrap}
.lp-viewbtn{display:inline-flex;align-items:center;justify-content:center;
  padding:10px 22px;border-radius:10px;font-size:15px;font-weight:700;letter-spacing:.5px;
  text-decoration:none;white-space:nowrap;transition:.15s;
  background:#FBF5E9;border:1px solid #E6DCC9;color:#0D3568}
.lp-viewbtn:hover{background:#F4EADA;border-color:#DCD0B8;color:#0D3568}
.lp-viewbtn.is-on{background:var(--orange,#CE9660);border-color:var(--orange,#CE9660);color:#fff;
  box-shadow:0 3px 10px rgba(206,150,96,.38)}
.lp-viewbtn.is-on:hover{background:#C4884F;border-color:#C4884F;color:#fff}
.lp-modehint{font-size:13px;color:#8A8377;font-weight:600;margin-left:auto}

/* ② 选中「老师课表 / 学生课表」后，下面直接罗列可选项（一排 chips，不藏在下拉里） */
.lp-picker{flex:1 1 100%;width:100%;border-top:1px dashed #E6DCC9;margin-top:4px;padding-top:8px}
.lp-pickrow{display:flex;align-items:flex-start;gap:12px;padding:6px 0}
.lp-pickrow + .lp-pickrow{border-top:1px dashed #F2EBDD}
.lp-picklabel{flex:0 0 64px;font-size:13px;font-weight:700;color:#0D3568;
  letter-spacing:.5px;padding-top:6px;white-space:nowrap}
.lp-chips{display:flex;flex-wrap:wrap;gap:7px;flex:1 1 auto}
.lp-chip{display:inline-flex;align-items:center;padding:5px 13px;border-radius:999px;
  border:1px solid #E6DCC9;background:#fff;color:#3C4A5C;font-size:13px;
  text-decoration:none;white-space:nowrap;transition:.12s}
.lp-chip:hover{background:#FBF5E9;border-color:#DCD0B8;color:#0D3568}
.lp-chip.is-on{background:#0D3568;border-color:#0D3568;color:#fff;font-weight:700}

/* ③ 不可排卡（老师维度）：虚线描边、灰底，明确「不可编辑」 */
.lesson.qa-lesson.lv-blocked{cursor:not-allowed;border:1px dashed #C9BFB0;
  background:#F2F3F5;color:#8A8377;box-shadow:none}
.lesson.qa-lesson.lv-blocked b{color:#8A8377;font-weight:700}

/* ② 教室页周视图：格子长宽比放大 —— 时间列收窄给教室列让宽，行高抬到 60，卡片内距加大 */
.rw-col-time{width:92px}
.rw-cell{min-height:60px;height:auto;padding:6px 7px}
.rw-lesson{padding:6px 8px;border-radius:8px;margin:0 0 7px}
.rw-lesson b{font-size:13px;line-height:1.32}
.rw-lesson .rw-meta{font-size:12px;margin-top:2px}
.rw-slot{padding:8px 8px}
.rw-slot .slot-name{font-size:13.5px}
.rw-slot .slot-time{font-size:12.5px}
/* 表头与每日教室名行也跟着抬一点，跟加高后的格子对得上 */
.room-week-grid-table .rw-day-rooms-row .rw-dc{padding:6px 6px}
.rw-room{padding:7px 8px}

/* ── 仪表盘：在读学员快速维护 + 核心信息（Tiffany 2026-10-06）──────────── */
.dash-quick{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.dash-quick input{min-width:240px;flex:1 1 240px}
.dash-quick select{min-width:190px;flex:0 1 220px}
.dash-tip{margin:10px 0 0;font-size:12px;color:#8A8377;line-height:1.65}
.dash-maint .dash-note,.dash-core .dash-note{font-size:12px;font-weight:400;color:#8A8377;
  margin-left:8px;letter-spacing:0}
.dash-coreform{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px 16px;align-items:end}
.dash-coreform label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:#8A8377;font-weight:600}
.dash-coreform input{border:1px solid #E6DCC9;border-radius:9px;padding:7px 10px;font-size:14px;
  background:#fff;color:#0D3568}
.dash-corebtns{grid-column:1/-1;display:flex;justify-content:flex-end}
@media (max-width:900px){.dash-coreform{grid-template-columns:1fr}}

/* ══════════════════════════════════════════════════════════════════════════
   2026-10-06 批次③ 课表「按月列表」行：去重 + 宽高统一（Tiffany）
   原样（VIP 完整视图）：一行塞 6 项 —— 时间 / 课次卡 / 1V3 / 第 N/M 次 / 1V3 / 老师，
   其中「1V3」出现两遍（来源徽标 + 同堂备注）、课次进度出现两遍（课次卡里的 N/M
   小胶囊 + 右侧「第 N/M 次」）。实测 1250 宽下长科目名那行：课次卡被挤到 49px
   （两行）、整行 55px，而普通行 35px、研习行 31px —— 一排被挤爆、宽高不齐。
   现在：每件事只说一次；行不再换行；老师列统一贴右；所有行等高 35px。
   只作用于「按月列表」（.term-day-rows），周二/月历卡片一律不动。 */
.term-day-rows .term-row{min-height:35px;gap:12px}
/* 课次卡：不换行（超长走省略号）、高度写死 —— 里面那个 N/M 胶囊是 inline-block，
   靠基线对齐会多顶出 2px（29→31），整行跟着 35→37；写死高度才是真等高。
   研习卡 25px 保留「降一级」的观感，行高由上面的 min-height 兜平。 */
.term-day-rows .term-row>.term-pill{
  display:block;flex:0 1 auto;min-width:0;
  height:29px;line-height:21px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.term-day-rows .term-row>.term-pill.study{height:25px;line-height:19px}
/* 来源徽标（1V1/1V3/班课）：紧贴课次卡，间距与其他列一致（原来是 12+6 两种间距） */
.term-day-rows .term-row>.term-src{margin-left:0;flex:0 0 auto}
/* 课次备注：跟着徽标走（不再 margin-left:auto 抢走老师的贴右位） */
.term-day-rows .term-row>.term-cinfo,
.term-day-rows .term-row>.term-note{margin-left:0;flex:0 0 auto;white-space:nowrap}
/* 老师：永远贴右对齐 —— 一行里最后一列恒定，班课 / VIP / 老师课表三处同一个位置 */
.term-day-rows .term-row>.term-row-tch{margin-left:auto;text-align:right;white-space:nowrap}
