
:root{--primary:#4F46E5;--pl:#6366F1;--pd:#4338CA;--p50:#EEF2FF;--teal:#0D9488;--tl:#14B8A6;--t50:#F0FDFA;--amber:#F59E0B;--al:#FBBF24;--a50:#FFFBEB;--rose:#E11D48;--rl:#F43F5E;--r50:#FFF1F2;--green:#16A34A;--gl:#22C55E;--g50:#F0FDF4;--blue:#2563EB;--bl:#3B82F6;--b50:#EFF6FF;--purple:#9333EA;--pl2:#A855F7;--p50b:#FAF5FF;--cyan:#0891B2;--cl:#06B6D4;--c50:#ECFEFF;--g50c:#F8FAFC;--g100:#F1F5F9;--g200:#E2E8F0;--g300:#CBD5E1;--g400:#94A3B8;--g500:#64748B;--g600:#475569;--g700:#334155;--g800:#1E293B;--g900:#0F172A;--sw:250px;--th:64px;--r:12px;--rs:8px;--rl2:16px;--sh:0 1px 3px rgba(0,0,0,.08),0 1px 2px rgba(0,0,0,.04);--shm:0 4px 12px rgba(0,0,0,.08);--shl:0 10px 30px rgba(0,0,0,.1);--tr:all .25s cubic-bezier(.4,0,.2,1)}
*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;overflow:hidden}body{font-family:"PingFang SC","Microsoft YaHei","Segoe UI",system-ui,sans-serif;background:var(--g50c);color:var(--g800);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased}a{text-decoration:none;color:inherit}ul,ol{list-style:none}button{font-family:inherit;cursor:pointer;border:none;outline:none}input,select,textarea{font-family:inherit;outline:none}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:var(--g300);border-radius:3px}::-webkit-scrollbar-track{background:transparent}.ac{align-items:center}.as{align-items:flex-start}.jc{justify-content:center}.je{justify-content:flex-end}.fc{flex-direction:column}.fw{flex-wrap:wrap}
.app{display:flex;height:100vh;height:100dvh}
.sidebar{width:var(--sw);background:linear-gradient(180deg,var(--g900),#1a2332);color:#fff;display:flex;flex-direction:column;flex-shrink:0;z-index:100}.sh{height:var(--th);display:flex;align-items:center;padding:0 20px;gap:10px;border-bottom:1px solid rgba(255,255,255,.08)}.li{width:36px;height:36px;background:linear-gradient(135deg,var(--pl),var(--pl2));border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}.lt{font-size:17px;font-weight:700}.lt span{color:var(--tl)}.sb{font-size:10px;color:var(--g400);margin-top:2px}.nav{flex:1;padding:12px 10px;overflow-y:auto}.ns{margin-bottom:8px}.nst{font-size:11px;color:var(--g400);padding:12px 12px 6px;text-transform:uppercase;letter-spacing:1px;font-weight:600}.ni{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--rs);color:var(--g300);font-size:14px;cursor:pointer;transition:var(--tr);margin-bottom:2px;position:relative}.ni:hover{background:rgba(255,255,255,.06);color:#fff}.ni.active{background:linear-gradient(90deg,rgba(99,102,241,.2),rgba(99,102,241,.05));color:#fff}.ni.active::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:20px;background:var(--pl);border-radius:0 3px 3px 0}.ni-icon{width:20px;height:20px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px}.ni-badge{margin-left:auto;background:var(--rose);color:#fff;font-size:10px;padding:1px 6px;border-radius:10px;font-weight:600}.ni-tag{margin-left:auto;font-size:10px;padding:1px 6px;border-radius:4px;font-weight:500}.ni-tag.new{background:rgba(20,184,166,.25);color:var(--tl)}.sf{padding:12px 16px;border-top:1px solid rgba(255,255,255,.08);display:flex;align-items:center;gap:10px}.av{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,var(--tl),var(--bl));display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:#fff;flex-shrink:0}.un{font-size:13px;font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ur{font-size:11px;color:var(--g400)}
.main{flex:1;display:flex;flex-direction:column;overflow:hidden}.tb{height:var(--th);background:#fff;border-bottom:1px solid var(--g200);display:flex;align-items:center;padding:0 24px;gap:16px;flex-shrink:0;box-shadow:var(--sh)}.tt{font-size:18px;font-weight:700;color:var(--g800)}.ts{font-size:12px;color:var(--g400);margin-left:8px}.sbox{margin-left:auto;width:260px;height:36px;background:var(--g100);border-radius:var(--rs);display:flex;align-items:center;padding:0 12px;gap:8px;transition:var(--tr)}.sbox:focus-within{background:#fff;box-shadow:0 0 0 2px var(--pl)}.sbox input{flex:1;border:none;background:transparent;font-size:13px;color:var(--g700)}.sbox input::placeholder{color:var(--g400)}.ta{display:flex;align-items:center;gap:8px}.ib{width:36px;height:36px;border-radius:var(--rs);display:flex;align-items:center;justify-content:center;color:var(--g500);transition:var(--tr);position:relative;font-size:16px}.ib:hover{background:var(--g100);color:var(--g700)}.ib .dot{position:absolute;top:8px;right:8px;width:7px;height:7px;background:var(--rose);border-radius:50%;border:2px solid #fff}.ct{flex:1;overflow-y:auto;padding:24px}.page{display:none;animation:fi .3s ease}.page.active{display:block}@keyframes fi{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.card{background:#fff;border-radius:var(--r);box-shadow:var(--sh);padding:20px;transition:var(--tr)}.card:hover{box-shadow:var(--shm)}.ct-title{font-size:15px;font-weight:700;color:var(--g800);margin-bottom:16px;display:flex;align-items:center;gap:8px}.grid{display:grid;gap:16px}.g2{grid-template-columns:repeat(2,1fr)}.g3{grid-template-columns:repeat(3,1fr)}.g4{grid-template-columns:repeat(4,1fr)}.g5{grid-template-columns:repeat(5,1fr)}.g6{grid-template-columns:repeat(6,1fr)}.flex{display:flex}.fb{display:flex;align-items:center;justify-content:space-between}.gap-4{gap:4px}.gap-8{gap:8px}.gap-12{gap:12px}.gap-16{gap:16px}.gap-24{gap:24px}.mt-4{margin-top:4px}.mt-8{margin-top:8px}.mt-12{margin-top:12px}.mt-16{margin-top:16px}.mt-24{margin-top:24px}.mb-8{margin-bottom:8px}.mb-12{margin-bottom:12px}.mb-16{margin-bottom:16px}.mb-24{margin-bottom:24px}.txs{font-size:11px}.tsm{font-size:12px}.tmd{font-size:14px}.tlg{font-size:16px}.txl{font-size:20px}.t2xl{font-size:24px}.tg{color:var(--g500)}.tgd{color:var(--g600)}.tp{color:var(--primary)}.tt{color:var(--teal)}.ta-c{color:var(--amber)}.tr{color:var(--rose)}.tgn{color:var(--green)}.tb-c{color:var(--blue)}.tp-c{color:var(--purple)}.tc-c{color:var(--cyan)}.fb{font-weight:700}.f6{font-weight:600}
.tag{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:6px;font-size:11px;font-weight:500;white-space:nowrap}.t-p{background:var(--p50);color:var(--primary)}.t-t{background:var(--t50);color:var(--teal)}.t-a{background:var(--a50);color:var(--amber)}.t-r{background:var(--r50);color:var(--rose)}.t-g{background:var(--g50);color:var(--green)}.t-b{background:var(--b50);color:var(--blue)}.t-pu{background:var(--p50b);color:var(--purple)}.t-c{background:var(--c50);color:var(--cyan)}.t-gray{background:var(--g100);color:var(--g500)}
.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:var(--rs);font-size:13px;font-weight:600;transition:var(--tr)}.btn-p{background:var(--primary);color:#fff}.btn-p:hover{background:var(--pd)}.btn-o{background:#fff;border:1px solid var(--g300);color:var(--g700)}.btn-o:hover{border-color:var(--primary);color:var(--primary)}.btn-g{color:var(--g500);background:transparent}.btn-g:hover{background:var(--g100)}.btn-sm{padding:4px 10px;font-size:12px}
.kpi{background:#fff;border-radius:var(--r);padding:18px;box-shadow:var(--sh);position:relative;overflow:hidden;transition:var(--tr)}.kpi:hover{transform:translateY(-2px);box-shadow:var(--shm)}.kpi::before{content:'';position:absolute;top:0;left:0;right:0;height:3px}.kpi.k1::before{background:var(--primary)}.kpi.k2::before{background:var(--teal)}.kpi.k3::before{background:var(--amber)}.kpi.k4::before{background:var(--rose)}.kpi.k5::before{background:var(--purple)}.kpi.k6::before{background:var(--cyan)}.kpi-icon{width:40px;height:40px;border-radius:var(--rs);display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:10px}.k1 .kpi-icon{background:var(--p50);color:var(--primary)}.k2 .kpi-icon{background:var(--t50);color:var(--teal)}.k3 .kpi-icon{background:var(--a50);color:var(--amber)}.k4 .kpi-icon{background:var(--r50);color:var(--rose)}.k5 .kpi-icon{background:var(--p50b);color:var(--purple)}.k6 .kpi-icon{background:var(--c50);color:var(--cyan)}.kpi-v{font-size:26px;font-weight:700;color:var(--g800);line-height:1.2}.kpi-l{font-size:12px;color:var(--g500);margin-top:4px}.kpi-t{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:600;margin-top:6px}.kpi-t.up{color:var(--green)}.kpi-t.down{color:var(--rose)}
.legend{display:flex;flex-wrap:wrap;gap:12px;margin-top:12px}.legend-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--g600)}.legend-dot{width:10px;height:10px;border-radius:3px;flex-shrink:0}
.progress{height:8px;background:var(--g100);border-radius:4px;overflow:hidden}.pb{height:100%;border-radius:4px;transition:width .6s ease}.ps{height:5px}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}.tbl th{text-align:left;padding:10px 12px;color:var(--g500);font-weight:600;border-bottom:2px solid var(--g200);font-size:12px;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}.tbl td{padding:12px;border-bottom:1px solid var(--g100);color:var(--g700)}.tbl tr:hover td{background:var(--g50c)}
.stu-av{width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#fff;flex-shrink:0}
.kg-container{position:relative;width:100%;height:520px;background:radial-gradient(ellipse at center,var(--g50c),#fff);border-radius:var(--r);overflow:hidden;border:1px solid var(--g200)}.kg-svg{width:100%;height:100%}.kg-node{cursor:pointer;transition:var(--tr)}.kg-node:hover circle{filter:brightness(1.1)}.kg-panel{position:absolute;top:16px;right:16px;width:240px;background:#fff;border-radius:var(--r);box-shadow:var(--shl);padding:16px;border:1px solid var(--g200);display:none}.kg-panel.show{display:block;animation:fi .2s ease}
.upload-zone{border:2px dashed var(--g300);border-radius:var(--r);padding:36px;text-align:center;transition:var(--tr);cursor:pointer;background:var(--g50c)}.upload-zone:hover{border-color:var(--primary);background:var(--p50)}
.timeline{position:relative;padding-left:24px}.timeline::before{content:'';position:absolute;left:7px;top:0;bottom:0;width:2px;background:var(--g200)}.ti{position:relative;padding-bottom:20px}.ti:last-child{padding-bottom:0}.td{position:absolute;left:-24px;top:4px;width:16px;height:16px;border-radius:50%;border:3px solid #fff;box-shadow:0 0 0 2px var(--g200)}.td.done{background:var(--green)}.td.proc{background:var(--amber)}.td.pend{background:var(--g300)}.td.exam{background:var(--primary)}
.switch{position:relative;width:40px;height:22px;background:var(--g300);border-radius:11px;cursor:pointer;transition:var(--tr);flex-shrink:0}.switch.on{background:var(--primary)}.switch::after{content:'';position:absolute;top:2px;left:2px;width:18px;height:18px;background:#fff;border-radius:50%;transition:var(--tr)}.switch.on::after{left:20px}
.tabs{display:flex;gap:4px;border-bottom:2px solid var(--g200);margin-bottom:20px;flex-wrap:wrap}.tab{padding:8px 16px;font-size:13px;font-weight:600;color:var(--g500);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:var(--tr);white-space:nowrap}.tab:hover{color:var(--g700)}.tab.active{color:var(--primary);border-bottom-color:var(--primary)}
.ring{position:relative;display:inline-flex;align-items:center;justify-content:center}.ring svg{transform:rotate(-90deg)}.ring .rt{position:absolute;font-size:14px;font-weight:700}
.heat-cell{border-radius:3px;transition:var(--tr)}.h0{background:#ebedf0}.h1{background:#c6e6c9}.h2{background:#7bc97f}.h3{background:#4caf50}.h4{background:#2e7d32}
.et-card{background:#fff;border-radius:var(--r);padding:20px;box-shadow:var(--sh);cursor:pointer;transition:var(--tr);position:relative;overflow:hidden;border:2px solid transparent}.et-card:hover{transform:translateY(-3px);box-shadow:var(--shm);border-color:var(--pl)}.et-card.sel{border-color:var(--primary);background:var(--p50)}.et-icon{width:48px;height:48px;border-radius:var(--rs);display:flex;align-items:center;justify-content:center;font-size:24px;margin-bottom:12px}.et-name{font-size:15px;font-weight:700;color:var(--g800)}.et-desc{font-size:12px;color:var(--g500);margin-top:4px}.et-stat{display:flex;gap:16px;margin-top:12px;padding-top:12px;border-top:1px solid var(--g100)}.et-stat-item{font-size:11px;color:var(--g500)}.et-stat-item b{font-size:14px;color:var(--g800);display:block}
.sem-tl{position:relative;padding:20px 0}.sem-track{position:relative;height:60px;background:var(--g100);border-radius:30px;margin:0 40px}.sem-fill{position:absolute;left:0;top:0;height:100%;background:linear-gradient(90deg,var(--primary),var(--tl));border-radius:30px;width:78%}.sem-mk{position:absolute;top:50%;transform:translate(-50%,-50%);width:28px;height:28px;border-radius:50%;background:#fff;border:3px solid var(--primary);z-index:2;display:flex;align-items:center;justify-content:center;font-size:12px;cursor:pointer;transition:var(--tr)}.sem-mk:hover{transform:translate(-50%,-50%) scale(1.2)}.sem-mk.done{background:var(--green);border-color:var(--green);color:#fff}.sem-mk.cur{background:var(--amber);border-color:var(--amber);color:#fff;box-shadow:0 0 0 4px var(--a50)}.sem-mk.fut{background:#fff;border-color:var(--g300)}.sem-lb{position:absolute;top:42px;left:50%;transform:translateX(-50%);font-size:11px;color:var(--g500);white-space:nowrap;text-align:center}.sem-lb b{display:block;color:var(--g700)}.sem-tlb{position:absolute;bottom:42px;left:50%;transform:translateX(-50%);font-size:10px;color:var(--g400);white-space:nowrap}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.cal-h{text-align:center;font-size:11px;font-weight:600;color:var(--g500);padding:8px 0}.cal-d{min-height:60px;background:var(--g50c);border-radius:var(--rs);padding:4px;font-size:11px;position:relative;transition:var(--tr)}.cal-d:hover{background:var(--g100)}.cal-d.today{background:var(--p50);border:1px solid var(--pl)}.cal-ev{font-size:9px;padding:2px 4px;border-radius:3px;margin-top:2px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cal-ev.daily{background:#DBEAFE;color:var(--blue)}.cal-ev.weekly{background:#DCFCE7;color:var(--green)}.cal-ev.monthly{background:#FEF3C7;color:var(--amber)}.cal-ev.mock{background:#CFFAFE;color:var(--cyan)}.cal-ev.final{background:#EDE9FE;color:var(--purple)}
.modal-ov{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.4);z-index:10000;display:none;align-items:center;justify-content:center;backdrop-filter:blur(4px)}.modal-ov.show{display:flex;animation:fi .2s ease}.modal{background:#fff;border-radius:var(--rl2);max-width:640px;width:90%;max-height:85vh;overflow-y:auto;box-shadow:var(--shl)}.modal-h{padding:20px 24px;border-bottom:1px solid var(--g200);display:flex;align-items:center;justify-content:space-between}.modal-b{padding:24px}.modal-f{padding:16px 24px;border-top:1px solid var(--g200);display:flex;justify-content:flex-end;gap:8px}
.steps{display:flex;gap:0;margin-bottom:24px}.step{flex:1;text-align:center;position:relative;padding:0 12px}.step:not(:last-child)::after{content:'';position:absolute;top:16px;right:-50%;width:100%;height:2px;background:var(--g200);z-index:0}.step.done:not(:last-child)::after{background:var(--primary)}.step-num{width:32px;height:32px;border-radius:50%;background:var(--g200);color:var(--g500);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;margin:0 auto 8px;position:relative;z-index:1;transition:var(--tr)}.step.done .step-num{background:var(--primary);color:#fff}.step.active .step-num{background:var(--primary);color:#fff;box-shadow:0 0 0 4px var(--p50)}.step-lb{font-size:12px;color:var(--g500);font-weight:600}.step.active .step-lb{color:var(--primary)}
.stu-exam-card:hover{box-shadow:var(--shm)!important}
.exam-q:hover{border-color:var(--pl)!important}
.modal{max-width:640px}
@media(max-width:1200px){.g6{grid-template-columns:repeat(3,1fr)}.g5{grid-template-columns:repeat(3,1fr)}.g4{grid-template-columns:repeat(2,1fr)}}.menu-toggle{display:none;width:36px;height:36px;border-radius:8px;align-items:center;justify-content:center;font-size:20px;color:var(--g600);background:var(--g100);flex-shrink:0}
.sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:999}
.sidebar-backdrop.show{display:block}
/* V5.18.38 修复：基础规则 .menu-toggle{display:none} 原先写在下方、晚于本媒体查询，
   同优先级下永远覆盖 → 手机端 ☰ 按钮被隐藏、抽屉菜单无法打开（左侧主菜单"消失"）。
   现已把基础规则上移到媒体查询之前，并用 !important 加固，确保 ≤768px 时 ☰ 可见。 */
@media(max-width:768px){.sidebar{position:fixed;top:0;left:0;bottom:0;width:82%;max-width:300px;transform:translateX(-100%);transition:transform .25s ease;z-index:1000;box-shadow:4px 0 24px rgba(0,0,0,.25)}.sidebar.open{transform:translateX(0)}.menu-toggle{display:inline-flex!important}.ts{display:none}.tb{padding:0 12px;gap:10px}.g3,.g2,.g4,.g5,.g6{grid-template-columns:1fr}.sbox{display:none}.ni{min-height:46px;font-size:15px}.btn,.ct button{min-height:42px;padding:10px 16px}}
/* ===== V5.18.38 分辨率自适应增强 ===== */
/* 横屏手机（如 720×1600 机型横置，CSS 视口约 800×360）落在 769~1100px 死区：
   旧布局仍显示 210px 固定侧栏，窄屏下既挤又难用。识别「宽≤1100 且 高≤480 的横屏」
   自动切换为抽屉菜单（与手机竖屏同交互），平板竖屏（高>480）不受影响，仍保留侧栏。 */
@media (max-width:1100px) and (max-height:480px) and (orientation:landscape){
  .sidebar{position:fixed;top:0;left:0;bottom:0;width:46%;max-width:300px;transform:translateX(-100%);transition:transform .25s ease;z-index:1000;box-shadow:4px 0 24px rgba(0,0,0,.25)}
  .sidebar.open{transform:translateX(0)}
  .menu-toggle{display:inline-flex!important}
  .ts{display:none}
  .sbox{display:none}
  .tb{padding:0 12px;gap:10px}
  .ct{padding:14px}
  .ni{min-height:42px}
  .g3,.g2{grid-template-columns:repeat(2,1fr)}
  .g4,.g5,.g6{grid-template-columns:repeat(3,1fr)}
  input,select,textarea{font-size:16px!important}
}

/* ===== 学生端「我的班班」分组导航（V5.15.5） ===== */
.ni-group{cursor:pointer;font-weight:600}
.ni-group .ni-label{flex:1}
.ni-caret{margin-left:auto;transition:transform .2s ease;font-size:12px;color:var(--g400)}
.ni-group.open .ni-caret{transform:rotate(90deg)}
.ni-children{display:none;padding-left:6px;margin-bottom:2px}
.ni-children.open{display:block;animation:fi .2s ease}
.ni-sub{padding:9px 12px 9px 32px;font-size:13px;position:relative}
.ni-sub::before{content:'';position:absolute;left:22px;top:50%;transform:translateY(-50%);width:5px;height:5px;border-radius:50%;background:var(--g400)}
.ni-sub.active{background:linear-gradient(90deg,rgba(99,102,241,.18),rgba(99,102,241,.04));color:#fff}

/* ===== 首页 + 登录页 V3 ===== */
.home-page,.login-page{position:fixed;inset:0;z-index:1000;display:flex;align-items:flex-start;justify-content:center;overflow-y:auto;overflow-x:hidden;padding:24px 16px}
.home-page{background:linear-gradient(135deg,#0F172A 0%,#1E293B 50%,#312E81 100%);color:#fff}
.home-hero{text-align:center;max-width:1080px;width:100%;margin:auto;padding:8px 0}
.home-logo{width:72px;height:72px;border-radius:20px;background:linear-gradient(135deg,#6366F1,#A855F7);display:flex;align-items:center;justify-content:center;font-size:38px;margin:0 auto 16px;box-shadow:0 16px 48px rgba(99,102,241,.4)}
.home-title{font-size:36px;font-weight:800;margin-bottom:8px;background:linear-gradient(90deg,#fff,#A855F7);-webkit-background-clip:text;background-clip:text;color:transparent;letter-spacing:1px}
.home-tagline{font-size:15px;color:#94A3B8;margin-bottom:6px}
.home-sub{font-size:12px;color:#64748B;margin-bottom:24px}
.home-features{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:24px}
.home-feat{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:14px;display:grid;grid-template-columns:auto 1fr;grid-template-areas:"icon title" "icon desc";column-gap:12px;row-gap:2px;align-items:center;text-align:left;backdrop-filter:blur(10px);transition:var(--tr)}
.home-feat:hover{background:rgba(255,255,255,.08);border-color:rgba(99,102,241,.4);transform:translateY(-2px)}
.home-feat-icon{grid-area:icon;width:40px;height:40px;border-radius:10px;background:linear-gradient(135deg,rgba(99,102,241,.3),rgba(168,85,247,.3));display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:0;flex-shrink:0}
.home-feat-title{grid-area:title;font-size:14px;font-weight:700;margin-bottom:0;color:#fff;align-self:end}
.home-feat-desc{grid-area:desc;font-size:11.5px;color:#94A3B8;line-height:1.5;margin:0;align-self:start}
.home-btn{padding:12px 36px;font-size:15px;font-weight:700;background:linear-gradient(90deg,#6366F1,#A855F7);color:#fff;border:none;border-radius:30px;cursor:pointer;transition:var(--tr);box-shadow:0 10px 30px rgba(99,102,241,.4)}
.home-btn:hover{transform:translateY(-2px);box-shadow:0 15px 40px rgba(99,102,241,.6)}
.home-version{position:fixed;bottom:12px;right:16px;font-size:11px;color:#475569}

/* ===== 首页「班级管理」功能简介区块（V5.16.5） ===== */
.home-section{margin-bottom:24px}
.home-section-head{text-align:center;margin-bottom:16px}
.home-section-title{font-size:20px;font-weight:700;color:#fff;margin-bottom:8px;display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}
.home-section-sub{font-size:13px;color:#94A3B8;max-width:700px;margin:0 auto;line-height:1.6}
.home-badge-new{display:inline-block;font-size:11px;font-weight:700;color:#5EEAD4;background:rgba(20,184,166,.18);border:1px solid rgba(20,184,166,.4);padding:1px 9px;border-radius:20px;vertical-align:middle;letter-spacing:.5px}
.home-cm-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.home-cm{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:14px;display:grid;grid-template-columns:auto 1fr;grid-template-areas:"icon title" "icon desc";column-gap:12px;row-gap:2px;align-items:center;text-align:left;backdrop-filter:blur(10px);transition:var(--tr);position:relative;overflow:hidden}
.home-cm::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:var(--cm-color,#6366F1)}
.home-cm:hover{background:rgba(255,255,255,.08);transform:translateY(-2px);border-color:rgba(255,255,255,.18)}
.home-cm-icon{grid-area:icon;width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:0;flex-shrink:0;background:var(--cm-bg,rgba(99,102,241,.25));color:var(--cm-fg,#A5B4FC)}
.home-cm-title{grid-area:title;font-size:14px;font-weight:700;margin-bottom:0;color:#fff;align-self:end}
.home-cm-desc{grid-area:desc;font-size:11.5px;color:#94A3B8;line-height:1.5;margin:0;align-self:start}
.home-cm.ic-indigo{--cm-color:#6366F1;--cm-bg:rgba(99,102,241,.25);--cm-fg:#A5B4FC}
.home-cm.ic-teal{--cm-color:#14B8A6;--cm-bg:rgba(20,184,166,.25);--cm-fg:#5EEAD4}
.home-cm.ic-amber{--cm-color:#F59E0B;--cm-bg:rgba(245,158,11,.25);--cm-fg:#FCD34D}
.home-cm.ic-purple{--cm-color:#A855F7;--cm-bg:rgba(168,85,247,.25);--cm-fg:#D8B4FE}
.home-cm.ic-green{--cm-color:#22C55E;--cm-bg:rgba(34,197,94,.25);--cm-fg:#86EFAC}
.home-cm.ic-blue{--cm-color:#3B82F6;--cm-bg:rgba(59,130,246,.25);--cm-fg:#93C5FD}
@media(max-width:768px){.home-cm-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:380px){.home-cm-grid{grid-template-columns:1fr}}


.login-page{background:linear-gradient(135deg,#EEF2FF 0%,#F0FDFA 100%)}
.login-box{background:#fff;border-radius:20px;box-shadow:0 20px 60px rgba(0,0,0,.1);max-width:480px;width:100%;padding:40px;position:relative}
.login-back{position:absolute;top:16px;left:16px;background:none;border:none;color:var(--g500);cursor:pointer;font-size:13px;padding:6px 12px;border-radius:6px;transition:var(--tr)}
.login-back:hover{background:var(--g100);color:var(--g700)}
.login-title{text-align:center;font-size:24px;font-weight:800;color:var(--g900);margin-bottom:8px}
.login-sub{text-align:center;font-size:13px;color:var(--g500);margin-bottom:32px}
.role-cards{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:24px}
.role-card{border:2px solid var(--g200);border-radius:14px;padding:24px 16px;text-align:center;cursor:pointer;transition:var(--tr);background:#fff}
.role-card:hover{border-color:var(--pl);background:var(--p50);transform:translateY(-2px)}
.role-card.sel{border-color:var(--primary);background:var(--p50)}
.role-icon{width:64px;height:64px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:32px;margin:0 auto 12px}
.role-card .role-icon.teacher{background:linear-gradient(135deg,#EEF2FF,#E0E7FF);color:var(--primary)}
.role-card .role-icon.student{background:linear-gradient(135deg,#F0FDFA,#CCFBF1);color:var(--teal)}
.role-name{font-size:16px;font-weight:700;color:var(--g800);margin-bottom:4px}
.role-desc{font-size:12px;color:var(--g500)}
.login-field{margin-bottom:16px}
.login-field label{display:block;font-size:13px;font-weight:600;color:var(--g700);margin-bottom:6px}
.login-field input,.login-field select{width:100%;height:42px;border:1px solid var(--g300);border-radius:8px;padding:0 14px;font-size:14px;background:#fff;transition:var(--tr)}
.login-field input:focus,.login-field select:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--p50)}
.login-submit{width:100%;height:46px;background:var(--primary);color:#fff;border:none;border-radius:8px;font-size:15px;font-weight:700;cursor:pointer;transition:var(--tr);margin-top:8px}
.login-submit:hover{background:var(--pd)}
.login-register-btn{width:100%;height:40px;background:transparent;color:var(--primary);border:1.5px solid var(--primary);border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:var(--tr);margin-top:8px}
.login-register-btn:hover{background:var(--p50)}
.login-tip{font-size:12px;color:var(--g400);text-align:center;margin-top:16px;line-height:1.6}
.app.hidden{display:none}
.home-page.hidden,.login-page.hidden{display:none}
.logout-btn{display:flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--rs);color:var(--g500);font-size:12px;cursor:pointer;transition:var(--tr);background:transparent;border:none}
.logout-btn:hover{background:var(--r50);color:var(--rose)}

/* ===== V5.8 移动端深度适配（自适应机型 / 设备） ===== */
/* 平板：侧边栏略窄，网格适度降列 */
@media(max-width:1024px) and (min-width:769px){
  .sidebar{width:210px}
  .g4{grid-template-columns:repeat(2,1fr)}
  .g5,.g6{grid-template-columns:repeat(3,1fr)}
}
/* 手机：全面适配触摸与窄屏 */
@media(max-width:768px){
  .main{padding:12px !important}
  .card,.ct{padding:14px !important;margin-bottom:14px;overflow-x:auto}
  /* 表格在卡片内横向滚动，防止撑破布局 */
  table.tbl{width:100%}
  /* 表单控件 16px，避免 iOS 聚焦自动放大页面 */
  input,select,textarea,button{font-size:16px !important}
  /* SVG 图表自适应宽度 */
  svg{max-width:100%;height:auto}
  /* 弹窗接近全屏 */
  .modal{max-width:none;width:94%;max-height:90vh}
  /* 顶栏标题与间距 */
  .tt{font-size:16px}
  .tb{gap:8px}
  /* 菜单项与按钮点击区放大 */
  .ni{min-height:48px;font-size:15px}
  .btn,.ct button{min-height:44px;padding:10px 14px;font-size:15px}
  /* 考试答题选项更易点按 */
  .exam-q{padding:14px !important;margin-bottom:14px}
  .exam-q button,.opt{min-height:44px;font-size:15px}
  /* 首页特性卡片手机两列、标题缩小 */
  .home-features{grid-template-columns:repeat(2,1fr)}
  .home-title{font-size:30px}
  .login-box{padding:28px 20px}
  /* 角色选择卡片手机单列 */
  .role-cards{grid-template-columns:1fr}
}
/* 窄屏（手机）：单列，卡内仍图标左·文字右并列 */
@media(max-width:560px){
  .home-features,.home-cm-grid{grid-template-columns:1fr}
  .home-hero{max-width:480px}
  .home-tagline{font-size:14px}
}
@media(max-width:380px){
  .home-title{font-size:26px}
  .home-logo{width:60px;height:60px;font-size:32px}
}
/* 矮屏（笔记本常见高度）：压缩间距，尽量一屏不滚动 */
@media(max-height:760px){
  .home-logo{width:60px;height:60px;font-size:32px;margin-bottom:14px}
  .home-title{font-size:30px;margin-bottom:6px}
  .home-sub{margin-bottom:18px}
  .home-features,.home-section{margin-bottom:18px}
  .home-feat,.home-cm{padding:12px}
  .home-feat-icon,.home-cm-icon{width:34px;height:34px;font-size:17px}
}
/* 资源库 IMA 风格分类树（大类→小类）布局 */
.res-layout{display:flex;gap:16px;align-items:flex-start}
.cat-tree-col{width:248px;flex-shrink:0;position:sticky;top:16px}
.cat-major:hover{background:var(--g100)}
@media(max-width:860px){
  .res-layout{flex-direction:column}
  .cat-tree-col{width:100%!important;position:static!important}
}
/* 综合素质「班级概览 / 标兵榜」下钻交互（V5.17.6） */
.cls-card{cursor:pointer;transition:box-shadow .15s ease,border-color .15s ease,transform .15s ease}
.cls-card:hover{box-shadow:0 6px 18px rgba(15,23,42,.12);border-color:var(--primary)!important;transform:translateY(-1px)}
.leader-row{cursor:pointer;transition:background .12s ease,border-color .12s ease}
.leader-row:hover{background:var(--g50);border-color:var(--primary)!important}
.leader-row:hover .drill-hint{color:var(--primary)}
.drill-hint{opacity:.5;transition:opacity .12s ease,color .12s ease}

/* ===== V5.18.3 侧边栏一级栏目：突出显示 + 可折叠展开/收起 ===== */
.ns{margin-bottom:10px}
.nst{font-size:13px;color:#fff;padding:11px 12px;margin:0 8px 6px;border-radius:10px;font-weight:700;letter-spacing:.3px;text-transform:none;cursor:pointer;user-select:none;display:flex;align-items:center;gap:8px;background:linear-gradient(135deg,var(--g700),var(--g800));box-shadow:0 2px 6px rgba(0,0,0,.18);transition:var(--tr)}
.nst:hover{filter:brightness(1.1)}
.nst:focus{outline:2px solid rgba(255,255,255,.4);outline-offset:1px}
.nst-ic{font-size:16px;line-height:1}
.nst-tx{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nst-caret{font-size:10px;transition:transform .2s ease;transform:rotate(90deg)}
.ns:not(.open) .nst-caret{transform:rotate(0deg)}
/* 三大类强调色（教师端） */
.ns-sec-teach > .nst{background:linear-gradient(135deg,var(--pl),var(--pl2))}
.ns-sec-tools > .nst{background:linear-gradient(135deg,var(--purple),#C026D3)}
.ns-sec-class > .nst{background:linear-gradient(135deg,var(--green),var(--teal))}
.ns-sec-default > .nst{background:linear-gradient(135deg,var(--g700),var(--g800))}
/* 折叠态：隐藏整段子栏目 */
.ns:not(.open) > .ni,
.ns:not(.open) > .ni-children{display:none}

/* ===== 变式练习：在线作答 + 分段控件 ===== */
.form-row{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.form-row>label{width:110px;flex:0 0 auto;font-size:14px;color:var(--g600);text-align:right}
.form-row>input,.form-row>select{flex:1;padding:8px 10px;border:1px solid var(--g200);border-radius:var(--rs);font-size:14px;background:#fff}
.seg{display:inline-flex;border:1px solid var(--g200);border-radius:var(--rs);overflow:hidden;background:#fff}
.seg button{border:none;background:#fff;padding:6px 14px;cursor:pointer;font-size:13px;color:var(--g600)}
.seg button+button{border-left:1px solid var(--g200)}
.seg button.on{background:var(--primary);color:#fff}
.vq-opt{display:block;padding:8px 10px;border:1px solid var(--g200);border-radius:var(--rs);margin-bottom:6px;cursor:pointer;font-size:14px;line-height:1.5}
.vq-opt:hover{background:var(--g50)}
.vq-opt.vq-correct{background:var(--g50);border-color:var(--green);color:#1f7a3d}
.vq-opt.vq-wrong{background:#fff0f0;border-color:#ff8a8a;color:#c0392b}
.vq-input{width:100%;padding:8px 10px;border:1px solid var(--g200);border-radius:var(--rs);font-size:14px;background:#fff}
.vq-fb{margin-top:6px;font-size:13px;padding:4px 8px;border-radius:var(--rs)}
.vq-fb.vq-correct{color:#1f7a3d;background:var(--g50)}
.vq-fb.vq-wrong{color:#c0392b;background:#fff0f0}
