/* ===================== 综合工作台 视觉规范 ===================== */
:root{
  /* 基础底色：柔和浅米白 */
  --bg: #F6F4EF;
  --bg-soft: #FBF9F5;
  --card: #FFFFFF;
  --text: #3A3F4A;
  --text-2: #6B7280;
  --text-light: #A6ABB4;   /* 浅灰状态辅助文字 */
  --border: #ECE7DF;
  --border-strong: #DED7CC;

  /* 主色：浅蓝 + 中性灰 */
  --primary: #7BA7D9;
  --primary-deep: #5B8AC6;
  --gray: #8A8F98;

  /* 选中态：浅橙 */
  --accent: #F0A868;
  --accent-soft: #FBEBD8;

  /* 区块区分色（低饱和、协调统一） */
  --c-bao: #8AB6D6;     /* 我的宝箱 蓝 */
  --c-paper: #7FB8A8;    /* 试卷设计 青绿 */
  --c-recite: #A99CC9;   /* 背书表 紫 */
  --c-student: #8E9CC4;  /* 学生档案 靛 */
  --c-grade: #93B87A;    /* 成绩管理 绿 */
  --c-point: #E0A878;    /* 积分管理 橙 */
  --c-seat: #D7A0B0;     /* 座位表 粉 */
  --c-leave: #D08B8B;    /* 请假记录 柔红 */
  --c-eval: #D9B36C;     /* 学生评价 琥珀 */
  --c-home: #7FC4C9;     /* 家校共育 青 */
  --c-affairs: #B39B72;  /* 事务待办 褐金 */
  --c-uniform: #7F9EA8;  /* 校服购买 青灰 */
  --c-dorm: #8A7FB8;     /* 宿舍内务 紫灰 */
  --c-hyg: #0D9488;      /* 室内外卫生 青绿 */
  --c-duty: #2563EB;     /* 日报 蓝 */
  --c-ginfo: #4A7FA5;    /* 年级信息管理 蓝青 */
  --c-rollcall: #4E9DB0; /* 点名表 青蓝 */
  --c-rectify: #B5794F;  /* 整改反馈 褐橙 */
  --c-admin: #3F6FA8;    /* 行政值班 蓝 */
  --c-tool: #2E8B74;     /* 百宝箱 青绿 */
  --c-cert: #B08A3E;     /* 奖状打印 金褐 */
  --c-fee: #C08A4E;      /* 班费管理 金 */

  --radius: 18px;
  --radius-sm: 12px;
  --shadow: 0 6px 22px rgba(120,110,90,0.08);
  --shadow-soft: 0 2px 10px rgba(120,110,90,0.06);
}

*{box-sizing:border-box;margin:0;padding:0;}
html,body{height:100%;}
body{
  font-family: "PingFang SC","Microsoft YaHei","Segoe UI",system-ui,sans-serif;
  background: var(--bg);
  color: var(--text);
  font-size: 14px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -webkit-tap-highlight-color: transparent;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit;}
input,select,textarea{font-family:inherit;font-size:14px;color:var(--text);}
::-webkit-scrollbar{width:8px;height:8px;}
::-webkit-scrollbar-thumb{background:#D8D1C6;border-radius:8px;}
::-webkit-scrollbar-track{background:transparent;}

/* ===================== 顶部头部 ===================== */
.header{
  height:64px;
  background: linear-gradient(120deg,#FFFFFF 0%,#F4F8FC 100%);
  border-bottom:1px solid var(--border);
  display:flex;align-items:center;justify-content:space-between;
  padding:0 26px;position:sticky;top:0;z-index:30;
}
.header .brand{display:flex;align-items:center;gap:12px;font-size:19px;font-weight:700;color:var(--text);letter-spacing:.5px;}
.header .brand .logo{
  width:34px;height:34px;border-radius:10px;background:var(--primary);
  display:flex;align-items:center;justify-content:center;color:#fff;
}
.header .brand .logo-img{
  height:36px;width:auto;display:block;
}
.header .brand .brand-text{
  font-size:17px;font-weight:700;color:var(--text);letter-spacing:.5px;
}
.header .right{display:flex;align-items:center;gap:18px;}
.header .welcome{font-size:14px;color:var(--text-2);display:flex;align-items:center;gap:8px;}
.header .welcome .edit-w{color:var(--text-light);cursor:pointer;display:flex;}
.header .clock{font-size:13px;color:var(--text-light);font-variant-numeric:tabular-nums;min-width:148px;text-align:right;}

/* ===================== 主体布局 ===================== */
.layout{display:flex;min-height:calc(100vh - 64px);}

/* 左侧导航 */
.sidebar{
  width:264px;flex:0 0 264px;
  background: var(--bg-soft);
  border-right:1px solid var(--border);
  padding:22px 16px;overflow-y:auto;
}
.nav-group{margin-bottom:22px;}
.nav-group-title{
  font-size:17px;font-weight:700;color:var(--text);
  padding:6px 12px 6px;display:flex;align-items:center;gap:8px;
  cursor:pointer;user-select:none;border-radius:var(--radius-sm);transition:.18s;
}
.nav-group-title:hover{background:#fff;}
.nav-group-title .ic{width:20px;height:20px;display:flex;}
.nav-group-title .nt{flex:1;}
.nav-caret{display:flex;color:var(--gray);transition:transform .2s;}
.nav-group.collapsed .nav-caret{transform:rotate(-90deg);}
.nav-group.collapsed{margin-bottom:12px;}
.nav-group.collapsed .nav-body{display:none;}
.nav-divider{height:1px;background:var(--border-strong);margin:6px 12px 14px;}
.nav-item{
  display:flex;align-items:center;gap:12px;
  padding:11px 14px;margin:4px 0;border-radius:var(--radius-sm);
  color:var(--text-2);font-size:14px;transition:.18s;cursor:pointer;
  border:1px solid transparent;
}
.nav-item .ic{width:20px;height:20px;display:flex;flex:0 0 20px;color:var(--gray);}
.nav-item .label{flex:1;}
.nav-item .badge{font-size:11px;color:var(--text-light);background:#F0ECE4;padding:2px 8px;border-radius:20px;}
.nav-item:hover{background:#fff;border-color:var(--border);}
.nav-item.active{
  background:var(--accent-soft);color:#B9702E;font-weight:600;border-color:#F4D9B8;
}
.nav-item.active .ic{color:var(--accent);}
/* 侧边导航拖动排序（20260916a）：同分组内拖动调整顺序 */
.nav-item[draggable="true"]{cursor:grab;}
.nav-item[draggable="true"]:active{cursor:grabbing;}
.nav-item.dragging{opacity:.35;}
.nav-item.drop-before{box-shadow:inset 0 2px 0 var(--accent,#7BA7D9);}
.nav-item.drop-after{box-shadow:inset 0 -2px 0 var(--accent,#7BA7D9);}

/* 右侧内容区 */
.content{flex:1;padding:26px 30px 60px;overflow-y:auto;max-width:1100px;}
.page-head{display:flex;align-items:center;gap:14px;margin-bottom:20px;}
.back-btn{
  display:flex;align-items:center;gap:6px;color:var(--text-2);
  font-size:13px;padding:8px 14px;border-radius:20px;background:#fff;border:1px solid var(--border);
  transition:.18s;
}
.back-btn:hover{color:var(--primary-deep);border-color:var(--primary);}
.page-title{font-size:22px;font-weight:700;color:var(--text);}
.page-sub{font-size:13px;color:var(--text-light);margin-top:2px;}

/* 状态卡片 / 概览 */
.overview{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:18px;margin-bottom:26px;}
.ov-card{
  background:var(--card);border-radius:var(--radius);padding:20px 22px;box-shadow:var(--shadow);
  border-left:5px solid var(--primary);position:relative;overflow:hidden;
}
.ov-card .ic{position:absolute;right:16px;top:16px;width:38px;height:38px;opacity:.85;}
.ov-card .num{font-size:34px;font-weight:700;line-height:1.1;}
.ov-card .name{font-size:13px;color:var(--text-light);margin-top:6px;}
.ov-card.blue{border-color:var(--c-bao);} .ov-card.blue .num,.ov-card.blue .ic{color:var(--c-bao);}
.ov-card.teal{border-color:var(--c-paper);} .ov-card.teal .num,.ov-card.teal .ic{color:var(--c-paper);}
.ov-card.red{border-color:var(--c-leave);} .ov-card.red .num,.ov-card.red .ic{color:var(--c-leave);}
.ov-card.cyan{border-color:var(--c-home);} .ov-card.cyan .num,.ov-card.cyan .ic{color:var(--c-home);}
.ov-card.indigo{border-color:var(--c-student);} .ov-card.indigo .num,.ov-card.indigo .ic{color:var(--c-student);}
.ov-card.orange{border-color:var(--c-point);} .ov-card.orange .num,.ov-card.orange .ic{color:var(--c-point);}

/* 首页总览视图（20260918l，按权限范围聚合检查/过程数据） */
.ov-wrap{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-soft);padding:18px 20px;margin-bottom:22px;}
.ov-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:4px;}
.ov-ttl{font-size:16px;font-weight:700;color:var(--text);}
.ov-sub{font-size:12px;color:var(--text-light);margin-top:3px;line-height:1.6;}
.ov-chips{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0 2px;}
.ov-chip{font-size:12px;padding:6px 14px;border-radius:18px;background:#F7F4EE;color:var(--text-2);font-weight:600;cursor:pointer;transition:.16s;border:1px solid transparent;}
.ov-chip:hover{background:#EAF1F9;color:var(--primary-deep);}
.ov-chip.on{background:var(--primary);color:#fff;box-shadow:0 4px 12px rgba(123,167,217,.35);}
.ov-chip b{font-weight:700;opacity:.85;margin-left:2px;}
.ov-kpi{display:grid;grid-template-columns:repeat(auto-fill,minmax(172px,1fr));gap:14px;margin:16px 0 18px;}
.ov-k{background:#FCFBF8;border:1px solid var(--border);border-left:4px solid var(--primary);border-radius:14px;padding:12px 14px;position:relative;overflow:hidden;}
.ov-k .k-ic{position:absolute;right:10px;top:10px;width:26px;height:26px;opacity:.45;}
.ov-k .k-ttl{font-size:12px;color:var(--text-light);padding-right:26px;}
.ov-k .k-num{font-size:25px;font-weight:700;line-height:1.15;margin:4px 0 2px;}
.ov-k .k-sub{font-size:11.5px;color:var(--text-light);line-height:1.55;}
.ov-sec{font-size:13px;font-weight:700;color:var(--text-2);margin:16px 0 8px;display:flex;align-items:center;gap:8px;}
.ov-sec .ln{flex:1;height:1px;background:var(--border);}
.ov-two{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
@media (max-width:820px){.ov-two{grid-template-columns:1fr;}}
.ov-bars{display:flex;flex-direction:column;gap:7px;}
.ov-bar{display:flex;align-items:center;gap:8px;font-size:12.5px;}
.ov-bar .lb{width:9.5em;flex:none;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);}
.ov-bar .tr{flex:1;height:11px;background:var(--border);border-radius:6px;overflow:hidden;}
.ov-bar .fl{height:100%;border-radius:6px;transition:.2s;}
.ov-bar .vl{width:2.6em;flex:none;text-align:center;font-weight:700;}
.ov-trend{display:flex;gap:3px;align-items:flex-end;overflow-x:auto;padding:2px 0;}
.ov-trend .tb{flex:1;min-width:16px;display:flex;flex-direction:column;align-items:center;gap:2px;}
.ov-trend .tb i{font-style:normal;font-size:10px;color:var(--text-light);line-height:1;}
.ov-trend .tb .bar{width:74%;max-width:16px;border-radius:3px 3px 0 0;}
.ov-trend .tb .dl{font-size:10px;color:var(--text-light);line-height:1;}
.ov-hl td{background:#FFF8EC !important;}
.ov-hl td:first-child{box-shadow:inset 3px 0 0 var(--accent);}
.ov-note{margin-top:16px;padding:11px 14px;border:1px dashed var(--border-strong);border-radius:12px;font-size:12px;color:var(--text-light);line-height:1.7;}
.ov-click{cursor:pointer;}
.ov-click:hover td{background:#F3F7FC !important;}

/* 工具条（搜索/筛选/主按钮收纳进模块） */
.toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-bottom:18px;}
.search-box{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--border);border-radius:22px;padding:8px 14px;min-width:230px;flex:1;}
.search-box input{border:none;outline:none;background:transparent;flex:1;}
.search-box .ic{color:var(--text-light);width:18px;height:18px;}
.filter{cursor:pointer;}
select.filter, .filter-select{
  background:#fff;border:1px solid var(--border);border-radius:22px;padding:8px 14px;color:var(--text-2);outline:none;
}
.btn{
  display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:22px;font-size:13px;font-weight:600;
  transition:.18s;white-space:nowrap;
}
.btn .ic{width:16px;height:16px;}
.btn-primary{background:var(--primary);color:#fff;box-shadow:0 4px 12px rgba(123,167,217,.35);}
.btn-primary:hover{background:var(--primary-deep);}
.btn-accent{background:var(--accent);color:#fff;box-shadow:0 4px 12px rgba(240,168,104,.35);}
.btn-accent:hover{filter:brightness(.96);}
.btn-ghost{background:#fff;border:1px solid var(--border);color:var(--text-2);}
.btn-ghost:hover{border-color:var(--primary);color:var(--primary-deep);}
.btn-sm{padding:6px 12px;font-size:12px;border-radius:18px;}

/* 列表卡片 */
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;}
.list-card{
  background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-soft);
  padding:16px 18px;border-top:4px solid var(--primary);display:flex;flex-direction:column;gap:10px;
}
.list-card .top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;}
.list-card .ttl{font-size:15px;font-weight:700;color:var(--text);}
.list-card .meta{font-size:12px;color:var(--text-light);}
.list-card .actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px;}
.link-btn{font-size:12px;color:var(--text-2);display:inline-flex;align-items:center;gap:4px;padding:5px 10px;border-radius:14px;background:#F7F4EE;transition:.16s;}
.link-btn:hover{color:var(--primary-deep);background:#EAF1F9;}
.link-btn.danger:hover{color:#C0564F;background:#FBEAE9;}
.link-btn .ic{width:14px;height:14px;}

/* 表格 */
.tbl-wrap{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow-soft);overflow-x:auto;}
table.tbl{width:100%;border-collapse:collapse;font-size:13px;}
table.tbl th{background:#F7F4EE;color:var(--text-2);font-weight:600;text-align:left;padding:12px 14px;border-bottom:1px solid var(--border);white-space:nowrap;}
table.tbl td{padding:11px 14px;border-bottom:1px solid var(--border);color:var(--text);}
table.tbl tr:hover td{background:#FBF9F5;}
.tag{display:inline-block;font-size:11px;padding:2px 9px;border-radius:20px;font-weight:600;}
.tag-a{background:#E4F0DB;color:#5E8A3E;}
.tag-b{background:#FBEFD8;color:#B5842E;}
.tag-c{background:#F6E1E1;color:#B05A57;}
.tag-blue{background:#E7F0F9;color:#4F7FB5;}
.tag-gray{background:#EFEDE8;color:#8A8F98;}
.tag-pink{background:#FBEAF0;color:#B05A86;}
.tag-cyan{background:#E2F4F5;color:#3F8E92;}

.empty{padding:46px 20px;text-align:center;color:var(--text-light);font-size:14px;}

/* 表单弹窗 */
.modal-mask{position:fixed;inset:0;background:rgba(60,55,45,.35);display:flex;align-items:center;justify-content:center;z-index:60;padding:20px;}
.modal{background:#fff;border-radius:var(--radius);width:min(560px,100%);max-height:88vh;overflow-y:auto;box-shadow:0 20px 60px rgba(80,70,50,.25);}
.modal .m-head{display:flex;justify-content:space-between;align-items:center;padding:18px 22px;border-bottom:1px solid var(--border);position:sticky;top:0;background:#fff;z-index:2;}
.modal .m-head h3{font-size:17px;font-weight:700;}
.modal .m-body{padding:20px 22px;}
.modal .m-foot{padding:14px 22px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px;}
.close-x{color:var(--text-light);cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;}
.close-x:hover{background:#F2EFE9;color:var(--text);}
.field{margin-bottom:14px;}
.field label{display:block;font-size:13px;color:var(--text-2);margin-bottom:6px;font-weight:600;}
.field input,.field select,.field textarea{
  width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#FCFBF8;outline:none;transition:.16s;
}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--primary);background:#fff;}
.field .hint{font-size:11px;color:var(--text-light);margin-top:4px;}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.form-group{border:1px solid var(--border);border-radius:var(--radius-sm);padding:14px 16px 2px;margin-bottom:14px;background:#FCFBF8;}
.form-group-title{font-size:13px;font-weight:700;color:var(--primary);margin-bottom:12px;padding-left:9px;border-left:3px solid var(--primary);}

/* 试卷题目编辑 */
.q-item{border:1px dashed var(--border-strong);border-radius:var(--radius-sm);padding:12px;margin-bottom:10px;background:#FCFBF8;}
.q-item .q-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;}
.q-item .q-no{font-weight:700;color:var(--c-paper);}

/* 座位表 */
.seat-board{display:inline-grid;gap:10px;background:#fff;border-radius:var(--radius);padding:18px;box-shadow:var(--shadow-soft);}
.seat-row{display:grid;gap:10px;}
.seat-group .seat-row{gap:10px;margin-bottom:6px;}
.seat-group .seat-row:nth-child(3n){margin-bottom:16px;}
.seat-exam{grid-template-columns:1fr !important;gap:14px;}
.seat{width:84px;height:64px;border-radius:12px;background:#F4F1EB;border:1px solid var(--border);display:flex;align-items:center;justify-content:center;text-align:center;font-size:13px;color:var(--text-2);padding:4px;cursor:pointer;transition:.16s;position:relative;}
.seat.filled{background:#EAF1F9;border-color:#CFE0F2;color:var(--primary-deep);font-weight:600;}
.seat:hover{border-color:var(--accent);}
.seat .x{position:absolute;}
.seat-row-label{width:24px;align-self:center;color:var(--text-light);font-size:12px;text-align:center;}
/* 特异体质高亮 */
.seat-health{border-width:2px !important;border-color:#D96A6A !important;background:#FDE8E8 !important;color:#B03A3A !important;}
/* 请假中半透明 */
.seat-leave{opacity:.4;filter:grayscale(.5);}
/* 特殊座位 */
.seat-special{box-shadow:0 0 0 2px #E8A838,0 2px 8px rgba(232,168,56,.3);border-style:dashed !important;border-color:#E8A838 !important;}
.seat-star{position:absolute;top:2px;right:4px;font-size:11px;color:#E8A838;line-height:1;}
/* 拖拽 */
.seat-dragging{opacity:.5;transform:scale(.95);}
.seat-drag-over{border-color:var(--accent) !important;background:#F0EDFA !important;transform:scale(1.05);}
/* 讲台 */
.seat-podium{text-align:center;padding:8px 20px;background:#E8E4DC;border-radius:8px;color:#888;font-size:14px;font-weight:600;margin-bottom:12px;display:flex;align-items:center;justify-content:center;gap:8px;}
.seat-podium-vertical{writing-mode:vertical-rl;text-orientation:upright;padding:12px 6px;background:#E8E4DC;border-radius:8px;color:#888;font-size:14px;font-weight:600;display:flex;align-items:center;justify-content:center;gap:4px;}
/* 讲台左右两侧桌子 */
.seat-podium-row{display:flex;align-items:center;justify-content:center;gap:14px;flex-wrap:wrap;margin-bottom:12px;}
.seat-podium-row .seat-podium{margin-bottom:0;}
.seat-side{display:flex;gap:10px;align-items:center;}
.seat-podium-row .seat-side .seat,.seat-side-v .seat{width:84px;height:64px;margin:0;}
.seat-side-v{display:flex;flex-direction:column;gap:10px;align-items:center;}
/* 讲台视角：整体旋转 180°（上下+左右翻转＝老师站在讲台往下看的真实方位：第 1 排贴讲台显示在下方），
   座位/讲台文字逐层反向旋转还原（DOM 坐标与拖拽口径不受影响） */
.seat-teacher-view{transform:rotate(180deg);}
.seat-teacher-view .seat,.seat-teacher-view .seat-podium,.seat-teacher-view .seat-podium-vertical{transform:rotate(180deg);}
/* 任教设置 · 云端账号 */
.ts-cloud-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:8px;}
.ts-cloud-rec{padding:6px 10px;border:1px solid var(--border);border-radius:10px;background:#FBFAF7;}
.ts-cloud-rec.bound{background:#F0F7F0;border-color:#CBE3CB;}
/* 统计条 */
.seat-stats{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:12px;font-size:13px;color:var(--text-2);}
.seat-stat-fill{color:var(--primary-deep);font-weight:600;}
.seat-stat-health{color:#D96A6A;display:flex;align-items:center;gap:4px;}
.seat-stat-leave{color:#999;display:flex;align-items:center;gap:4px;}
.seat-stat-special{color:#E8A838;display:flex;align-items:center;gap:4px;}
/* 按钮组 */
.btn-group .btn{border-radius:0;}
.btn-group .btn:first-child{border-radius:var(--radius-sm) 0 0 var(--radius-sm);}
.btn-group .btn:last-child{border-radius:0 var(--radius-sm) var(--radius-sm) 0;border-right:1px solid var(--border);}

/* 进度/进退 */
.up{color:#5E8A3E;font-weight:600;}
.down{color:#C0564F;font-weight:600;}
.flat{color:var(--text-light);}

/* 请假记录 */
.leave-stats{display:flex;gap:18px;margin-bottom:12px;font-size:13px;color:var(--text-2);}
.leave-stats b{color:var(--c-leave);font-size:15px;}
.leave-active-row{background:#FFF8F0;}
.tag-default{background:#E8E4DC;color:#888;}

/* 积分管理 */
.point-stats{display:flex;gap:18px;margin-bottom:12px;font-size:13px;color:var(--text-2);flex-wrap:wrap;align-items:center;}
.point-stats b{color:var(--c-point);font-size:15px;}
.pt-rank{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;padding:0 6px;border-radius:8px;background:#F4EFE2;color:#8A7440;font-size:13px;}
.pt-rank-1{background:#F9E9C8;color:#B8860B;}
.pt-rank-2{background:#EDEDEE;color:#7A7A85;}
.pt-rank-3{background:#F3E0D3;color:#A0704F;}

/* 成绩总表（宽表） */
.grade-sub{background:#F6F3EC;font-weight:600;color:#6B5B3E;}
.grade-total{background:#EDF2F8;font-weight:700;color:#3D6391;}

/* ===================== 点名表 ===================== */
.rc-stats{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px;}
.rc-stat{background:#fff;border-radius:var(--radius-sm);box-shadow:var(--shadow-soft);padding:10px 18px;display:flex;align-items:baseline;gap:7px;font-size:12px;color:var(--text-2);}
.rc-stat b{font-size:22px;font-weight:700;line-height:1;}
.rc-stat.t-total b{color:var(--text);}
.rc-stat.t-dao b{color:#5E9E7B;}
.rc-stat.t-late b{color:#D9954A;}
.rc-stat.t-leave b{color:#5B8AC6;}
.rc-stat.t-absent b{color:#C0564F;}
.rc-list{display:flex;flex-direction:column;gap:8px;max-width:780px;}
.rc-row{background:#fff;border-radius:var(--radius-sm);box-shadow:var(--shadow-soft);padding:10px 14px;display:flex;align-items:center;gap:12px;}
.rc-sex{width:34px;height:34px;border-radius:50%;flex:0 0 34px;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:#fff;}
.rc-sex.m{background:#7BA7D9;}
.rc-sex.w{background:#D7A0B0;}
.rc-info{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rc-info b{font-size:15px;}
.rc-info .meta{font-size:12px;color:var(--text-light);margin-left:6px;}
.rc-leave-tag{font-size:11px;background:#E7F0F9;color:#4F7FB5;border-radius:20px;padding:1px 8px;margin-left:6px;vertical-align:1px;}
.rc-btns{display:flex;gap:6px;flex:0 0 auto;}
.rc-btn{min-width:42px;height:34px;border-radius:10px;border:1px solid var(--border);background:#F7F4EE;color:var(--text-2);font-size:13px;font-weight:600;transition:.15s;padding:0 10px;}
.rc-btn:hover{border-color:var(--primary);color:var(--primary-deep);}
.rc-btn.on{color:#fff;}
.rc-btn.on.s-dao{background:#5E9E7B;border-color:#5E9E7B;}
.rc-btn.on.s-late{background:#D9954A;border-color:#D9954A;}
.rc-btn.on.s-leave{background:#5B8AC6;border-color:#5B8AC6;}
.rc-btn.on.s-absent{background:#C0564F;border-color:#C0564F;}

/* ===================== 整改反馈 ===================== */
.rect-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-soft);padding:16px 18px;margin-bottom:14px;}
.rect-card .rc-ttl{font-size:15px;font-weight:700;color:var(--text);margin-bottom:4px;}
.rect-paste{width:100%;border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 12px;font-size:13.5px;line-height:1.7;font-family:inherit;resize:vertical;background:#FDFCFA;color:var(--text);}
.rect-paste:focus{outline:none;border-color:var(--primary);background:#fff;}
.rect-acts{display:flex;gap:8px;align-items:center;margin-top:10px;flex-wrap:wrap;}
.rect-chk{display:flex;align-items:center;gap:5px;font-size:13px;color:var(--text-2);cursor:pointer;}
.rect-item{border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;padding:10px 12px;margin-top:10px;display:flex;flex-direction:column;gap:8px;}
.rt-head{display:flex;align-items:center;gap:8px;}
.rt-no{width:22px;height:22px;flex:0 0 22px;border-radius:50%;background:var(--c-rectify);color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;}
.rt-scene{font-size:11px;background:#F7EFE8;color:var(--c-rectify);border-radius:20px;padding:1px 9px;}
.rt-spacer{flex:1;}
.rect-item textarea{width:100%;border:1px solid var(--border);border-radius:10px;padding:8px 10px;font-size:13.5px;line-height:1.7;font-family:inherit;resize:vertical;color:var(--text);}
.rect-item textarea:focus{outline:none;border-color:var(--primary);}
.rect-item .rt-problem{background:#FDFCFA;}
.rect-item .rt-action{background:#FFFBF2;border-color:#F0DCC0;}
.rect-paper{background:#fff;border:1px solid var(--border-strong);border-radius:6px;padding:38px 44px;max-width:820px;margin:6px auto 0;box-shadow:0 2px 10px rgba(120,110,90,.08);font-family:"FangSong","仿宋",SimSun,serif;}
.rect-paper .rp-title{font-family:"SimSun","宋体",serif;font-size:22px;font-weight:700;text-align:center;letter-spacing:2px;margin-bottom:18px;color:#1F2430;}
.rect-paper p{font-size:16px;line-height:1.9;text-indent:2em;margin:0 0 4px;color:#1F2430;}
.rect-paper p.rp-sign{text-indent:0;text-align:right;margin:0;}
.rect-paper p.rp-empty{text-indent:0;text-align:center;color:var(--text-light);font-size:14px;font-family:inherit;}

/* 单科考试对比高亮 */
.cmp-row-up{background:#F0F7EC;}
.cmp-row-up td:first-child{border-left:3px solid #5E8A3E;}
.cmp-row-down{background:#FBF0EF;}
.cmp-row-down td:first-child{border-left:3px solid #C0564F;}
.tbl tr.cmp-row-up:hover td, .tbl tr.cmp-row-down:hover td{filter:brightness(.97);}

/* 全专业成绩：本班学生高亮 */
.mg-row-mine{background:#FFF8E6;}
.mg-row-mine td:first-child{border-left:3px solid #E8A838;}
.tbl tr.mg-row-mine:hover td{filter:brightness(.97);}
/* 任课教师·任教班级高亮（按班级区分颜色） */
tr.mg-hl-0{background:#FFF8E6;} tr.mg-hl-0 td:first-child{border-left:3px solid #E8A838;}
tr.mg-hl-1{background:#EAF3EC;} tr.mg-hl-1 td:first-child{border-left:3px solid #4CAF7C;}
tr.mg-hl-2{background:#EDF1FA;} tr.mg-hl-2 td:first-child{border-left:3px solid #5B8AC6;}
.mg-pager{display:inline-flex;align-items:center;gap:6px;font-weight:400;font-size:12px;color:var(--text-2);}
.mg-pager .btn-sm{padding:2px 10px;font-size:12px;}
.mg-pager input{padding:2px 6px;border:1px solid var(--border,#e0ddd5);border-radius:6px;font-size:12px;}

/* toast */
.toast{position:fixed;left:50%;bottom:34px;transform:translateX(-50%);background:#3A3F4A;color:#fff;padding:11px 20px;border-radius:24px;font-size:13px;z-index:90;box-shadow:0 8px 24px rgba(0,0,0,.2);opacity:0;transition:.25s;pointer-events:none;}
.toast.show{opacity:1;}

/* 图片预览 */
.preview-img{max-width:100%;border-radius:var(--radius-sm);display:block;margin:0 auto;}

/* ===================== 移动端适配 ===================== */
@media (max-width:860px){
  .header{padding:0 12px;gap:8px;height:56px;}
  .header .brand{gap:8px;}
  .header .brand .logo-img{height:26px;}
  .header .brand .brand-text{font-size:15px;}
  .header .right{gap:10px;}
  .header .welcome{display:none;}
  .header .clock{min-width:0;font-size:12px;}
  .layout{flex-direction:column;min-height:calc(100vh - 56px);}
  /* 侧边栏 → 顶部横向滚动胶囊导航 */
  .sidebar{
    width:100%;flex:none;border-right:none;border-bottom:1px solid var(--border);
    display:flex;align-items:center;overflow-x:auto;overflow-y:hidden;
    gap:2px;padding:8px 10px;
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none;
  }
  .sidebar::-webkit-scrollbar{display:none;}
  .nav-item{margin:0;padding:7px 12px;font-size:13px;white-space:nowrap;
    background:#fff;border:1px solid var(--border);border-radius:20px;flex:0 0 auto;}
  .nav-item .badge{display:none;}
  .nav-item .ic{width:17px;height:17px;flex:0 0 17px;}
  .nav-group{margin-bottom:0;display:flex;align-items:center;min-width:0;flex:0 0 auto;}
  .nav-group-title{display:none;}
  .nav-body{display:flex;align-items:center;min-width:0;flex:0 0 auto;}
  .nav-group.collapsed .nav-body{display:flex;}
  .nav-divider{display:none;}
  .nav-group + .nav-group{margin-left:4px;border-left:1px solid var(--border);padding-left:10px;}
  .content{padding:14px 12px 44px;width:100%;}
  .page-head{flex-wrap:wrap;gap:8px;margin-bottom:14px;}
  .toolbar{gap:8px;margin-bottom:14px;}
  /* 触摸目标与防 iOS 聚焦放大（覆盖所有移动宽度） */
  input,select,textarea{font-size:16px;}
  .btn{padding:11px 16px;font-size:14px;}
  .btn-sm{padding:9px 13px;font-size:13px;}
  .link-btn{padding:8px 12px;font-size:13px;}
  .search-box{padding:10px 14px;min-width:180px;}
  select.filter,.filter-select{padding:10px 14px;}
  .back-btn{padding:9px 15px;}
  /* 点名表移动端：按钮加大、行内布局自适应 */
  .rc-row{padding:12px;gap:10px;flex-wrap:wrap;}
  .rc-info{flex:1 1 calc(100% - 130px);}
  .rc-btns{flex:1 0 100%;justify-content:flex-end;}
  .rc-btn{height:40px;min-width:52px;flex:1;max-width:88px;}
  .rc-stat{padding:9px 14px;flex:1;min-width:86px;justify-content:center;}
  /* 整改反馈移动端：纸面留白收窄 */
  .rect-paper{padding:24px 18px;}
  .rect-paper .rp-title{font-size:19px;letter-spacing:1px;}
  .rect-paper p{font-size:15px;}
  .row2{grid-template-columns:1fr;}
  .overview{grid-template-columns:1fr 1fr;}
  table.tbl{font-size:12.5px;}
  table.tbl th{padding:9px 10px;}
  table.tbl td{padding:8px 10px;}
  .tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  /* 弹窗 → 底部抽屉式 */
  .modal-mask{padding:0;align-items:flex-end;}
  .modal{width:100%;max-width:100%;max-height:88vh;border-radius:18px 18px 0 0;}
  .modal .m-head{padding:14px 16px;border-radius:18px 18px 0 0;}
  .modal .m-head h3{font-size:16px;}
  .modal .m-body{padding:16px;}
  .modal .m-foot{padding:12px 16px;padding-bottom:calc(12px + env(safe-area-inset-bottom));flex-wrap:wrap;}
}
@media (max-width:480px){
  .overview{grid-template-columns:1fr;}
  .card-grid{grid-template-columns:1fr;}
  /* 防 iOS 聚焦自动放大 */
  input,select,textarea{font-size:16px;}
  .header .clock{display:none;}
  .logout-btn span{display:none;}
  .logout-btn{padding:7px 9px;}
  .cloud-chip{padding:4px 8px;font-size:11px;}
  .login-mask{padding:16px;}
}

/* ===================== 云同步状态徽标 ===================== */
.cloud-chip{
  display:inline-flex;align-items:center;gap:5px;
  padding:5px 12px;border-radius:20px;
  background:var(--bg-soft);border:1px solid var(--border);
  font-size:12px;color:var(--text-2);cursor:pointer;
  transition:all .18s ease;white-space:nowrap;
}
.cloud-chip:hover{border-color:var(--primary);color:var(--primary-deep);}
.cloud-chip.syncing{color:var(--primary-deep);border-color:var(--primary);background:#F0F6FC;}
.cloud-chip.synced{color:#5E9E7B;border-color:#BFDCC9;background:#F0F8F3;}
.cloud-chip.offline{color:#C77E5E;border-color:#E8CDBE;background:#FBF2EC;}
.cloud-chip svg{flex:0 0 auto;}

/* ===================== 云端登录浮层 ===================== */
/* 20261011f：桌面端左右分屏登录（左品牌图 / 右表单）样式见下方「登录分屏（20261011f）」段；
   .login-brand 默认隐藏，仅 ≥720px 生效；手机端 ≤480px 全屏卡片规则不受影响 */
.login-brand{display:none;}
.login-mask{
  position:fixed;inset:0;z-index:900;
  background:rgba(58,63,74,0.32);
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
  display:flex;align-items:center;justify-content:center;
  padding:24px;
}
.login-mask[hidden]{display:none;}
.login-card{
  width:100%;max-width:380px;
  background:var(--card);
  border-radius:24px;
  box-shadow:0 18px 50px rgba(90,80,60,0.18);
  padding:36px 34px 28px;
  text-align:center;
  animation:loginIn .28s ease;
}
@keyframes loginIn{ from{opacity:0;transform:translateY(14px) scale(.97);} to{opacity:1;transform:none;} }
.login-logo{
  width:auto;height:auto;padding:10px 28px;margin:0 auto 14px;
  border-radius:16px;
  background:linear-gradient(135deg,var(--primary) 0%,var(--primary-deep) 100%);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 8px 20px rgba(123,167,217,0.35);
}
.login-logo-img{
  height:40px;width:auto;display:block;
}
.login-card h2{font-size:19px;color:var(--text);margin-bottom:6px;letter-spacing:.5px;}
.login-tip{font-size:12.5px;color:var(--text-light);margin-bottom:22px;line-height:1.7;}
.login-input{
  width:100%;padding:12px 16px;margin-bottom:12px;
  border-radius:14px;border:1px solid var(--border-strong);
  background:var(--bg-soft);outline:none;
  transition:border-color .18s ease, box-shadow .18s ease;
}
.login-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(123,167,217,0.16);background:#fff;}
.login-err{min-height:18px;font-size:12.5px;color:#C77E5E;margin:-2px 0 6px;}
.login-btn{
  width:100%;padding:12px;border-radius:14px;
  background:linear-gradient(135deg,var(--primary) 0%,var(--primary-deep) 100%);
  color:#fff;font-size:15px;letter-spacing:6px;
  box-shadow:0 6px 16px rgba(123,167,217,0.35);
  transition:opacity .18s ease, transform .18s ease;
}
.login-btn:hover{opacity:.92;}
.login-btn:active{transform:scale(.98);}
.login-btn:disabled{opacity:.6;cursor:not-allowed;letter-spacing:2px;}
.login-skip{
  margin-top:14px;font-size:12.5px;color:var(--text-light);
  text-decoration:underline dotted;text-underline-offset:4px;
}
.login-skip:hover{color:var(--text-2);}
/* 构建版本号（20260917g）：显示当前浏览器实际运行的代码版本，便于确认是否需要强刷 */
.login-ver{margin-top:10px;font-size:11.5px;color:var(--text-light);letter-spacing:.3px;opacity:.75}
.nav-ver{padding:10px 14px 14px;font-size:11px;color:var(--text-light);opacity:.6;letter-spacing:.3px}

/* ===================== 登录层（20261012d）：桌面 ≥720px 品牌图铺满整屏 / 登录表单居中浮起 =====================
   注意：本段必须位于上方 .login-card 基础规则**之后**（同优先级靠后生效）
   20261012d：登录层不再自动弹出（改由右下角「登录云端同步」引导按钮触发）；表单由「右侧全透明」改「中部白卡」居中；
   20261012a：品牌照片 cover 铺满整个界面；手机端 ≤480px 全屏卡片规则不受影响 */
@media (min-width:720px){
  .login-mask{padding:0;}
  .login-card{
    position:relative;
    width:100vw;height:100vh;max-width:none;
    padding:0;text-align:center;
    background:transparent;border-radius:0;box-shadow:none;
    display:flex;align-items:center;justify-content:center;
    overflow:hidden;
  }
  /* 品牌照片：铺满整屏的背景层（照片比例 1.776 与主流 16:9 几乎一致，cover 近似完整显示） */
  .login-brand{
    display:block;position:absolute;inset:0;z-index:0;
    background:url('assets/login-brand.jpg') center center / cover no-repeat,
               linear-gradient(165deg,#2A5185 0%,#1B3A64 46%,#122849 100%);
  }
  /* 压暗层：让中部的白色登录卡更醒目（品牌文案 z-index 更高，不被遮挡） */
  .login-brand::after{
    content:'';position:absolute;inset:0;z-index:0;
    background:linear-gradient(180deg,rgba(8,18,36,0.32) 0%,rgba(8,18,36,0.56) 100%);
  }
  .login-brand-txt{
    position:absolute;left:clamp(26px,4vw,64px);bottom:clamp(24px,5vh,56px);right:auto;z-index:2;
    color:#fff;text-shadow:0 2px 10px rgba(8,18,36,0.75);
  }
  .login-brand-t1{font-size:clamp(14px,1.4vw,19px);font-weight:700;letter-spacing:1.5px;margin-bottom:8px;}
  .login-brand-t2{
    font-size:clamp(18px,2.4vw,30px);font-weight:800;letter-spacing:4px;
    white-space:nowrap;
    font-family:"STKaiti","KaiTi","楷体",serif;
  }
  /* 登录表单：屏幕正中的白色登录卡（20261012d 由「右侧全透明」改「中部白卡」——背景是照片，
     中部必须有不透明白底才能保证标题/提示/表单可读） */
  .login-form{
    position:relative;z-index:2;
    flex:0 0 auto;width:min(400px,calc(100vw - 80px));
    margin:0;
    padding:38px 34px 30px;text-align:center;
    background:var(--card);border-radius:24px;
    box-shadow:0 26px 70px rgba(8,18,36,0.45);
    display:flex;flex-direction:column;justify-content:center;
  }
  .login-form .login-logo{margin-left:auto;margin-right:auto;}
}

/* ===================== 登录引导按钮（20261012d）：未登录时右下角常驻 =====================
   浅底/照片背景上都醒目：主色渐变药丸 + 呼吸光环；点击弹出中部登录表单。
   手机端（≤860px）抬高到功能导航栏之上，且与「返回顶部」按钮错开。 */
.login-fab{
  position:fixed;right:26px;bottom:26px;z-index:880;
  display:inline-flex;align-items:center;gap:8px;
  padding:12px 20px;border-radius:26px;border:none;cursor:pointer;
  background:linear-gradient(135deg,#4E7FD0 0%,#2F5DA8 100%);
  color:#fff;font-size:13.5px;font-weight:600;letter-spacing:.5px;font-family:inherit;
  box-shadow:0 12px 30px rgba(47,93,168,0.42);
  transition:transform .18s ease, box-shadow .18s ease;
  animation:fabIn .32s cubic-bezier(.22,.68,.4,1) both;
}
.login-fab[hidden]{display:none !important;}
.login-fab:hover{transform:translateY(-2px);box-shadow:0 16px 36px rgba(47,93,168,0.52);}
.login-fab:active{transform:scale(.97);}
.login-fab svg{flex:0 0 auto;}
/* 呼吸光环：引导用户注意（不拦截点击） */
.login-fab::after{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  animation:fabPulse 2.6s ease-out infinite;
}
@keyframes fabIn{from{opacity:0;transform:translateY(12px) scale(.94);}to{opacity:1;transform:none;}}
@keyframes fabPulse{
  0%{box-shadow:0 0 0 0 rgba(78,127,208,0.5);}
  70%{box-shadow:0 0 0 14px rgba(78,127,208,0);}
  100%{box-shadow:0 0 0 0 rgba(78,127,208,0);}
}
@media (max-width:860px){
  .login-fab{right:14px;bottom:calc(78px + env(safe-area-inset-bottom,0px));padding:11px 16px;font-size:13px;}
}

/* ===================== 登录引导（splash）态（20261012e） =====================
   登录层默认只显示品牌照片 + 顶部居中【点此登录】引导按钮（主任指定红框位：照片上方天空区），
   点按钮才在中部弹出登录表单（.splash 类由 showLoginSplash / showLogin 切换）。 */
.login-entry,.login-entry-skip{display:none;}
.login-mask.splash .login-form{display:none;}
.login-mask.splash .login-entry{
  display:inline-flex;align-items:center;gap:9px;
  position:absolute;left:50%;top:clamp(56px,10vh,110px);transform:translateX(-50%);z-index:3;
  padding:14px 38px;border-radius:32px;border:none;cursor:pointer;
  background:linear-gradient(135deg,#4E7FD0 0%,#2F5DA8 100%);
  color:#fff;font-size:16px;font-weight:700;letter-spacing:4px;font-family:inherit;
  box-shadow:0 14px 34px rgba(47,93,168,0.5);
  animation:entryIn .4s cubic-bezier(.22,.68,.4,1) both;
  white-space:nowrap;
}
/* 注意：不能复用 fabIn（其结束帧 transform:none 会覆盖 translateX(-50%) 导致不居中） */
@keyframes entryIn{from{opacity:0;transform:translateX(-50%) translateY(12px) scale(.94);}to{opacity:1;transform:translateX(-50%);}}
.login-mask.splash .login-entry:hover{transform:translateX(-50%) translateY(-2px);box-shadow:0 18px 40px rgba(47,93,168,0.6);}
.login-mask.splash .login-entry:active{transform:translateX(-50%) scale(.97);}
.login-mask.splash .login-entry svg{flex:0 0 auto;}
/* 呼吸光环：与右下角引导按钮同款，引导注意 */
.login-mask.splash .login-entry::after{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  animation:fabPulse 2.6s ease-out infinite;
}
/* 引导态的「暂不登录」：小字链接，位于按钮下方 */
.login-mask.splash .login-entry-skip{
  display:block;position:absolute;left:50%;transform:translateX(-50%);z-index:3;
  top:calc(clamp(56px,10vh,110px) + 66px);
  padding:4px 8px;background:none;border:none;cursor:pointer;font-family:inherit;
  font-size:12.5px;color:rgba(255,255,255,0.92);text-shadow:0 1px 8px rgba(8,18,36,0.75);
  text-decoration:underline dotted;text-underline-offset:4px;white-space:nowrap;
}
.login-mask.splash .login-entry-skip:hover{color:#fff;}
/* 手机端（≤480px 全屏渐变卡片）：按钮改主色深底可读，位置略上移避开状态栏 */
@media (max-width:480px){
  .login-mask.splash .login-entry{top:clamp(72px,14vh,130px);letter-spacing:3px;font-size:15px;}
  .login-mask.splash .login-entry-skip{top:calc(clamp(72px,14vh,130px) + 60px);color:var(--text-light);text-shadow:none;}
}

/* ===================== 手动登出按钮 ===================== */
.logout-btn{
  display:inline-flex;align-items:center;gap:6px;
  padding:6px 12px;border-radius:20px;
  background:#fff;border:1px solid var(--border);
  color:var(--text-2);font-size:12.5px;white-space:nowrap;
  transition:all .18s ease;
}
.logout-btn:hover{color:#C77E5E;border-color:#E8CDBE;background:#FBF2EC;}
.head-login{color:var(--primary-deep);border-color:var(--primary);background:#F0F6FC;}
.head-login:hover{color:#fff;background:var(--primary);border-color:var(--primary);}
.logout-btn[hidden]{display:none !important;}

/* ===================== 全局使用水印 ===================== */
#wmLayer{
  position:fixed;inset:0;z-index:9998;
  pointer-events:none;
  background-repeat:repeat;
}
@media (max-width:480px){
  /* ===== 手机端登录界面：全屏卡片式（App 质感） ===== */
  .login-mask{
    padding:0;
    background:linear-gradient(168deg,#F2F8FE 0%,#DFEDFA 52%,#CFE3F6 100%);
    backdrop-filter:none;
    -webkit-backdrop-filter:none;
    align-items:stretch;
  }
  .login-card{
    max-width:none;width:100%;height:100%;min-height:100%;
    border-radius:0;box-shadow:none;
    background:rgba(255,255,255,0.86);
    backdrop-filter:blur(14px);
    -webkit-backdrop-filter:blur(14px);
    padding:calc(env(safe-area-inset-top,0px) + 56px) 30px calc(env(safe-area-inset-bottom,0px) + 36px);
    display:flex;flex-direction:column;justify-content:center;
    animation:loginInMobile .3s ease;
  }
  @keyframes loginInMobile{ from{opacity:0;transform:translateY(18px);} to{opacity:1;transform:none;} }
  /* 键盘弹起：内容自动上移，防止输入框被键盘遮挡 */
  .login-card:focus-within{
    justify-content:flex-start;
    padding-top:calc(env(safe-area-inset-top,0px) + 40px);
    padding-bottom:24px;
    overflow-y:auto;
  }
  .login-logo{
    padding:14px 36px;margin-bottom:20px;border-radius:20px;
    background:linear-gradient(135deg,#4E7FD0 0%,#2F5DA8 100%);
    box-shadow:0 14px 30px rgba(63,110,180,0.34);
  }
  .login-logo-img{height:50px;}
  .login-card h2{font-size:21px;margin-bottom:8px;}
  .login-tip{font-size:13.5px;margin-bottom:28px;}
  .login-input{
    padding:16px 18px;margin-bottom:15px;border-radius:16px;
    font-size:16px;background:#fff;
  }
  .login-input:focus{box-shadow:0 0 0 3px rgba(123,167,217,0.20);}
  .login-err{min-height:20px;font-size:13px;margin:-2px 0 9px;}
  .login-btn{
    padding:16px;border-radius:16px;font-size:16px;letter-spacing:8px;
  }
  .login-skip{margin-top:18px;font-size:13px;padding:10px 0;}
  /* 自动填充适配（防 iOS/安卓黄底蓝字） */
  .login-input:-webkit-autofill,
  .login-input:-webkit-autofill:hover,
  .login-input:-webkit-autofill:focus{
    -webkit-text-fill-color:#3A3F4A;
    -webkit-box-shadow:0 0 0 1000px #FFFFFF inset;
    caret-color:#3A3F4A;
    transition:background-color 9999s ease-in-out 0s;
  }
  /* 顶部头部适配刘海屏安全区 */
  .header{padding-top:calc(env(safe-area-inset-top,0px) + 8px);}
  .header .cloud-chip{padding:4px 9px;font-size:11px;}
  .header .clock{min-width:0;}
}

/* ===================== 年级信息管理 ===================== */
/* 概览统计卡片 */
.gi-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:14px;margin-bottom:18px;}
.gi-stat{
  background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-soft);
  padding:16px 18px;display:flex;align-items:center;gap:13px;
  transition:transform .18s ease, box-shadow .18s ease;
}
.gi-stat:hover{transform:translateY(-2px);box-shadow:var(--shadow);}
.gi-stat-ic{
  width:42px;height:42px;border-radius:13px;flex:0 0 42px;
  display:flex;align-items:center;justify-content:center;
  background:var(--gc-tint);color:var(--gc);
}
.gi-stat-num{font-size:23px;font-weight:700;line-height:1.15;color:var(--gc);font-variant-numeric:tabular-nums;}
.gi-stat-name{font-size:12px;color:var(--text-light);margin-top:3px;}

/* 年级分组卡片 */
.gi-group{
  background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-soft);
  margin-bottom:16px;overflow:hidden;
  transition:box-shadow .18s ease;
}
.gi-group:hover{box-shadow:var(--shadow);}
.gi-group-head{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:16px 18px;
  background:linear-gradient(135deg,var(--gc-tint) 0%,#FFFFFF 72%);
  border-bottom:1px dashed var(--border);
}
/* 分组头可点击：展开 / 收起班级列表 */
.gi-toggle-head{cursor:pointer;user-select:none;}
.gi-group:not(.open) .gi-group-head{border-bottom:none;}
.gi-caret{
  width:26px;height:26px;flex:0 0 26px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  color:var(--gc);background:var(--gc-tint);
  transition:transform .22s ease, background .18s ease;
}
.gi-toggle-head:hover .gi-caret{background:var(--gc-tint2);}
.gi-group.open .gi-caret{transform:rotate(180deg);}
.gi-hint{
  font-size:11px;color:var(--text-light);opacity:.75;
  border:1px solid var(--border);border-radius:20px;
  padding:1px 9px;background:rgba(255,255,255,.6);
}
.gi-badge{
  width:44px;height:44px;border-radius:14px;flex:0 0 44px;
  display:flex;align-items:center;justify-content:center;
  background:var(--gc);color:#fff;font-size:16px;font-weight:700;letter-spacing:1px;
  box-shadow:0 4px 10px var(--gc-sh);
}
.gi-group-info{flex:1;min-width:150px;}
.gi-group-title{
  font-size:16px;font-weight:700;color:var(--text);
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
}
.gi-idtag{
  font-size:11px;font-weight:600;color:var(--gc);
  background:var(--gc-tint2);padding:2px 9px;border-radius:20px;
}
.gi-group-meta{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  font-size:12px;color:var(--text-light);margin-top:5px;
}
.gi-group-meta b{color:var(--gc);font-size:13px;font-variant-numeric:tabular-nums;}
.gi-bar{width:110px;height:6px;border-radius:6px;background:#F0ECE4;overflow:hidden;flex:0 0 110px;}
.gi-bar i{display:block;height:100%;border-radius:6px;background:var(--gc);transition:width .3s ease;}
.gi-pct{font-variant-numeric:tabular-nums;min-width:34px;}
.gi-group-acts{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;}

/* 班级标签网格（默认收起，展开后显示） */
.gi-classes{padding:0 18px;display:none;flex-wrap:wrap;gap:8px;align-items:center;}
.gi-group.open .gi-classes{display:flex;padding:14px 18px 16px;}
.gi-class{
  display:inline-flex;align-items:center;gap:5px;
  font-size:12.5px;font-weight:600;
  padding:5px 11px;border-radius:18px;
  background:var(--gc-tint);color:var(--gc);
  border:1px solid transparent;cursor:pointer;
  transition:all .15s ease;
}
.gi-class b{font-weight:400;font-size:11px;opacity:.5;transition:opacity .15s ease;}
.gi-class:hover{background:#fff;border-color:var(--gc);box-shadow:0 2px 8px var(--gc-sh);}
.gi-class:hover b{opacity:1;}
.gi-add{
  display:inline-flex;align-items:center;gap:5px;
  font-size:12px;font-weight:600;color:var(--text-2);
  border:1.5px dashed var(--border-strong);
  padding:5px 13px;border-radius:18px;cursor:pointer;
  transition:all .15s ease;
}
.gi-add:hover{color:var(--gc);border-color:var(--gc);background:var(--gc-tint);}

/* 底部联动说明 */
.gi-note{
  background:var(--bg-soft);border:1px solid var(--border);
  border-radius:var(--radius-sm);padding:14px 16px;
  display:flex;gap:10px;align-items:flex-start;
  color:var(--text-2);font-size:12.5px;line-height:1.75;
}
.gi-note .ic{width:18px;height:18px;color:var(--c-ginfo);flex:0 0 18px;margin-top:3px;}
.gi-note b{color:var(--text);}
@media (max-width:640px){
  .gi-stats{grid-template-columns:repeat(2,1fr);}
  .gi-group-head{gap:10px;padding:14px;}
  .gi-group-acts{justify-content:flex-start;}
  .gi-classes{padding:12px 14px 14px;}
}

/* ===================== 年级信息管理 · 值班扣分统计（迁移自【日报】历史与统计） ===================== */
.gi-dstats{margin-top:18px;}
.gi-ds-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap;}
.gi-ds-title{display:flex;align-items:center;gap:9px;font-size:16px;font-weight:700;color:var(--text);}
.gi-ds-ic{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#4A7FA5,#7F9EA8);color:#fff;box-shadow:0 2px 6px rgba(74,127,165,.32);}
.gi-ds-ic .ic{width:18px;height:18px;}
.gi-ds-sub{font-size:11.5px;font-weight:400;color:var(--text-light);margin-left:4px;}
.gi-ds-live{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--c-ginfo,#5B8AC6);
  background:#EDF3FA;border:1px solid #D7E4F2;border-radius:999px;padding:3px 11px;white-space:nowrap;}
.gi-ds-live::before{content:'';width:7px;height:7px;border-radius:50%;background:#5B8AC6;animation:giPulse 1.8s ease-in-out infinite;}
@keyframes giPulse{0%,100%{opacity:.35;transform:scale(.85);}50%{opacity:1;transform:scale(1.15);}}
.gi-ds-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:14px;margin-bottom:14px;}
.gi-ds-grid{display:grid;grid-template-columns:1.6fr 1fr;gap:14px;align-items:stretch;}
.gi-ds-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-soft);padding:16px 18px;min-width:0;}
.gi-ds-card h3{font-size:13.5px;font-weight:700;color:var(--text);margin:0 0 10px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.gi-ds-legend{display:flex;gap:10px;flex-wrap:wrap;font-size:11px;font-weight:400;color:var(--text-2);margin-left:auto;}
.gi-ds-legend b{display:inline-flex;align-items:center;gap:5px;}
.gi-ds-legend b i{width:9px;height:9px;border-radius:3px;display:inline-block;}
.gi-ds-svg{width:100%;height:auto;display:block;}
.gi-ds-bar{transform-origin:bottom;transform-box:fill-box;animation:giGrow .6s cubic-bezier(.22,.9,.34,1) backwards;}
@keyframes giGrow{from{transform:scaleY(0);}to{transform:scaleY(1);}}
.gi-ds-donut-wrap{display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
.gi-ds-donut{width:150px;height:150px;flex:0 0 auto;}
.gi-ds-legend-list{flex:1;min-width:150px;display:flex;flex-direction:column;gap:2px;}
.gi-ds-lg-row{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-2);padding:5px 2px;border-radius:7px;}
.gi-ds-lg-row:hover{background:var(--bg-soft,#FBF9F5);}
.gi-ds-lg-row i{width:10px;height:10px;border-radius:3px;flex:0 0 10px;}
.gi-ds-lg-row .n{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gi-ds-lg-row .v{font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;}
.gi-ds-lg-row .p{width:38px;text-align:right;color:var(--text-light);font-variant-numeric:tabular-nums;}
.gi-ds-rank-row{display:flex;align-items:center;gap:12px;padding:7px 0;}
.gi-ds-rank-name{width:74px;flex:0 0 74px;font-size:12.5px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gi-ds-rank-track{flex:1;height:12px;background:#F1EDE4;border-radius:999px;overflow:hidden;}
.gi-ds-rank-track i{display:block;height:100%;border-radius:999px;animation:giWiden .7s cubic-bezier(.22,.9,.34,1) backwards;}
@keyframes giWiden{from{width:0 !important;}}
.gi-ds-rank-val{width:44px;text-align:right;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;}
.gi-ds-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--text-light);
  font-size:12.5px;padding:30px 14px;background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-soft);}
.gi-ds-empty .ic{color:var(--text-light);}
@media (max-width:860px){
  .gi-ds-grid{grid-template-columns:1fr;}
}
@media (max-width:640px){
  .gi-ds-cards{grid-template-columns:repeat(2,1fr);}
  .gi-ds-sub{display:none;}
  .gi-ds-legend{margin-left:0;}
  .gi-ds-donut{width:130px;height:130px;}
}

/* ===================== 宿舍人员 ===================== */
.dm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(440px,1fr));gap:14px;align-items:start;}
.dm-dorm{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow-soft);}
.dm-dorm-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;}
.dm-dorm-name{cursor:pointer;display:inline-flex;align-items:center;gap:4px;font-size:15px;}
.dm-dorm-name:hover{color:var(--accent);}
.dm-beds{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;}
.dm-bed{position:relative;border:1px solid var(--border);background:#F4F1EB;border-radius:10px;padding:8px 4px 6px;text-align:center;font-size:13px;min-height:60px;cursor:pointer;transition:.15s;line-height:1.35;overflow:hidden;}
.dm-bed:hover{border-color:var(--accent);}
.dm-bed .no{font-size:11px;color:var(--text-light);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.dm-bed.filled{background:#EAF1F9;border-color:#CFE0F2;color:var(--primary-deep);font-weight:600;}
.dm-bed.st-leave{background:#FBEFD8;border-color:#EAD198;color:#8A6A1E;}
.dm-bed.st-intern{background:#E2F4F5;border-color:#BFE4E6;color:#3F7E82;}
.dm-bed.st-quit{background:#EFEDE8;border-color:#DDD;color:#8A8F98;text-decoration:line-through;}
.dm-bed-st{display:block;font-size:10px;font-weight:400;text-decoration:none;line-height:1.2;}
.dm-bed.st-leave .dm-bed-st{color:#B5842E;}
.dm-bed.st-intern .dm-bed-st{color:#3F8E92;}
.dm-bed.st-quit .dm-bed-st{color:#8A8F98;}
.dm-empty-tip{color:#C8C4BC;font-size:12px;}
.dm-dragging{opacity:.5;transform:scale(.95);}
.dm-drag-over{border-color:var(--accent) !important;background:#F0EDFA !important;transform:scale(1.04);}
.dm-chip{display:inline-flex;align-items:center;gap:4px;background:#EAF1F9;border:1px solid #CFE0F2;border-radius:14px;padding:3px 10px;font-size:12.5px;cursor:grab;user-select:none;}
.dm-chip:active{cursor:grabbing;}
@media (max-width:640px){ .dm-grid{grid-template-columns:1fr;} .dm-beds{grid-template-columns:repeat(4,1fr);} }

/* ===================== 宿管检查 ===================== */
.dc-roster-cls{padding:6px 0;border-top:1px dashed var(--border);}
.dc-roster-cls:first-of-type{border-top:none;}
.dc-cls-name{font-size:13.5px;}
.dc-roster-dorm{display:inline-block;vertical-align:top;margin:6px 10px 0 0;padding:6px 10px;background:#FBF9F5;border:1px solid var(--border);border-radius:9px;font-size:12.5px;}
.dc-group-head{cursor:pointer;user-select:none;}
.dc-group-head:hover b{color:var(--primary);}
.dc-group-head .dc-arrow{display:inline-block;font-size:12px;color:#8A8F98;transition:transform .18s ease;transform:rotate(0deg);}
.dc-group-head .dc-arrow.open{transform:rotate(90deg);}
.dc-roster-beds{margin-top:4px;display:flex;flex-wrap:wrap;gap:4px;}
.dc-member{display:inline-flex;align-items:center;gap:3px;background:#EAF1F9;border-radius:11px;padding:2px 8px;font-size:12px;color:var(--primary-deep);}
.dc-member.is-leave{background:#F6E1E1;border:1px solid #E7C4C2;color:#B05A57;font-weight:600;}
.dc-member.is-leave i{background:#fff;color:#B05A57;font-weight:400;}
.dc-member i{font-style:normal;font-size:10px;border-radius:8px;padding:0 5px;}
.dc-member i.st-leave{background:#FBEFD8;color:#B5842E;}
.dc-member i.st-intern{background:#E2F4F5;color:#3F8E92;}
.dc-member i.st-quit{background:#EFEDE8;color:#8A8F98;text-decoration:line-through;}
.dc-group{border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin-bottom:10px;background:#FBF9F5;}
.dc-group-head{display:flex;align-items:center;gap:8px;margin-bottom:6px;}
.dc-dorm-chip{display:inline-flex;align-items:center;gap:5px;background:#EAF1F9;border:1px solid #CFE0F2;border-radius:9px;padding:4px 10px;font-size:12.5px;cursor:pointer;margin:0 6px 6px 0;}
.dc-dorm-chip i{font-style:normal;font-size:11px;color:var(--text-light);}
.dc-area-name{cursor:pointer;}
.dc-area-name:hover{color:var(--accent);}
.dc-dorm-opt{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--border);border-radius:8px;padding:4px 10px;font-size:13px;cursor:pointer;margin:2px;background:#fff;}
.dc-dorm-opt.locked{opacity:.45;cursor:not-allowed;}
.dc-radio{display:inline-flex;align-items:center;gap:3px;font-weight:400;font-size:13px;margin-right:12px;cursor:pointer;white-space:nowrap;}


/* ===================== 行政值班 ===================== */
.zb-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow-soft);margin-bottom:14px;}
.zb-ttl{font-size:15px;font-weight:700;color:var(--text);margin-bottom:12px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.zb-tip{font-size:12px;font-weight:400;color:var(--text-light);}
.zb-grand{display:inline-flex;align-items:center;gap:4px;font-size:13px;color:var(--text-light);background:#EEF3FA;border:1px solid #D6E2F2;border-radius:20px;padding:5px 12px;white-space:nowrap;}
.zb-grand b{color:var(--c-admin);font-size:16px;}
.zb-grand .zb-sub{font-size:12px;color:var(--text-light);}
.zb-block{border:1px solid var(--border);border-radius:12px;margin-bottom:12px;overflow:hidden;}
/* 分区 Tab（20260921h）：扣分录入分区改为小 Tab 页切换，徽标=该分区合计分 */
.zb-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;}
.zb-tab{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid var(--border);border-radius:999px;background:#fff;font-size:13px;color:var(--text-light);cursor:pointer;font-family:inherit;line-height:1.4;}
.zb-tab:hover{border-color:var(--c-admin);color:var(--text);}
.zb-tab.on{background:var(--c-admin);border-color:var(--c-admin);color:#fff;font-weight:700;}
.zb-tbb{display:inline-block;min-width:20px;text-align:center;padding:0 5px;border-radius:999px;background:#F1EFE8;font-size:12px;font-weight:400;color:var(--text-light);}
.zb-tbb.hot{background:#FCEBEB;color:#A32D2D;font-weight:700;}
.zb-tab.on .zb-tbb{background:rgba(255,255,255,.25);color:#fff;}
.zb-tab.on .zb-tbb.hot{background:rgba(255,255,255,.32);color:#fff;}
.zb-bhd{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 12px;background:#F4F7FB;border-bottom:1px solid var(--border);}
.zb-name{font-weight:700;font-size:14px;color:var(--c-admin);}
.zb-sum{font-size:12px;color:var(--text-light);}
.zb-sum b{color:var(--c-admin);font-size:15px;}
.zb-std{border-bottom:1px solid var(--border);}
.zb-std>summary{cursor:pointer;font-size:12px;color:var(--text-light);padding:6px 12px;list-style:none;}
.zb-std>summary::-webkit-details-marker{display:none;}
.zb-std>summary::before{content:"▸ ";color:var(--c-admin);}
.zb-std[open]>summary::before{content:"▾ ";}
.zb-std pre{margin:0;padding:8px 12px 12px;font-family:inherit;font-size:12px;line-height:1.65;color:var(--text-light);white-space:pre-wrap;word-break:break-all;background:#FBFCFE;}
.zb-scroll{overflow-x:auto;}
.zb-tb{border-collapse:collapse;width:100%;min-width:680px;}
.zb-tb th,.zb-tb td{border:1px solid var(--border);padding:5px 8px;font-size:13px;vertical-align:middle;}
.zb-tb thead th{background:#F7F9FC;font-weight:700;color:var(--text);text-align:center;}
.zb-th-g,.zb-td-g{text-align:center;white-space:nowrap;font-weight:600;background:#FBFCFE;}
.zb-th-s,.zb-td-s{width:74px;text-align:center;}
.zb-tb tfoot td{background:#F7F9FC;font-weight:700;text-align:left;}
.zb-in{width:100%;border:0;background:transparent;font-size:13px;padding:3px 0;color:var(--text);outline:none;font-family:inherit;}
.zb-in:focus{background:#EFF5FD;}
/* 20260921j：扣分描述改多行 textarea（沿用 .zb-in 透明无边框基样式） */
textarea.zb-in{resize:none;min-height:44px;line-height:1.5;padding:5px 0;display:block;overflow:hidden;}
.zb-in-s{width:64px;border:1px solid var(--border);border-radius:8px;padding:4px 6px;text-align:center;font-size:13px;color:var(--text);outline:none;font-family:inherit;}
.zb-in-s:focus{border-color:var(--c-admin);background:#EFF5FD;}
.zb-qsub{display:block;font-size:11px;font-weight:400;color:var(--text-light);white-space:normal;}
.zb-qsum{color:var(--c-admin);font-weight:700;}
.zb-extra{margin-top:14px;display:grid;gap:12px;}
.zb-field label{display:block;font-size:13px;font-weight:600;color:var(--text);margin-bottom:6px;}
.zb-ta{width:100%;min-height:64px;border:1px solid var(--border);border-radius:10px;padding:8px 10px;font-size:13px;font-family:inherit;color:var(--text);resize:vertical;outline:none;}
.zb-ta:focus{border-color:var(--c-admin);}
/* 20260921j：课堂质量提示行 / 谈心听课总结块内边距 */
.zb-qtip{font-size:12px;color:var(--text-light);padding:0 14px 8px;}
.zb-fieldpad{padding:0 14px 12px;}
.zb-listen{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;}
.zb-listen input{border:1px solid var(--border);border-radius:10px;padding:8px 10px;font-size:13px;font-family:inherit;color:var(--text);outline:none;}
.zb-listen input:focus{border-color:var(--c-admin);}
.zb-paper{background:#fff;border:1px solid var(--border);border-radius:10px;padding:16px;overflow-x:auto;}
.zb-paper-tb{border-collapse:collapse;width:100%;min-width:760px;table-layout:fixed;}
.zb-paper-tb td{border:1px solid #999;padding:4px 6px;font-size:12px;vertical-align:middle;word-break:break-all;line-height:1.5;}
.zb-p-title{font-size:19px;font-weight:700;text-align:center;font-family:SimSun,"宋体",serif;line-height:1.5;padding:8px 6px;}
.zb-p-date{font-size:13px;font-weight:400;}
.zb-p-lab,.zb-p-h{background:#F2F2F2;font-weight:700;text-align:center;white-space:nowrap;}
.zb-p-blk{background:#F2F2F2;font-weight:700;text-align:center;}
.zb-p-g{text-align:center;white-space:nowrap;}
.zb-p-tot{text-align:center;font-weight:700;color:#B03A2E;font-size:13px;}
.zb-p-std{font-size:10px;line-height:1.45;color:#444;}
.zb-p-val{font-size:12px;}
.zb-p-line{margin:2px 0;}
.zb-p-cn{font-weight:700;color:var(--c-admin);}
.zb-p-empty{color:#bbb;}
.zb-p-q{width:100%;border-collapse:collapse;table-layout:fixed;}
.zb-p-q th,.zb-p-q td{border:1px solid #999;padding:3px 4px;font-size:11px;text-align:center;}
.zb-p-q th{background:#F2F2F2;font-weight:700;}
.zb-p-ql{text-align:left;font-weight:700;background:#FAFAFA;}
@media (max-width:860px){
  .zb-card{padding:12px;}
  .zb-listen{grid-template-columns:1fr;}
  .toolbar .zb-grand{order:9;}
  .zb-paper{padding:10px;}
}

/* ===================== 行政值班 预览（源表网格版式） ===================== */
.zb-x{border-collapse:collapse;table-layout:fixed;width:100%;min-width:1020px;}
.zb-x td{border:1px solid #999;padding:3px 5px;font-size:12px;line-height:1.5;vertical-align:middle;word-break:break-all;background:#fff;}
.zb-x-title{font-size:19px;font-weight:700;text-align:center;font-family:SimSun,"宋体",serif;border:0!important;background:#fff!important;}
.zb-x-h{font-weight:700;text-align:center;background:#F7F7F7;}
.zb-x-c{text-align:center;}
.zb-x-t{text-align:left;}
.zb-x-tot{text-align:center;font-weight:700;}
.zb-paper{overflow-x:auto;}

/* 扣分自动建议高亮（黄色底=按标准自动填入，可改） */
.zb-in-s.zb-auto{background:#FFF8E1;border-color:#E4C463;color:#8A6D1A;font-weight:700;}

/* ===== 奖状打印（教师工作 · zc- 前缀；页面版式样式由 app.js 的 ZC_PAGE_CSS 注入，预览/打印同源） ===== */
.zc-form{display:flex;flex-wrap:wrap;gap:12px 18px;align-items:flex-start;margin-top:8px}
.zc-f{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--text-2)}
.zc-f>span{font-weight:600}
.zc-f input[type=number],.zc-f input:not([type]),.zc-f select,.zc-f textarea{border:1px solid var(--border);border-radius:var(--radius-sm);padding:5px 8px;font-size:13px;font-family:inherit;background:#FDFCFA;color:var(--text);min-width:160px}
.zc-f input[type=range]{width:160px}
.zc-f input:focus,.zc-f select:focus,.zc-f textarea:focus{outline:none;border-color:var(--c-cert);background:#fff}
.zc-f.zc-wide{flex:1 1 100%}
.zc-f.zc-wide textarea{width:100%;min-height:76px;resize:vertical}
.zc-chk{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-2);padding-top:16px}
.zc-quick{display:flex;gap:6px;margin-top:4px}
.zc-quick b{font-weight:400;font-size:11.5px;background:#F7F4ED;border:1px solid #E8DCC4;border-radius:14px;padding:1px 9px;cursor:pointer;color:var(--c-cert)}
.zc-quick b:hover{background:#F1E9D9}
.zc-names{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.zc-chip{display:flex;align-items:center;gap:6px;background:#FAF7F0;border:1px solid #E8DCC4;border-radius:20px;padding:2px 10px;font-size:13px;color:var(--text)}
.zc-chip .zc-no{width:18px;height:18px;flex:0 0 18px;border-radius:50%;background:var(--c-cert);color:#fff;font-size:11px;display:flex;align-items:center;justify-content:center}
.zc-chip .e{font-size:11px;color:var(--text-2)}
.zc-name-in{width:6.5em;border:none;border-bottom:1px dashed #CBBFA4;background:transparent;font-size:13px;font-family:inherit;color:var(--text);padding:0 2px}
.zc-name-in:focus{outline:none;border-bottom-color:var(--c-cert)}
.zc-chip .x{cursor:pointer;color:#B23B3B;font-weight:700;font-size:15px;line-height:1}
.zc-one{border:1px solid var(--border);border-radius:var(--radius-sm);padding:5px 8px;font-size:13px;font-family:inherit;background:#FDFCFA;color:var(--text);width:160px}
.zc-one:focus{outline:none;border-color:var(--c-cert);background:#fff}
.zc-list{background:#EDF0F5;border-radius:var(--radius-sm);padding:14px;max-height:72vh;overflow:auto}
.zc-pick-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.zc-pick-bar select,.zc-pick-bar input{border:1px solid var(--border);border-radius:var(--radius-sm);padding:5px 8px;font-size:13px;font-family:inherit;color:var(--text);background:#FDFCFA}
.zc-pick-bar select:focus,.zc-pick-bar input:focus{outline:none;border-color:var(--c-cert);background:#fff}
.zc-pick{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;max-height:46vh;overflow:auto}
.zc-pk{font-size:13px;border:1px solid var(--border);border-radius:18px;padding:3px 12px;cursor:pointer;color:var(--text);background:#fff}
.zc-pk i{font-style:normal;color:var(--text-2);font-size:11px;margin-left:6px}
.zc-pk.on{background:#F7F1E3;border-color:var(--c-cert);color:var(--c-cert)}
@media (max-width:860px){ .zc-f input[type=number],.zc-f input:not([type]),.zc-f select{min-width:120px} .zc-list{max-height:60vh;padding:8px} }


/* ===== 百宝箱 · 班会留档（tb-/mr- 前缀） ===== */
.tb-tabs{display:flex;gap:8px;margin:-6px 0 14px}
.tb-tab{display:flex;align-items:center;gap:6px;border:1px solid var(--border);background:#fff;border-radius:20px;padding:5px 16px;font-size:13px;color:var(--text-2);cursor:pointer;font-family:inherit}
.tb-tab.on{background:var(--c-tool);border-color:var(--c-tool);color:#fff;font-weight:600}
.mr-form{display:flex;flex-wrap:wrap;gap:12px 16px;margin-top:8px}
.mr-f{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--text-2);font-weight:600}
.mr-f input,.mr-f select,.mr-f textarea{border:1px solid var(--border);border-radius:var(--radius-sm);padding:6px 9px;font-size:13px;font-family:inherit;background:#FDFCFA;color:var(--text);min-width:150px;font-weight:400}
.mr-f textarea{width:100%;resize:vertical;line-height:1.7}
.mr-f input:focus,.mr-f select:focus,.mr-f textarea:focus{outline:none;border-color:var(--c-tool);background:#fff}
.mr-wide{flex:1 1 100%}
.mr-cnt{font-size:13px;color:var(--text-2);margin:6px 0 10px}
.mr-cnt b{color:var(--c-tool);font-size:15px}
.mr-chips{display:flex;flex-wrap:wrap;gap:8px}
.mr-chip{font-size:13px;border:1px solid var(--border);border-radius:18px;padding:3px 13px;cursor:pointer;background:#fff;color:var(--text-2);font-family:inherit}
.mr-chip.on{background:#EAF4F0;border-color:var(--c-tool);color:var(--c-tool);font-weight:600}
.mr-chip.on::after{content:" ✓"}
.mr-acts{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap}
.mr-list{display:flex;flex-direction:column;gap:10px;margin-top:8px}
.mr-rec{border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 14px;background:#FBFAF7}
.mr-rec-hd{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.mr-rec-hd b{font-size:14px}
.mr-rec-acts{display:flex;gap:6px;margin-top:8px}
@media (max-width:860px){ .mr-f input,.mr-f select{min-width:120px} .mr-acts .btn{flex:1} }

/* ===== 百宝箱 · 班级会议（政教/教务）20260923c ===== */
.mt-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:8px}
.mt-card{border:1px solid var(--border);border-radius:var(--radius-sm);background:#FBFAF7;padding:9px 11px;min-width:0}
.mt-chd{font-size:13px;font-weight:700;color:var(--text);display:flex;align-items:center;gap:6px;margin-bottom:6px}
.mt-cnt{margin-left:auto;font-size:12px;font-weight:600;color:var(--c-tool);background:#EAF4F0;border-radius:10px;padding:1px 8px}
.mt-cbd{font-size:12px;color:var(--text-2);line-height:1.7}
.mt-kv{display:flex;gap:6px}
.mt-kl{color:var(--text-3,#999);flex:0 0 auto}
.mt-kv2{color:var(--text);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mt-mini{color:var(--text-3,#999);margin-top:3px;word-break:break-all;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.mt-photos{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
.mt-ph{position:relative;width:110px;height:80px;border:1px dashed var(--border);border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;background:#F5F6F8;color:var(--text-3,#999);font-size:12px}
.mt-phx{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;border:0;background:#C85A5A;color:#fff;cursor:pointer;font-size:13px;line-height:1;padding:0}
@media (max-width:1100px){ .mt-grid{grid-template-columns:repeat(2,1fr)} }
@media (max-width:640px){ .mt-grid{grid-template-columns:1fr} }

/* ===== 数据导出（年级共管 · 20260923d） ===== */
.dex-kinds{display:flex;flex-direction:column;gap:12px;margin-top:8px}
.dex-krow{display:flex;gap:12px;align-items:flex-start}
.dex-kname{flex:0 0 88px;font-size:13px;font-weight:700;color:var(--text);padding-top:4px;display:flex;flex-direction:column;gap:2px}
.dex-kname i{font-style:normal;font-weight:400;font-size:11px;color:var(--text-3,#999)}
.dex-krow .mr-chips{flex:1}
.dex-tbl td,.dex-tbl th{font-size:12.5px}
.dex-tbl .dex-sum{font-weight:700;color:var(--c-grade,#4A7FA5)}
@media (max-width:860px){ .dex-krow{flex-direction:column;gap:6px} .dex-kname{flex-basis:auto;flex-direction:row;gap:8px;align-items:baseline} }


/* ===== 任教设置（教师工作 · ts- 前缀，仅 dncl） ===== */
.ts-form{display:flex;gap:16px;flex-wrap:wrap;margin-top:8px}
.ts-f{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--text-2);font-weight:600;flex:1;min-width:180px}
.ts-f input{border:1px solid var(--border);border-radius:var(--radius-sm);padding:7px 10px;font-size:13px;font-family:inherit;background:#FDFCFA;color:var(--text);font-weight:400}
.ts-f select{border:1px solid var(--border);border-radius:var(--radius-sm);padding:7px 10px;font-size:13px;font-family:inherit;background:#FDFCFA;color:var(--text);font-weight:400}
.ts-f input:focus,.ts-f select:focus{outline:none;border-color:var(--c-student);background:#fff}
.ts-acts{display:flex;gap:10px;margin-top:12px;flex-wrap:wrap}
.ts-cls-item{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--text);cursor:pointer;background:#fff;border:1px solid var(--border);border-radius:14px;padding:2px 10px;user-select:none}
.ts-cls-item:hover{border-color:var(--c-student)}
.ts-cls-item input{accent-color:var(--c-student);margin:0}
/* 任教绑定界面优化（20260918i）：年级页签 + 班号筛选 + 分组卡片 + 实时计数 */
.ts-cg-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px}
.ts-cg-tabs{display:flex;gap:6px;flex-wrap:wrap}
.ts-cg-tabs .tb-tab{padding:4px 12px;font-size:12.5px}
.ts-cls-q,.ts-q{border:1px solid var(--border);border-radius:14px;padding:5px 12px;font-size:12.5px;font-family:inherit;background:#FDFCFA;color:var(--text);width:190px}
.ts-cls-q:focus,.ts-q:focus{outline:none;border-color:var(--c-student);background:#fff}
#ts-clsg-wrap{display:flex;flex-direction:column;gap:10px;margin-top:8px;max-height:340px;overflow:auto;padding:10px;background:#F7F6F2;border-radius:var(--radius-sm);border:1px solid var(--border)}
.ts-cg{background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 12px}
.ts-cg-hd{display:flex;align-items:center;gap:10px;font-size:13px}
.ts-cg-hd b{color:var(--c-student)}
.ts-cg-cnt{font-size:12px;color:var(--text-3);background:#F2F1EC;border:1px solid transparent;border-radius:10px;padding:1px 8px}
.ts-cg-body{display:flex;flex-wrap:wrap;gap:6px 8px;margin-top:6px}
.ts-list{display:flex;flex-direction:column;gap:10px;margin-top:8px}
/* 任教设置双功能区 tab：选中色跟随学生档案色 */
.ts-tabs .tb-tab.on{background:var(--c-student);border-color:var(--c-student)}
/* 绑定列表头像圆标 */
.ts-ava{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background:var(--c-student);color:#fff;font-size:13px;font-weight:600;flex:none}
.ts-rec{border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 14px;background:#FBFAF7}
.ts-rec-hd{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ts-rec-hd b{font-size:14px}
.ts-rec-clss{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
/* 任教绑定列表分组（20260923l：按年级/权限归类，年级内分班主任/任课教师） */
.ts-grp{border:1px solid var(--border);border-radius:var(--radius-sm);background:#F7F6F2;padding:10px 12px}
.ts-grp-hd{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--c-student);padding:2px 2px 4px}
.ts-grp-hd .meta{font-weight:400}
.ts-sub{background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 10px;margin-top:8px}
.ts-sub-hd{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:600;color:var(--text-2);padding-bottom:6px;border-bottom:1px dashed var(--border)}
.ts-sub .ts-list,.ts-sub .ts-rec{margin-top:8px}
@media (max-width:860px){ .ts-f{min-width:120px} }

/* ===== 通用卡片（20260916t：全站 class="card" 此前无样式，统一白卡片观感） ===== */
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow-soft);}

/* ===== 卫生大比武 · 卫生检查（20260916t 布局优化：双栏 + 分组条 + 芯片网格） ===== */
.hb-sel-sum{margin-left:auto;font-size:12.5px;color:var(--text-light)}
.hb-sel-sum b{color:var(--c-hyg);font-size:14px}
.hb-setup-grid{display:grid;grid-template-columns:1fr;gap:14px;margin-top:14px}
@media (min-width:1080px){ .hb-setup-grid{grid-template-columns:1fr 1fr;align-items:start} }
.hb-sel-group{border:1px solid var(--border);border-radius:10px;background:#FBF9F5;margin-bottom:10px;overflow:hidden}
.hb-sel-grp-ttl{display:flex;align-items:center;gap:7px;padding:7px 12px;background:#F1EEE7;font-size:13px;font-weight:700;color:var(--text)}
.hb-sel-grp-ttl .ic,.hb-sel-grp-ttl svg{flex:none}
.hb-grp-n{margin-left:auto;font-size:11px;font-weight:600;color:var(--text-light);background:#fff;border:1px solid var(--border);border-radius:99px;padding:1px 8px;white-space:nowrap}
.hb-sel-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:6px;padding:10px 12px}
.hb-sel-item{display:flex;align-items:center;gap:6px;min-width:0;border:1px solid var(--border);border-radius:8px;padding:5px 8px;background:#fff;font-size:12.5px;font-weight:400;cursor:pointer;transition:border-color .12s,background .12s}
.hb-sel-item:hover{border-color:var(--c-hyg)}
.hb-sel-item.on{border-color:var(--c-hyg);background:rgba(13,148,136,.08)}
.hb-sel-item input{width:14px;height:14px;flex:none;margin:0;accent-color:var(--c-hyg)}
.hb-it-name{font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hb-sel-item .meta{font-size:11px;color:var(--text-light);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}
/* ===== 云端归档（报告归档 + 现场照片） ===== */
.card-ttl{font-size:15px;font-weight:700;color:var(--text);margin-bottom:10px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.card-ttl .meta{font-size:12px;font-weight:400;color:var(--text-light)}
.ar-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(126px,1fr));gap:10px}
.ar-thumb{position:relative;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:#f4f6fb;aspect-ratio:1/1;cursor:zoom-in}
.ar-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.ar-thumb span{position:absolute;left:0;right:0;bottom:0;background:rgba(15,23,42,.58);color:#fff;font-size:11px;padding:2px 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none}
.ar-thumb img.ar-failed{opacity:.5;outline:2px dashed #C2504D;outline-offset:-2px;cursor:pointer}
.ar-modal{position:fixed;inset:0;background:rgba(15,23,42,.86);display:flex;align-items:center;justify-content:center;z-index:9999;padding:16px}
.ar-modal img{max-width:94vw;max-height:84vh;border-radius:10px;box-shadow:0 10px 40px rgba(0,0,0,.5)}
.ar-mbar{position:absolute;top:14px;right:18px;display:flex;gap:8px}
@media (max-width:720px){ .ar-grid{grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:8px} }

/* ===================== 手机端底部导航（20261001a） =====================
   窄屏（≤860px）隐藏侧边栏，改为底部固定导航：每个 tab=一个功能分组（与侧边栏同源，
   按登录账号权限过滤）；点击 tab 底部弹出该分组功能面板（dropdown sheet），点击功能项即用。
   桌面端 display:none 不影响既有交互。 */
.mnav,.mnav-mask,.mnav-sheet{display:none;}
@media (max-width:860px){
  .layout{padding-bottom:calc(64px + env(safe-area-inset-bottom));}
  .sidebar{display:none;}
  .content{padding-bottom:30px;}
  .mnav{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;
    background:#fff;border-top:1px solid var(--border);
    padding:5px 4px calc(5px + env(safe-area-inset-bottom));
    box-shadow:0 -4px 14px rgba(60,55,45,.07);
  }
  .mnav .mn-tab{
    flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:2px;
    background:none;border:none;padding:5px 2px;font-size:11px;line-height:1.2;
    color:var(--text-2);cursor:pointer;border-radius:10px;font-family:inherit;
  }
  .mnav .mn-tab span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .mnav .mn-tab .ic{width:22px;height:22px;flex:0 0 22px;}
  .mnav .mn-tab.on{color:var(--accent);font-weight:600;}
  .mnav .mn-tab.on .ic{color:var(--accent);}
  /* 遮罩 + 底部弹出面板（常驻 DOM，用 .show 控制显隐以获得过渡动画） */
  .mnav-mask{
    display:block;position:fixed;inset:0;z-index:49;background:rgba(60,55,45,.34);
    opacity:0;pointer-events:none;transition:opacity .18s;
  }
  .mnav-mask.show{opacity:1;pointer-events:auto;}
  .mnav-sheet{
    display:flex;flex-direction:column;position:fixed;left:0;right:0;bottom:0;z-index:50;
    background:#fff;border-radius:18px 18px 0 0;max-height:74vh;
    padding:14px 14px calc(14px + env(safe-area-inset-bottom));
    box-shadow:0 -8px 30px rgba(60,55,45,.2);
    transform:translateY(104%);transition:transform .22s ease;
  }
  .mnav-sheet.show{transform:translateY(0);}
  .mnav-sheet .ms-head{display:flex;align-items:center;justify-content:space-between;padding:2px 4px 10px;border-bottom:1px solid var(--border);margin-bottom:10px;}
  .mnav-sheet .ms-title{font-weight:700;font-size:15px;display:flex;align-items:center;gap:8px;color:var(--text);}
  .mnav-sheet .ms-close{background:none;border:none;padding:6px;color:var(--text-light);cursor:pointer;display:flex;border-radius:8px;}
  .mnav-sheet .ms-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px;}
  .mnav-sheet .ms-item{
    display:flex;flex-direction:column;align-items:center;gap:5px;
    padding:12px 4px 9px;background:var(--bg-soft);border:1px solid var(--border);
    border-radius:12px;cursor:pointer;font-size:12px;line-height:1.25;color:var(--text);
    text-align:center;min-width:0;
  }
  .mnav-sheet .ms-item .label{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
  .mnav-sheet .ms-item .ic{width:22px;height:22px;color:var(--gray);}
  .mnav-sheet .ms-item .badge{font-size:10px;color:var(--text-light);background:#F0ECE4;padding:1px 6px;border-radius:12px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .mnav-sheet .ms-item:active{background:#fff;border-color:var(--accent);}
  .mnav-sheet .ms-item.cur{border-color:var(--accent);background:#EFF5FD;}
  .mnav-sheet .ms-item.cur .ic{color:var(--accent);}
  /* 手机端浮标上移，避免被底部导航遮挡（AI 办事浮标为 app.js 运行时注入，需 !important 覆盖） */
  body .aiq-fab{bottom:calc(78px + env(safe-area-inset-bottom))!important;}
}
@media (max-width:420px){
  .mnav-sheet .ms-grid{grid-template-columns:repeat(3,1fr);}
}

/* ===================== 信息查询 · 导师长四届折叠（20261010d） ===================== */
.iq-acc{margin-top:2px;}
.iq-acc .iq-grade-body{display:none;}
.iq-acc .gi-group.open .iq-grade-body{display:block;}
.iq-acc.iq-searching .iq-grade-body{display:block;} /* 搜索中自动展开全部年级 */
.iq-acc .iq-grade-body .tbl-wrap{background:transparent;box-shadow:none;border-radius:0;border-top:1px dashed var(--border);}
.iq-acc .iq-grade-body table.tbl th{background:#FAF7F1;}
.iq-acc .iq-grade-body table.tbl th,
.iq-acc .iq-grade-body table.tbl td{padding:9px 14px;}
.iq-acc .iq-grade-body table.tbl tr:last-child td{border-bottom:none;}
.iq-acc .iq-grade-head{cursor:pointer;}
@media (max-width:640px){
  .iq-acc .gi-badge{width:38px;height:38px;flex:0 0 38px;font-size:13px;border-radius:12px;}
  .iq-acc .gi-group-title{font-size:15px;}
  .iq-acc .iq-grade-body table.tbl th,
  .iq-acc .iq-grade-body table.tbl td{padding:8px 10px;font-size:12.5px;}
}

/* ===================== 信息查询 · 导师长行内编辑（20261010f） ===================== */
.iq-acc .iq-inp{
  width:100%;box-sizing:border-box;padding:6px 9px;
  border:1px solid var(--border);border-radius:8px;
  font-size:13px;font-family:inherit;background:#FDFCFA;color:var(--text);
}
.iq-acc .iq-inp:focus{outline:none;border-color:var(--primary);background:#fff;}
.iq-acc tr.iq-editing>td{background:#FBF6EE;}
.iq-acc tr.iq-editing .tbl thead th{background:inherit;}
.iq-acc .link-btn[data-action="iq-edit"]{cursor:pointer;white-space:nowrap;}
@media (max-width:640px){
  .iq-acc .iq-inp{padding:7px 8px;font-size:13px;}
  .iq-acc tr.iq-editing .btn-sm{padding:7px 11px;}
}

/* ===== 年级日报（年级共管 · 20261011） ===== */
.gd-toolbar{padding:12px 16px;}
.gd-frow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.gd-frow2{margin-top:9px;border-top:1px dashed var(--border);padding-top:9px;}
.gd-f{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--text-2);}
.gd-f input[type=date],.gd-f select,.gd-frow input[type=date]{border:1px solid var(--border-strong);border-radius:10px;padding:6px 9px;font-size:13px;background:#fff;color:var(--text);}
.gd-form{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:8px 0 12px;}
.gd-form select,.gd-form input{border:1px solid var(--border-strong);border-radius:10px;padding:8px 10px;font-size:13px;background:#fff;color:var(--text);min-width:120px;}
.gd-form #gdText{flex:1;min-width:180px;}
.gd-form #gdScore{width:150px;min-width:0;}
.gd-empty{padding:12px 4px;color:var(--text-light);}
.gd-list{display:flex;flex-direction:column;gap:10px;border-top:1px dashed var(--border);padding-top:10px;}
.gd-cls-block{border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 12px;background:#FBF9F5;}
.gd-cls-hd{font-weight:700;color:var(--text);font-size:13px;display:flex;align-items:center;gap:8px;margin-bottom:4px;}
.gd-entry{display:flex;align-items:center;gap:8px;padding:4px 0;border-top:1px dashed var(--border);font-size:13px;}
.gd-entry:first-child{border-top:none;}
.gd-entry-txt{color:var(--text);}
.gd-gcell{max-width:300px;font-size:12.5px;color:var(--text-2);line-height:1.5;white-space:normal;}
.gd-total td{background:#FAF7F1;font-weight:700;}
.gd-tbl td,.gd-tbl th{white-space:nowrap;}
/* 20261011b：各功能模块独立 Tab + 总扣分 Tab */
.gd-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px;padding:6px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);}
.gd-tab{display:inline-flex;align-items:center;gap:6px;border:1px solid transparent;background:#F4F1EA;color:var(--text-2);
  border-radius:20px;padding:7px 14px;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s;font-family:inherit;}
.gd-tab:hover{border-color:var(--primary);color:var(--primary-deep);}
.gd-tab.on{background:var(--c-duty);color:#fff;box-shadow:0 3px 10px rgba(37,99,235,.28);}
.gd-tab-n{font-size:11px;font-weight:700;font-variant-numeric:tabular-nums;background:rgba(0,0,0,.08);border-radius:10px;padding:1px 6px;}
.gd-tab.on .gd-tab-n{background:rgba(255,255,255,.26);}
.gd-mx th,.gd-mx td{text-align:center;}
.gd-mx tbody td:first-child,.gd-mx thead th:first-child{text-align:left;}
/* 集团通报（20261011c 手动录入）：说明列加宽 */
.gd-form #gdGText{flex:1;min-width:200px;}
.gd-form #gdGPts{width:150px;min-width:0;}
/* 导出页预览矩阵（20261011d）：班级列吸附 + 日期列紧凑居中，横向/纵向滚动 */
.gd-xc-wrap{max-height:64vh;overflow:auto;}
table.tbl.gd-xm th,table.tbl.gd-xm td{text-align:center;padding:7px 9px;font-variant-numeric:tabular-nums;white-space:nowrap;}
table.tbl.gd-xm thead th{position:sticky;top:0;z-index:2;}
table.tbl.gd-xm th.gd-xc-cls,table.tbl.gd-xm td.gd-xc-cls{position:sticky;left:0;z-index:1;background:#fff;text-align:left;
  box-shadow:1px 0 0 var(--border);}
table.tbl.gd-xm thead th.gd-xc-cls{z-index:3;background:#F7F4EE;}
/* 汇总预览 / 公示卡片（20261011c）——同时作为 html2canvas 截图对象，尺寸固定 880px 保证出图一致
   20261011e 手机端修复：去掉 max-width:100%——窄屏下卡片保持 880px 由外层 .gd-sc-wrap 横向滚动，
   不再被 overflow:hidden 裁掉右侧列（出图尺寸不受影响） */
.gd-sc-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;padding:2px 2px 6px;}
.gd-sc{width:880px;background:#fff;border:1px solid var(--border);border-radius:14px;overflow:hidden;
  color:#1f2937;font-family:inherit;box-shadow:0 6px 22px rgba(0,0,0,.08);}
.gd-sc-head{background:linear-gradient(135deg,#1d4ed8,#2563eb);color:#fff;padding:22px 28px;}
.gd-sc-kicker{font-size:12px;letter-spacing:.3em;opacity:.85;margin-bottom:6px;}
.gd-sc-title{font-size:24px;font-weight:800;letter-spacing:.04em;}
.gd-sc-sub{margin-top:6px;font-size:13px;opacity:.92;}
.gd-sc-strip{display:flex;border-bottom:1px solid #e5e7eb;}
.gd-sc-strip>div{flex:1;padding:12px 18px;border-right:1px solid #e5e7eb;}
.gd-sc-strip>div:last-child{border-right:0;}
.gd-sc-strip .k{font-size:12px;color:#6b7280;margin-bottom:3px;}
.gd-sc-strip .v{font-size:19px;font-weight:800;color:#1d4ed8;}
.gd-sc-strip .v.red{color:#b91c1c;}
.gd-sc-body{padding:16px 20px 6px;}
.gd-sc table{width:100%;border-collapse:collapse;font-size:13px;}
.gd-sc th{background:#1d4ed8;color:#fff;font-weight:700;padding:8px 6px;border:1px solid #1e40af;white-space:nowrap;}
.gd-sc td{padding:6px;border:1px solid #e5e7eb;text-align:center;white-space:nowrap;}
.gd-sc td.cls{font-weight:700;text-align:left;}
.gd-sc tr:nth-child(even) td{background:#f8fafc;}
.gd-sc td.pos{color:#b91c1c;font-weight:700;}
.gd-sc td.tot{background:#eff6ff;font-weight:700;}
.gd-sc td.empty{color:#6b7280;font-weight:400;}
.gd-sc tr.foot td{background:#1d4ed8;color:#fff;font-weight:800;border-color:#1e40af;}
.gd-sc-tail{display:flex;justify-content:space-between;gap:16px;background:#f8fafc;border-top:1px solid #e5e7eb;
  padding:10px 20px;font-size:12px;color:#6b7280;}
@media (max-width:640px){
  .gd-form select,.gd-form input{min-width:0;flex:1 1 45%;}
  .gd-form #gdText,.gd-form #gdGText{flex:1 1 100%;}
  .gd-form #gdScore,.gd-form #gdGPts{width:auto;}
  .gd-frow{gap:8px;}
  .gd-gcell{max-width:170px;}
  .gd-tabs{gap:5px;padding:5px;}
  .gd-tab{padding:6px 11px;font-size:12.5px;}
}

/* ===== 20261011e：导出页列设置 / 日历范围选择器 / 返回顶部 / 手机端适配 ===== */
/* 导出页「列设置」勾选项 */
.gd-fld{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--text-2);cursor:pointer;white-space:nowrap;}
.gd-fld input[type=checkbox]{width:15px;height:15px;accent-color:#2563eb;cursor:pointer;margin:0;}
/* 日历范围选择器（起止区间高亮） */
.range-date{border:1px solid var(--border-strong);border-radius:10px;padding:6px 9px;font-size:13px;background:#fff;color:var(--text);cursor:pointer;min-width:110px;text-align:center;}
.range-date:hover{border-color:#2563eb;}
#rangePop{position:absolute;z-index:1200;display:none;width:292px;background:var(--card,#fff);border:1px solid var(--border-strong);border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.18);padding:12px;user-select:none;}
.rp-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
.rp-ym{font-weight:700;font-size:14px;color:var(--text,#2a3342);}
.rp-nav{width:28px;height:28px;border:1px solid var(--border);background:#fff;border-radius:8px;cursor:pointer;font-size:16px;color:var(--text-2);line-height:1;padding:0;}
.rp-nav:hover{border-color:#2563eb;color:#2563eb;}
.rp-week{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-size:12px;color:var(--text-light,#9aa1ad);margin-bottom:4px;}
.rp-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;}
.rp-blank{width:100%;aspect-ratio:1/1;}
.rp-d{width:100%;aspect-ratio:1/1;border:none;background:transparent;border-radius:9px;cursor:pointer;font-size:13px;color:var(--text,#2a3342);display:flex;align-items:center;justify-content:center;padding:0;font-variant-numeric:tabular-nums;}
.rp-d:hover{background:#eff6ff;}
.rp-d.rp-in{background:#dbeafe;border-radius:0;}
.rp-d.rp-edge{background:#2563eb;color:#fff;font-weight:700;}
.rp-d.rp-today:not(.rp-edge):not(.rp-in){box-shadow:inset 0 0 0 1.5px #2563eb;}
.rp-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px;border-top:1px dashed var(--border);padding-top:8px;}
.rp-range-txt{font-size:12px;color:var(--text-2,#5b6472);}
.rp-clear{border:none;background:none;color:var(--c-leave,#C2504D);font-size:12px;cursor:pointer;padding:2px 4px;}
/* 手机端：日历改为底部弹层，避免被输入框边缘挤出屏幕 */
@media(max-width:520px){
  #rangePop{position:fixed;left:50%!important;top:auto!important;bottom:12px;transform:translateX(-50%);width:min(340px,calc(100vw - 24px));z-index:1400;}
}
/* 返回顶部悬浮按钮 */
#backTopBtn{position:fixed;right:24px;bottom:90px;width:44px;height:44px;border-radius:50%;border:none;background:#2563eb;color:#fff;box-shadow:0 6px 18px rgba(37,99,235,.35);cursor:pointer;display:none;align-items:center;justify-content:center;z-index:800;padding:0;}
#backTopBtn.show{display:flex;}
#backTopBtn:hover{background:#1d4ed8;}
/* 20261012d：手机端抬高，避开底部导航栏与右下角「登录云端同步」引导按钮 */
@media(max-width:860px){#backTopBtn{right:14px;bottom:calc(136px + env(safe-area-inset-bottom,0px));width:42px;height:42px;}}

/* ===================== 班费管理（20261012f） ===================== */
.cf-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:14px 0 0;}
.cf-lock{display:inline-flex;align-items:center;gap:6px;font-weight:700;color:var(--c-fee);background:#FBF2E6;border:1px solid #EFDFC8;border-radius:20px;padding:7px 15px;font-size:13px;}
.cf-lock .meta{margin-left:2px;font-weight:400;}
#content .cf-tabs .gd-tab.on{background:var(--c-fee);box-shadow:0 3px 10px rgba(192,138,78,.30);}
/* KPI 卡 */
.cf-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;}
.cf-kpi{background:#fff;border:1px solid var(--border);border-left:3px solid var(--c-fee);border-radius:14px;padding:14px 16px;box-shadow:var(--shadow-soft);}
.cf-kpi .k1{font-size:12px;color:var(--text-light);}
.cf-kpi .k2{font-size:24px;font-weight:800;margin:4px 0 2px;font-variant-numeric:tabular-nums;letter-spacing:-.5px;}
.cf-kpi .k3{font-size:12px;color:var(--text-light);}
/* 缴费进度条 */
.cf-progress{height:12px;border-radius:8px;background:#F1EDE4;overflow:hidden;}
.cf-progress-in{height:100%;border-radius:8px;background:linear-gradient(90deg,#D8A96A,#C08A4E);transition:width .35s ease;}
/* 参与学生批量勾选 */
.cf-pick-bar{display:flex;align-items:center;gap:8px;margin:4px 0 8px;}
.cf-pick-wrap{max-height:230px;overflow-y:auto;border:1px solid var(--border);border-radius:10px;padding:8px;display:flex;flex-wrap:wrap;gap:6px;background:#FCFBF8;}
.cf-pick{display:inline-flex;align-items:center;gap:5px;padding:5px 11px;border:1px solid var(--border);border-radius:18px;font-size:13px;cursor:pointer;background:#fff;transition:.14s;}
.cf-pick:hover{border-color:var(--c-fee);}
.cf-pick:has(input:checked){background:#FBF2E6;border-color:var(--c-fee);font-weight:600;color:#8A5F2A;}
.cf-pick input{accent-color:var(--c-fee);}
.cf-pick.on-leave{opacity:.55;background:#F4F1EA;}
/* 已退学（20261013a）：灰显 + 不可勾选（历史账目已含者保留勾选态但仍禁用） */
.cf-pick.quit{opacity:.5;background:#F0EEE9;cursor:not-allowed;border-style:dashed;}
.cf-pick.quit:hover{border-color:var(--border);}
.cf-pick.quit:has(input:checked){background:#F0EEE9;border-color:var(--border);font-weight:400;color:inherit;}
.cf-pick.quit input{accent-color:#B9B2A6;cursor:not-allowed;}
.cf-pick.quit .cf-lv{background:#ECE9E2;color:#7C7568;}
.cf-lv{font-size:10px;background:#FBE9E9;color:#B05A57;border-radius:8px;padding:0 5px;}
/* 分摊计算条 */
.cf-calc{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:#FBF6EE;border:1px dashed #E3D2B7;border-radius:10px;padding:10px 14px;margin:10px 0 4px;font-size:13px;}
.cf-calc b{font-variant-numeric:tabular-nums;}
.cf-arrow{color:var(--c-fee);font-weight:700;}
/* 票据 */
.cf-rec-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.cf-rec-box{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px;}
.cf-rec-box.view .cf-rec-item{cursor:pointer;}
.cf-rec-empty{font-size:12px;color:var(--text-light);background:#FAF8F4;border-radius:8px;padding:10px 12px;width:100%;}
.cf-rec-item{position:relative;width:64px;height:64px;border-radius:9px;overflow:hidden;border:1px solid var(--border);background:#F6F3EE;display:flex;align-items:center;justify-content:center;}
.cf-rec-item img{width:100%;height:100%;object-fit:cover;display:block;}
.cf-rec-ph{color:var(--text-light);}
.cf-rec-del{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;font-size:13px;line-height:17px;text-align:center;cursor:pointer;}
/* 公示卡 */
.cf-pub{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:22px 24px;box-shadow:var(--shadow-soft);}
.cf-pub-head{text-align:center;border-bottom:2px solid var(--c-fee);padding-bottom:12px;margin-bottom:6px;}
.cf-pub-head .t1{font-size:20px;font-weight:800;letter-spacing:3px;color:#5B4326;}
.cf-pub-head .t2{font-size:12px;color:var(--text-light);margin-top:4px;}
.cf-pub-body{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin:14px 0;}
.cf-pub-row{display:flex;flex-direction:column;gap:2px;border:1px solid var(--border);border-radius:10px;padding:10px 14px;background:#FDFCF9;}
.cf-pub-row span{font-size:12px;color:var(--text-light);}
.cf-pub-row b{font-size:18px;font-variant-numeric:tabular-nums;}
.cf-pub-foot{font-size:12px;color:var(--text-light);text-align:center;margin-top:14px;border-top:1px dashed var(--border);padding-top:10px;}
@media(max-width:640px){
  .cf-kpi .k2{font-size:20px;}
  .cf-pick-wrap{max-height:180px;}
  .cf-pub{padding:16px 14px;}
}
