/* ==========================================================================
   班级大屏 v2 视觉层（2026-10-17）
   --------------------------------------------------------------------------
   只作用于 #screen / 待机首页 / 登录绑定 / 全屏工具条，不改老师面板结构。
   加载顺序：theme.css → classroom-display.css → classroom-v2.css
   目标：与已确认的柔和紫 / 薄荷 / 浅橙风格一致；Win7 Chromium 108 可用。
   ========================================================================== */

:root {
  --v2-bg: #F2F3F7;
  --v2-card: #FFFFFF;
  --v2-ink: #17181C;
  --v2-muted: #727583;
  --v2-line: #E7E9F0;
  --v2-violet: #7B61FF;
  --v2-violet-ink: #5A44D8;
  --v2-violet-soft: #F0ECFF;
  --v2-mint: #42C58A;
  --v2-mint-ink: #1E7B50;
  --v2-mint-soft: #E7F9F0;
  --v2-peach: #F08A5D;
  --v2-peach-ink: #A64B24;
  --v2-peach-soft: #FFF1E9;
  --v2-radius: 24px;
  --v2-shadow: 0 12px 32px rgba(23,24,28,.06), 0 1px 2px rgba(23,24,28,.04);
}

#screen {
  --home-bg: var(--v2-bg);
  --home-card: var(--v2-card);
  --home-text: var(--v2-ink);
  --home-muted: var(--v2-muted);
  --home-border: var(--v2-line);
  --home-accent: var(--v2-violet);
  --home-soft: var(--v2-violet-soft);
  --home-track: #EDEFF4;
  --home-shadow: var(--v2-shadow);
  --home-radius: var(--v2-radius);
  --home-label: calc(clamp(13px, .9vw, 20px) * var(--fs));
  --home-title: calc(clamp(17px, 1.2vw, 26px) * var(--fs));
  background:
    radial-gradient(1200px 620px at 88% -12%, #ECE7FF 0%, rgba(236,231,255,0) 62%),
    radial-gradient(900px 520px at -5% 105%, #E8F8F0 0%, rgba(232,248,240,0) 58%),
    var(--v2-bg) !important;
  color: var(--v2-ink);
}

/* ---------- ★ v0.24.125：午休暗屏 ----------
   近黑遮罩 + 一个很暗的时钟；点一下亮 15 秒（由 classroom.js 控制）。
   z-index 64：低于工具条(66) / 面板(70) / 班务页(80) / 通知(90)。 */
.b-lunch-dim {
  position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 64;
  background: rgba(5, 7, 11, .945);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: clamp(6px, .8vw, 18px);
}
.b-lunch-dim[hidden] { display: none; }
.b-lunch-dim b {
  font-size: clamp(72px, 10vw, 220px); font-weight: 500; line-height: 1;
  letter-spacing: .02em; color: #4B5563; font-variant-numeric: tabular-nums;
}
.b-lunch-dim span {
  font-size: clamp(16px, 1.2vw, 30px); letter-spacing: .4em; color: #3F4652;
}

/* ---------- 顶栏 ---------- */
#screen .b-top {
  background: transparent;
  padding: clamp(12px, 1.2vw, 24px) clamp(18px, 1.8vw, 34px) 0;
  gap: 10px;
  align-items: flex-end;
}
#screen .b-cls {
  font-size: clamp(26px, 2.3vw, 46px);
  font-weight: 800;
  letter-spacing: -.02em;
  line-height: 1.05;
}
#screen .b-role {
  color: var(--v2-violet-ink);
  background: var(--v2-violet-soft);
  border: 1px solid #DDD4FF;
  border-radius: 999px;
  padding: 4px 10px;
  font-size: var(--home-label);
  font-weight: 800;
}
#screen .b-role:empty { display: none; }
#screen .b-when {
  color: var(--v2-muted);
  background: rgba(255,255,255,.8);
  border: 1px solid var(--v2-line);
  border-radius: 14px;
  padding: 7px 12px;
  font-size: var(--home-label);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  line-height: 1.35;
}

/* ---------- 待机首页：指挥台版（上：大钟 + 值日/寄语，下：横向课表带） ---------- */
#screen #cr-idle {
  padding: 10px clamp(18px, 1.8vw, 34px) 8px;
  color: var(--v2-ink);
  min-height: 0;
}
#screen #cr-idle-canvas {
  display: grid;
  grid-template-columns: minmax(0, 1.45fr) minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr) auto auto;
  grid-template-areas:
    "hero right"
    "schedule schedule"
    "strip strip";
  gap: clamp(12px, 1vw, 20px);
  height: 100%;
  min-height: 0;
  align-items: stretch;
}
#screen #cr-idle .b-grid { display: contents; }
/* 右列：考试倒计时 / 值日 / 寄语，三张卡自己排；没有哪张就自动让位 */
#screen #cr-idle .right-col {
  grid-area: right;
  display: flex;
  flex-direction: column;
  gap: clamp(12px, 1vw, 20px);
  min-width: 0;
  min-height: 0;
}
#screen #cr-idle .right-col .exam-zone { flex: 0 0 auto; }
/* ★ 2026-10-18：**值日卡按内容高、寄语吃掉剩下的高度**（原来是反的）——
   3/5 窗口里值日只有 8 个岗位，卡片却被拉满，下面一大片空白；
   寄语卡反而被压成一条。换过来以后整列更均衡。
   ★ 2026-10-19：只有在**真的有常驻卡**（重点日期 / 常驻信息）时，右列才改成四张平分；
     没有常驻卡时保持原来的"值日按内容高、寄语吃剩余"，不改变老屏的观感。 */
#screen #cr-idle .right-col .b-bands { flex: 0 1 auto; }
#screen #cr-idle .right-col .home-motto { flex: 1 1 auto; }
#screen #cr-idle .right-col:has(#cr-bands:empty) .home-motto { flex: 1 1 auto; }
#screen #cr-idle .right-col:has(.home-pinned:not(.b-hidden)) .b-bands,
#screen #cr-idle .right-col:has(.home-pinned:not(.b-hidden)) .home-motto,
#screen #cr-idle .right-col:has(.home-pinned:not(.b-hidden)) .home-pinned { flex: 1 1 0; min-height: 0; }
/* ★ 2026-10-18 晚：**课表搬到右列时**（手机端可选）—— 从"横向带"变成"右列里的卡片"：
   两列、内部自己滚，不把整列撑破。 */
#screen #cr-idle .right-col .home-schedule {
  flex: 0 1 auto; min-height: 0; max-height: 44%;
  padding: clamp(9px, .8vw, 14px) clamp(10px, .9vw, 14px);
}
#screen #cr-idle .right-col .home-schedule .home-schedule-rows {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px; overflow: auto;
}
#screen #cr-idle .right-col .home-schedule .home-event { padding: 7px 9px; gap: 2px; }
#screen #cr-idle .right-col .home-schedule .home-event-status { display: none; }
/* 考试模式：课表 / 右列 / 补充条全收，主卡占满整屏 */
#screen #cr-idle-canvas:has(.home-schedule.b-hidden) {
  grid-template-columns: minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr);
  grid-template-areas: "hero";
}
#screen #cr-idle-canvas:has(.home-schedule.b-hidden) .right-col { display: none; }
#screen #cr-idle-canvas:has(.home-schedule.b-hidden) .b-left {
  grid-column: 1 / -1;
  align-items: center;
  text-align: center;
}
#screen #cr-idle-canvas:has(.home-schedule.b-hidden) .b-left .b-phase { align-self: center; }
#screen #cr-idle-canvas:has(.home-schedule.b-hidden) .home-strip { display: none; }
#screen #cr-idle .b-left {
  grid-area: hero;
  align-self: stretch;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  background: var(--v2-card);
  border: 1px solid var(--v2-line);
  border-radius: var(--v2-radius);
  box-shadow: var(--v2-shadow);
  padding: clamp(20px, 2vw, 34px);
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: stretch;
  gap: 2px;
  animation: none;
}
/* 没有近期考试 ⇒ 不用做什么，网格区域会自动合并 */
#screen #cr-idle .clock-zone {
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 2px;
}
#screen #cr-idle .exam-zone {
  grid-area: exam;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  grid-template-rows: auto auto auto;
  align-items: center;
  column-gap: clamp(10px, 1vw, 18px);
  padding: clamp(12px, 1vw, 20px) clamp(14px, 1.2vw, 24px);
  border-radius: var(--v2-radius);
  background: var(--v2-peach-soft);
  border: 1px solid #FFDFCE;
  color: var(--v2-peach-ink);
  min-width: 0;
  min-height: 0;
  overflow: hidden;
}
#screen #cr-idle .exam-tag {
  grid-column: 1;
  grid-row: 1;
  font-size: var(--home-label);
  font-weight: 800;
  letter-spacing: .12em;
  opacity: .7;
}
#screen #cr-idle .exam-name {
  grid-column: 1;
  grid-row: 2;
  font-size: clamp(17px, 1.15vw, 26px);
  font-weight: 800;
  letter-spacing: .01em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#screen #cr-idle .exam-date {
  grid-column: 1;
  grid-row: 3;
  font-size: var(--home-label);
  font-weight: 700;
  opacity: .75;
  letter-spacing: .04em;
}
#screen #cr-idle .exam-days {
  grid-column: 2;
  grid-row: 1 / span 3;
  align-self: center;
  display: flex;
  align-items: baseline;
  gap: 5px;
  margin: 0;
}
#screen #cr-idle .exam-days b {
  font-size: clamp(46px, 4.2vw, 84px);
  line-height: .9;
  font-weight: 800;
  letter-spacing: -.05em;
  font-variant-numeric: tabular-nums;
}
#screen #cr-idle .exam-days span {
  font-size: clamp(14px, .95vw, 20px);
  font-weight: 800;
}
#screen #cr-idle .b-phase {
  align-self: flex-start;
  font-size: var(--home-label);
  font-weight: 800;
  letter-spacing: .08em;
  padding: 5px 11px;
  border: 0;
  border-radius: 999px;
  background: var(--v2-violet-soft);
  color: var(--v2-violet-ink);
  animation: none;
}
#screen #cr-idle .b-phase.on {
  background: var(--v2-mint-soft);
  color: var(--v2-mint-ink);
}
#screen #cr-idle .b-num {
  color: var(--v2-ink);
  font-family: var(--vibe-font-sans);
  font-size: clamp(90px, 11.5vw, 210px);
  line-height: .95;
  letter-spacing: -.055em;
  margin: 6px 0 2px;
  animation: none;
  white-space: nowrap;
}
#screen #cr-idle .b-num.is-cd { color: var(--v2-violet-ink); }
#screen #cr-idle .b-num.is-word { font-size: clamp(28px, 4vw, 72px); white-space: normal; }
#screen #cr-idle .b-num .b-sec { color: var(--v2-muted); }
#screen #cr-idle .b-sub,
#screen #cr-idle .b-sub.is-big {
  font-size: clamp(22px, 2.2vw, 44px);
  color: var(--v2-ink);
  line-height: 1.15;
  margin: 4px 0 0;
  font-weight: 800;
  overflow-wrap: anywhere;
}
#screen .home-detail,
#screen #cr-idle .b-line {
  font-size: var(--home-label);
  color: var(--v2-muted);
  margin: 3px 0 0;
}
#screen #cr-idle .b-tip {
  font-size: var(--home-label);
  color: var(--v2-muted);
  margin: 8px 0 0;
}
/* 底部补充条：下一节 / 今日请假 / 近期考试 */
#screen .home-strip {
  grid-area: strip;
  display: flex;
  align-items: center;
  gap: clamp(14px, 1.4vw, 26px);
  flex-wrap: wrap;
  min-height: 0;
  padding: 0 4px;
}
#screen .home-next {
  margin: 0;
  padding: 0;
  border: 0;
  color: var(--v2-muted);
  font-size: var(--home-label);
  font-weight: 700;
}
#screen .home-next b { color: var(--v2-ink); }
#screen .home-extras {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin: 0;
}
#screen .home-extras .b-card {
  flex: 0 0 auto;
  min-width: 0;
  background: var(--v2-peach-soft);
  border: 1px solid #FFDFCE;
  border-radius: 10px;
  box-shadow: none;
  padding: 4px 10px;
  animation: none;
  display: flex;
  align-items: baseline;
  gap: 6px;
}
#screen .home-extras .b-card-t {
  font-size: var(--home-label);
  color: var(--v2-peach-ink);
  opacity: .8;
  font-weight: 700;
}
#screen .home-extras .b-card-v {
  font-size: var(--home-label);
  color: var(--v2-peach-ink);
  font-weight: 800;
  margin: 0;
}
#screen .home-extras .b-card-v b {
  font-size: 1.2em;
  color: var(--v2-peach-ink);
  animation: none;
}
/* 横带里只留一句主信息，第二行（人数 / 日期）收掉，避免把这条撑高 */
#screen .home-extras .b-card-v br,
#screen .home-extras .b-card-v span { display: none; }
#screen .home-progress-meta {
  display: flex;
  justify-content: space-between;
  color: var(--v2-muted);
  font-size: var(--home-label);
  font-weight: 700;
  margin-top: 14px;
  width: 100%;
}
#screen #cr-idle .b-prog {
  flex: none;
  height: 14px;
  border-radius: 4px;
  background: repeating-linear-gradient(90deg, #EDEFF4 0 8px, transparent 8px 11px);
  margin-top: 7px;
  overflow: hidden;
}
#screen #cr-idle .b-prog > i {
  height: 100%;
  border-radius: 4px;
  background: repeating-linear-gradient(90deg, var(--v2-violet) 0 8px, transparent 8px 11px);
  transition: width .35s ease;
}

/* 横向课表带 */
#screen .home-schedule {
  grid-area: schedule;
  min-width: 0;
  min-height: 0;
  padding: clamp(12px, 1.1vw, 20px) clamp(14px, 1.2vw, 22px);
  border-radius: var(--v2-radius);
  background: var(--v2-card);
  border: 1px solid var(--v2-line);
  box-shadow: var(--v2-shadow);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
#screen .home-heading {
  font-size: var(--home-label);
  color: var(--v2-muted);
  margin-bottom: 9px;
  flex: none;
}
#screen .home-heading strong {
  font-size: var(--home-title);
  color: var(--v2-ink);
  font-weight: 800;
}
#screen .home-schedule-rows {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 10px;
  min-height: 0;
  overflow: hidden;
  flex: 1;
}
#screen .home-event {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  padding: 9px 12px;
  border-radius: 14px;
  border: 1px solid #F0F1F5;
  background: #FAFAFC;
  line-height: 1.3;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
}
#screen .home-event > div { min-width: 0; width: 100%; }
#screen .home-event.is-current {
  background: var(--v2-violet-soft);
  border-color: #DDD4FF;
}
#screen .home-event.is-past { opacity: .55; }
#screen .home-event-time {
  font-size: var(--home-label);
  color: var(--v2-muted);
  white-space: nowrap;
}
#screen .home-event-title {
  font-size: clamp(17px, 1.2vw, 26px);
  color: var(--v2-ink);
  font-weight: 800;
}
#screen .home-event-meta {
  font-size: var(--home-label);
  color: var(--v2-muted);
  margin-top: 1px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 100%;
}
#screen .home-event-status {
  font-size: var(--home-label);
  color: var(--v2-muted);
  white-space: nowrap;
  margin-top: auto;
}
#screen .home-event.is-current .home-event-status,
#screen .home-event.is-current .home-event-time,
#screen .home-event.is-current .home-event-title { color: var(--v2-violet-ink); }
#screen .home-empty { color: var(--v2-muted); font-size: var(--home-label); }
/* ★ 2026-10-18：休息日 / 没课表时，别把一句「今天没有课」扔在角落 —— 居中 */
#screen .home-schedule-rows > .home-empty {
  grid-column: 1 / -1;
  align-self: center;
  justify-self: center;
  text-align: center;
  padding: 6px 0;
}

/* 值日卡片（右列上） */
#screen #cr-idle .b-bands {
  grid-area: bands;
  margin: 0;
  min-height: 0;
  overflow: hidden;
  background: var(--v2-card);
  border: 1px solid var(--v2-line);
  border-radius: var(--v2-radius);
  box-shadow: var(--v2-shadow);
  padding: clamp(11px, 1vw, 18px);
  display: flex;
  flex-direction: column;
  gap: 6px;
}
#screen #cr-idle .b-bands:empty { display: none; }
#screen #cr-idle .b-bands > div {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
}
#screen #cr-idle .b-band-h {
  font-size: var(--home-label);
  color: var(--v2-muted);
  font-weight: 800;
  margin: 0 0 2px;
}
#screen #cr-idle .b-band-row {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 5px;
  min-height: 0;
  overflow: auto;
  flex: 1;
  /* 值日岗位少时不要把一个岗位拉满整张卡 —— 内容顶到上沿，多出来的留白。
     ★ 2026-10-19：用户教室实拍「值日字重叠了」—— 原来行高 40px，而"岗位 + 姓名"两行
       实际要 ~46px ⇒ 文字溢出格子、压到下一格上。改成按内容最小 46px，行会自己长高。 */
  grid-auto-rows: minmax(46px, auto);
  align-content: start;
}
#screen #cr-idle .b-band-i {
  padding: 8px 9px;
  border-radius: 10px;
  background: #FAFAFC;
  border: 1px solid #F0F1F5;
  box-shadow: none;
  animation: none;
  gap: 2px;
  /* ★ v0.24.124：**岗位 + 姓名改成左右排**（用户 2026-10-19 实拍：
     上下排时两行叠在一起；「右边不是还有空间吗 为什么一定要上下」）。
     ⚠️ 同时把 base 的 `min-height:2.7em` / `margin-top:auto` 顶掉 —— 那两个是上下排才需要的。 */
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  column-gap: clamp(8px, .6vw, 16px);
  row-gap: 0;
  overflow: hidden;
}
#screen #cr-idle .b-band-i:hover { transform: none; box-shadow: none; }
#screen #cr-idle .b-band-p {
  color: var(--v2-mint-ink);
  font-size: var(--home-label);
  font-weight: 800;
  letter-spacing: 0;
  min-height: 0;
  line-height: 1.2;
  white-space: normal;
  overflow-wrap: anywhere;
}
#screen #cr-idle .b-band-n {
  color: var(--v2-ink);
  font-size: var(--home-label);
  font-weight: 800;
  line-height: 1.2;
  margin: 0;
  white-space: nowrap;
  text-align: right;
}

/* 寄语卡片（右列下） */
#screen .home-motto {
  grid-area: motto;
  min-height: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  justify-content: center;
  gap: 6px;
  padding: clamp(11px, 1vw, 18px);
  border-radius: var(--v2-radius);
  background: linear-gradient(160deg, #ECFAF3 0%, #DFF5EA 100%);
  border: 1px solid #D4F2E2;
  color: var(--v2-mint-ink);
  font-size: var(--home-label);
  line-height: 1.5;
}
#screen .home-motto::before {
  content: "“";
  font-family: Georgia, "Times New Roman", var(--vibe-font-serif, serif);
  font-size: clamp(32px, 3.2vw, 64px);
  line-height: .55;
  color: var(--v2-mint);
  opacity: .5;
}
#screen .home-motto-label {
  color: var(--v2-mint-ink);
  opacity: .7;
  font-weight: 800;
  white-space: nowrap;
  letter-spacing: .08em;
}
#screen .home-motto strong {
  font-size: clamp(17px, 1.35vw, 28px);
  line-height: 1.6;
  font-weight: 700;
  max-width: 92%;
}
/* ★ 2026-10-19：重点日期 / 常驻信息（手机端编辑的常驻卡） */
#screen .home-pinned {
  min-height: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 3px;
  padding: clamp(8px, .7vw, 14px);
  border-radius: var(--v2-radius);
  background: var(--v2-card);
  border: 1px solid var(--v2-line);
  color: var(--v2-ink);
}
#screen .home-pinned-label {
  /* ★ 2026-10-19：用户「重点日期字小」—— 标签/名称/天数整体放大一档 */
  font-size: clamp(16px, 1.1vw, 26px);
  font-weight: 800;
  color: var(--v2-violet-ink);
  opacity: .72;
  letter-spacing: .06em;
}
#screen .home-pinned-main {
  font-size: clamp(20px, 1.45vw, 34px);
  font-weight: 700;
  line-height: 1.3;
  overflow: hidden;
  text-overflow: ellipsis;
}
#screen .home-pinned-days {
  font-size: clamp(32px, 2.9vw, 64px);
  font-weight: 800;
  color: var(--v2-violet);
  line-height: 1;
}
#screen .home-pinned-days span {
  font-size: .38em;
  margin-left: 4px;
  color: var(--v2-muted);
  font-weight: 700;
}
/* 重点日期：标签 / 名称 / 天数挤一行 —— 日期卡通常只有 70~90px 高，
   竖着排会和大数字叠在一起（2026-10-19 实测）。 */
#screen .home-pinned.is-date {
  flex-direction: row;
  align-items: center;
  justify-content: center;
  gap: 8px;
}
#screen .home-pinned.is-date .home-pinned-label,
#screen .home-pinned.is-date .home-pinned-days { flex: none; }
/* 日期名允许收缩（太长就省略号），别把「88 天」顶出卡片 */
#screen .home-pinned.is-date .home-pinned-main { flex: 1 1 auto; min-width: 0; white-space: nowrap; }

/* 未绑定二维码页的「下载桌面版」——绑定前也能拿到安装包 */
.b-gate-dl {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  margin-top: .55rem;
  padding: .55rem 1.4rem;
  border-radius: 999px;
  border: 1px solid var(--b-line, #D9DFE8);
  background: #fff;
  color: var(--b-ink, #263449);
  font-weight: 800;
  text-decoration: none;
  box-shadow: 0 4px 14px rgba(23,24,28,.06);
}
.b-gate-dl small { color: var(--b-muted, #738094); font-size: 12px; font-weight: 600; }
.b-gate-dl:hover { border-color: #7B61FF; color: #5B45D6; }
.b-gate-dl:focus-visible { outline: 3px solid #7B61FF; outline-offset: 2px; }

/* ---------- 班务整窗页（班务总结 / 日常汇报） ---------- */
.b-side {
  position: fixed;
  top: 0; right: 0; bottom: 0; left: 0;
  z-index: 80;
  background: var(--v2-bg);
  display: flex;
  flex-direction: column;
}
.b-side-head {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 16px 20px 10px;
}
.b-side-head b { font-size: clamp(20px, 1.3vw, 28px); font-weight: 800; }
.b-side-sp { flex: 1; }
.b-side-close {
  min-height: 40px;
  padding: 0 16px;
  border-radius: 12px;
  border: 1px solid var(--v2-line);
  background: #fff;
  color: var(--v2-muted);
  font-family: inherit;
  font-size: 14px;
  font-weight: 800;
  cursor: pointer;
}
.b-side-close:hover { color: var(--v2-ink); border-color: var(--v2-violet); }
/* ★ 2026-10-18 晚：屏底那条「返回大屏」——大屏很高，右上角够不着 */
.b-side-foot {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 14px;
  padding: 8px 20px calc(8px + env(safe-area-inset-bottom, 0px));
  border-top: 1px solid var(--v2-line);
  background: rgba(255, 255, 255, .92);
}
.b-side-foot > span { color: var(--v2-muted); font-size: var(--home-label); font-weight: 700; }
/* ★ 2026-10-30：**「返回大屏」全站统一成一种样子**（用户：「大屏里很多返回大屏的按钮都不统一 很乱」）。
   规则：① 文案一律「返回大屏」（面板内部退回上一级才写「返回」）；
        ② 样式一律白底 + 1px 描边 + 圆角 12 + 加粗深色字（**不再用紫色实心**：回大屏不是主操作，不该最抢眼）；
        ③ 位置一律在右下（主屏工具条那颗、整窗页页脚那颗、身体视力页那颗，都靠右）。
   这条要压过上面 `.b-side-close` 的默认与 `.b-side-foot .b-side-close` 的紫色。 */
.b-side-foot .b-side-close {
  min-height: 44px;
  padding: 0 22px;
  background: #fff;
  border-color: var(--v2-line);
  color: var(--v2-ink);
  font-weight: 800;
}
.b-side-foot .b-side-close:hover { background: var(--v2-violet); color: #fff; filter: brightness(.95); }
/* ★ 2026-10-19：桌面壳右下角那粒 [允 | 全屏 | 3/5 | —] 浮在整窗页上面，会压住这颗「返回大屏」
   （用户当天原话：「全屏五分之三还是最小化那个 挡着返回大屏了 很恶心」）⇒ 给小条让出位置。
   `.yunli-framed` 是壳注入标题栏时加在 <html> 上的类，浏览器里没有这个类，不受影响。 */
html.yunli-framed .b-side-foot { padding-right: 200px; }
.b-side-tabs {
  flex: none;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
  padding: 0 20px 10px;
}
.b-side-tab {
  min-height: 44px;
  border-radius: 12px;
  border: 1px solid var(--v2-line);
  background: #fff;
  color: var(--v2-muted);
  font-family: inherit;
  font-size: 14px;
  font-weight: 800;
  cursor: pointer;
}
.b-side-tab.on { background: var(--v2-violet); border-color: var(--v2-violet); color: #fff; }
/* ★ 2026-10-18：整窗页比原来的侧栏宽得多，正文/按钮整体放大一档，
   否则 1536 宽的窗口里字还是 12~14px，投影上看不清。 */
#cr-side {
  --f-xs: clamp(16px, 1.1vw, 24px);
  --f-sm: clamp(18px, 1.2vw, 28px);
  --f-md: clamp(22px, 1.4vw, 34px);
  --f-lg: clamp(28px, 1.7vw, 44px);
  /* ★ 2026-10-18 晚：密码卡用的 `--dr-*` 令牌 ——
     班务总结那边由 `.dr-box.dr-expanded` 提供，日常汇报没有那个盒子，会变成透明无边框。 */
  --dr-ink: #17181C; --dr-muted: #727583; --dr-line: #E7E9F0; --dr-card: #FFFFFF;
  --dr-violet: #7B61FF; --dr-violet-ink: #5A44D8; --dr-violet-soft: #F0ECFF;
  --dr-mint: #42C58A; --dr-mint-ink: #1E7B50; --dr-mint-soft: #E7F9F0;
  --dr-peach: #F08A5D; --dr-peach-ink: #A64B24; --dr-peach-soft: #FFF1E9;
}
#cr-side .b-side-head b { font-size: clamp(22px, 1.4vw, 34px); }
#cr-side .b-side-close, #cr-side .b-side-tab { font-size: clamp(14px, .9vw, 20px); min-height: clamp(44px, 3vw, 58px); }

/* ★ v0.24.122：班务整窗页「太久没操作」的提醒条（3 分钟 → 30 秒倒计时 → 自动返回大屏） */
.b-side-idle {
  position: absolute; left: 50%; top: clamp(14px, 1.2vw, 26px); transform: translateX(-50%);
  z-index: 95; display: flex; align-items: center; gap: clamp(10px, .9vw, 18px);
  padding: clamp(9px, .7vw, 14px) clamp(14px, 1.2vw, 22px);
  border-radius: 999px; background: #221E3A; color: #fff;
  font-size: clamp(14px, 1vw, 20px); font-weight: 600;
  box-shadow: 0 10px 30px rgba(0, 0, 0, .3);
}
.b-side-idle[hidden] { display: none; }
.b-side-idle b { color: #FFD166; font-size: clamp(17px, 1.2vw, 24px); font-weight: 800; }
.b-side-idle-keep {
  border: 0; border-radius: 999px; cursor: pointer;
  padding: clamp(7px, .5vw, 10px) clamp(12px, 1vw, 18px);
  background: #7B61FF; color: #fff; font: inherit; font-weight: 700;
}
.b-side-body {
  flex: 1;
  min-height: 0;
  padding: 0 22px 20px;
  display: flex;
}
.b-side-view { display: none; flex: 1; min-height: 0; }
.b-side-view.on { display: flex; flex-direction: column; }
#cr-review-mount { flex: 1; min-height: 0; display: flex; width: 100%; max-width: 1600px; margin: 0 auto; }
#cr-review-mount .dr-box { flex: 1; min-height: 0; }
/* 整窗页自己有「返回大屏」，别再显示点评卡里那颗「收起/展开」 */
#cr-review-mount .dr-topbtn[data-open] { display: none; }
/* 整窗页：宽屏用三栏（选事实 / 点学生 / 提交各占一栏），窄窗口再降成两栏。
   ⚠️ 原来固定两栏 + 提交列横跨整行，在 1536 宽下两栏被拉得极宽、内容全挤在顶部。 */
#cr-side .dr-layout { grid-template-columns: minmax(0,.95fr) minmax(0,1.05fr) minmax(0,1.15fr); min-height: 0; flex: 1; }
#cr-side .dr-submit-col { grid-column: auto; min-height: 0; }
#cr-side .dr-stats { grid-template-columns: repeat(4, minmax(0, 1fr)); }
#cr-side .dr-body { overflow: hidden; }
#cr-side .dr-improve-hd { flex-wrap: wrap; }
#cr-side .dr-mini { white-space: nowrap; flex: none; }
@media (max-width: 1200px) {
  #cr-side .dr-layout { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #cr-side .dr-submit-col { grid-column: 1 / -1; min-height: 220px; }
  #cr-side .dr-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #cr-side .dr-body { overflow-y: auto; }
}
@media (max-width: 820px) {
  #cr-side .dr-layout { grid-template-columns: minmax(0, 1fr); }
  #cr-side .dr-submit-col { grid-column: auto; }
}

/* ---------- 日常汇报（班务整窗页 · 第二个页签） ---------- */
.b-daily {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding-bottom: 4px;
}
/* ★ 2026-10-18 晚：没解锁时整页只留一张居中的密码卡（和班务总结同一张） */
#cr-side .b-daily.b-daily-locked {
  flex: 1;
  min-height: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  overflow: hidden;
}
.b-daily-loading { color: var(--v2-muted); font-weight: 700; padding: 20px; display: flex; flex-direction: column; align-items: flex-start; gap: 8px; }
.b-daily-loading b { color: var(--v2-ink); font-size: clamp(16px, 1vw, 22px); }
.b-daily-loading span { color: var(--v2-muted); font-size: var(--home-label); }
.b-daily-lead {
  flex: none;
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 2px 4px 0;
}
.b-daily-lead > b { font-size: clamp(19px, 1.2vw, 26px); font-weight: 800; }
.b-daily-lead > span { color: var(--v2-muted); font-size: var(--home-label); }
.b-daily-lead > em { margin-left: auto; font-style: normal; font-size: var(--home-label); color: var(--v2-muted); }
.b-daily-lead > em b { color: var(--v2-violet-ink); font-size: 1.15em; }
.b-daily-gate {
  flex: none;
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px 16px;
  border-radius: 16px;
  background: var(--v2-violet-soft);
  border: 1px solid var(--v2-line);
}
.b-daily-gate > div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.b-daily-gate b { font-size: 15px; }
.b-daily-gate span { color: var(--v2-muted); font-size: var(--home-label); }
.b-daily-gate .b-daily-btn { margin-left: auto; flex: none; }
/* ★ 2026-10-18：日常汇报页内自带验证密码（6 位数字键盘，和班务总结同一把密码） */
.b-daily-gatepad { align-items: center; flex-wrap: wrap; gap: 12px 22px; }
.b-daily-gatepad .b-daily-gatehd { flex: 1 1 230px; }
.b-daily-gatepad .b-daily-pinbox { flex: 0 0 auto; align-items: center; gap: 3px; }
.b-daily-pin { font-size: clamp(17px, 1.2vw, 22px); font-weight: 900; letter-spacing: .38em; color: var(--v2-violet-ink); }
.b-daily-pinmsg { font-size: var(--home-label); color: var(--v2-muted); }
.b-daily-pinmsg.is-warn { color: #A4551A; }
/* ⚠️ 选择器必须带 .b-daily-gatepad（0,2,0），否则被上面 `.b-daily-gate > div`（0,1,1）
   的 `display:flex; flex-direction:column` 压住 —— 键盘会变成**一条竖排**、把面板撑到半屏高。 */
.b-daily-gatepad .b-daily-keys {
  display: grid; grid-template-columns: repeat(4, minmax(54px, 1fr));
  gap: 6px; width: 252px; flex: none;
}
.b-daily-key {
  height: 40px; border-radius: 11px; border: 1.5px solid var(--v2-line);
  background: #fff; color: var(--v2-ink); font-family: inherit;
  font-size: 16px; font-weight: 800; cursor: pointer;
}
.b-daily-key.is-fn { font-size: 13px; color: var(--v2-muted); }
.b-daily-key:active { background: var(--v2-violet-soft); }
.b-daily-key:disabled { opacity: .45; cursor: default; }
.b-daily-kinds {
  flex: none;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}
.b-daily-kind {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 12px 14px;
  border-radius: 16px;
  border: 1px solid var(--v2-line);
  background: #fff;
  color: var(--v2-ink);
  font-family: inherit;
  text-align: left;
  cursor: pointer;
}
.b-daily-kind b { font-size: clamp(16px, 1vw, 20px); font-weight: 800; }
.b-daily-kind span { color: var(--v2-muted); font-size: var(--home-label); }
.b-daily-kind.on { background: var(--v2-violet); border-color: var(--v2-violet); color: #fff; }
.b-daily-kind.on span { color: rgba(255,255,255,.82); }
.b-daily-grid {
  flex: none;
  display: grid;
  grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);
  gap: 10px;
  align-items: start;
}
/* 整窗页里让两列吃掉剩下的高度，别在页面底部留一大片空白 */
#cr-side .b-daily { padding-bottom: 0; }
#cr-side .b-daily-grid { flex: 1 1 auto; align-items: stretch; min-height: 0; grid-template-columns: minmax(0, 1fr) 300px; }
#cr-side .b-daily-main, #cr-side .b-daily-side { min-height: 0; }
#cr-side .b-daily-tips { flex: 1 1 auto; }
#cr-side .b-daily-history { flex: 1 1 auto; min-height: 220px; }
#cr-side .b-daily-history .b-daily-empty { flex: 1 1 auto; display: flex; align-items: center; justify-content: center; }
.b-daily-main, .b-daily-side {
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-width: 0;
  min-height: 0;
}
.b-daily-card {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 12px 14px;
  border-radius: 16px;
  border: 1px solid var(--v2-line);
  background: #fff;
  min-width: 0;
}
.b-daily-hd { display: flex; align-items: baseline; gap: 8px; }
.b-daily-hd b { font-size: 15px; font-weight: 800; }
.b-daily-hd span { margin-left: auto; color: var(--v2-muted); font-size: var(--home-label); }
.b-daily-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.b-daily-people { max-height: 168px; overflow-y: auto; }
.b-daily-chip {
  min-height: 34px;
  padding: 4px 12px;
  border-radius: 999px;
  border: 1px solid var(--v2-line);
  background: #fff;
  color: var(--v2-ink);
  font-family: inherit;
  font-size: var(--home-label);
  font-weight: 700;
  cursor: pointer;
}
.b-daily-chip:hover { border-color: var(--v2-violet); }
.b-daily-chip.on { background: var(--v2-violet); border-color: var(--v2-violet); color: #fff; }
.b-daily-content .b-daily-chip { border-radius: 12px; text-align: left; }
.b-daily-send {
  flex: none;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  border-radius: 16px;
  border: 1px solid var(--v2-line);
  background: rgba(255,255,255,.9);
}
.b-daily-sum {
  min-width: 0;
  flex: 1;
  color: var(--v2-muted);
  font-size: var(--home-label);
  font-weight: 700;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.b-daily-sum.is-warn { color: #A4551A; }
.b-daily-btn {
  flex: none;
  min-height: 42px;
  padding: 0 18px;
  border-radius: 12px;
  border: 1px solid var(--v2-line);
  background: #fff;
  color: var(--v2-ink);
  font-family: inherit;
  font-size: 15px;
  font-weight: 800;
  cursor: pointer;
}
.b-daily-btn.is-primary { background: var(--v2-violet); border-color: var(--v2-violet); color: #fff; }
.b-daily-btn:disabled { opacity: .45; cursor: not-allowed; }
.b-daily-history { flex: none; }
.b-daily-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.b-daily-tips { flex: none; }
.b-daily-tips p { margin: 0; color: var(--v2-muted); font-size: var(--home-label); line-height: 1.7; }
.b-daily-tips p b { color: var(--v2-ink); }
.b-daily-stats { flex: none; }
.b-daily-bar { height: 8px; border-radius: 999px; background: var(--v2-bg); overflow: hidden; }
.b-daily-bar i { display: block; height: 100%; border-radius: 999px; background: var(--v2-violet); }
.b-daily-gap { color: var(--v2-muted); font-size: var(--home-label); }
.b-daily-switch {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-top: 2px;
  padding-top: 8px;
  border-top: 1px solid var(--v2-line);
}
.b-daily-switch b { font-size: var(--home-label); font-weight: 800; }
.b-daily-toggle {
  flex: none;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 34px;
  padding: 0 14px;
  border-radius: 999px;
  border: 1px solid var(--v2-line);
  background: var(--v2-bg);
  color: var(--v2-muted);
  font-family: inherit;
  font-size: 13px;
  font-weight: 800;
  cursor: pointer;
}
.b-daily-toggle i { display: block; width: 8px; height: 8px; border-radius: 50%; background: var(--v2-muted); }
.b-daily-toggle.on { background: var(--v2-violet); border-color: var(--v2-violet); color: #fff; }
.b-daily-toggle.on i { background: #fff; }
.b-daily-toggle:disabled { opacity: .45; cursor: not-allowed; }
.b-daily-list li {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: 12px;
  background: var(--v2-bg);
}
.b-daily-list li > b { flex: none; font-size: 13px; color: var(--v2-violet-ink); }
.b-daily-list li > span { flex: 1; min-width: 0; color: var(--v2-ink); font-size: var(--home-label); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.b-daily-list li > i { flex: none; font-style: normal; font-size: 12px; font-weight: 800; color: var(--v2-muted); }
.b-daily-list li.is-draft { background: #FFF6E8; }
.b-daily-list li.is-draft > i { color: #A4551A; }
.b-daily-mini {
  flex: none;
  min-height: 32px;
  padding: 0 12px;
  border-radius: 10px;
  border: 1px solid var(--v2-violet);
  background: #fff;
  color: var(--v2-violet-ink);
  font-family: inherit;
  font-size: 13px;
  font-weight: 800;
  cursor: pointer;
}
.b-daily-empty { color: var(--v2-muted); font-size: var(--home-label); padding: 6px 2px; }

/* ==========================================================================
   2026-10-18 日常汇报改版：三块工作区 + 弹层打字
   ========================================================================== */
.b-daily-kind svg { width: 22px; height: 22px; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.b-daily-kind[data-kind="call"] svg { stroke: #DE5F2C; }
.b-daily-kind[data-kind="incident"] svg { stroke: var(--v2-violet-ink); }
.b-daily-kind[data-kind="pre"] svg { stroke: var(--v2-mint-ink); }
.b-daily-kind.on svg { stroke: #fff; }

.b-daily-work {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-height: 0;
  padding: 14px 16px 16px;
  border-radius: 18px;
  border: 1px solid var(--v2-line);
  background: var(--v2-card);
}
.b-daily-workhd { flex: none; display: flex; align-items: center; gap: 10px; }
.b-daily-workhd > b { font-size: clamp(16px, 1vw, 20px); font-weight: 800; }
.b-daily-workhd > span { color: var(--v2-muted); font-size: var(--home-label); font-weight: 700; }
.b-daily-pill {
  margin-left: auto;
  flex: none;
  padding: 4px 11px;
  border-radius: 999px;
  background: var(--v2-mint-soft);
  color: var(--v2-mint-ink);
  font-size: 12.5px;
  font-weight: 900;
}
.b-daily-workhd .b-daily-pill { color: var(--v2-mint-ink); font-size: 12.5px; font-weight: 900; }
.b-daily-workbody { flex: 1 1 auto; min-height: 0; overflow: auto; display: flex; flex-direction: column; gap: 10px; }
.b-daily-label { color: var(--v2-muted); font-size: var(--home-label); font-weight: 800; }

.b-daily-big {
  flex: 0 0 auto;
  height: clamp(190px, 30vh, 320px);
  width: 100%;
  border: 0;
  border-radius: 20px;
  color: #fff;
  background: linear-gradient(135deg, #F79A6A 0%, #EE7440 62%, #DE5F2C 100%);
  box-shadow: 0 16px 34px rgba(238, 116, 64, .3);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  cursor: pointer;
  font-family: inherit;
}
.b-daily-big b { font-size: clamp(24px, 2.2vw, 40px); font-weight: 900; letter-spacing: .02em; }
.b-daily-big span { font-size: var(--home-label); font-weight: 700; opacity: .9; }
.b-daily-big:disabled { opacity: .45; cursor: not-allowed; box-shadow: none; }
.b-daily-tip3 {
  flex: 1 1 auto; min-height: 0;
  display: flex; flex-direction: column; justify-content: center; gap: 6px;
  padding: 16px 18px; border-radius: 16px; background: var(--v2-bg);
}
.b-daily-tip3 b { font-size: clamp(15px, 1vw, 19px); font-weight: 900; }
.b-daily-tip3 p { margin: 0; color: var(--v2-muted); font-size: var(--home-label); font-weight: 600; line-height: 1.7; }

.b-daily-inc { flex: 1 1 auto; min-height: 0; overflow: auto; display: flex; flex-direction: column; gap: 9px; }
.b-daily-sec { border: 1px solid var(--v2-line); border-radius: 16px; padding: 10px 12px 12px; background: var(--v2-card); }
.b-daily-sechd { display: flex; align-items: center; gap: 8px; margin-bottom: 9px; }
.b-daily-sechd .n {
  width: 22px; height: 22px; flex: none; border-radius: 7px;
  background: var(--v2-bg); color: var(--v2-muted);
  display: grid; place-items: center; font-size: 12px; font-weight: 900;
}
.b-daily-sechd > b { font-size: 14px; font-weight: 900; }
.b-daily-sechd > span:last-child { margin-left: auto; font-size: 12px; color: var(--v2-muted); font-weight: 700; }

.b-daily-reasons { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; }
.b-daily-reason {
  height: 64px; border-radius: 13px; border: 1.5px solid var(--v2-line);
  background: var(--v2-card); color: var(--v2-ink);
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px;
  font-family: inherit; font-size: 13.5px; font-weight: 800; cursor: pointer;
}
.b-daily-reason svg { width: 19px; height: 19px; fill: none; stroke: var(--v2-muted); stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
.b-daily-reason.on { border-color: var(--v2-violet); background: var(--v2-violet-soft); color: var(--v2-violet-ink); }
.b-daily-reason.on svg { stroke: var(--v2-violet); }

.b-daily-sents { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.b-daily-sent {
  min-height: 47px; padding: 9px 12px; border-radius: 12px;
  border: 1.5px solid var(--v2-line); background: var(--v2-card); color: var(--v2-ink);
  text-align: left; font-family: inherit; font-size: 13.8px; font-weight: 800; line-height: 1.3;
  display: flex; align-items: center; gap: 6px; cursor: pointer;
}
.b-daily-sent .ck { margin-left: auto; flex: none; opacity: 0; color: var(--v2-violet); font-weight: 900; }
.b-daily-sent.on { border-color: var(--v2-violet); background: var(--v2-violet-soft); color: var(--v2-violet-ink); }
.b-daily-sent.on .ck { opacity: 1; }

/* ★ 2026-10-18：涉及谁要能选**全班**（原来只放前 12 个）—— 换成可换行、可滚动的网格，
   既不撑爆面板，也不用横向拖。 */
.b-daily-people-row {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(78px, 1fr));
  gap: 8px; max-height: 170px; overflow: auto; padding-bottom: 2px; align-content: start;
}
.b-daily-person {
  height: 40px; padding: 0 8px; border-radius: 11px;
  border: 1.5px solid var(--v2-line); background: var(--v2-card); color: var(--v2-ink);
  font-family: inherit; font-size: 13.5px; font-weight: 800; cursor: pointer;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.b-daily-person.on { background: var(--v2-mint-soft); border-color: var(--v2-mint); color: var(--v2-mint-ink); }

.b-daily-preview {
  flex: none; min-height: 44px; padding: 10px 13px; border-radius: 14px;
  background: var(--v2-bg); color: var(--v2-muted);
  font-size: 13.5px; font-weight: 800; display: flex; align-items: center; gap: 8px;
}
.b-daily-preview b { color: var(--v2-ink); font-size: 14px; }
.b-daily-preview .tag {
  margin-left: auto; flex: none; padding: 3px 9px; border-radius: 999px;
  background: var(--v2-violet-soft); color: var(--v2-violet-ink);
  font-size: 11.5px; font-weight: 900;
}

.b-daily-stages { flex: none; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.b-daily-stage {
  height: 42px; border: 0; border-radius: 12px;
  background: var(--v2-bg); color: var(--v2-muted);
  font-family: inherit; font-size: 15px; font-weight: 800; cursor: pointer;
}
.b-daily-stage.on { background: var(--v2-ink); color: #fff; }

.b-daily-facts { flex: 0 0 auto; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.b-daily-fact {
  min-height: 56px; padding: 11px 12px; border-radius: 14px;
  border: 1.5px solid var(--v2-line); background: var(--v2-card); color: var(--v2-ink);
  text-align: left; font-family: inherit; font-size: 14.5px; font-weight: 800;
  display: flex; align-items: center; gap: 8px; cursor: pointer;
}
.b-daily-fact > span { flex: 1; min-width: 0; }
.b-daily-fact > span i { display: block; margin-top: 2px; font-style: normal; font-size: 10.5px; font-weight: 800; color: var(--v2-muted); }
.b-daily-fact > em { flex: none; font-style: normal; font-weight: 900; color: var(--v2-muted); }
.b-daily-fact.on { border-color: var(--v2-violet); background: var(--v2-violet-soft); color: var(--v2-violet-ink); }
.b-daily-fact.on > em { color: var(--v2-violet); }

.b-daily-students {
  flex: 1 1 auto; min-height: 0; overflow: auto;
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; align-content: start;
}
.b-daily-stu {
  height: 52px; border-radius: 13px; border: 1.5px solid var(--v2-line);
  background: var(--v2-card); color: var(--v2-ink);
  font-family: inherit; font-size: 15px; font-weight: 800;
  display: flex; align-items: center; justify-content: center; gap: 6px; cursor: pointer;
}
.b-daily-stu small { font-size: 11px; font-weight: 800; color: var(--v2-muted); }
.b-daily-stu:disabled { opacity: .42; cursor: not-allowed; }
.b-daily-stu.on { background: var(--v2-mint-soft); border-color: var(--v2-mint); color: var(--v2-mint-ink); }

.b-daily-chip.add,
.b-daily-sent.add,
.b-daily-fact.add {
  border-style: dashed;
  border-color: var(--v2-violet);
  background: transparent;
  color: var(--v2-violet-ink);
  justify-content: center;
}

.b-daily-errline { flex: none; padding: 0 6px; color: var(--v2-muted); font-size: var(--home-label); font-weight: 700; }
.b-daily-errline.is-warn { color: #A4551A; }

/* 打字弹层：大屏不允许页面上有输入框 ⇒ 只在弹层里出现 */
.b-daily-modal {
  position: fixed; inset: 0; z-index: 130;
  display: none; align-items: flex-start; justify-content: center;
  padding: 8vh 16px 24px; overflow: auto;
  background: rgba(18, 20, 26, .42);
}
.b-daily-modal.on { display: flex; }
.b-daily-dlg {
  width: min(560px, 94vw);
  padding: 20px 22px 18px;
  border-radius: 22px;
  background: var(--v2-card);
  box-shadow: 0 30px 70px rgba(0, 0, 0, .28);
  display: flex; flex-direction: column; gap: 12px;
}
.b-daily-dlgh { display: flex; align-items: center; }
.b-daily-dlgh b { font-size: 20px; font-weight: 900; }
.b-daily-dlgx { margin-left: auto; font-size: 22px; line-height: 1; color: var(--v2-muted); cursor: pointer; }
.b-daily-dlglabel { margin-top: 4px; color: var(--v2-muted); font-size: var(--home-label); font-weight: 800; }
.b-daily-ta {
  width: 100%; min-height: 96px; resize: none;
  padding: 12px 14px; border-radius: 14px;
  border: 1.5px solid var(--v2-line); background: var(--v2-bg); color: var(--v2-ink);
  font-family: inherit; font-size: 17px; font-weight: 700; outline: none;
}
.b-daily-ta:focus { border-color: var(--v2-violet); background: var(--v2-card); }
.b-daily-dlgf { display: flex; align-items: center; gap: 10px; margin-top: 2px; }
.b-daily-dlgnote { flex: 1; color: var(--v2-muted); font-size: 12.5px; font-weight: 700; line-height: 1.45; }

@media (max-width: 1000px) {
  .b-daily-grid { grid-template-columns: minmax(0, 1fr); }
  .b-daily-kinds { grid-template-columns: minmax(0, 1fr); }
  .b-daily-history { min-height: 220px; }
  .b-daily-sents { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .b-daily-students { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .b-daily-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* 矮屏（如 1366×768）把「什么时候用」收起来，别逼出一条滚动条 */
@media (max-height: 820px) {
  .b-daily-tips { display: none; }
}

/* ---------- 跑马灯 ---------- */
#screen .b-ticker {
  flex: 0 0 auto;
  margin: 0 clamp(18px, 1.8vw, 34px) 6px;
  padding: 7px 12px;
  border-radius: 12px;
  background: rgba(255,255,255,.8);
  border: 1px solid var(--v2-line);
  box-shadow: none;
  -webkit-mask-image: none;
  mask-image: none;
}
#screen .b-ticker > span {
  font-size: var(--home-label);
  color: var(--v2-muted);
  font-weight: 700;
  letter-spacing: .03em;
}

/* ---------- 底部工具条 ---------- */
#screen .b-tools {
  flex: 0 0 auto;
  /* ★ 2026-10-18：**永远只占一行**（用户：「打开之后有两行…非常不美观」）——
     多出来的入口收进「老师工具」向上弹出的面板，不再在屏底折行。 */
  flex-wrap: nowrap;
  margin: 0 clamp(18px, 1.8vw, 34px) clamp(10px, 1vw, 16px);
  padding: 4px 7px;
  border-radius: 14px;
  border: 1px solid var(--v2-line);
  background: rgba(255,255,255,.9);
  box-shadow: 0 6px 18px rgba(23,24,28,.05);
  min-height: 42px;
  z-index: 66;
}
#screen .b-tools.is-open {
  background: rgba(255,255,255,.94);
  border-top-color: var(--v2-line);
}
/* ★ 2026-10-18：`is-open` 现在只表示「老师工具面板打开了」，
   **不再**是"整条收起"——所以默认态也必须是完整的一条白栏（原来会变透明、只留一粒把手）。 */
#screen .b-tools:not(.is-open) {
  min-height: 42px;
  padding: 4px 7px;
  background: rgba(255,255,255,.9);
  border: 1px solid var(--v2-line);
  box-shadow: 0 6px 18px rgba(23,24,28,.05);
}
#screen .b-tools:not(.is-open) .b-tools-handle { margin-left: 0; }
/* 全屏那颗一直在（`is-open` 不再是"展开工具条"） */
#screen .b-tools:not(.is-open) .b-tb-fs { display: inline-flex; }
#screen .b-toolbox { gap: 2px; flex-wrap: nowrap; }
#screen .b-tb {
  font-size: calc(clamp(12px, .82vw, 16px) * var(--fs));
  padding: 6px 9px;
  border-radius: 8px;
  color: var(--v2-muted);
  white-space: nowrap;
}
#screen .b-tb:hover { color: var(--v2-ink); background: var(--v2-violet-soft); }
#screen .b-tb-main { background: var(--v2-violet); color: #fff; }
#screen .b-tb-main:hover { background: var(--v2-violet); filter: brightness(.95); }
#screen .b-tools-btn {
  font-size: calc(clamp(12px, .82vw, 16px) * var(--fs));
  padding: 6px 9px;
  border-radius: 8px;
  color: var(--v2-muted);
  white-space: nowrap;
}
#screen .b-tools-btn:hover { color: var(--v2-ink); border-color: var(--v2-line); background: var(--v2-violet-soft); }
#screen .b-tools-handle {
  margin-left: 2px;
  min-width: 64px;
  height: 30px;
  padding: 0 9px;
  border-radius: 8px;
  border: 1px solid var(--v2-line);
  background: transparent;
  color: var(--v2-muted);
  font-size: calc(clamp(12px, .82vw, 16px) * var(--fs));
  font-weight: 800;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  opacity: 1;
}
#screen .b-tools-handle:hover { color: var(--v2-ink); border-color: var(--v2-violet); background: var(--v2-violet-soft); }
#screen .b-tools-handle::before { content: "老师工具"; }
#screen .b-tools-handle .b-tools-chev { display: inline-block; transition: transform .15s ease; }
#screen .b-tools.is-open .b-tools-handle .b-tools-chev { transform: rotate(180deg); }
#screen .b-tools.is-open .b-tools-handle { border-color: var(--v2-violet); color: var(--v2-violet-ink); background: var(--v2-violet-soft); }

/* ★ 2026-10-18：**老师工具向上弹出的面板** —— 绝对定位在工具条上方，
   不再把屏底这条栏撑成两行。内容由 #b-tb-more 里的按钮组成（桌面壳的
   「桌面设置 / 文件中转站」也由 preload 塞进同一个容器）。 */
#screen .b-tools.is-open .b-tb-more {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 6px;
  position: absolute;
  left: 0;
  bottom: calc(100% + 8px);
  width: min(560px, calc(100vw - 40px));
  padding: 10px;
  border-radius: 16px;
  border: 1px solid var(--v2-line);
  background: #fff;
  box-shadow: 0 -10px 32px rgba(23,24,28,.12);
  z-index: 70;
}
#screen .b-tools.is-open .b-tb-more .b-tb {
  min-height: 42px;
  padding: 8px 10px;
  border: 1px solid var(--v2-line);
  background: var(--v2-card);
  color: var(--v2-ink);
  font-weight: 800;
  text-align: center;
}
#screen .b-tools.is-open .b-tb-more .b-tb.is-primary,
#screen .b-tools.is-open .b-tb-more .b-tb-main { background: var(--v2-violet); color: #fff; border-color: var(--v2-violet); }

/* 右下角最小化：放在工具条最右端（底部），真实动作走桌面壳 */
#screen .b-tools-min {
  flex: none;
  width: 30px;
  height: 30px;
  margin-left: 2px;
  border-radius: 8px;
  border: 1px solid var(--v2-line);
  background: #fff;
  color: var(--v2-muted);
  display: grid;
  place-items: center;
  touch-action: manipulation;
}
#screen .b-tools-min:hover { color: var(--v2-ink); border-color: var(--v2-violet); background: var(--v2-violet-soft); }
#screen .b-tools-min svg { width: 15px; height: 15px; }

/* ---------- 登录 / 绑定 ---------- */
#cr-gate, #cr-teach {
  background:
    radial-gradient(1200px 620px at 88% -12%, #ECE7FF 0%, rgba(236,231,255,0) 62%),
    radial-gradient(900px 520px at -5% 105%, #E8F8F0 0%, rgba(232,248,240,0) 58%),
    var(--v2-bg) !important;
  min-height: 100vh;
  padding: 24px;
  color: var(--v2-ink);
}
#cr-gate.b-gate, #cr-teach.b-gate {
  display: flex;
  align-items: center;
  justify-content: center;
}
#cr-gate .b-gate-card, #cr-teach .b-gate-card {
  width: min(1080px, 94vw);
  max-height: calc(100vh - 48px);
  overflow: auto;
  background: rgba(255,255,255,.92);
  border: 1px solid rgba(255,255,255,.9);
  border-radius: 32px;
  box-shadow: 0 18px 50px rgba(23,24,28,.08);
  padding: clamp(18px, 2.2vw, 36px);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  text-align: center;
}
#cr-gate #cr-gate-qr, #cr-teach #cr-teach-qr { line-height: 0; }
#cr-gate img, #cr-teach img {
  width: min(250px, 52vw);
  padding: 12px;
  border-radius: 16px;
  border: 1px solid var(--v2-line);
  box-shadow: 0 8px 24px rgba(23,24,28,.06);
  background: #fff;
}
#cr-gate .b-gate-t, #cr-teach .b-gate-t {
  font-size: clamp(26px, 2.3vw, 44px);
  font-weight: 800;
  letter-spacing: -.02em;
  line-height: 1.15;
}
#cr-gate .b-gate-s, #cr-teach .b-gate-s {
  font-size: clamp(14px, 1vw, 18px);
  color: var(--v2-muted);
  line-height: 1.7;
  max-width: 40rem;
}
#cr-gate .b-gate-s b, #cr-teach .b-gate-s b { color: var(--v2-violet-ink); }
#cr-gate .b-btn, #cr-teach .b-btn {
  min-height: 46px;
  padding: 0 16px;
  border-radius: 12px;
  font-size: clamp(13px, .9vw, 16px);
  font-weight: 800;
  border: 1px solid var(--v2-line);
  color: var(--v2-muted);
  background: #fff;
}
#cr-gate .b-btn:hover, #cr-teach .b-btn:hover { color: var(--v2-ink); border-color: var(--v2-violet); }
#cr-gate .b-btn-strong, #cr-teach .b-btn-strong {
  background: var(--v2-violet);
  border-color: var(--v2-violet);
  color: #fff;
}
#cr-gate .b-flash, #cr-teach .b-flash {
  border: 1px dashed var(--v2-line);
  border-radius: 16px;
  color: var(--v2-muted);
  background: #fff;
}

/* ---------- 全屏层：只统一控制条，数字/黑白高对比保持原样 ---------- */
#b-fs[data-b-theme="dark"] { background: #000 !important; }
#b-fs .b-fs-slogan { color: #E6E7EA; }
#b-fs .b-fs-label { color: #8C8F98; }
#b-fs .b-fs-num { color: #fff; }
#b-fs .b-fs-foot { color: #8C8F98; }
#screen .b-tools[data-b-theme="dark"] {
  width: fit-content;
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(255,255,255,.14);
  border-radius: 999px;
  box-shadow: 0 12px 30px rgba(0,0,0,.35);
  margin: 0 18px 14px auto;
  padding: 4px;
  backdrop-filter: blur(8px);
}
#screen .b-tools[data-b-theme="dark"] .b-tools-handle { display: none; }
#screen .b-tools[data-b-theme="dark"] .b-tools-min {
  background: rgba(255,255,255,.12);
  border-color: rgba(255,255,255,.22);
  color: #E6E7EA;
}
#screen .b-tools[data-b-theme="dark"] .b-tools-min:hover {
  background: rgba(255,255,255,.2);
  border-color: rgba(255,255,255,.35);
  color: #fff;
}
#screen .b-tools[data-b-theme="dark"] .b-tb,
#screen .b-tools[data-b-theme="dark"] .b-tools-btn {
  color: #D6D8DD;
  border-radius: 999px;
  padding: 6px 12px;
}
#screen .b-tools[data-b-theme="dark"] .b-tb:hover,
#screen .b-tools[data-b-theme="dark"] .b-tools-btn:hover {
  color: #fff;
  background: rgba(255,255,255,.1);
}
#screen .b-tools[data-b-theme="dark"] .b-tools-handle {
  color: #D6D8DD;
  border-color: rgba(255,255,255,.18);
  background: rgba(255,255,255,.06);
}
#screen .b-tools[data-b-theme="dark"] .b-tools-handle::before { content: "计时工具"; }

/* ---------- 显示设置面板 ---------- */
#screen .home-settings {
  width: min(460px, calc(100vw - 32px));
  background: #fff;
  border: 1px solid var(--v2-line);
  border-radius: 24px;
  box-shadow: 0 24px 60px rgba(23,24,28,.18);
  padding: 20px;
}
#screen .home-settings-heading { font-size: 20px; font-weight: 800; }
#screen .home-settings-heading .b-btn {
  border-radius: 12px;
  border-color: var(--v2-line);
  background: #fff;
  color: var(--v2-muted);
}
#screen .home-settings-group > span { font-weight: 800; color: var(--v2-muted); }
#screen .home-palette {
  border-radius: 14px;
  border-color: var(--v2-line);
  background: #FAFAFC;
  color: var(--v2-ink);
}
#screen .home-palette[aria-pressed="true"] {
  border-color: var(--v2-violet);
  background: var(--v2-violet-soft);
}
#screen .home-swatch { height: 20px; width: 100%; border-radius: 10px; }
#screen .home-motion-label { color: var(--v2-ink); font-size: 14px; font-weight: 700; }
#screen .home-settings-status, #screen .home-settings-hint { color: var(--v2-muted); }

/* 六套配色改成「强调色」：版式仍是新的卡片工作台，只换主色 */
#screen[data-home-palette="white-mint"]  { --v2-violet:#28766A; --v2-violet-ink:#1C5C52; --v2-violet-soft:#E6F5EF; }
#screen[data-home-palette="white-apricot"] { --v2-violet:#A86120; --v2-violet-ink:#874A17; --v2-violet-soft:#FFF0DC; }
#screen[data-home-palette="sage"]        { --v2-violet:#44644B; --v2-violet-ink:#35503B; --v2-violet-soft:#E0E9D8; }
#screen[data-home-palette="celadon"]     { --v2-violet:#25756E; --v2-violet-ink:#1C5B57; --v2-violet-soft:#D9EBE4; }
#screen[data-home-palette="rose"]        { --v2-violet:#945367; --v2-violet-ink:#7A4356; --v2-violet-soft:#EFDEE1; }
/* ★ 2026-10-18：默认主题（柔紫）也要把老的 `--home-accent` 对齐成紫色 ——
   否则桌面壳右下角那颗「允」、以及仍在用 `--home-accent` 的老组件还是蓝色，跟页面紫对不上。 */
[data-home-palette="white-blue"], #screen[data-home-palette="white-blue"] {
  --home-accent:#7B61FF; --home-soft:#F0ECFF; --home-card:#FFFFFF; --home-border:#E7E9F0; --home-track:#EDEFF4;
}
/* ★ 2026-10-18：**每个色块写死自己的颜色** —— 原来所有 swatch 都吃 `var(--home-accent)`，
   而这个变量会跟着当前主题变 ⇒ 点「薄荷」以后，「柔紫」那块也变成绿色（用户报的 bug）。 */
#screen .home-swatch[data-home-palette="white-blue"]    { background:#7B61FF; }
#screen .home-swatch[data-home-palette="white-mint"]    { background:#28766A; }
#screen .home-swatch[data-home-palette="white-apricot"] { background:#A86120; }
#screen .home-swatch[data-home-palette="sage"]          { background:#44644B; }
#screen .home-swatch[data-home-palette="celadon"]       { background:#25756E; }
#screen .home-swatch[data-home-palette="rose"]          { background:#945367; }

/* ---------- 响应式 ---------- */
@media (max-width: 1180px) {
  #screen #cr-idle-canvas { grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); gap: 10px; }
  /* 3/5 窗口里把外边距收一点，多出来的都给内容 */
  #screen #cr-idle { padding: 8px clamp(14px, 1.4vw, 22px) 6px; }
  #screen #cr-idle .b-num { font-size: clamp(72px, 9.5vw, 140px); }
  /* ★ 2026-10-18：不再折行（多出来的入口在「老师工具」弹出面板里） */
  #screen .b-tools { flex-wrap: nowrap; }
}
@media (max-width: 820px) {
  #screen #cr-idle-canvas {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto;
    grid-template-areas: "hero" "right" "schedule" "strip";
    height: auto;
  }
  /* ★ 2026-10-18 晚：窄窗（1366 屏的 3/5 就是 820）**不再把整页缩成一条** ——
     以前 fitIdle 会把 canvas 缩到刚好塞下，结果值日 / 课表 / 寄语全变成几十像素高的细条。
     现在让它按正常字号排、纵向滚动；fitIdle 对 canvas 的内联缩放被下面这条压掉。 */
  #screen #cr-idle { overflow: auto; }
  #screen #cr-idle-canvas {
    transform: none !important;
    width: auto !important;
    height: auto !important;
  }
  #screen #cr-idle .b-left { min-height: auto; }
  /* 窄窗右列改成两列小卡：值日 / 考试 / 寄语文案都还看得清 */
  #screen #cr-idle .right-col {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: start;
  }
  #screen #cr-idle .right-col > * { grid-area: auto !important; min-height: 118px; }
  #screen #cr-idle .right-col .home-schedule { max-height: none; }
  #screen #cr-idle .right-col .home-schedule .home-schedule-rows { overflow: visible; }
  #screen .home-schedule-rows { grid-template-columns: repeat(2, minmax(0, 1fr)); overflow: visible; }
  #screen .b-top { align-items: flex-start; }
  #screen .b-when { margin-left: 0; }
}
@media (max-height: 820px) and (min-width: 821px) {
  #screen #cr-idle .b-num { font-size: clamp(64px, 9.2vw, 140px); margin: 4px 0 2px; }
  #screen #cr-idle .b-sub, #screen #cr-idle .b-sub.is-big { font-size: clamp(20px, 1.9vw, 34px); }
  #screen #cr-idle .b-left { padding: 14px 22px; }
  #screen .home-progress-meta { margin-top: 8px; }
  #screen #cr-idle .b-prog { margin-top: 5px; }
  #screen #cr-idle .b-notes { margin-top: 8px; }
  #screen .home-event { padding: 7px 9px; }
  #screen #cr-idle .b-band-row { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #screen #cr-idle .b-band-i { padding: 5px 6px; }
  #screen .home-motto { padding: 8px 12px; gap: 2px; }
  #screen .home-motto::before { font-size: 30px; }
  #screen .home-motto strong { font-size: 17px; line-height: 1.45; }
  #screen .home-schedule { padding: 10px 16px 12px; }
  /* 右列三张卡：矮屏上把考试卡和寄语压扁，给值日留出三行 */
  #screen #cr-idle .exam-zone { padding: 8px 12px; column-gap: 10px; }
  #screen #cr-idle .exam-name { font-size: 16px; }
  #screen #cr-idle .exam-days b { font-size: clamp(44px, 3.6vw, 64px); }
  #screen #cr-idle .exam-days span { font-size: 13px; }
}

/* ==========================================================================
   2560 / 4K：把「按 1920 设计的」上限整体抬掉
   --------------------------------------------------------------------------
   起因：Win10/11 的 4K 屏在 100%~150% 缩放下，CSS 宽度是 3840 或 2560；
   原来所有 clamp 的最大值都按 1920 写死（210px / 26px / 20px），
   ⇒ 2560 和 3840 上字号**一模一样**，卡片变大、字不变，远看更小。
   这里只在「宽 ≥2200 且高 ≥1200」时生效（2560×1440 / 3840×2160）；
   2560×1080 这类横向超宽屏保持 1920 的字号，避免横向放大、纵向放不下。
   1920/1366/1024 一个像素都不动。
   ========================================================================== */
@media (min-width: 2200px) and (min-height: 1200px) {
  #screen {
    --v2-radius: clamp(24px, 1.8vw, 70px);
    --home-label: calc(clamp(13px, 1.04vw, 44px) * var(--fs));
    --home-title: calc(clamp(17px, 1.35vw, 58px) * var(--fs));
  }
  #screen .b-top { padding: clamp(12px, 1.25vw, 50px) clamp(18px, 1.8vw, 70px) 0; }
  #screen .b-cls { font-size: clamp(44px, 2.3vw, 96px); }
  #screen .b-role { padding: clamp(4px, .3vw, 12px) clamp(10px, .7vw, 26px); border-radius: 999px; }
  #screen .b-when { padding: clamp(7px, .55vw, 22px) clamp(12px, .9vw, 34px); border-radius: clamp(14px, 1vw, 38px); }

  #screen #cr-idle { padding: clamp(10px, .6vw, 22px) clamp(18px, 1.8vw, 70px) clamp(8px, .47vw, 18px); }
  #screen #cr-idle-canvas { gap: clamp(12px, .85vw, 34px); }
  #screen #cr-idle .b-left { padding: clamp(20px, 1.77vw, 68px); gap: clamp(18px, 1.77vw, 68px); }
  #screen #cr-idle .b-num { font-size: clamp(210px, 10.95vw, 420px); }
  #screen #cr-idle .b-sub, #screen #cr-idle .b-sub.is-big { font-size: clamp(42px, 2.2vw, 92px); }
  #screen #cr-idle .b-phase { padding: clamp(5px, .4vw, 16px) clamp(11px, .8vw, 30px); }
  #screen #cr-idle .b-prog { width: 100%; height: clamp(14px, .9vw, 30px); margin-top: clamp(7px, .4vw, 15px); border-radius: 6px; }
  #screen .home-progress-meta { margin-top: clamp(14px, .75vw, 30px); }
  #screen #cr-idle .b-tip { margin-top: clamp(8px, .6vw, 22px); }
  #screen #cr-idle .b-notes { margin-top: clamp(12px, .65vw, 26px); }

  #screen #cr-idle .exam-zone {
    padding: clamp(24px, 2vw, 44px) clamp(28px, 2.4vw, 52px);
    column-gap: clamp(20px, 2vw, 36px);
    border-radius: var(--v2-radius);
  }
  #screen #cr-idle .exam-name { font-size: clamp(34px, 1.15vw, 52px); }
  #screen #cr-idle .exam-days { gap: clamp(10px, .5vw, 16px); }
  #screen #cr-idle .exam-days b { font-size: clamp(92px, 4.2vw, 168px); }
  #screen #cr-idle .exam-days span { font-size: clamp(28px, .95vw, 40px); }

  #screen .home-schedule { padding: clamp(12px, 1.05vw, 40px) clamp(14px, 1.15vw, 44px); }
  #screen .home-heading { margin-bottom: clamp(9px, .47vw, 18px); }
  #screen .home-schedule-rows { gap: clamp(10px, .52vw, 20px); }
  #screen .home-event {
    padding: clamp(9px, .47vw, 18px) clamp(12px, .62vw, 24px);
    border-radius: clamp(14px, 1vw, 40px);
    gap: clamp(2px, .3vw, 10px);
  }
  #screen .home-event-title { font-size: clamp(23px, 1.2vw, 50px); }

  #screen #cr-idle .b-bands { padding: clamp(11px, .95vw, 36px); gap: clamp(6px, .32vw, 12px); }
  #screen #cr-idle .b-band-row { gap: clamp(5px, .26vw, 10px); }
  #screen #cr-idle .b-band-i { padding: clamp(8px, .42vw, 16px) clamp(9px, .47vw, 18px); border-radius: clamp(10px, .7vw, 28px); }
  #screen .home-motto { padding: clamp(11px, .95vw, 36px); gap: clamp(6px, .5vw, 20px); }
  #screen .home-motto::before { font-size: clamp(64px, 3.4vw, 140px); }
  #screen .home-motto strong { font-size: clamp(26px, 1.5vw, 62px); }

  #screen .home-strip { gap: clamp(14px, 1.4vw, 56px); }
  #screen .home-extras { gap: clamp(8px, .6vw, 24px); }
  #screen .home-extras .b-card { padding: clamp(4px, .22vw, 8px) clamp(10px, .52vw, 20px); border-radius: clamp(10px, .7vw, 28px); gap: clamp(6px, .5vw, 20px); }

  #screen .b-ticker {
    margin: 0 clamp(18px, 1.8vw, 70px) clamp(6px, .36vw, 14px);
    padding: clamp(7px, .36vw, 14px) clamp(12px, .62vw, 24px);
    border-radius: clamp(12px, .8vw, 32px);
  }
  #screen .b-tools {
    margin: 0 clamp(18px, 1.8vw, 70px) clamp(10px, .52vw, 20px);
    padding: clamp(4px, .22vw, 8px) clamp(7px, .36vw, 14px);
    min-height: clamp(42px, 2.2vw, 86px);
    border-radius: clamp(14px, 1vw, 40px);
  }
  #screen .b-tb, #screen .b-tools-btn, #screen .b-tools-handle {
    font-size: clamp(15px, .82vw, 34px);
    padding: clamp(6px, .32vw, 12px) clamp(9px, .47vw, 18px);
    border-radius: clamp(8px, .6vw, 24px);
  }
  #screen .b-tools-handle { min-width: clamp(64px, 4vw, 160px); height: clamp(30px, 1.7vw, 64px); }
  #screen .b-tools-min { width: clamp(30px, 1.7vw, 64px); height: clamp(30px, 1.7vw, 64px); border-radius: clamp(8px, .6vw, 24px); }
  #screen .b-tools-min svg { width: clamp(15px, 1vw, 38px); height: clamp(15px, 1vw, 38px); }

  /* 登录 / 绑定 */
  #cr-gate .b-gate-card, #cr-teach .b-gate-card {
    width: min(2000px, 80vw);
    max-height: calc(100vh - 96px);
    border-radius: clamp(32px, 2.4vw, 90px);
    padding: clamp(18px, 2.2vw, 76px);
    gap: clamp(10px, .9vw, 34px);
  }
  #cr-gate img, #cr-teach img { width: clamp(250px, 18vw, 520px); padding: clamp(12px, 1vw, 34px); border-radius: clamp(16px, 1.2vw, 46px); }
  #cr-gate .b-gate-t, #cr-teach .b-gate-t { font-size: clamp(26px, 2.3vw, 88px); }
  #cr-gate .b-gate-s, #cr-teach .b-gate-s { font-size: clamp(14px, 1vw, 34px); max-width: 76rem; }
  #cr-gate .b-btn, #cr-teach .b-btn { min-height: clamp(46px, 3.2vw, 120px); padding: 0 clamp(16px, 1.4vw, 56px); border-radius: clamp(12px, .9vw, 32px); font-size: clamp(13px, .9vw, 34px); }
  #cr-gate .b-gate-dl { padding: clamp(10px, .9vw, 34px) clamp(22px, 1.8vw, 64px); }
  #cr-gate .b-gate-dl span { font-size: clamp(18px, 1vw, 40px); }
  #cr-gate .b-gate-dl small { font-size: clamp(13px, .8vw, 30px); }

  /* 显示设置 */
  #screen .home-settings { width: min(760px, calc(100vw - 64px)); padding: clamp(20px, 1.6vw, 58px); border-radius: clamp(24px, 1.8vw, 64px); }
  #screen .home-settings-heading { font-size: clamp(20px, 1.4vw, 44px); }
  #screen .home-palette { border-radius: clamp(14px, 1vw, 38px); font-size: clamp(14px, 1vw, 34px); }
  #screen .home-swatch { height: clamp(20px, 1.2vw, 44px); border-radius: clamp(10px, .8vw, 30px); }
  #screen .home-motion-label, #screen .home-settings-status, #screen .home-settings-hint { font-size: clamp(14px, 1vw, 34px); }

  /* 班务整窗页（点评 / 日常汇报） */
  .b-side-head { padding: clamp(20px, 1.4vw, 50px) clamp(24px, 1.6vw, 60px) clamp(12px, .9vw, 32px); gap: clamp(10px, .8vw, 30px); }
  .b-side-head b { font-size: clamp(40px, 1.3vw, 64px); }
  .b-side-tab, .b-side-close { font-size: clamp(16px, .9vw, 34px); }
  .b-side-close { min-height: clamp(40px, 2.6vw, 92px); padding: 0 clamp(16px, 1.2vw, 44px); border-radius: clamp(12px, .9vw, 32px); }
  .b-side-tabs { gap: clamp(6px, .5vw, 18px); padding: 0 clamp(24px, 1.6vw, 60px) clamp(10px, .8vw, 30px); }
  .b-side-tab { min-height: clamp(44px, 3vw, 108px); border-radius: clamp(12px, .9vw, 32px); }
  .b-side-body { padding: 0 clamp(20px, 1.4vw, 50px) clamp(20px, 1.4vw, 50px); }

  .b-daily { gap: clamp(12px, .8vw, 30px); }
  .b-daily-lead > b { font-size: clamp(38px, 1.3vw, 64px); }
  .b-daily-lead > span, .b-daily-lead > em { font-size: clamp(16px, .9vw, 34px); }
  .b-daily-kind { padding: clamp(14px, 1vw, 40px) clamp(16px, 1.2vw, 46px); border-radius: clamp(16px, 1.2vw, 46px); gap: clamp(4px, .3vw, 12px); }
  .b-daily-kind b { font-size: clamp(26px, 1.3vw, 52px); }
  .b-daily-kind span { font-size: clamp(16px, .9vw, 34px); }
  .b-daily-card { padding: clamp(14px, 1vw, 40px) clamp(16px, 1.2vw, 46px); gap: clamp(8px, .6vw, 24px); border-radius: clamp(16px, 1.2vw, 46px); }
  .b-daily-hd b { font-size: clamp(22px, 1.1vw, 44px); }
  .b-daily-hd span, .b-daily-gap, .b-daily-sum, .b-daily-empty { font-size: clamp(16px, .9vw, 34px); }
  .b-daily-chip { min-height: clamp(44px, 2.6vw, 100px); padding: clamp(4px, .4vw, 16px) clamp(14px, 1vw, 36px); font-size: clamp(16px, .9vw, 34px); }
  .b-daily-content .b-daily-chip { border-radius: clamp(12px, .9vw, 34px); }
  .b-daily-btn { min-height: clamp(44px, 3vw, 110px); padding: 0 clamp(18px, 1.4vw, 52px); font-size: clamp(18px, 1vw, 38px); border-radius: clamp(12px, .9vw, 34px); }
  .b-daily-send { padding: clamp(10px, .7vw, 28px) clamp(14px, 1vw, 40px); border-radius: clamp(16px, 1.2vw, 46px); }
  .b-daily-list li { padding: clamp(10px, .7vw, 28px) clamp(12px, .9vw, 34px); border-radius: clamp(12px, .9vw, 34px); }
  .b-daily-list li > b, .b-daily-list li > i { font-size: clamp(14px, .8vw, 28px); }
  .b-daily-list li > span { font-size: clamp(16px, .9vw, 34px); }
  .b-daily-mini { min-height: clamp(36px, 2.2vw, 76px); padding: 0 clamp(12px, .9vw, 32px); font-size: clamp(14px, .8vw, 28px); }
  .b-daily-toggle { min-height: clamp(40px, 2.4vw, 88px); padding: 0 clamp(14px, 1vw, 36px); font-size: clamp(14px, .8vw, 28px); }

  /* 全屏层：数字随屏等比放大（黑白高对比与衬线字体不变） */
  #b-fs .b-fs-num { font-size: clamp(7rem, 25vw, 42rem); }
  #b-fs .b-fs-slogan { font-size: clamp(1.5rem, 3.2vw, 6.4rem); }
  #b-fs .b-fs-label, #b-fs .b-fs-foot { font-size: clamp(16px, .9vw, 38px); }
  #screen .b-tools[data-b-theme="dark"] {
    margin: 0 clamp(18px, 1.8vw, 70px) clamp(14px, 1vw, 44px) auto;
    padding: clamp(4px, .4vw, 14px);
  }
}

/* 横向超宽屏（2560×1080 这类）：宽度上去了、高度没上去。
   这里不跟 4K 一起放大字号，只把左卡内容收紧一点，避免「今天要讲的是」被裁掉。 */
@media (min-width: 2200px) and (max-height: 1199px) {
  #screen #cr-idle .b-num { font-size: clamp(64px, 7.4vw, 190px); }
  #screen .home-progress-meta { margin-top: 8px; }
  #screen #cr-idle .b-prog { width: 100%; margin-top: 5px; }
  #screen #cr-idle .b-notes { margin-top: 8px; }
  #screen .home-event { padding: 7px 9px; }
}

/* ---------- ★ 2026-10-18：发版提示（页面已更新 · 点此刷新） ----------
   常驻页面不会自己加载新 JS/CSS；classroom.js 每 60 秒问一次 /api/version，
   版本变了就浮这一颗。不自动 reload，点「×」只跳过这一版。 */
#b-update-tip {
  position: fixed;
  top: clamp(8px, .8vw, 18px);
  left: 50%;
  transform: translateX(-50%);
  z-index: 120;
  display: flex;
  align-items: center;
  gap: clamp(6px, .5vw, 12px);
  max-width: calc(100vw - 24px);
  padding: clamp(8px, .55vw, 14px) clamp(12px, .8vw, 22px);
  border-radius: 999px;
  background: rgba(23, 24, 28, .92);
  color: #fff;
  font-family: inherit;
  font-size: clamp(13px, .82vw, 20px);
  font-weight: 700;
  box-shadow: 0 10px 30px rgba(0, 0, 0, .28);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}
#b-update-tip span { white-space: nowrap; }
#b-update-tip button {
  font-family: inherit;
  font-size: inherit;
  font-weight: 800;
  border: 0;
  border-radius: 999px;
  padding: clamp(5px, .35vw, 10px) clamp(10px, .7vw, 18px);
  cursor: pointer;
  background: #7B61FF;
  color: #fff;
}
#b-update-tip button.x {
  background: transparent;
  color: #fff;
  padding: 0 clamp(4px, .3vw, 8px);
  font-size: 1.35em;
  line-height: 1;
}
#b-update-tip button:focus-visible { outline: 3px solid #fff; outline-offset: 2px; }
