/* ============================================
   教师工作台 - 全局样式（移动端优先，兼容电脑）
   ============================================ */
:root{
  /* 淡紫主题：淡紫底 + 白卡片 + 紫色主色（参考 样式/01.jpg · 02.jpg） */
  --bg:#F4F2FB;
  --card:#FFFFFF;
  --primary:#6E5FD0;
  --primary-dark:#5B4CC0;
  --primary-deep:#4A3DA8;
  --text:#2A2A3C;
  --sub:#8E8CA6;
  --line:#ECE9F7;
  --green-bg:#E7F5ED;  --green-tx:#3F8B63;  --green-bd:#C9E6D8;
  --red-bg:#FBE4E8;    --red-tx:#C9515F;    --red-bd:#F2CBD4;
  --orange-bg:#FCEEDC; --orange-tx:#BE8733;
  --blue-bg:#E9EEFB;   --blue-tx:#5F7CC9;
  --purple-bg:#ECE7FB; --purple-tx:#6E5FD0;
  --teal-bg:#E4F3F1;   --teal-tx:#3F9A93;
  /* 淡黄：批改登记页「已订正」姓名框底色 */
  --yellow-bg:#FFF7D6; --yellow-bd:#EEDFA5;
  /* 淡红：首页「今日课程」里的节次文字颜色 */
  --pink-tx:#DE7A97;
  /* 品牌淡紫（用于页内高亮底、浅按钮、今日标记等"品牌色"场景） */
  --brand-bg:#EFEBFB;  --brand-bd:#DED6F6;  --brand-tx:#5B4CC0;
  --radius:18px;
  --shadow:0 3px 14px rgba(94,80,168,.07);
  /* 内容列宽度：手机 / 平板 = 480px（原有观感，保持不变）；
     电脑宽屏在文件末尾的 @media(min-width:1024px) 里改成 1120px。
     .app / .tabbar / .sheet / .fab / 保存失败横幅 都跟随这一个变量 */
  --app-w:480px;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html{-webkit-text-size-adjust:100%;touch-action:manipulation;}
body{
  background:var(--bg);
  background-image:radial-gradient(130% 50% at 50% 0%,#EDE9FB 0%,rgba(237,233,251,0) 62%);
  background-repeat:no-repeat;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Helvetica Neue","Microsoft YaHei",sans-serif;
  color:var(--text);font-size:15px;line-height:1.5;
}
a{color:inherit;text-decoration:none;}
ul,ol{list-style:none;}
button{font-family:inherit;border:none;background:none;cursor:pointer;color:inherit;}
input,select,textarea{font-family:inherit;color:var(--text);}

/* 手机 / 平板：居中手机宽度，更贴合"像APP"的要求；
   电脑宽屏（≥1024px）由文件末尾的媒体查询放宽到 1120px */
.app{max-width:var(--app-w);margin:0 auto;min-height:100vh;padding-bottom:86px;position:relative;}
/* 首页：底部导航是固定定位，预留高度需叠加安全区，否则在带「Home 指示条」的手机上
   最后一块内容会紧贴导航栏；这里多留一段空白，让底部与版块之间的间距观感一致 */
.page-home .app{padding-bottom:calc(86px + env(safe-area-inset-bottom));}
@media(min-width:600px){
  body{background:#E9E5F6;background-image:none;}
  .app{box-shadow:0 0 46px rgba(94,80,168,.12);background:var(--bg);min-height:100vh;}
}

/* ---------- 顶部 ---------- */
.header{padding:18px 16px 12px;display:flex;justify-content:space-between;align-items:center;gap:10px;}
.header h1{font-size:22px;font-weight:700;letter-spacing:.5px;}
.header .sub{font-size:12px;color:var(--sub);margin-top:2px;}
.avatar{width:38px;height:38px;border-radius:50%;background:linear-gradient(135deg,#8E82E3,#6E5FD0);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;flex:none;}
/* 右上角用户标签：头像 + 登录姓名 */
.user-chip{display:flex;align-items:center;gap:8px;flex:none;max-width:46%;}
.user-chip .avatar{width:34px;height:34px;font-size:15px;box-shadow:0 3px 10px rgba(110,95,208,.28);}
.user-chip .uname{font-size:13.5px;font-weight:600;color:var(--text);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;max-width:104px;}
/* 首页右上角：圆形按钮里直接写「退出」（不再显示老师姓名首字） */
.user-chip.exit .avatar{width:auto;min-width:54px;height:32px;border-radius:16px;
  font-size:13px;font-weight:600;letter-spacing:1px;padding:0 13px;
  box-shadow:0 3px 10px rgba(110,95,208,.28);}
.header.bar{align-items:center;}
.header.bar h1{font-size:18px;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.back{width:34px;height:34px;border-radius:50%;background:#fff;box-shadow:var(--shadow);
  display:flex;align-items:center;justify-content:center;flex:none;color:var(--text);}
.back svg{width:18px;height:18px;}
.home-go{width:34px;height:34px;border-radius:50%;background:var(--primary);color:#fff;
  display:flex;align-items:center;justify-content:center;flex:0 0 auto;box-shadow:var(--shadow);flex:none;}
.home-go svg{width:18px;height:18px;}
.hbtn{font-size:13px;color:var(--sub);flex:none;}
.hbtn.red{color:var(--red-tx);}
.hbtn.primary{color:var(--primary-dark);font-weight:600;}
/* 自动保存状态条（批改 / 收缴登记页，位于页头下方一条细带）
   点它可打开「保存诊断」，直接看数据库到底存没存进去 */
.save-state{display:flex;align-items:center;justify-content:center;gap:6px;
  margin:0 16px 2px;padding:5px 10px;border-radius:11px;
  background:rgba(255,255,255,.72);border:1px solid var(--line);
  font-size:11.5px;color:var(--sub);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;cursor:pointer;transition:color .2s,background .2s;}
.save-state::before{content:"";width:7px;height:7px;border-radius:50%;background:#CFC9E2;flex:none;}
.save-state.ok{color:var(--green-tx);background:var(--green-bg);border-color:var(--green-bd);}
.save-state.ok::before{background:var(--green-tx);}
.save-state.saving{color:var(--orange-tx);background:var(--orange-bg);border-color:#EFE1CB;}
.save-state.saving::before{background:var(--orange-tx);animation:pulse .9s infinite;}
.save-state.err{color:#fff;background:var(--red-tx);border-color:var(--red-tx);font-weight:600;}
.save-state.err::before{background:#fff;}
@keyframes pulse{0%,100%{opacity:1;}50%{opacity:.35;}}
/* 保存诊断面板（点保存状态灯打开） */
.dg-list{display:flex;flex-direction:column;gap:8px;max-height:46vh;overflow:auto;}
.dg-row{background:#FAF9FE;border:1px solid var(--line);border-radius:11px;padding:9px 11px;}
.dg-h{display:flex;justify-content:space-between;align-items:center;font-size:12.5px;font-weight:600;}
.dg-tag{font-size:11px;font-weight:600;border-radius:7px;padding:1px 7px;}
.dg-ok{background:var(--green-bg);color:var(--green-tx);}
.dg-no{background:var(--red-bg);color:var(--red-tx);}
.dg-warn{background:var(--orange-bg);color:var(--orange-tx);}
.dg-m{font-size:11.5px;color:#6E6B85;margin-top:4px;line-height:1.6;word-break:break-all;}
.dg-d{font-size:11px;color:#8A7CA0;background:#fff;border-radius:8px;padding:6px 8px;margin-top:5px;
  max-height:70px;overflow:auto;word-break:break-all;line-height:1.55;}

/* ---------- 首页问候卡 ---------- */
.greet{margin:2px 16px 0;border-radius:20px;padding:16px;color:#fff;position:relative;overflow:hidden;
  background:linear-gradient(135deg,#9B8FE8 0%,#7A6BD8 58%,#6555C8 100%);box-shadow:0 10px 24px rgba(94,80,168,.26);}
.greet::after{content:"";position:absolute;right:-30px;top:-40px;width:130px;height:130px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.55) 0%,rgba(255,255,255,0) 70%);pointer-events:none;}
.greet>*{position:relative;z-index:1;}
.greet .g-title{font-size:19px;font-weight:700;margin:0 0 7px;line-height:1.35;}
.greet .g-date{font-size:12.5px;opacity:.88;margin-bottom:14px;letter-spacing:.3px;}
.greet-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;}
.greet-stats .gs{background:rgba(255,255,255,.16);border-radius:12px;padding:8px 4px;text-align:center;}
.greet-stats b{display:block;font-size:18px;line-height:1.2;}
.greet-stats span{font-size:11px;opacity:.9;}

/* ---------- 区块 ---------- */
.section{margin:18px 16px 0;}
.sec-hd{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px;}
.sec-hd h2{font-size:16px;font-weight:700;}
.sec-hd .more{font-size:12px;color:var(--sub);}
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);}

/* ---------- 班级徽章 / 标签 ---------- */
.cls-badge{display:inline-flex;align-items:center;font-size:11px;font-weight:600;border-radius:7px;padding:2px 7px;flex:none;}
.cc1{background:var(--green-bg);color:var(--green-tx);}
.cc2{background:var(--blue-bg);color:var(--blue-tx);}
.cc3{background:var(--orange-bg);color:var(--orange-tx);}
.cc4{background:var(--purple-bg);color:var(--purple-tx);}
.tag{display:inline-flex;align-items:center;font-size:11px;border-radius:7px;padding:2px 7px;flex:none;}
.t-blue{background:var(--blue-bg);color:var(--blue-tx);}
.t-teal{background:var(--teal-bg);color:var(--teal-tx);}
.t-orange{background:var(--orange-bg);color:var(--orange-tx);}
.t-purple{background:var(--purple-bg);color:var(--purple-tx);}
.t-green{background:var(--green-bg);color:var(--green-tx);}
.t-red{background:var(--red-bg);color:var(--red-tx);}
.t-gray{background:#F1F0F7;color:var(--sub);}

/* ---------- 筛选 chips ---------- */
.chipbar{display:flex;gap:8px;overflow-x:auto;padding:2px 16px 4px;scrollbar-width:none;}
.chipbar::-webkit-scrollbar{display:none;}
.chip{flex:none;font-size:13px;padding:6px 15px;border-radius:18px;background:#fff;color:var(--sub);
  box-shadow:var(--shadow);cursor:pointer;border:1.5px solid transparent;}
.chip.active{background:var(--primary-dark);color:#fff;font-weight:600;}

/* ---------- 分段控制 ---------- */
.seg{display:flex;background:#F1EEF9;border-radius:13px;padding:3px;margin:12px 16px 0;}
.seg button{flex:1;padding:8px 0;border-radius:10px;font-size:13px;color:var(--sub);text-align:center;}
.seg button.active{background:#fff;color:var(--text);font-weight:600;box-shadow:var(--shadow);}
.today-badge{display:inline-block;font-size:10px;line-height:1;padding:2px 6px;border-radius:7px;background:#E6F4EA;color:#1E8E3E;font-weight:600;vertical-align:middle;margin-left:2px;}
.ct-bar{display:flex;align-items:center;justify-content:space-between;padding:10px 16px 4px;}
.ct-back{color:var(--primary-dark);font-weight:600;font-size:14px;cursor:pointer;}
.ct-acts{display:flex;gap:8px;}

/* ---------- 作业卡片 ---------- */
.hw-card{padding:14px;margin-bottom:12px;}
.hw-head{display:flex;align-items:flex-start;gap:8px;}
.hw-head .cls-badge{margin-top:2px;}
.hw-title{font-size:15px;font-weight:700;flex:1;}
.hw-deadline{font-size:11px;color:var(--sub);flex:none;margin-top:3px;}
.hw-items{margin:9px 0 10px;display:flex;flex-direction:column;gap:7px;}
.hw-item{display:flex;align-items:flex-start;gap:8px;font-size:12.5px;color:#6E6B8A;}
.hw-item .tag{margin-top:1px;}
.hw-item .txt{flex:1;}
.hw-foot{display:flex;align-items:center;gap:10px;}
.hw-foot .pbar{flex:1;}
.hw-foot .num{font-size:12px;color:var(--sub);flex:none;}
.hw-foot .lk{font-size:12px;color:var(--primary-dark);font-weight:600;flex:none;}

/* ---------- 首页「今日作业」：同班同日一块，组头只显示一次 班级·科目·日期 ---------- */
.hw-grp{padding:0;}
.hw-grp-hd{display:flex;align-items:center;gap:8px;
  padding:11px 14px 9px;border-bottom:1px solid var(--line);}
.hw-grp-hd .hw-subj{font-size:12.5px;font-weight:700;color:var(--primary-dark);flex:none;}
.hw-grp-hd .hw-date{font-size:11.5px;font-weight:400;color:var(--sub);flex:none;}
.hw-hw{display:block;padding:10px 14px;cursor:pointer;}
.hw-hw+.hw-hw{border-top:1px solid var(--line);}
.hw-hw .r2{display:flex;align-items:center;gap:8px;}
.hw-hw .r2 .ttl{flex:1;min-width:0;font-size:13.5px;font-weight:600;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.hw-hw .r2 .nums{display:flex;gap:10px;flex:none;font-size:11.5px;font-weight:600;}
.hw-hw .r2 .nums .u{color:var(--red-tx);}
.hw-hw .r2 .nums .c{color:var(--orange-tx);}
/* 保留旧类名（其它页面可能引用） */
.hw-row{display:flex;align-items:center;gap:10px;padding:13px 14px;cursor:pointer;}
.hw-row+.hw-row{border-top:1px solid var(--line);}
.hw-row .info{flex:1;min-width:0;}
.hw-row .t{font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.hw-row .m{font-size:11px;color:var(--sub);margin-top:1px;}
.hw-row .nums{display:flex;gap:12px;flex:none;font-size:12px;font-weight:600;}
.hw-row .nums .u{color:var(--red-tx);}
.hw-row .nums .c{color:var(--orange-tx);}
.hw-row .chev{color:#C6C1DA;font-size:18px;flex:none;}

/* ---------- 作业类型标签（圆角矩形 + 彩底小字，同第一版） ---------- */
.hw-ty{display:inline-flex;align-items:center;flex:none;font-size:10.5px;font-weight:600;
  border-radius:7px;padding:2px 7px;line-height:1.5;white-space:nowrap;}
.hw-ty.ty-blue{background:var(--blue-bg);color:var(--blue-tx);}
.hw-ty.ty-teal{background:var(--teal-bg);color:var(--teal-tx);}
.hw-ty.ty-orange{background:var(--orange-bg);color:var(--orange-tx);}
.hw-ty.ty-purple{background:var(--purple-bg);color:var(--purple-tx);}
.hw-ty.ty-gray{background:#F1F0F7;color:var(--sub);}

/* ---------- 进度条 / 圆环 ---------- */
.pbar{height:7px;border-radius:5px;background:#EDEAF8;overflow:hidden;}
.pbar i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,#A9A0EC,#7F72DC);transition:width .3s;}
.pbar.warn i{background:linear-gradient(90deg,#E8B968,#E09B3C);}
.donut{--p:0;width:56px;height:56px;border-radius:50%;flex:none;
  background:conic-gradient(var(--primary) calc(var(--p)*1%),#EDEAF8 0);
  display:flex;align-items:center;justify-content:center;}
.donut>div{width:41px;height:41px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:700;color:var(--primary-dark);}
.donut.warn{background:conic-gradient(#E09B3C calc(var(--p)*1%),#F1EEFA 0);}
.donut.warn>div{color:var(--orange-tx);}

/* ---------- 列表行（学生等） ---------- */
.list{padding:4px 0;}
.row{display:flex;align-items:center;gap:12px;padding:12px 14px;cursor:pointer;}
.row+.row{border-top:1px solid var(--line);}
.row .av{width:40px;height:40px;border-radius:50%;color:#fff;display:flex;align-items:center;justify-content:center;
  font-size:15px;font-weight:600;flex:none;}
.row .info{flex:1;min-width:0;}
.row .nm{font-size:15px;font-weight:600;display:flex;align-items:center;gap:6px;}
/* 学生名册：男女生姓名用不同颜色区分 */
.row .nm.sex-m{color:#5A78C6;}
.row .nm.sex-f{color:#C36A96;}
.row .nm .sex-dot{width:7px;height:7px;border-radius:50%;flex:none;opacity:.85;}
.row .nm.sex-m .sex-dot{background:#5A78C6;}
.row .nm.sex-f .sex-dot{background:#C36A96;}
.row .meta{font-size:11.5px;color:var(--sub);margin-top:1px;}
.row .chev{color:#C6C1DA;font-size:18px;flex:none;}
.grp-label{font-size:12px;color:var(--sub);padding:12px 16px 4px;}
.note-tag{font-size:10.5px;color:var(--orange-tx);background:var(--orange-bg);border-radius:6px;padding:1px 6px;
  max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* ---------- 快捷入口 ---------- */
.quick{display:grid;grid-template-columns:repeat(4,1fr);gap:14px 6px;padding:14px 4px 6px;}
.quick a{display:flex;flex-direction:column;align-items:center;gap:6px;font-size:11.5px;color:var(--text);}
.quick .qi{width:44px;height:44px;border-radius:14px;display:flex;align-items:center;justify-content:center;}
.quick .qi svg{width:22px;height:22px;}
.qi.bg1{background:var(--green-bg);color:var(--green-tx);}
.qi.bg2{background:var(--blue-bg);color:var(--blue-tx);}
.qi.bg3{background:var(--orange-bg);color:var(--orange-tx);}
.qi.bg4{background:var(--purple-bg);color:var(--purple-tx);}
.qi.bg5{background:var(--teal-bg);color:var(--teal-tx);}

/* ---------- 今日课程 ---------- */
.course-item{display:flex;align-items:center;gap:12px;padding:12px 14px;}
.course-item+.course-item{border-top:1px solid var(--line);}
.course-item .no{width:30px;height:30px;border-radius:10px;background:var(--brand-bg);color:var(--brand-tx);
  display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;flex:none;}
.course-item .info{flex:1;min-width:0;}
.course-item .t{font-size:14px;font-weight:600;}
.course-item .m{font-size:11.5px;color:var(--sub);}
/* 第一行最前的「第X节」：字号与科目一致（继承 .t），颜色淡红 */
.course-item .pno{color:var(--pink-tx);}
.course-item .tag{flex:none;}
/* 换课（调课）说明：跟着第二行的「课表对应内容」后面 */
.course-item .cnote{font-size:11.5px;font-weight:600;}
.course-item .cnote.mv{color:var(--purple-tx);}
.course-item .cnote.tr{color:var(--blue-tx);}
/* 晚托行：橙色提示 */
.course-item.escort-item .no.esc{background:var(--orange-bg);color:var(--orange-tx);font-size:13px;}
.course-item.escort-item .t{color:var(--orange-tx);}

/* ---------- 统计图表 ---------- */
.chart{display:flex;align-items:flex-end;gap:16px;height:130px;padding:14px 10px 4px;}
.chart .bar{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:5px;height:100%;}
.chart .bar i{width:100%;max-width:34px;border-radius:8px 8px 4px 4px;background:linear-gradient(180deg,#9E93E8,#8578DD);}
.chart .bar .val{font-size:11px;color:var(--brand-tx);font-weight:600;}
.chart .bar .lab{font-size:10.5px;color:var(--sub);}

/* ---------- 作业批次卡 ---------- */
.batch{padding:14px;margin-bottom:12px;display:flex;gap:12px;align-items:center;}
/* 按日期查看时露出的「已全部处理完」批次：弱化一点，但仍可点进去改 */
.batch.batch-done{opacity:.72;}
.batch .binfo{flex:1;min-width:0;}
.batch .bt{font-size:14px;font-weight:700;display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.batch .st-line{margin:7px 0 8px;display:flex;flex-direction:column;gap:4px;font-size:12px;color:#6E6B8A;}
.batch .st-line em{font-style:normal;display:inline-flex;align-items:center;gap:6px;}
.dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none;}
.dot.g{background:#4EAE84;}.dot.o{background:#E09B3C;}.dot.r{background:#E0757F;}
.batch .bside{text-align:right;flex:none;}
.batch .bside .r{font-size:11px;color:var(--sub);}
.batch .bside .lk{display:inline-block;margin-top:5px;font-size:13px;font-weight:700;color:var(--primary-dark);}
/* 作业卡片上"班级后面"显示的作业日期（几月几日） */
.hw-date{font-size:11.5px;font-weight:700;color:var(--primary-dark);}
.batch .hw-date{font-size:12.5px;}
.hw-row .t .hw-date{margin-right:6px;}
.day-label{font-size:13px;color:var(--sub);margin:14px 2px 8px;font-weight:600;}

/* 作业台账：批次列表顶部「只看某一天」的筛选提示 */
.flt{font-size:12px;color:var(--primary-dark);display:inline-flex;align-items:center;gap:6px;font-weight:600;}
/* 月历放进 .section 里时不要再多一层外边距（学生端也有同样需求） */
.section .cal{margin:0;}

/* ---------- 收缴/批改卡片格 ---------- */
.banner{margin:14px 16px 0;background:var(--brand-bg);color:var(--primary-dark);border-radius:12px;
  padding:11px;text-align:center;font-size:13.5px;font-weight:600;cursor:pointer;}
.sub-hd{display:flex;justify-content:space-between;align-items:baseline;margin:16px 16px 10px;}
.sub-hd h2{font-size:15px;font-weight:700;}
.sub-hd span{font-size:11px;color:var(--sub);}
/* 收缴/批改台账的学生卡片：一行 5 个，框内显示 学号 + 姓名
   卡片更紧凑（高度调小）；左上角等级、右上角订正角标都移到卡片内部角上 */
.stu-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:9px;margin:0 12px;}
.stu-card{position:relative;display:flex;flex-direction:column;justify-content:center;align-items:stretch;
  gap:1px;min-height:40px;background:#fff;border:1.5px solid var(--line);border-radius:11px;
  padding:4px 2px;text-align:center;cursor:pointer;user-select:none;overflow:hidden;}
/* 有角标的卡片才预留顶部空间，角标落在框内左上/右上角 */
.stu-card.has-grade{padding-top:16px;padding-bottom:4px;justify-content:flex-start;}
.stu-card .nm{font-size:12.5px;font-weight:600;line-height:1.15;}
/* 第一行：学号 + 状态（学号在姓名上方，与座位表一致）；姓名在第二行 */
.stu-card .ln{display:flex;align-items:baseline;justify-content:center;gap:3px;line-height:1.15;}
.stu-card .no{font-size:9px;color:#AFA9C4;letter-spacing:-.2px;}
.stu-card .st{font-size:9px;color:var(--sub);white-space:nowrap;}
.stu-card.s-已交{background:var(--green-bg);border-color:var(--green-bd);}
.stu-card.s-已交 .st{color:var(--green-tx);}
.stu-card.s-迟交{background:var(--orange-bg);border-color:#EFE3CE;}
.stu-card.s-迟交 .st{color:var(--orange-tx);}
.stu-card.s-未交{background:var(--red-bg);border-color:var(--red-bd);}
.stu-card.s-未交 .st{color:var(--red-tx);}
/* 左上角（框内）：等级角标（优绿 / 良蓝 / 及橙 / 不及红） */
.stu-card .gc{position:absolute;top:1px;left:2px;background:var(--primary-dark);color:#fff;
  font-size:10px;font-weight:700;line-height:1.4;border-radius:8px;padding:0 5px;}
.stu-card .gc-优{background:var(--green-tx);}
.stu-card .gc-良{background:var(--blue-tx);}
.stu-card .gc-及{background:var(--orange-tx);}
.stu-card .gc-不及{background:var(--red-tx);}
/* 双等级：优=绿★、错=红▲ */
.stu-card .gc-错{background:var(--red-tx);}
/* 右上角（框内）：已订正 √ */
.stu-card .mk{position:absolute;top:1px;right:2px;width:16px;height:16px;border-radius:50%;
  background:var(--primary);color:#fff;font-size:10.5px;font-weight:700;line-height:1;
  display:flex;align-items:center;justify-content:center;}
.stu-card .mk.mk-off{background:#fff;color:transparent;border:1.5px solid #E2DEF0;}
/* 已订正：整张姓名框底色改为淡黄色（覆盖绿/橙/红的收缴底色） */
.stu-card.done{background:var(--yellow-bg);border-color:var(--yellow-bd);}

/* 收缴 / 批改「登记台账」的姓名卡片（.hw-grid）：
   第一行只放状态；第二行放「学号 + 姓名」——
   学号在最前、黑色加粗加大；姓名更小、灰色、不加粗（第二个字打码 *） */
.hw-grid .stu-card .ln{justify-content:center;}
.hw-grid .stu-card .st{font-size:9.5px;font-weight:600;}
.hw-grid .stu-card .nm{display:flex;align-items:baseline;justify-content:center;gap:3px;font-weight:400;}
.hw-grid .stu-card .no{font-size:11.5px;font-weight:700;color:var(--text);letter-spacing:0;line-height:1.1;}
.hw-grid .stu-card .nm-txt{font-size:10px;font-weight:400;color:var(--sub);line-height:1.1;}

/* ---------- 信息统计卡（登记页顶部） ---------- */
.sum-card{margin:12px 16px 0;padding:14px;}
.sum-top{display:flex;gap:12px;align-items:center;}
.sum-top .dwrap{flex:none;}
.sum-cnt{flex:1;display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:#6E6B8A;}
.sum-cnt em{font-style:normal;display:inline-flex;align-items:center;gap:6px;}
.sum-cnt b{font-weight:600;}
.sum-btns{display:flex;gap:8px;flex:none;}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;border-radius:11px;padding:10px 16px;
  font-size:14px;font-weight:600;cursor:pointer;background:var(--primary);color:#fff;border:none;}
.btn:active{opacity:.85;}
.btn.light{background:var(--brand-bg);color:var(--primary-dark);}
.btn.red{background:var(--red-bg);color:var(--red-tx);}
.btn.sm{padding:7px 13px;font-size:12.5px;border-radius:9px;}
.btn.blk{display:flex;width:100%;}
.btn+.btn{margin-left:0;}
/* 等级锁定按钮 */
.btn.sm.lock{background:#fff;color:var(--sub);border:1.5px solid var(--line);}
.btn.sm.lock.locked{background:var(--orange-bg);color:var(--orange-tx);border-color:transparent;font-weight:700;}

/* ---------- 搜索 ---------- */
.search{margin:10px 16px 0;background:#fff;border-radius:12px;display:flex;align-items:center;gap:8px;
  padding:10px 13px;box-shadow:var(--shadow);}
.search svg{width:16px;height:16px;color:#B4B0C8;flex:none;}
.search input{border:none;outline:none;flex:1;font-size:13.5px;background:transparent;}
.search input::placeholder{color:#B4B0C8;}

/* ---------- 底部导航 ---------- */
.tabbar{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:var(--app-w);background:#fff;
  border-top:1px solid var(--line);display:flex;z-index:50;padding:7px 0 calc(7px + env(safe-area-inset-bottom));}
.tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10.5px;color:#9A96B2;}
.tabbar a svg{width:22px;height:22px;}
.tabbar a.active{color:var(--primary-dark);font-weight:600;}

/* ---------- 悬浮按钮 ---------- */
.fab{position:fixed;right:max(16px,calc(50% - (var(--app-w) / 2) + 16px));bottom:92px;width:52px;height:52px;border-radius:50%;
  background:linear-gradient(135deg,#8E82E3,#6E5FD0);color:#fff;font-size:28px;font-weight:300;line-height:1;
  display:flex;align-items:center;justify-content:center;box-shadow:0 9px 20px rgba(110,95,208,.4);z-index:40;}
.fab:active{transform:scale(.94);}

/* ---------- 日历 ---------- */
.cal{margin:12px 16px 0;padding:14px 12px;}
.cal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;}
.cal-head .ym{font-size:16px;font-weight:700;}
.cal-nav{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--sub);}
.cal-nav svg{width:16px;height:16px;}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);}
.cal-grid .wd{text-align:center;font-size:11px;color:var(--sub);padding:8px 0 4px;}
.cal-cell{aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  font-size:13px;position:relative;cursor:pointer;border-radius:50%;margin:2px auto;width:36px;height:36px;}
.cal-cell.dim{color:#D6D2E6;}
.cal-cell.today:not(.sel){background:var(--brand-bg);color:var(--primary-dark);font-weight:700;}
.cal-cell.sel{background:var(--primary);color:#fff;font-weight:700;}
.cal-dot{width:4px;height:4px;border-radius:50%;background:var(--primary);position:absolute;bottom:3px;left:50%;margin-left:-2px;}
.cal-cell.sel .cal-dot{background:#fff;}

/* ---------- 日程列表 ---------- */
.ag-item{display:flex;align-items:center;gap:12px;padding:13px 14px;}
.ag-item+.ag-item{border-top:1px solid var(--line);}
.ag-check{width:20px;height:20px;border-radius:50%;border:2px solid #D6D2E6;flex:none;position:relative;cursor:pointer;}
.ag-item.done .ag-check{background:var(--primary);border-color:var(--primary);}
.ag-item.done .ag-check::after{content:"";position:absolute;left:5px;top:2px;width:5px;height:9px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);}
.ag-item .info{flex:1;min-width:0;}
.ag-item .t{font-size:14px;font-weight:600;}
.ag-item.done .t{text-decoration:line-through;color:var(--sub);font-weight:500;}
.ag-item .m{font-size:11.5px;color:var(--sub);margin-top:1px;display:flex;align-items:center;gap:6px;}

/* ---------- 课程表网格 ---------- */
.tt{margin:12px 16px 0;padding:10px 8px;overflow-x:auto;}
.tt-row{display:grid;grid-template-columns:40px repeat(var(--cols,5),1fr);gap:4px;margin-bottom:4px;min-width:340px;}
.tt-hd{text-align:center;font-size:12px;color:var(--sub);padding:4px 0;font-weight:600;}
.tt-hd.today{color:var(--primary-dark);background:var(--brand-bg);border-radius:8px;}
.tt-time{display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:10px;color:var(--sub);}
.tt-time b{font-size:13px;color:var(--text);}
.tt-cell{min-height:54px;border-radius:10px;border:1.5px dashed #DEDBEC;display:flex;flex-direction:column;
  align-items:center;justify-content:center;font-size:11px;text-align:center;padding:2px 1px;cursor:pointer;
  background:#FAF9FE;color:#B4B0C8;line-height:1.3;position:relative;}
.tt-cell.filled{border-style:solid;border-color:transparent;color:var(--text);}
.tt-cell .r{font-size:11px;font-weight:700;}
.tt-cell .m{font-size:9.5px;color:inherit;opacity:.75;}
.tt-cell .b{font-size:9.5px;opacity:.8;}
.tt-cell.cc1{background:var(--green-bg);color:var(--green-tx);}
.tt-cell.cc2{background:var(--blue-bg);color:var(--blue-tx);}
.tt-cell.cc3{background:var(--orange-bg);color:var(--orange-tx);}
.tt-cell.cc4{background:var(--purple-bg);color:var(--purple-tx);}
.tt-cell .subtag{position:absolute;top:2px;right:2px;background:var(--orange-bg);color:var(--orange-tx);
  font-size:9px;border-radius:5px;padding:0 4px;}
.legend{margin:12px 16px 0;display:flex;flex-wrap:wrap;gap:8px;font-size:11.5px;color:var(--sub);}
.legend em{font-style:normal;display:inline-flex;align-items:center;gap:5px;}
.legend i{width:12px;height:12px;border-radius:4px;display:inline-block;}
.hint{text-align:center;font-size:11.5px;color:var(--sub);margin-top:12px;}

/* ---------- 校历网格（晚托安排 / 其他安排） ---------- */
.wc-tools{margin:12px 12px 0;background:#fff;border-radius:14px;box-shadow:var(--shadow);padding:11px 13px;}
.wc-tools .wc-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;color:var(--sub);}
.wc-tools .wc-row label{font-size:12px;color:var(--sub);}
.wc-tools .wc-row input[type=date]{border:1.5px solid var(--line);border-radius:9px;padding:6px 9px;
  font-size:13px;background:#FAF9FE;outline:none;color:var(--text);}
.wc-tools .wc-tip{font-size:11px;color:var(--sub);margin-top:7px;line-height:1.6;}
.wc-wrap{margin:10px 12px 0;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px;}
.wc{table-layout:fixed;width:100%;min-width:330px;border-collapse:separate;border-spacing:3px;}
.wc th{font-size:10px;font-weight:600;color:var(--sub);padding:2px 0;text-align:center;}
.wc th.wc-wk,.wc td.wc-wk{width:28px;}
.wc td.wc-wk{background:transparent;border:none;font-size:10px;font-weight:700;color:var(--primary-dark);
  text-align:center;vertical-align:middle;cursor:default;padding:0;}
.wc-cell{background:#fff;border:1px solid var(--line);border-radius:8px;height:38px;
  padding:3px 2px;vertical-align:top;cursor:pointer;overflow:hidden;}
.wc-cell .wc-d{display:block;font-size:9px;color:#B8B2CC;line-height:1.2;}
.wc-cell .wc-t{display:block;font-size:9.5px;color:var(--text);line-height:1.25;margin-top:1px;
  word-break:break-all;max-height:24px;overflow:hidden;}
.wc-cell.filled{background:var(--brand-bg);border-color:var(--brand-bd);}
.wc-cell.filled .wc-d{color:var(--brand-tx);}
.wc-cell.is-today{border-color:var(--primary);box-shadow:inset 0 0 0 1.5px var(--primary);}

/* ---------- 座位表 ---------- */
.podium{margin:14px 16px 0;width:64%;text-align:center;background:var(--brand-bg);color:var(--primary-dark);
  border-radius:10px;padding:7px;font-size:13px;font-weight:600;}
.seat-grid{display:grid;gap:8px;margin:12px 16px 0;}
.seat{min-height:58px;border-radius:12px;background:#fff;border:1.5px solid var(--line);display:flex;flex-direction:column;
  align-items:center;justify-content:center;font-size:12.5px;cursor:pointer;padding:4px 2px;}
.seat .no{font-size:9.5px;color:var(--sub);}
.seat.filled{background:var(--brand-bg);border-color:var(--brand-bd);font-weight:600;color:var(--primary-deep);}
.seat.filled .no{color:var(--brand-tx);}
.rowctl{display:flex;gap:8px;margin:12px 16px 0;}
.rowctl .btn{flex:1;}

/* ---------- 值日 / 名册 / 作息 ---------- */
.duty-card{padding:13px 14px;margin-bottom:12px;}
.duty-card .dt{font-size:14px;font-weight:700;display:flex;align-items:center;gap:8px;margin-bottom:9px;}
.duty-line{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:13px;}
.duty-line+.duty-line{border-top:1px dashed var(--line);}
.duty-line .tag{width:64px;justify-content:center;flex:none;}
.duty-line .who{flex:1;color:#6E6B8A;}
.duty-line .ed{font-size:11px;color:var(--sub);}
.rt-row{display:flex;align-items:center;padding:12px 14px;gap:10px;}
.rt-row+.rt-row{border-top:1px solid var(--line);}
/* 作息时间：左「安排」右「时间」，两列宽度都由内容决定（时间不再固定 86px） */
.rt-row .it{flex:1;min-width:0;font-size:14px;word-break:break-word;}
.rt-row .tm{flex:none;max-width:46%;font-weight:700;font-size:14px;color:var(--primary-dark);
  text-align:right;word-break:break-all;}
.rt-row .chev{color:#C6C1DA;flex:none;}

/* ---------- 表格（成绩） ---------- */
.tbl{width:100%;border-collapse:collapse;font-size:12.5px;}
.tbl th{font-size:11px;color:var(--sub);font-weight:500;text-align:right;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap;}
.tbl td{padding:9px 10px;text-align:right;border-bottom:1px solid var(--line);white-space:nowrap;}
.tbl th:first-child,.tbl td:first-child{text-align:left;}
.tbl tr:last-child td{border-bottom:none;}
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:12px 14px;}
.stat-grid .sg{text-align:center;}
.stat-grid b{display:block;font-size:16px;color:var(--primary-dark);}
.stat-grid span{font-size:10.5px;color:var(--sub);}
.g-ex{color:var(--green-tx);font-weight:700;}
.g-good{color:var(--blue-tx);font-weight:600;}
.g-pass{color:var(--orange-tx);font-weight:600;}
.g-fail{color:var(--red-tx);font-weight:600;}

/* ---------- 弹层 ---------- */
.mask{position:fixed;inset:0;background:rgba(42,42,60,.45);z-index:80;opacity:0;transition:opacity .25s;}
.mask.show{opacity:1;}
.sheet{position:fixed;bottom:0;left:50%;transform:translate(-50%,100%);width:100%;max-width:var(--app-w);background:#fff;
  border-radius:20px 20px 0 0;padding:18px 16px calc(22px + env(safe-area-inset-bottom));z-index:81;
  transition:transform .28s;max-height:84vh;overflow:auto;}
.sheet.show{transform:translate(-50%,0);}
.sheet h3{font-size:16px;margin-bottom:14px;display:flex;justify-content:space-between;align-items:center;}
.sheet h3 .x{color:var(--sub);font-size:14px;font-weight:400;}
.field{margin-bottom:13px;}
.field label{font-size:12px;color:var(--sub);display:block;margin-bottom:5px;}
.field input,.field select,.field textarea{width:100%;border:1.5px solid var(--line);border-radius:10px;
  padding:10px 12px;font-size:14px;background:#FAF9FE;outline:none;}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--primary);}
.field textarea{resize:vertical;min-height:70px;}
.field .opts{display:flex;gap:8px;flex-wrap:wrap;}
.field .opts .chip{box-shadow:none;border:1.5px solid var(--line);}
.field .opts .chip.active{border-color:var(--primary-dark);}
.sheet-foot{display:flex;gap:10px;margin-top:16px;}
.sheet-foot .btn{flex:1;}

/* ---------- Toast ---------- */
.toast{position:fixed;left:50%;bottom:120px;transform:translateX(-50%) translateY(8px);background:rgba(42,42,60,.92);
  color:#fff;padding:9px 18px;border-radius:20px;font-size:13px;z-index:99;opacity:0;transition:.25s;pointer-events:none;
  max-width:80%;text-align:center;}
.toast.show{opacity:1;transform:translateX(-50%);}

/* ---------- 保存失败横幅（持久显示，不会被 Toast 覆盖） ---------- */
#tw-save-error{position:fixed;left:50%;top:0;transform:translateX(-50%);width:100%;max-width:var(--app-w);z-index:200;
  background:#FDF1F3;border-bottom:2px solid #DFA9BC;box-shadow:0 6px 18px rgba(201,81,106,.15);
  padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px));box-sizing:border-box;display:none;}
#tw-save-error .tse-t{font-size:14px;font-weight:700;color:#B23B52;margin-bottom:4px;}
#tw-save-error .tse-m{font-size:12.5px;color:#7E4A6E;line-height:1.6;word-break:break-all;}
#tw-save-error .tse-d{font-size:11.5px;color:#8A7CA0;line-height:1.55;margin-top:6px;word-break:break-all;
  background:#fff;border-radius:8px;padding:7px 9px;max-height:88px;overflow:auto;}
#tw-save-error .tse-h{font-size:11.5px;color:#8E86A8;margin-top:6px;line-height:1.55;}
#tw-save-error .tse-a{display:flex;justify-content:flex-end;gap:8px;margin-top:10px;}
#tw-save-error .tse-a button{border:0;border-radius:9px;padding:7px 14px;font-size:12.5px;
  font-family:inherit;cursor:pointer;}
#tw-save-error .tse-c{background:#fff;color:#7E4A6E;border:1px solid #E0C4D2;}
#tw-save-error .tse-r{background:#B23B52;color:#fff;}

/* ---------- 空状态 ---------- */
.empty{padding:40px 0;text-align:center;color:var(--sub);font-size:13px;}
.empty svg{width:44px;height:44px;color:#D6D2E6;margin-bottom:8px;}

/* ---------- 管理面板（个人管理 / 账号 / 学科） ---------- */
.quick .q-link{display:flex;flex-direction:column;align-items:center;gap:6px;font-size:11.5px;color:var(--text);}
.acc-row{display:flex;align-items:center;gap:10px;padding:10px 2px;border-bottom:1px solid var(--line);}
.acc-row:last-child{border-bottom:none;}
.acc-av{width:36px;height:36px;border-radius:50%;color:#fff;display:flex;align-items:center;justify-content:center;
  font-size:15px;font-weight:600;flex:none;}
.acc-info{flex:1;min-width:0;}
.acc-nm{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:5px;flex-wrap:wrap;}
.acc-meta{font-size:11px;color:var(--sub);margin-top:2px;}
.mini{font-size:11.5px;padding:5px 10px;border-radius:8px;background:var(--brand-bg);color:var(--primary-dark);
  border:none;cursor:pointer;font-weight:600;flex:none;}
.mini.danger{background:var(--red-bg);color:var(--red-tx);}
.sub-chip{display:inline-flex;align-items:center;gap:6px;}
.sub-chip .x{font-style:normal;color:var(--red-tx);font-weight:700;cursor:pointer;padding:0 2px;}
/* 班级卡片上的「任教科目」标签行 */
.cls-subs{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px;}
.cls-nosub{font-size:11.5px;color:#ADA9C4;}

/* ---------- 登录页 ---------- */
.login-body{background:linear-gradient(160deg,#E9E4FB 0%,#F6F4FD 52%);}
.login{max-width:480px;margin:0 auto;min-height:100vh;padding:0 28px;display:flex;flex-direction:column;
  justify-content:center;padding-bottom:40px;}
.login .logo{width:66px;height:66px;border-radius:19px;margin:0 auto 14px;box-shadow:0 10px 24px rgba(110,95,208,.3);}
.login h1{text-align:center;font-size:23px;letter-spacing:1px;}
.login .lg-sub{text-align:center;font-size:12.5px;color:var(--sub);margin:4px 0 30px;}
.login .field input{padding:13px 14px;border-radius:12px;}
.login .roles{display:flex;gap:8px;margin-bottom:16px;}
.login .roles .chip{flex:1;text-align:center;box-shadow:none;border:1.5px solid var(--line);}
.login .roles .chip.active{border-color:transparent;}
.login .foot{text-align:center;font-size:11.5px;color:var(--sub);margin-top:22px;line-height:1.9;}
.login .foot a{color:var(--primary-dark);text-decoration:underline;}
/* 登录错误提示框（静态 + 动态共用） */
.err-box{background:#FBE4E8;color:#C0516A;border:1px solid #F2C4CE;padding:10px 12px;
  border-radius:10px;font-size:13px;line-height:1.6;margin-bottom:12px;word-break:break-all;}

/* ============================================================
   本轮新增 / 移动端适配
   ============================================================ */

/* 学号小标签（成绩明细、录入弹层里把学号放在姓名前面） */
.no-badge{display:inline-block;font-size:10.5px;line-height:1.5;color:var(--sub);
  background:#F1EEF9;border-radius:6px;padding:0 5px;letter-spacing:-.2px;}

/* 校历工具栏（我的晚托 / 班级晚托 / 备用校历） */
.wc-btns{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px;}
.wc-btns .btn.sm{flex:1;min-width:88px;padding:8px 10px;}

/* 校历网格：小屏自适应（不放大、不缩小，但也要装得下） */
.wc{table-layout:fixed;width:100%;min-width:0;border-collapse:separate;border-spacing:2px;}
.wc-cell{height:34px;padding:2px 1px;overflow:hidden;}
.wc-cell .wc-t{font-size:8.5px;}
@media(min-width:480px){
  .wc{table-spacing:3px;}
  .wc-cell{height:38px;}
  .wc-cell .wc-t{font-size:9.5px;}
}

/* 手机端：输入框字号统一到 16px。
   iOS Safari 在聚焦 font-size < 16px 的输入框时会自动放大整页 ——
   这正是"页面被放大"的常见来源，提到 16px 就能彻底避免。 */
@media(max-width:600px){
  input,select,textarea{font-size:16px;}
  .sheet input,.sheet select,.sheet textarea{font-size:16px;}
}

/* 极窄屏（如 iPhone SE / 老安卓）：收紧卡片间距，保证 5 列仍然装得下 */
@media(max-width:360px){
  .stu-grid{gap:6px;margin:0 8px;}
  .stu-card .nm{font-size:11.5px;}
  .stu-card .no,.stu-card .st{font-size:8.5px;}
  .header{padding:14px 12px 10px;}
  .save-state{margin:0 12px 2px;}
}

/* ============================================================
   本轮新增：学期 / 课表调课 / 校历换代 / 统计 / 名册排除
   ============================================================ */

/* 点标题改名 */
.hd-edit{cursor:pointer;}
.hd-edit:active{opacity:.6;}

/* 我的课程表：左侧只显示节次、不要时间；首列加宽 */
.tt.tt-sch .tt-row{grid-template-columns:64px repeat(var(--cols,5),1fr);}
.tt.tt-sch .tt-time{font-size:11px;line-height:1.2;padding:0 2px;}

/* 调课：原课变灰、调过去的变蓝 */
.tt-cell.moved{background:#EAE7F5;color:#8E8CA6;opacity:.85;}
.tt-cell.transfer{background:var(--blue-bg);color:var(--blue-tx);}
.tt-cell .subtag.mv{background:#E4E0F0;color:#7E7A96;}
.tt-cell .subtag.tr{background:var(--blue-bg);color:var(--blue-tx);}
.move-banner{margin:12px 16px 0;background:var(--blue-bg);color:var(--blue-tx);
  border-radius:12px;padding:10px 12px;font-size:12.5px;cursor:pointer;line-height:1.6;}

/* 按钮「选中」态（校历的换 / 代） */
.btn.on{background:var(--primary);color:#fff;border-color:var(--primary);}

/* 校历：换 / 代 标记 */
.wc-cell.tag-swap{background:#EFEBFB;}
.wc-cell.tag-sub{background:#FDF0E3;}
.wc-cell.sel{outline:2.5px solid var(--primary);outline-offset:-2px;}
.wc-tag{display:block;font-size:8px;line-height:1.2;color:var(--purple-tx);font-weight:700;}
.wc-cell.tag-sub .wc-tag{color:var(--orange-tx);}
.wc-sel-hint{margin-top:6px;font-size:12px;color:var(--primary-dark);font-weight:600;}

/* 教师统计 */
.stat-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;}
.stat-card{padding:6px 12px;}
.stat-item{display:flex;gap:8px;align-items:flex-start;padding:9px 0;border-top:1px solid var(--line);
  font-size:12.5px;line-height:1.55;color:var(--text);}
.stat-item:first-child{border-top:none;}
.stat-item .stat-i{flex:none;width:18px;height:18px;border-radius:6px;background:var(--bg);
  color:var(--sub);font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:1px;}
.stat-num{font-size:12px;font-weight:700;color:var(--primary-dark);flex:none;}

/* 学期行（个人管理「我的信息」里） */
.sem-line{margin-top:11px;padding-top:10px;border-top:1px solid var(--line);font-size:12.5px;color:var(--text);}
.sem-line .sem-ico{margin-right:4px;}
.sem-line .sem-switch{margin-left:8px;color:var(--primary-dark);font-weight:600;text-decoration:none;font-size:12px;}

/* 统计排除：学生勾选列表 */
.ex-row{display:flex;align-items:center;gap:8px;padding:8px 2px;border-bottom:1px solid var(--line);font-size:13.5px;}
.ex-row input{width:18px;height:18px;flex:none;}
.ex-row .ex-nm{flex:1;min-width:0;}
.ex-row .ex-no{font-size:11px;color:var(--sub);flex:none;}
/* 统计排除弹层里的班级切换条（弹层内无左右内边距） */
.ex-chips{padding:0 0 6px;margin-bottom:2px;}
.ex-chips .chip{box-shadow:none;border-color:var(--line);}

/* 作业等级统计 */
.hs-row{align-items:flex-start;}
.hs-bars{display:flex;gap:5px;margin-top:4px;flex-wrap:wrap;}
.hs-b{font-size:11px;border-radius:7px;padding:1px 6px;font-weight:600;}
.hs-b.hs-green{background:var(--green-bg);color:var(--green-tx);}
.hs-b.hs-blue{background:var(--blue-bg);color:var(--blue-tx);}
.hs-b.hs-orange{background:var(--orange-bg);color:var(--orange-tx);}
.hs-b.hs-red{background:var(--red-bg);color:var(--red-tx);}
.hs-total{flex:none;text-align:center;width:46px;}
.hs-total b{display:block;font-size:16px;color:var(--primary-dark);line-height:1.2;}
.hs-total span{font-size:10px;color:var(--sub);}
.rank{flex:none;width:22px;height:22px;border-radius:8px;background:var(--bg);color:var(--sub);
  font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:3px;}
.rank.top{background:var(--orange-bg);color:var(--orange-tx);}

/* 手机端：成绩分析等「总分/平均分/最高分/最低分」四项要求在同一行显示，保持 4 列 */
@media(max-width:420px){
  .stat-grid{grid-template-columns:repeat(4,1fr);}
}

/* ============================================================
   第十轮新增：日程区间 / 按周课表 / 座位表拖动 / 作业台账改版
   ============================================================ */

/* ---------- 我的课程表：顶部「第 N 周」切换 ---------- */
.wk-bar{display:flex;align-items:center;gap:4px;margin:12px 12px 0;background:#fff;
  border-radius:14px;box-shadow:var(--shadow);padding:8px 6px;}
.wk-tabs{flex:1;display:flex;gap:6px;min-width:0;}
.wk-tab{position:relative;flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;
  gap:1px;border-radius:10px;padding:6px 2px;background:#F6F4FC;color:var(--sub);line-height:1.2;}
.wk-tab b{font-size:12.5px;font-weight:700;}
.wk-tab span{font-size:9.5px;white-space:nowrap;opacity:.9;}
.wk-tab em{position:absolute;top:2px;right:3px;font-style:normal;font-size:8.5px;
  color:var(--orange-tx);background:var(--orange-bg);border-radius:6px;padding:0 3px;}
.wk-tab.on{background:var(--primary-dark);color:#fff;}
.wk-tab.on em{background:rgba(255,255,255,.28);color:#fff;}
.wk-back{margin:10px 16px 0;font-size:12.5px;color:var(--sub);}

/* ---------- 座位表：讲台居中 · 小组标题 · 拖动 ---------- */
.podium{margin:14px auto 0;width:66%;}
.seat-area{margin:12px 16px 0;}
.seat-grp{display:grid;gap:8px;margin-bottom:8px;}
.grp-hd{text-align:center;font-size:11.5px;font-weight:700;color:var(--primary-dark);
  background:var(--brand-bg);border-radius:9px;padding:5px 2px;cursor:grab;
  user-select:none;-webkit-user-select:none;touch-action:none;}
.grp-hd.drag-src{opacity:.5;outline:2px solid var(--primary-dark);outline-offset:-2px;}
.grp-hd.drag-tgt{background:var(--primary-dark);color:#fff;}
.seat-area .seat-grid{margin:0;}
.seat{user-select:none;-webkit-user-select:none;touch-action:none;}
.seat .nm{font-size:12.5px;font-weight:600;}
.seat.drag-src{opacity:.5;outline:2.5px solid var(--primary-dark);outline-offset:-2px;}
.seat.drag-tgt{outline:2.5px solid var(--primary);outline-offset:-2px;background:var(--blue-bg);border-color:var(--blue-bg);}
@media(max-width:360px){
  .seat-grp{gap:6px;}
  .grp-hd{font-size:10.5px;}
}

/* ---------- 登记台账：收缴 / 等级 / 订正 分布 ---------- */
.sum-lab{font-size:12px;color:var(--sub);margin:10px 0 6px;}
.sum-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;color:#6E6B8A;}
.sum-line em{font-style:normal;display:inline-flex;align-items:center;gap:4px;}
.sum-line b{font-weight:700;}
.sum-line .sps{flex:1;min-width:4px;}
.sum-line .btn.sm{padding:6px 10px;font-size:12px;border-radius:9px;}
.sum-row2{display:flex;gap:10px;flex-wrap:wrap;}
.sum-grp{flex:1;min-width:148px;}
.sum-grp .sum-lab{margin-top:10px;}
.sum-chips{display:flex;gap:8px;flex-wrap:wrap;font-size:12.5px;color:#6E6B8A;}
.sum-chips em{font-style:normal;display:inline-flex;align-items:center;gap:4px;}
.sum-chips b{font-weight:700;}
.dot.ex{background:#4EAE84;}
.dot.gd{background:#5F7CC9;}
.dot.pa{background:#E09B3C;}
.dot.fa{background:#E0757F;}
.btn.sm.grade-ex{background:var(--green-bg);color:var(--green-tx);}
.btn.sm.grade-gd{background:var(--blue-bg);color:var(--blue-tx);}
.btn.sm.grade-pa{background:var(--orange-bg);color:var(--orange-tx);}
.btn.sm.grade-fa{background:var(--red-bg);color:var(--red-tx);}
.stu-spacer{height:22px;}

/* ---------- 作业批次卡（去掉圆环 / 上交率后） ---------- */
.batch{padding:13px 14px;display:block;}
.batch .binfo{width:100%;}
.batch .bt .lk{margin-left:auto;font-size:13px;font-weight:700;color:var(--primary-dark);flex:none;padding-left:8px;}
.batch .st-line em.no{color:var(--sub);font-size:11.5px;padding-left:14px;}

/* ---------- 作业明细（未交 / 未订正） ---------- */
.hw-dtl{padding:10px 14px;font-size:12.5px;}
.hw-dtl+.hw-dtl{border-top:1px solid var(--line);}
.hw-dtl .r1{display:flex;align-items:flex-start;gap:8px;}
.hw-dtl .r1 .d{flex:none;font-weight:700;color:var(--primary-dark);}
.hw-dtl .r1 .tx{flex:1;min-width:0;word-break:break-word;line-height:1.5;}
.hw-dtl .r1 .n{flex:none;font-size:11px;color:var(--sub);}
.hw-dtl .r2{margin-top:5px;font-size:11.5px;line-height:1.6;word-break:break-word;}
.hw-dtl .r2 .nos{color:#7E7A96;}



/* ============================================================
   出勤记录 / 平时表现（新增版块）
   ============================================================ */
/* 记录日期行（平时表现顶部，不选则默认当天） */
.sel-date{display:flex;align-items:center;gap:8px;padding:12px 16px 0;flex-wrap:wrap;}
.sel-date label{font-size:12px;color:var(--sub);flex:none;}
.sel-date input[type=date]{border:1.5px solid var(--line);border-radius:10px;padding:6px 10px;
  font-size:13px;background:#fff;color:var(--text);}
.sel-date input[type=date]:focus{border-color:var(--primary);outline:none;}
.sel-date .chip{padding:5px 13px;font-size:12px;}

/* 学生卡片：该生有请假 / 有表现记录时给个淡紫高亮 */
.stu-card.att,.stu-card.bf{background:var(--brand-bg);border-color:var(--brand-bd);}
.stu-card.att .st,.stu-card.bf .st{color:var(--brand-tx);font-weight:600;}

/* 记录列表 */
.rec-list{padding:0;margin:0 16px;}
.rec{display:flex;align-items:flex-start;gap:9px;padding:11px 14px;cursor:pointer;}
.rec+.rec{border-top:1px solid var(--line);}
.rec .bd{flex:1;min-width:0;}
.rec .nm{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:5px;flex-wrap:wrap;}
.rec .tx{font-size:11.5px;color:var(--sub);line-height:1.55;margin-top:2px;word-break:break-word;}
.rec .chev{color:#C6C1DA;font-size:16px;flex:none;align-self:center;}
/* 按天分组的小标题（平时表现） */
.rec-day{font-size:11.5px;color:var(--sub);background:var(--bg);padding:6px 14px;font-weight:600;}
.rec-day+.rec{border-top:none;}

/* 类型小标签：事假 / 病假 / 表扬 / 批评 / 提醒 / 其他 */
.ttag{display:inline-flex;align-items:center;justify-content:center;font-size:11px;border-radius:7px;
  padding:2px 7px;flex:none;margin-top:1px;white-space:nowrap;}
.ttag.leave-p{background:var(--orange-bg);color:var(--orange-tx);}
.ttag.leave-s{background:var(--purple-bg);color:var(--purple-tx);}
.ttag.good{background:var(--green-bg);color:var(--green-tx);}
.ttag.bad{background:var(--red-bg);color:var(--red-tx);}
.ttag.warn{background:var(--orange-bg);color:var(--orange-tx);}
.ttag.other{background:var(--blue-bg);color:var(--blue-tx);}

/* 请假表单：开始 / 结束时间两行 */
.dt-row{display:flex;align-items:center;gap:9px;margin-bottom:8px;}
.dt-row span{flex:none;width:30px;font-size:12.5px;color:var(--sub);}
.dt-row input{flex:1;min-width:0;border:1.5px solid var(--line);border-radius:10px;
  padding:8px 10px;font-size:13px;background:#fff;color:var(--text);}
.dt-row input:focus{border-color:var(--primary);outline:none;}

/* ============================================================
   电脑宽屏适配（≥1024px）
   ------------------------------------------------------------
   本区块只在宽屏生效。手机 / 平板（<1024px）命中的仍是上面原有的
   移动端规则，视觉与交互完全不变；断点选 1024 而不是 768，
   是为了让 iPad 竖屏继续使用熟悉的手机版布局。
   ============================================================ */
@media(min-width:1024px){
  /* ① 内容列整体放宽（只改这一个变量即可） */
  :root{--app-w:1120px;}

  /* ② 左右留白：原来靠各元素自带的 16px 边距，
        宽屏统一收到 .app 上，各页面观感一致 */
  .app{padding-left:24px;padding-right:24px;}
  .header{padding:22px 0 14px;}
  .header.bar{padding:18px 0 12px;}
  .header h1{font-size:24px;}
  .header.bar h1{font-size:20px;}

  /* ③ 底部导航：不再横跨整屏，居中收成一条栏 */
  .tabbar{max-width:720px;border-radius:16px 16px 0 0;
    border-left:1px solid var(--line);border-right:1px solid var(--line);}
  .tabbar a{font-size:12px;}
  .tabbar a svg{width:24px;height:24px;}

  /* ④ 弹层：底部抽屉 → 居中对话框（宽屏上底部弹层很难看） */
  .sheet{top:50%;bottom:auto;max-width:560px;max-height:86vh;
    border-radius:20px;padding:20px 22px 22px;
    transform:translate(-50%,-46%) scale(.98);opacity:0;
    transition:transform .22s,opacity .22s;}
  .sheet.show{transform:translate(-50%,-50%) scale(1);opacity:1;}

  /* ⑤ 各版块 / 工具条统一 24px 内缩（原来自带 16px 边距的在此归零） */
  .section{margin:22px 0 0;}
  .seg{margin:12px 0 0;}
  .search{margin:12px 0 0;}
  .save-state{margin:0 0 2px;}
  .sum-card{margin:12px 0 0;}
  .banner{margin:14px 0 0;}
  .sub-hd{margin:16px 0 10px;}
  .tt{margin:12px 0 0;padding:12px;}
  .wc-wrap{margin:10px 0 0;}
  .wc-tools{margin:12px 0 0;}
  .wk-bar{margin:12px 0 0;}
  .wk-back{margin:10px 0 0;}
  .move-banner{margin:12px 0 0;}
  .rec-list{margin:0;}
  .seat-area{margin:12px 0 0;}
  .seat-grid{margin:12px 0 0;}
  .rowctl{margin:12px 0 0;}
  .legend{margin:12px 0 0;}
  .grp-label{padding:12px 0 4px;}
  .chipbar{padding:2px 0 4px;}
  .sel-date{padding:12px 0 0;}

  /* ⑥ 首页：问候卡整行（文字左 / 数字右），
        今日课程与待办日程左右并排，今日作业整行 */
  .page-home #main{display:grid;grid-template-columns:1fr 1fr;column-gap:20px;align-items:start;}
  .page-home #main > .greet{grid-column:1 / -1;margin:14px 0 0;padding:20px 22px;
    display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:28px;align-items:center;}
  .page-home #main > .greet .g-title{grid-column:1;grid-row:1;margin-bottom:6px;font-size:20px;}
  .page-home #main > .greet .g-date{grid-column:1;grid-row:2;margin-bottom:0;}
  .page-home #main > .greet .greet-stats{grid-column:2;grid-row:1 / span 2;}
  .page-home #main > .section{margin:22px 0 0;}
  /* 第 4 个子元素 = 今日作业，占满整行 */
  .page-home #main > .section:nth-child(4){grid-column:1 / -1;}

  /* ⑦ 收缴 / 批改台账：学生卡片自适应列数
        （原来是固定 5 列，宽屏一行能放十几个，批改明显更快） */
  .stu-grid{grid-template-columns:repeat(auto-fill,minmax(106px,1fr));gap:10px;margin:0;}
  .stu-card{min-height:46px;padding:5px 3px;}
  .stu-card.has-grade{padding-top:18px;}
  .stu-card .nm{font-size:13.5px;}
  .hw-grid .stu-card .st{font-size:10.5px;}
  .hw-grid .stu-card .no{font-size:13px;}
  .hw-grid .stu-card .nm-txt{font-size:11px;}

  /* ⑧ 课表：放开最小宽度、格子加高，读起来更清楚 */
  .tt-row{min-width:0;gap:5px;margin-bottom:5px;}
  .tt-hd{font-size:12.5px;padding:6px 0;}
  .tt-cell{min-height:64px;font-size:12px;}
  .tt-cell .r{font-size:12px;}
  .tt-cell .m,.tt-cell .b{font-size:10.5px;}
  .tt.tt-sch .tt-row{grid-template-columns:76px repeat(var(--cols,5),1fr);}
  .tt.tt-sch .tt-time{font-size:12px;}

  /* ⑨ 校历（我的晚托 / 班级晚托 / 备用校历）：格子加高 */
  .wc-cell{height:46px;}
  .wc th{font-size:11px;}
  .wc-cell .wc-d{font-size:9.5px;}
  .wc-cell .wc-t{font-size:10.5px;max-height:30px;}

  /* ⑩ 月历：宽屏下收窄居中，避免一张月历铺满整屏 */
  .cal{max-width:680px;margin:12px auto 0;}
  .cal-grid .wd{font-size:12px;}
  .cal-cell{width:42px;height:42px;font-size:14px;}
}

/* 电脑端鼠标悬停反馈：包在 (hover:hover) 里，
   触屏设备不会触发，手机端点一下不会"粘住"高亮 */
@media(hover:hover) and (min-width:1024px){
  .row:hover,.hw-hw:hover,.ag-item:hover,.course-item:hover,.rec:hover,.batch:hover{background:#FAF9FE;}
  .stu-card:hover{border-color:var(--brand-bd);}
  .chip:hover{border-color:var(--brand-bd);}
  .tabbar a:hover{color:var(--primary-dark);}
  .btn:hover{filter:brightness(1.04);}
}

/* ============================================
   班级作业公示（公开只读页 share.php）
   ============================================ */

/* ② 全对次数：每人一个小框（只显示「学号 + N☆」）——默认收起，点标题展开 */
.yc-hd{cursor:pointer;-webkit-user-select:none;user-select:none;}
.yc-hd .caret{display:inline-block;font-size:11px;color:var(--sub);
  transform:translateY(-1px);transition:transform .18s;}
.yc-hd .caret.on{transform:rotate(90deg) translateX(1px);}
.yc-tip{font-size:11px;color:var(--sub);line-height:1.7;margin:0 12px 8px;}
.yc-collapse{display:none;}
.yc-collapse.open{display:block;}

.yc-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin:0 12px;}
.yc-cell{background:var(--card);border:1px solid var(--line);border-radius:10px;
  padding:6px 2px;text-align:center;box-shadow:var(--shadow);}
.yc-cell .n1{font-size:11.5px;font-weight:700;line-height:1.2;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.yc-cell .n2{margin-top:2px;font-size:11px;font-weight:700;color:var(--green-tx);line-height:1.2;}
.yc-cell .n2.zero{color:#C6C1DA;font-weight:500;}

/* ③ 当天作业：一项作业一个板块 */
.hw-blk{padding:12px 12px 14px;margin-bottom:12px;}
.hw-blk-hd{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:7px;}
.hw-blk-hd .bt{font-size:14px;line-height:1.4;}
.hw-blk .stu-grid{margin:0;}
/* 图例：只用三种符号（颜色与卡片上的符号一致） */
.share-legend{display:flex;flex-wrap:wrap;gap:2px 12px;font-size:11px;color:var(--sub);
  margin:0 12px 10px;line-height:1.7;}
.share-legend em{font-style:normal;display:inline-flex;align-items:center;gap:1px;}
.share-legend b{font-size:13.5px;font-weight:700;line-height:1;}
.share-legend .lg-ok{color:var(--green-tx);}
.share-legend .lg-no{color:var(--red-tx);}
.share-legend .lg-done{color:var(--primary);}

/* 「个人管理 → 班级公示链接」管理弹层 */
.sh-row{display:flex;align-items:center;gap:8px;padding:11px 0;
  border-bottom:1px solid var(--line);flex-wrap:wrap;}
.sh-row:last-child{border-bottom:0;}
.sh-info{flex:1;min-width:140px;}
.sh-nm{font-size:14px;font-weight:600;}
.sh-meta{font-size:11.5px;color:var(--sub);margin-top:2px;}
.sh-url{font-size:10.5px;color:var(--sub);word-break:break-all;line-height:1.55;margin-top:3px;}

/* 宽屏：全对卡片多排几列（手机端固定 5 列不变） */
@media(min-width:1024px){
  .yc-grid{grid-template-columns:repeat(10,1fr);gap:8px;margin:0;}
  .yc-tip{margin:0 0 8px;}
  .hw-blk{padding:16px 18px;margin-bottom:16px;}
  .share-legend{margin:0 0 12px;}
}

/* ============================================
   管理员 · 按教师查看数据（个人管理 → 教师数据）
   ============================================ */
.tv-hd{display:flex;align-items:center;gap:10px;margin-bottom:12px;}
.tv-hd-nm{font-size:15px;font-weight:700;display:flex;align-items:center;gap:5px;flex-wrap:wrap;}
.tv-stats{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:4px;}
.tv-chip{display:inline-flex;align-items:baseline;gap:3px;font-size:11px;color:var(--sub);
  background:#F6F4FC;border:1px solid var(--line);border-radius:9px;padding:4px 8px;}
.tv-chip b{font-size:12.5px;color:var(--primary-dark);}

.tv-cls{border:1px solid var(--line);border-radius:12px;padding:8px 10px;margin-bottom:10px;background:#FCFBFF;}
.tv-cls-hd{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:13px;margin-bottom:6px;}
.tv-cls-n{font-size:11px;color:var(--sub);}
.tv-cls-hd .mini{margin-left:auto;}
.tv-stu{display:flex;align-items:center;gap:8px;padding:6px 0;border-top:1px dashed var(--line);}
.tv-stu:first-of-type{border-top:0;}
.tv-no{font-size:10.5px;color:#AFA9C4;min-width:22px;}
.tv-nm{font-size:13px;font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.tv-acc{font-size:10.5px;color:var(--sub);max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

.tv-grp{border:1px solid var(--line);border-radius:12px;margin-bottom:8px;overflow:hidden;}
.tv-grp-hd{display:flex;align-items:center;gap:8px;padding:10px 12px;font-size:13px;cursor:pointer;
  -webkit-user-select:none;user-select:none;background:#FCFBFF;}
.tv-grp-n{font-size:11px;color:var(--sub);}
.tv-grp-hd .caret{margin-left:auto;font-size:11px;color:var(--sub);transition:transform .18s;}
.tv-grp-hd .caret.on{transform:rotate(90deg);}
.tv-grp-bd{display:none;padding:2px 12px 10px;}
.tv-grp-bd.open{display:block;}
.tv-li{font-size:12px;color:var(--sub);line-height:1.9;padding:2px 0;border-top:1px dashed var(--line);}
.tv-li:first-child{border-top:0;}

/* ============================================
   管理员 · 教师数据（独立页面 admin.php）
   弹层里的 .tv-* 区块直接搬到整页上，需要自己补左右留白
   ============================================ */
body.page-admin #main > .card{margin:0 16px 12px;}
body.page-admin #main > .card.tv-cls{margin:0 16px 10px;}
body.page-admin #main > .tv-grp{margin:0 16px 8px;}

.adm-msg{margin:0 16px 12px;padding:10px 12px;border-radius:12px;font-size:12.5px;line-height:1.7;}
.adm-msg.ok{background:var(--green-bg);color:var(--green-tx);}
.adm-msg.err{background:var(--red-bg);color:var(--red-tx);}

/* 本次新开通的学生账号（账号 + 初始密码，只显示这一次） */
.adm-new{margin:0 16px 12px;padding:12px 14px;background:var(--brand-bg);
  border:1px solid var(--brand-bd);}
.adm-new-hd{display:flex;flex-direction:column;gap:2px;margin-bottom:8px;}
.adm-new-hd b{font-size:13.5px;color:var(--primary-dark);}
.adm-new-hd span{font-size:11px;color:var(--sub);}
.adm-new-list{border-top:1px dashed var(--brand-bd);}
.adm-new-row{display:flex;align-items:center;gap:10px;padding:7px 0;
  border-bottom:1px dashed var(--brand-bd);font-size:12.5px;}
.adm-new-row .n{flex:1;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.adm-new-row .a,.adm-new-row .p{flex:none;font-family:ui-monospace,Menlo,Consolas,monospace;
  font-size:12.5px;letter-spacing:.4px;}
.adm-new-row .a{color:var(--primary-dark);}
.adm-new-row .p{color:var(--red-tx);font-weight:700;}
.adm-new-ft{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px;}
.adm-new-ft .tip{flex:1;min-width:150px;font-size:11px;color:var(--sub);line-height:1.7;}

/* ① 账号列表 */
.adm-list{padding:2px 14px;}
.adm-row{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line);}
.adm-row:last-child{border-bottom:0;}
.adm-row-info{flex:1;min-width:0;}
.adm-row-nm{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:5px;flex-wrap:wrap;}
.adm-go{font-size:18px;color:#C6C1DA;line-height:1;}

/* ② 详情头部小工具条 */
.adm-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;
  padding-top:10px;border-top:1px dashed var(--line);font-size:12px;color:var(--sub);}
.adm-bar b{font-size:13.5px;color:var(--primary-dark);}
.adm-bar .mini{margin-left:auto;}

/* ③ 学生行内联的「开通账号」表单 */
.adm-open{display:none;padding:8px 0 10px;border-top:1px dashed var(--line);}
.adm-open.on{display:block;}
.adm-fld{display:flex;align-items:center;gap:8px;margin-bottom:6px;}
.adm-fld > span{flex:none;width:62px;font-size:11.5px;color:var(--sub);}
.adm-fld input{flex:1;min-width:0;font-size:12.5px;padding:7px 9px;
  border:1px solid var(--line);border-radius:9px;background:#fff;}
.adm-open-ft{display:flex;justify-content:flex-end;gap:8px;margin-top:8px;}
.mini-ok{background:var(--brand-tx);color:#fff;}

/* ④ 已开通学生后面的「删除账号」 */
.adm-del{display:none;}                                  /* 纯提交载体，不占位 */
.tv-stu .mini{flex:none;}
.tv-stu .mini.danger{padding:4px 8px;font-size:11px;}
body.page-admin .tv-acc{max-width:78px;}

/* 宽屏：账号列表变成两列，长页面不用滚那么久 */
@media(min-width:1024px){
  body.page-admin #main > .card{margin:0 0 12px;}
  body.page-admin #main > .card.tv-cls{margin:0 0 10px;}
  body.page-admin #main > .tv-grp{margin:0 0 8px;}
  .page-admin .adm-msg{margin:0 0 12px;}
  .adm-list{display:grid;grid-template-columns:1fr 1fr;column-gap:20px;padding:2px 14px;}
}

/* ============================================================
   ⑤ 学生端 · 我的学习（student.php）
   ------------------------------------------------------------
   只在本页（body.page-student）使用，不影响教师端任何页面。
   ============================================================ */
body.page-student .header.bar h1{font-size:18px;}
body.page-student #main{padding-bottom:8px;}
/* 学生端右上角：修改密码 + 退出（退出在右） */
.hd-btns{display:flex;align-items:center;gap:8px;flex:none;}

/* —— 版块1：标签 + 面板 —— */
.stu-seg{margin:12px 0 0;}
/* 三个标签默认收起：点一下展开、再点一下收起（标签上的小三角提示"可点"） */
.stu-seg button{display:flex;align-items:center;justify-content:center;gap:5px;}
.seg-cv{width:0;height:0;flex:none;border-left:4px solid transparent;border-right:4px solid transparent;
  border-top:5px solid currentColor;opacity:.5;transition:transform .18s;}
.seg-cv.up{transform:rotate(180deg);}
.stu-seg-tip{font-size:11.5px;color:var(--sub);padding:10px 2px 0;line-height:1.7;}
.stu-panel{margin-top:12px;}
.stu-card-pad{padding:12px 14px;}
.ss-cap{font-size:12px;color:var(--sub);line-height:1.8;margin-bottom:6px;}
.ss-cap b{color:var(--primary-dark);}

/* 班级课表（只读小表格） */
.stu-tt-wrap{padding:10px 8px;overflow-x:auto;}
.stu-tt{width:100%;border-collapse:collapse;font-size:11.5px;}
.stu-tt th{font-size:11px;font-weight:600;color:var(--sub);padding:6px 4px;text-align:center;white-space:nowrap;}
.stu-tt th.corner{width:34px;}
.stu-tt th.rh{text-align:left;color:var(--primary-dark);width:44px;font-weight:600;}
.stu-tt td{padding:5px 3px;text-align:center;border-top:1px solid var(--line);
  border-left:1px solid var(--line);min-width:42px;}
.stu-tt tbody tr:last-child td{border-bottom:1px solid var(--line);}
.stu-tt-tx{display:block;font-size:11.5px;line-height:1.35;word-break:break-word;}
.stu-tt-rm{display:block;font-size:10px;color:var(--sub);font-style:normal;}

/* —— 单元评估 —— */
.stu-sub{margin-top:14px;}
.stu-grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:8px 4px;}
.stu-grid4 .sg{text-align:center;}
.stu-grid4 .sg b{display:block;font-size:15px;}
.stu-grid4 .sg span{font-size:10.5px;color:var(--sub);}
.stu-grid4 .sg b.dim{color:var(--sub);font-weight:600;}

.my-score{display:flex;align-items:baseline;gap:10px;padding:2px 0 10px;}
.my-score b{font-size:30px;line-height:1;color:var(--primary-dark);font-weight:800;}
.my-score span{font-size:12px;color:var(--sub);}

/* 名次线段：左端 1 · 右端总人数 · 红点落在名次位置（不写数字） */
.rk-line{display:flex;align-items:center;gap:8px;}
.rk-end{flex:none;font-size:11.5px;font-weight:700;color:var(--sub);}
.rk-track{position:relative;flex:1;height:8px;border-radius:5px;background:#EFEBFB;}
.rk-track:before,.rk-track:after{content:'';position:absolute;top:-3px;width:2px;height:14px;
  border-radius:2px;background:#D6D0EE;}
.rk-track:before{left:0;}
.rk-track:after{right:0;}
.rk-track i{position:absolute;top:50%;width:14px;height:14px;border-radius:50%;
  background:var(--red-tx);border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.18);
  transform:translate(-50%,-50%);}
.rk-note{font-size:11px;color:var(--sub);margin-top:8px;line-height:1.7;}
.rk-wait{font-size:12px;color:var(--sub);}

/* 历次成绩 / 历次名次：一次考试一行，每行一条数轴 */
.hs-row{padding:9px 0;border-top:1px dashed var(--line);}
.hs-row:first-child{border-top:0;padding-top:2px;}
.hs-hd{display:flex;align-items:baseline;gap:8px;margin-bottom:7px;}
.hs-hd .hs-nm{flex:1;min-width:0;font-size:13.5px;font-weight:600;color:var(--text);
  word-break:break-word;}
.hs-hd .hs-dt{flex:none;font-size:11px;color:var(--sub);}
.hs-hd .hs-val{flex:none;font-size:16px;font-weight:800;color:var(--primary-dark);}

/* —— 版块2：全班作业情况入口 + 今天的作业 —— */
.stu-share{display:flex;align-items:center;gap:10px;background:var(--brand-bg);
  border:1px solid var(--brand-bd);border-radius:14px;padding:11px 13px;margin-bottom:10px;}
.stu-share .ico{flex:none;width:20px;height:20px;color:var(--primary-dark);}
.stu-share .ico svg{width:20px;height:20px;display:block;}
.stu-share .tx{flex:1;min-width:0;font-size:13.5px;font-weight:600;color:var(--primary-dark);
  display:flex;flex-direction:column;gap:1px;}
.stu-share .tx em{font-style:normal;font-size:10.5px;font-weight:400;color:var(--sub);}
.stu-share .go{flex:none;font-size:18px;color:#B9B4D0;line-height:1;}

.stu-homework{padding:10px 0;border-top:1px dashed var(--line);}
.stu-homework:first-child{border-top:0;padding-top:2px;}
.stu-homework .r1{display:flex;align-items:center;gap:7px;}
.stu-homework .r1 .ttl{flex:1;min-width:0;font-size:14px;word-break:break-word;}

/* 分组小标题（之前还没完成 / 今天新布置）与「之前」那组的日期小签 */
.stu-grp-hd{font-size:11.5px;color:var(--sub);font-weight:600;margin:0 0 4px;}
.stu-grp-hd+.stu-homework{border-top:0;padding-top:4px;}
.stu-grp-hd:not(:first-child){margin-top:13px;padding-top:11px;border-top:1px solid var(--line);}
.stu-grp-hd b{color:var(--primary-dark);font-size:12.5px;}
.stu-more{font-size:11px;color:var(--sub);margin-top:7px;line-height:1.7;}
.stu-date{flex:none;font-size:11px;font-weight:700;color:var(--primary-dark);
  background:var(--brand-bg);border-radius:7px;padding:2px 7px;}
.stu-homework .r2{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:6px;}
.stu-sfx{font-size:12px;color:var(--orange-tx);font-weight:600;}
.stu-sfx.ok{color:var(--green-tx);}
.stu-tag{font-size:11px;padding:2px 8px;border-radius:8px;background:var(--red-bg);color:var(--red-tx);font-weight:600;}

/* —— 版块3：全对 / 未全对 —— */
.stu-grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.stu-cnt{border-radius:14px;padding:14px 10px;text-align:center;}
.stu-cnt b{display:block;font-size:26px;line-height:1.1;font-weight:800;}
.stu-cnt span{font-size:11.5px;color:var(--sub);}
.stu-cnt.ok{background:#EAF7F1;}
.stu-cnt.ok b{color:var(--green-tx);}
.stu-cnt.no{background:#FDEFF0;}
.stu-cnt.no b{color:var(--red-tx);}
.stu-cnt-note{font-size:11px;color:var(--sub);margin-top:9px;line-height:1.7;}

/* —— 版块4：个人作业日历 —— */
.stu-cal{margin:0;}
.stu-day-hd{font-size:12.5px;font-weight:700;color:var(--primary-dark);margin-bottom:6px;}
.stu-drow{display:flex;align-items:center;gap:7px;padding:8px 0;border-top:1px dashed var(--line);}
.stu-drow:first-child{border-top:0;}
.stu-drow .ttl{flex:1;min-width:0;font-size:13px;word-break:break-word;}
.stu-drow .st{flex:none;font-size:11.5px;font-weight:700;padding:2px 8px;border-radius:8px;}
.st-miss{background:var(--red-bg);color:var(--red-tx);}
.st-late{background:var(--orange-bg);color:var(--orange-tx);}
.st-ok{background:#EAF7F1;color:var(--green-tx);}
.st-bad{background:#FDF3E7;color:var(--orange-tx);}

/* 页尾「退出登录」（学生端没有底部导航，需要明确的出口） */
.stu-logout{display:inline-block;margin-top:12px;font-size:12.5px;font-weight:600;
  color:var(--primary-dark);background:var(--brand-bg);border:1px solid var(--brand-bd);
  border-radius:10px;padding:7px 18px;}

/* 宽屏：内容变宽，标签与面板跟着放宽 */
@media(min-width:1024px){
  .stu-seg{margin:14px 0 0;}
  body.page-student #main{padding-bottom:12px;}
  .stu-grid4{grid-template-columns:repeat(8,1fr);}
}
