/* ================= 初中教师一体化工作台 · 粉色可爱主题 ================= */
:root{
  --pink-50:#fff5fa;
  --pink-100:#ffe6f2;
  --pink-200:#ffc9e3;
  --pink-300:#ffa6cf;
  --pink-400:#ff7fb4;
  --pink-500:#ff5c9e;
  --pink-600:#e83e84;
  --pink-700:#c8276a;
  --grape:#b47bff;
  --mint:#7fe3c4;
  --sky:#7fc8ff;
  --sun:#ffd56b;
  --ink:#5a3b4d;
  --ink-soft:#8a6b7c;
  --line:#ffd9ea;
  --card:#ffffff;
  --shadow:0 10px 30px rgba(255,124,180,.18);
  --shadow-sm:0 4px 14px rgba(255,124,180,.14);
  --radius:22px;
  --radius-sm:14px;
  --font:"PingFang SC","Microsoft YaHei","Hiragino Sans GB",-apple-system,"Segoe UI",sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:var(--font);
  color:var(--ink);
  background:
    radial-gradient(1200px 600px at 10% -10%, #ffe3f1 0, transparent 55%),
    radial-gradient(1000px 500px at 110% 10%, #e9e0ff 0, transparent 50%),
    var(--pink-50);
  -webkit-font-smoothing:antialiased;
}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,select,textarea{font-family:inherit;color:var(--ink)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--pink-200);border-radius:10px}
::-webkit-scrollbar-track{background:transparent}

/* ---------- 布局 ---------- */
.app{display:flex;height:100vh;overflow:hidden}
.sidebar{
  width:248px;flex:0 0 248px;
  background:linear-gradient(180deg,var(--pink-400),var(--pink-600));
  color:#fff;display:flex;flex-direction:column;
  padding:18px 14px;gap:6px;overflow-y:auto;
  box-shadow:6px 0 24px rgba(232,62,132,.25);
}
.brand{display:flex;align-items:center;gap:10px;padding:6px 8px 14px}
.brand .logo{font-size:30px;filter:drop-shadow(0 3px 4px rgba(0,0,0,.15))}
.brand .name{font-weight:800;font-size:17px;line-height:1.2;text-shadow:0 2px 4px rgba(0,0,0,.12)}
.brand .sub{font-size:11px;opacity:.85;font-weight:500}
.nav-group{margin-top:6px}
.nav-group .gtitle{font-size:11px;opacity:.8;padding:10px 12px 4px;letter-spacing:1px;font-weight:700}
.nav-item{
  display:flex;align-items:center;gap:10px;padding:11px 12px;border-radius:14px;
  font-size:14.5px;font-weight:600;color:#fff;opacity:.92;transition:.18s;white-space:nowrap;
}
.nav-item .ico{font-size:18px;width:22px;text-align:center}
.nav-item:hover{background:rgba(255,255,255,.18);opacity:1}
.nav-item.active{background:#fff;color:var(--pink-600);box-shadow:var(--shadow-sm)}
.nav-item .badge{margin-left:auto;background:var(--sun);color:#7a4b00;font-size:11px;font-weight:800;
  padding:1px 7px;border-radius:20px;min-width:20px;text-align:center}

.main{flex:1;display:flex;flex-direction:column;overflow:hidden}
.topbar{
  height:64px;flex:0 0 64px;display:flex;align-items:center;gap:14px;padding:0 22px;
  background:rgba(255,255,255,.85);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);
  position:relative;z-index:70;
}
.topbar .crumb{font-size:15px;font-weight:800;color:var(--pink-600)}
.topbar .crumb small{color:var(--ink-soft);font-weight:600;font-size:12px;margin-left:8px}
.topbar .spacer{flex:1}

/* 班级切换器 */
.class-switch{position:relative}
.class-btn{
  display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:30px;
  background:linear-gradient(135deg,#fff0f6,#ffe3ef);
  color:var(--pink-700);font-weight:800;font-size:14px;border:2px solid #fff;box-shadow:var(--shadow-sm);
}
.class-btn:hover{transform:translateY(-1px)}
.class-menu{
  position:absolute;top:50px;right:0;background:#fff;border-radius:18px;padding:10px;
  box-shadow:var(--shadow);width:250px;z-index:60;display:none;border:1px solid var(--line);
  max-height:calc(100vh - 90px);overflow-y:auto;
}
.class-menu.open{display:block}
.class-menu .sm-title{font-size:12px;color:var(--ink-soft);font-weight:700;padding:4px 8px 8px}
.class-menu .opt{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:12px;font-weight:700;font-size:14px;cursor:pointer;
}
.class-menu .opt:hover{background:var(--pink-50)}
.class-menu .opt.active{background:var(--pink-100);color:var(--pink-600)}
.class-menu .opt .role{font-size:11px;font-weight:700;padding:1px 7px;border-radius:20px;background:var(--pink-100);color:var(--pink-600)}
.class-menu .opt .role.other{background:#eef2ff;color:#4c6ef5}
.class-menu .add-class{margin-top:6px;border-top:1px dashed var(--line);padding-top:8px}
.class-menu .add-class button{width:100%}

/* 班级管理卡片 */
.class-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;margin-top:4px}
.class-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:16px;border:1px solid #fff6fb;position:relative;transition:.16s}
.class-card:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.class-card.current{border-color:var(--pink-400);box-shadow:0 0 0 2px rgba(232,62,132,.18)}
.cc-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.cc-name{font-size:17px;font-weight:850;color:var(--pink-700)}
.cc-head .role{font-size:11px;font-weight:700;padding:1px 8px;border-radius:20px;background:var(--pink-100);color:var(--pink-600)}
.cc-head .role.other{background:#eef2ff;color:#4c6ef5}
.cc-head .cur-tag{margin-left:auto;font-size:11px;font-weight:800;color:#fff;background:linear-gradient(135deg,var(--pink-400),var(--pink-600));padding:2px 10px;border-radius:20px}
.cc-meta{font-size:13px;color:var(--ink-soft);font-weight:600;margin-bottom:12px}
.cc-actions{display:flex;flex-wrap:wrap;gap:7px}

/* 任教科目（注册时选定，进入系统后不可再切换，显示为静态标签） */
.subject-label{
  display:flex;align-items:center;gap:6px;padding:8px 14px;border-radius:30px;
  background:linear-gradient(135deg,var(--pink-100),var(--pink-200));
  color:var(--pink-700);font-weight:800;font-size:14px;border:2px solid #fff;box-shadow:var(--shadow-sm);
  cursor:default;white-space:nowrap;
}
/* 角色标签：班主任（深紫）与任教（淡粉） */
.role-tag{display:inline-flex;align-items:center;gap:2px;padding:2px 9px;border-radius:18px;font-size:12px;font-weight:700;line-height:1.6;margin-left:4px;border:1px solid transparent;white-space:nowrap;}
.role-tag.role-head{background:linear-gradient(135deg,#d8c8ff,#b69cff);color:#3a1f8c;border-color:#fff;}
.role-tag.role-teach{background:linear-gradient(135deg,#ffd9c2,#ffb495);color:#7a3013;border-color:#fff;}
/* 角色复选框（注册/班级管理页） */
.check-pill{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:22px;background:var(--pink-50);color:var(--pink-700);font-weight:700;font-size:13px;border:1.5px solid var(--pink-200);cursor:pointer;user-select:none;}
.check-pill input{margin:0;cursor:pointer;}
.check-pill.muted{opacity:.7;cursor:not-allowed;}

.btn{
  display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:30px;
  font-weight:700;font-size:13.5px;background:var(--pink-100);color:var(--pink-700);transition:.16s;
}
.btn:hover{background:var(--pink-200);transform:translateY(-1px)}
.btn.primary{background:linear-gradient(135deg,var(--pink-400),var(--pink-600));color:#fff;box-shadow:var(--shadow-sm)}
.btn.primary:hover{filter:brightness(1.05)}
.btn.soft{background:#fff;border:1.5px solid var(--line);color:var(--ink)}
.btn.danger{background:#ffe1e8;color:#d6336c}
.btn.danger:hover{filter:brightness(1.03)}
/* 清除数据按钮：默认置灰不可点击 */
.btn:disabled,.btn[disabled]{opacity:.45;cursor:not-allowed;filter:grayscale(.5);box-shadow:none;transform:none;pointer-events:none}
.btn.danger.unlocked{background:linear-gradient(135deg,#ff5c8a,#d6336c);color:#fff;animation:pulseRed 1.3s infinite;cursor:pointer;pointer-events:auto;opacity:1;filter:none}
@keyframes pulseRed{0%{box-shadow:0 0 0 0 rgba(214,51,108,.55)}70%{box-shadow:0 0 0 11px rgba(214,51,108,0)}100%{box-shadow:0 0 0 0 rgba(214,51,108,0)}}
.danger-zone{border:1px solid #ffd0db;background:#fff8fa}
.flex.wrap{flex-wrap:wrap}
.mt8{margin-top:8px}
.btn.sm{padding:6px 11px;font-size:12.5px}
.btn.green{background:#e3fbf2;color:#0b8a63}
.icon-btn{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;font-size:17px;
  background:var(--pink-100);color:var(--pink-600);transition:.16s}
.icon-btn:hover{background:var(--pink-200);transform:translateY(-1px)}
.auth-badge{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border-radius:18px;font-size:12.5px;font-weight:700;cursor:pointer;border:1.5px solid transparent;white-space:nowrap;transition:.16s}
.auth-badge.no{background:#ffe1e8;color:#d6336c;border-color:#ffc2d2}
.auth-badge.ok{background:#e3fbf2;color:#0b8a63;border-color:#b6efe0}
.auth-badge:hover{filter:brightness(1.03);transform:translateY(-1px)}
.auth-status{font-size:14px;font-weight:700;margin:4px 0}
.auth-ok{color:#0b8a63}
.auth-no{color:#d6336c}
.warn-box{background:#fff4e6;border:1px solid #ffd8a8;color:#9a5b00;padding:10px 12px;border-radius:10px;font-size:13px;margin-bottom:10px}
.flex.gap8{gap:8px}

.content{flex:1;overflow-y:auto;padding:22px 26px 60px}
.page-title{display:flex;align-items:center;gap:12px;margin-bottom:4px}
.page-title h1{font-size:23px;font-weight:850;color:var(--pink-700)}
.page-title .emo{font-size:28px}
.page-desc{color:var(--ink-soft);font-size:13.5px;margin-bottom:18px}

/* ---------- 卡片 ---------- */
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow-sm);
  padding:18px;border:1px solid #fff6fb}
.card.pad{padding:20px}
.grid{display:grid;gap:16px}
.cols-2{grid-template-columns:repeat(2,1fr)}
.cols-3{grid-template-columns:repeat(3,1fr)}
.cols-4{grid-template-columns:repeat(4,1fr)}
.cols-5{grid-template-columns:repeat(5,1fr)}
@media(max-width:1100px){.cols-4,.cols-5{grid-template-columns:repeat(2,1fr)}.cols-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.cols-2,.cols-3,.cols-4,.cols-5{grid-template-columns:1fr}}

/* 统计小卡 */
.stat{background:linear-gradient(135deg,#fff,#fff6fb);border-radius:18px;padding:16px 16px;
  box-shadow:var(--shadow-sm);border:1px solid var(--pink-100);position:relative;overflow:hidden}
.stat .ico{font-size:24px;margin-bottom:6px}
.stat .label{font-size:12.5px;color:var(--ink-soft);font-weight:700}
.stat .val{font-size:26px;font-weight:850;color:var(--pink-600);line-height:1.1}
.stat .val small{font-size:13px;color:var(--ink-soft);font-weight:700}
.stat .spark{position:absolute;right:-6px;bottom:-6px;font-size:54px;opacity:.10}

.quick{display:flex;flex-wrap:wrap;gap:10px}
.quick .q{display:flex;align-items:center;gap:8px;padding:11px 15px;border-radius:14px;font-weight:700;font-size:13.5px;
  background:var(--pink-50);border:1.5px dashed var(--pink-200);color:var(--pink-700);transition:.16s}
.quick .q:hover{background:var(--pink-100);transform:translateY(-2px)}
.quick .q .e{font-size:17px}

/* 待我处理清单（仪表盘） */
.todo-list{display:flex;flex-direction:column;gap:8px}
.todo-item{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;border-radius:13px;
  background:linear-gradient(135deg,#fff,#fff6fb);border:1.5px solid var(--pink-100);font-weight:700;font-size:13.5px;color:var(--ink);
  cursor:pointer;transition:.16s}
.todo-item:hover{background:var(--pink-50);border-color:var(--pink-300);transform:translateX(3px)}
.todo-item b{display:inline-flex;min-width:26px;height:26px;padding:0 8px;align-items:center;justify-content:center;border-radius:20px;
  background:var(--pink-600);color:#fff;font-size:13px;font-weight:850}

/* 区块标题 */
.section-h{display:flex;align-items:center;gap:9px;margin:22px 0 12px}
.section-h .bar{width:5px;height:20px;border-radius:6px;background:linear-gradient(var(--pink-400),var(--pink-600))}
.section-h h2{font-size:17px;font-weight:830;color:var(--ink)}
.section-h .hint{font-size:12px;color:var(--ink-soft);font-weight:600;margin-left:auto}

/* tabs */
.tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.tab{padding:8px 16px;border-radius:30px;font-weight:700;font-size:13px;background:#fff;border:1.5px solid var(--line);color:var(--ink-soft)}
.tab.active{background:var(--pink-500);color:#fff;border-color:var(--pink-500);box-shadow:var(--shadow-sm)}

/* 表格 */
.table-wrap{overflow-x:auto;border-radius:16px;border:1px solid var(--pink-100)}
table{width:100%;border-collapse:collapse;font-size:13.5px;min-width:520px}
th{background:var(--pink-50);color:var(--pink-700);font-weight:800;text-align:left;padding:11px 13px;white-space:nowrap;position:sticky;top:0}
td{padding:10px 13px;border-top:1px solid #fff0f7}
tr:hover td{background:#fffafd}
.tag{display:inline-block;padding:2px 10px;border-radius:20px;font-size:12px;font-weight:700}
.tag.b{background:#e8f7ff;color:#1c7ed6}
.tag.g{background:#e6fbf1;color:#0b8a63}
.tag.y{background:#fff4d6;color:#b8860b}
.tag.p{background:var(--pink-100);color:var(--pink-700)}
.tag.r{background:#ffe1e8;color:#d6336c}
.tag.o{background:#f3ecff;color:#7048e8}

/* 表单 */
.field{margin-bottom:14px}
.field label{display:block;font-size:13px;font-weight:700;color:var(--ink);margin-bottom:6px}
.field .req{color:var(--pink-500)}
.input,.select,.textarea{
  width:100%;padding:10px 13px;border-radius:12px;border:1.5px solid var(--line);background:#fffdfe;font-size:14px;
  transition:.15s;outline:none;
}
.input:focus,.select:focus,.textarea:focus{border-color:var(--pink-400);box-shadow:0 0 0 4px var(--pink-100)}
.input[readonly],.select[readonly],.textarea[readonly]{background:#f3f3f5!important;color:#a0a0a8!important;cursor:not-allowed;border-color:#e5e5ea}
.auth-change-link{font-size:12px;color:var(--pink-500);margin-left:8px;font-weight:600;cursor:pointer}
.auth-change-link:hover{color:var(--pink-600);text-decoration:underline}
.textarea{resize:vertical;min-height:78px}
.row{display:flex;gap:12px;flex-wrap:wrap}
.row>.field{flex:1;min-width:160px}

/* 登录 / 注册页 */
.auth-screen{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#ffe3ef 0%,#fff0f6 50%,#ffe9f3 100%);padding:20px}
.auth-card{width:min(430px,94vw);background:#fff;border-radius:26px;box-shadow:0 18px 50px rgba(244,114,182,.28);
  padding:30px 28px;text-align:center;max-height:92vh;overflow:auto;border:1.5px solid #ffd9ea}
.auth-logo{font-size:46px;line-height:1}
.auth-card h2{margin:8px 0 2px;color:var(--pink-600);font-size:22px}
.auth-sub{color:var(--ink-soft);font-size:13px;margin-bottom:18px}
.auth-card .field{text-align:left;margin-bottom:12px}
.auth-card .row{display:flex;gap:10px}
.auth-card .row>.field{flex:1;min-width:0}
.auth-foot{min-height:18px;margin:4px 0 2px}
.auth-err{color:#e03131;font-size:12.5px;font-weight:600}
.auth-link{margin-top:10px;font-size:13px;color:var(--ink-soft)}
.auth-link a{color:var(--pink-600);font-weight:700;text-decoration:none}
.btn.block{width:100%;justify-content:center;margin-top:8px}
.icon-btn#accountBtn{font-size:18px}

/* 顶栏账号胶囊：粉色圆头像 + 姓名，永远保持一行，不挤掉布局 */
.account-chip{
  display:inline-flex;align-items:center;gap:7px;height:36px;padding:0 12px 0 4px;
  border-radius:30px;background:linear-gradient(135deg,#fff,#fff5fa);
  border:1.5px solid var(--pink-200);box-shadow:var(--shadow-sm);
  color:var(--ink);font-size:13px;font-weight:700;cursor:pointer;
  white-space:nowrap;overflow:hidden;max-width:160px;transition:transform .12s ease,box-shadow .12s ease;
}
.account-chip:hover{transform:translateY(-1px);box-shadow:var(--shadow)}
.account-chip .acc-avatar{
  width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,var(--pink-400),var(--pink-600));
  color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;flex:none;
}
.account-chip .acc-name{
  overflow:hidden;text-overflow:ellipsis;max-width:96px;
}
@media (max-width:640px){
  .account-chip{max-width:42px;padding:0;height:36px;justify-content:center}
  .account-chip .acc-name{display:none}
}

/* modal */
.mask{position:fixed;inset:0;background:rgba(90,40,60,.45);backdrop-filter:blur(3px);z-index:100;
  display:none;align-items:center;justify-content:center;padding:20px}
.mask.open{display:flex}
.modal{background:#fff;border-radius:26px;width:min(680px,96vw);max-height:90vh;overflow-y:auto;
  box-shadow:0 30px 80px rgba(200,40,106,.35);padding:26px;animation:pop .25s ease}
@keyframes pop{from{transform:scale(.92) translateY(10px);opacity:0}to{transform:none;opacity:1}}
.modal.wide{width:min(960px,96vw)}
.modal h3{font-size:20px;font-weight:850;color:var(--pink-700);margin-bottom:4px;display:flex;align-items:center;gap:9px}
.modal .sub{color:var(--ink-soft);font-size:13px;margin-bottom:18px}
.modal-foot{display:flex;gap:10px;justify-content:flex-end;margin-top:20px;padding-top:16px;border-top:1px dashed var(--line)}

/* toast */
.toast-wrap{position:fixed;top:20px;left:50%;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:8px;align-items:center}
.toast{background:#fff;color:var(--ink);padding:11px 20px;border-radius:30px;box-shadow:var(--shadow);
  font-weight:700;font-size:13.5px;border:1.5px solid var(--pink-200);display:flex;align-items:center;gap:8px;
  animation:drop .3s ease}
@keyframes drop{from{transform:translateY(-14px);opacity:0}to{transform:none;opacity:1}}
.toast.ok{border-color:var(--mint);color:#0b8a63}
.toast.err{border-color:#ffb3c0;color:#d6336c}

/* 空态 */
.empty{text-align:center;padding:40px 20px;color:var(--ink-soft)}
.empty .e{font-size:46px;opacity:.5}
.empty p{margin-top:8px;font-weight:600}

/* 进度条 */
.bar-line{height:9px;border-radius:10px;background:var(--pink-100);overflow:hidden}
.bar-line>span{display:block;height:100%;background:linear-gradient(90deg,var(--pink-400),var(--pink-600));border-radius:10px}

/* 排座位 */
.seat-grid{display:grid;gap:8px;justify-content:center;margin:0 auto;max-width:760px}
.seat{height:58px;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;
  font-weight:800;font-size:13px;background:#fff;border:2px solid var(--pink-200);color:var(--ink);transition:.12s;position:relative}
.seat:hover{transform:scale(1.05);border-color:var(--pink-500);z-index:2}
.seat.empty{background:repeating-linear-gradient(45deg,#fff,#fff 8px,#fff6fb 8px,#fff6fb 16px);border-style:dashed;color:var(--ink-soft);font-weight:600}
.seat .s-score{font-size:10px;color:var(--pink-600);font-weight:700}
.seat.podium{grid-column:1/-1;background:linear-gradient(135deg,var(--pink-100),var(--pink-200));color:var(--pink-700);height:40px}

/* 课表 */
.tt{width:100%;border-collapse:separate;border-spacing:6px}
.tt th{background:linear-gradient(135deg,var(--pink-400),var(--pink-600));color:#fff;border-radius:12px;padding:10px;font-size:13px;text-align:center;position:static}
.tt td{background:#fff;border-radius:12px;padding:4px;vertical-align:top;height:62px;width:13%;border:1px solid var(--pink-100)}
.tt td.time{background:var(--pink-50);color:var(--pink-700);font-weight:800;font-size:12px;text-align:center;width:90px}
.tt .cell{border-radius:10px;padding:6px;height:100%;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;text-align:center;cursor:pointer;transition:.12s;background:var(--pink-50);color:var(--pink-700)}
.tt .cell:hover{transform:scale(1.04);box-shadow:var(--shadow-sm)}
.tt .cell.xk{background:#eaf6ff;color:#1c7ed6}
.tt .cell.wd{background:#fff1d6;color:#b8860b}
.tt .cell.sy{background:#ffe7ef;color:#d6336c}
.tt .cell.hd{background:#f0e9ff;color:#7048e8}

/* 时间轴 */
.timeline{position:relative;padding-left:26px}
.timeline::before{content:"";position:absolute;left:8px;top:4px;bottom:4px;width:3px;border-radius:3px;background:var(--pink-200)}
.tl-item{position:relative;margin-bottom:16px}
.tl-item::before{content:"";position:absolute;left:-22px;top:4px;width:14px;height:14px;border-radius:50%;background:var(--pink-500);box-shadow:0 0 0 4px var(--pink-100)}
.tl-card{background:#fff;border:1px solid var(--pink-100);border-radius:14px;padding:12px 14px;box-shadow:var(--shadow-sm)}
.tl-date{font-size:12px;color:var(--ink-soft);font-weight:700}

/* 学生头像 */
.avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-weight:800;color:#fff;font-size:14px;flex:0 0 34px}
.avatar.sm{width:28px;height:28px;font-size:12px}

/* 抽屉/列表项 */
.list-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:14px;background:#fff;border:1px solid var(--pink-100);margin-bottom:10px;box-shadow:var(--shadow-sm)}
.list-item .li-main{flex:1;min-width:0}
.list-item .li-title{font-weight:800;font-size:14px}
.list-item .li-sub{font-size:12.5px;color:var(--ink-soft);margin-top:2px}

/* 杂项 */
.muted{color:var(--ink-soft)}
.fw700{font-weight:700}.fw800{font-weight:800}.fw850{font-weight:850}
.small{font-size:12.5px}.tiny{font-size:11.5px}
.flex{display:flex}.ac{align-items:center}.gap8{gap:8px}.gap12{gap:12px}.gap16{gap:16px}
.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt20{margin-top:20px}
.mb8{margin-bottom:8px}.mb12{margin-bottom:12px}.mb16{margin-bottom:16px}
.right{margin-left:auto}.center{text-align:center}
.pill{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:30px;background:var(--pink-50);color:var(--pink-700);font-weight:700;font-size:12px}
.divider{height:1px;background:var(--line);margin:14px 0}
.kpi-row{display:flex;gap:16px;flex-wrap:wrap}
.hr-note{font-size:12px;color:var(--ink-soft);background:var(--pink-50);padding:10px 14px;border-radius:12px;border:1px dashed var(--pink-200)}

/* 风险分档标签 */
.t-tag{display:inline-block;padding:3px 10px;border-radius:30px;font-size:12px;font-weight:800;margin-left:4px}
.t-ok{background:var(--green,#d8f5e0);color:var(--green-ink,#1f7a3b)}
.t-warn{background:#fff3cf;color:#a26b00}
.t-err{background:#ffd9d4;color:#a02a18}
.t-accent{background:#dce8ff;color:#1f47a8}
.t-unknown{background:#eee;color:#666}
/* 总分来源标签 */
.src-tag{display:inline-block;padding:2px 8px;border-radius:8px;background:var(--pink-50);color:var(--pink-700);font-size:11.5px;font-weight:700}
/* 估分置信度角标：师=教师手填(高) 模=模考填充(中) */
.conf{display:inline-block;margin-left:2px;padding:0 4px;border-radius:6px;font-size:10px;font-weight:800;line-height:15px;vertical-align:middle}
.conf-teacher{background:#e8f5e9;color:#2e7d32}
.conf-mock{background:#fff3e0;color:#e65100}
/* 批量录入勾选 */
.chk{display:inline-flex;align-items:center;gap:4px;font-size:13px;cursor:pointer;white-space:nowrap}
/* 报考单（A4） */
.pa-chart{margin:8px 0 14px;padding:10px;background:#fafafa;border-radius:12px}
@media print{.pa-chart{break-inside:avoid}}

/* 升学规划 */
.zk-subjects{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.zk-sub{display:inline-flex;align-items:center;gap:6px;background:var(--pink-50);border:1px solid var(--pink-200);border-radius:30px;padding:6px 12px;font-size:13px;font-weight:700;color:var(--pink-700)}
.input.mini{padding:4px 6px;font-size:13px;border-radius:8px;border:1.5px solid var(--line);width:64px}
.hs-card{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:12px 14px;border:1px solid var(--line);border-radius:14px;margin-bottom:10px;background:#fff}
.hs-name{font-weight:800;font-size:15px;min-width:160px}
.hs-lines{display:flex;flex-wrap:wrap;gap:8px;flex:1}
.hs-act{display:flex;gap:12px}
.link{color:var(--pink-600);cursor:pointer;font-weight:700;text-decoration:underline}
.link.danger{color:#c0392b}
.zk-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.zk-card{border:1px solid var(--line);border-radius:16px;padding:14px;background:#fff;box-shadow:var(--shadow-sm)}
.zk-card-h{font-weight:800;font-size:15px;margin-bottom:6px}
.zk-card-h small{font-weight:600;color:var(--ink-soft);font-size:12px}
.zk-card-m{font-size:12.5px;color:var(--ink-soft);margin-bottom:8px}
.zk-tiers{display:flex;flex-direction:column;gap:6px}
.tier{display:flex;align-items:center;gap:8px;font-size:13px;padding:6px 8px;border-radius:10px}
.tier .lab{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;color:#fff;font-weight:800;font-size:12px}
.t-bao{background:#e8f6ee}.t-bao .lab{background:#3a9d5d}
.t-wen{background:#eaf1fb}.t-wen .lab{background:#3b7dd8}
.t-chong{background:#fdeef0}.t-chong .lab{background:#d9534f}
.ok{color:#2e9e54;font-weight:800}
.warn{color:#d9534f;font-weight:800}
/* 志愿梯度行 + 风险预警 + 单生报考单 */
.zk-vol{font-size:12px;color:var(--ink-soft);padding:6px 10px 2px}
.zk-vol .btn.mini{padding:2px 10px;font-size:11px;margin-left:6px}
.btn.mini{padding:4px 12px;font-size:12px;border-radius:999px;border:none;background:var(--pink-100);color:var(--pink-700);cursor:pointer;font-weight:700}
.btn.mini:hover{background:var(--pink-200)}
.zk-card.risk{border:2px solid #ffb3b3;box-shadow:0 0 0 3px rgba(217,83,79,.12)}
.risk-box{background:#fff3f3;border:1px solid #ffc9c9;border-radius:var(--radius-sm);padding:12px 14px;margin-bottom:14px}
.risk-item{padding:5px 0;font-size:13px;color:#b23a3a}
.risk-item.warn{font-weight:700}
/* 打印：仅显示报考单 */
#printArea{display:none}

/* ---------- 系统管理 / 角色 / 恢复码 ---------- */
.recovery-code{
  font-family:"SF Mono","Consolas","Menlo",monospace;font-size:30px;font-weight:800;letter-spacing:4px;
  color:var(--pink-700);background:linear-gradient(135deg,var(--pink-50),var(--pink-100));
  border:2px dashed var(--pink-300);border-radius:18px;padding:18px 12px;text-align:center;margin:6px 0 16px;
  user-select:all;
}
.recovery-code small{display:block;font-size:11px;letter-spacing:0;color:var(--ink-soft);font-weight:600;margin-top:6px}
.role-badge{display:inline-block;padding:2px 11px;border-radius:20px;font-size:12px;font-weight:800}
.role-badge.ad{background:linear-gradient(135deg,var(--grape),#8b5cf6);color:#fff}
.role-badge.te{background:var(--pink-100);color:var(--pink-700)}
.tag-me{display:inline-block;font-size:11px;font-weight:800;color:#fff;background:var(--mint);padding:1px 8px;border-radius:20px;margin-left:4px;vertical-align:middle}
.warn-box{background:#fff3f3;border:1px solid #ffc9c9;border-radius:14px;padding:10px 14px;color:#c0392b;font-weight:700;font-size:13px;margin-bottom:14px}
.print-area{display:none;padding:24px;color:#222;font-size:13px;line-height:1.7}
.print-area .pa-h{font-size:20px;margin-bottom:10px;border-bottom:2px solid #333;padding-bottom:6px}
.print-area .pa-meta{margin:4px 0}
.print-area h3{font-size:15px;margin:14px 0 6px}
.print-area .pa-tbl{width:100%;border-collapse:collapse;margin-top:6px}
.print-area .pa-tbl th,.print-area .pa-tbl td{border:1px solid #999;padding:6px 8px;text-align:left}
.print-area .pa-warn{color:#d9534f;font-weight:700;margin-top:10px}
.print-area .pa-note{color:#666;font-size:12px;margin-top:12px}
.print-area .pa-sign{margin-top:28px;color:#333}
@media print{
  body *{visibility:hidden}
  #printArea,.print-area{display:block;visibility:visible;position:absolute;left:0;top:0;width:100%}
}

/* ================= 完整手机端方案 v3（参考小红书老师工作台风格） ================= */
/* 全局：禁止横向滚动 */
body{overflow-x:hidden}

/* 抽屉打开时锁背景滚动（防 iOS 穿透） */
body.menu-locked{overflow:hidden}

/* 平板（≤1024）：内容收窄 */
@media (max-width:1024px){
  .content{padding:20px 18px 56px}
  .row>.field,.field{flex-basis:calc(50% - 6px)}
}

/* 手机/小平板（≤768）：核心自适应 + 抽屉卡片化 */
@media (max-width:768px){
  /* 顶栏：轻量化、允许换行 */
  .topbar{height:auto;min-height:56px;padding:8px 12px;gap:8px;flex-wrap:wrap}
  .topbar .subject-label,.topbar .spacer{display:none}

  /* ☰ 圆形按钮：显式 display:grid（防级联遗漏），order:-1 永远居左 */
  #menuBtn{
    order:-1;flex:0 0 auto;margin-right:6px;
    display:grid;place-items:center;
    width:40px;height:40px;font-size:20px;
    background:var(--pink-100);color:var(--pink-600);
    border-radius:50%;
    box-shadow:0 2px 8px rgba(200,40,106,.18);
  }

  /* 顶栏右侧：保留 account-chip + ⚙，其它进抽屉 */
  .account-chip{padding:4px 8px;max-width:120px;font-size:13px}
  .topbar #cloudBtn,.topbar #backupBtn{display:none}

  /* 页面标题：居中显示，长度截断 */
  .topbar .crumb{
    display:block;font-size:14.5px;font-weight:800;color:var(--ink);
    flex:1 1 auto;text-align:center;margin:0 4px;min-width:0;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  }

  /* 内容区收窄 */
  .content{padding:14px 12px 56px}

  /* 表单整列 */
  .row{flex-direction:column;gap:8px}
  .row>.field,.field{flex-basis:100%;min-width:0;width:100%}

  /* 表格横滚 + 内联 min-width 归零 */
  table{display:block;width:100%;min-width:0;overflow-x:auto;-webkit-overflow-scrolling:touch}
  [style*="min-width"]{min-width:0 !important}

  /* 模态贴边 */
  .modal{width:96vw;max-height:92vh;padding:18px 15px;border-radius:20px}
  .mask{padding:0}
  .modal-foot{flex-wrap:wrap;gap:8px}
  .modal-foot .btn{flex:1 1 auto;min-width:120px;min-height:42px}

  /* 按钮触屏目标 */
  .btn{min-height:42px;font-size:14px}
  .tab{min-height:40px}

  /* 标签页横滚 */
  .tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px}
  .tabs .tab{white-space:nowrap}

  /* 卡片单列 */
  .hs-card{flex-direction:column;align-items:flex-start;gap:8px}
  .kpi-row{gap:10px}

  /* ===== 抽屉（左滑卡片化菜单，参考小红书风格）===== */
  /* 关键修复：v3 之前只改宽度没改位置，导致 sidebar 在手机端仍作为 .app 的 flex 子项占据 82vw 显示。
     现改为 position:fixed + 默认 translateX(-100%) 隐藏在屏外，.open 时滑入。 */
  .sidebar{
    position:fixed;left:0;top:0;bottom:0;
    width:82vw;max-width:340px;
    z-index:90;
    transform:translateX(-100%);
    transition:transform .26s cubic-bezier(.2,.8,.2,1);
    padding:20px 14px 24px;
    border-radius:0 22px 22px 0;
    box-shadow:8px 0 30px rgba(200,40,106,.28);
  }
  .sidebar.open{transform:translateX(0);}
  .sidebar .brand{
    display:flex;align-items:center;gap:10px;
    padding:6px 6px 16px;
    border-bottom:1px solid rgba(255,255,255,.22);
    margin-bottom:14px;
  }
  .sidebar .brand .logo{
    width:42px;height:42px;font-size:22px;
    display:grid;place-items:center;
    background:rgba(255,255,255,.22);border-radius:12px;
  }
  .sidebar .brand .name{font-size:16px;font-weight:800;color:#fff}
  .sidebar .brand .sub{font-size:11px;color:rgba(255,255,255,.78)}

  /* 分组标题 */
  .sidebar .gtitle{
    font-size:11.5px;font-weight:700;color:rgba(255,255,255,.7);
    padding:10px 8px 4px;letter-spacing:.5px;
    text-transform:uppercase;
  }

  /* 菜单项：卡片化、active 状态高亮 */
  .sidebar .nav-item{
    display:flex;align-items:center;gap:10px;
    padding:10px 12px;margin:2px 0;
    border-radius:12px;
    font-size:14.5px;font-weight:600;color:#fff;
    min-height:44px;cursor:pointer;
    transition:background .15s;
  }
  .sidebar .nav-item:active,
  .sidebar .nav-item:hover{background:rgba(255,255,255,.14)}
  .sidebar .nav-item.active{
    background:#fff;color:var(--pink-600);font-weight:800;
    box-shadow:0 2px 10px rgba(200,40,106,.18);
  }
  .sidebar .nav-item .ico{
    width:22px;text-align:center;font-size:16px;flex:0 0 auto;
  }
  .sidebar .nav-item.active .ico{color:var(--pink-600)}
  .sidebar .nav-item .badge{
    margin-left:auto;
    background:rgba(255,255,255,.95);color:var(--pink-600);
    font-weight:800;border-radius:10px;padding:1px 7px;font-size:11.5px;
  }
  .sidebar .nav-item.active .badge{background:var(--pink-600);color:#fff}

  /* 抽屉打开时的遮罩：默认透明不可点，open 时渐显并接收点击关闭 */
  .menu-backdrop{
    position:fixed;inset:0;z-index:85;
    background:rgba(40,30,50,.45);backdrop-filter:blur(2px);
    opacity:0;pointer-events:none;
    transition:opacity .2s ease;
  }
  .menu-backdrop.open{opacity:1;pointer-events:auto}
}

/* 超小屏（≤480）：顶栏再精简、抽屉更宽 */
@media (max-width:480px){
  .topbar .class-switch{display:none}
  .account-chip .acc-name{display:none}
  .account-chip{padding:4px 6px}

  /* 进一步隐藏次要按钮 */
  .topbar .auth-badge{display:none}

  .topbar .crumb{font-size:13px}
  #menuBtn{width:38px;height:38px;font-size:18px}

  .content{padding:12px 10px 56px}
  h1,.h1{font-size:20px}
  .class-grid{grid-template-columns:1fr}

  /* 抽屉几乎占满 */
  .sidebar{width:88vw;padding:18px 12px}

  /* 弹窗底部按钮垂直堆叠 */
  .modal-foot{flex-direction:column}
  .modal-foot .btn{width:100%}
}

/* 在线升级（方案 B-2）样式 */
.update-badge{position:relative}
.update-badge .dot{position:absolute;top:3px;right:3px;width:9px;height:9px;border-radius:50%;background:#e03131;box-shadow:0 0 0 2px #fff;display:none}
.update-badge.spin{opacity:.55}
.update-notes{max-height:42vh;overflow:auto;background:#fafafa;border:1px solid #eee;border-radius:10px;padding:10px 12px;font-size:13px;line-height:1.75;white-space:normal;word-break:break-word}

/* WebDAV 私有云（方案 C）样式 */
.wd-card{background:linear-gradient(180deg,#f6faff 0%,#eef6ff 100%);border:1px solid #cfe2ff;border-radius:12px;padding:14px;margin-top:8px}
.wd-hd{font-weight:600;font-size:15px;color:#0b3a66;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.wd-tag{font-size:11px;font-weight:500;color:#5a7aa0;background:#e6efff;border:1px solid #b9d3f5;border-radius:999px;padding:2px 8px;margin-left:auto}
.wd-sub{color:#5a6b80;font-size:12.5px;line-height:1.6;margin:6px 0 8px}
.wd-sub code{background:#eef3f9;padding:1px 6px;border-radius:6px;font-size:12px;color:#0b3a66}
.wd-card .modal-foot{flex-wrap:wrap;gap:6px}
.wd-card .modal-foot .btn{flex:1 1 auto;min-width:120px}

/* 手机扫码卡片（云端版方案 A+B） */
.qr-card .qr-flex{display:flex;gap:16px;align-items:center}
.qr-box{width:140px;height:140px;flex:0 0 auto;background:#fff;border:1px solid var(--line);border-radius:12px;padding:6px;display:flex;align-items:center;justify-content:center}
.qr-box svg{width:100%;height:100%}
.qr-title{font-weight:800;font-size:15px;color:var(--ink);margin-bottom:4px}
.qr-sub{font-size:12.5px;color:var(--ink-soft);line-height:1.6}
.qr-url{margin-top:8px;font-size:11px;color:var(--pink-600);word-break:break-all;background:var(--pink-50);padding:5px 8px;border-radius:8px}
@media(max-width:760px){.qr-card .qr-flex{flex-direction:column;align-items:flex-start}.qr-box{width:160px;height:160px}}
