:root{--bg: #f3f6fb;--card: #ffffff;--text: #1a2332;--muted: #6b7785;--line: #e6ebf2;--brand: #1f6feb;--ok: #0f9d58;--err: #d93025;--radius: 14px}*{box-sizing:border-box}html,body,#app{margin:0;min-height:100%}body{font-family:Microsoft YaHei UI,PingFang SC,Hiragino Sans GB,Noto Sans SC,sans-serif;font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased;background:radial-gradient(1200px 400px at 10% -10%,#d7e6ff 0%,transparent 55%),radial-gradient(900px 360px at 100% 0%,#e8f7ef 0%,transparent 50%),var(--bg);color:var(--text)}button,input,select,textarea{font-family:inherit}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px 16px}.login-box{width:100%;max-width:420px}.login-box h1{margin:0;text-align:center;font-size:22px}.login-box>p{margin:8px 0 16px;text-align:center;color:var(--muted);font-size:13px;line-height:1.5}.top{padding:22px 16px 8px;display:flex;align-items:center;gap:10px}.top h1{margin:0;font-size:18px;font-weight:600;flex:1}.top p{margin:6px 0 0;color:var(--muted);font-size:13px;line-height:1.5}.wrap{max-width:1080px;margin:0 auto;padding:0 20px 28px}.home-top{display:block;padding:28px 20px 12px;max-width:1080px;margin:0 auto}.home-top h1{font-size:28px}.home-top p{font-size:15px}.home-wrap{display:grid;grid-template-columns:1fr 1fr;gap:16px}.entry{position:relative;display:flex;flex-direction:column;justify-content:center;min-height:168px;padding:28px 64px 28px 28px;background:var(--card);border:1px solid var(--line);border-radius:18px;color:inherit;text-decoration:none;box-shadow:0 10px 28px #1a23320f}.entry strong{font-size:24px;line-height:1.3}.entry span{margin-top:10px;color:var(--muted);font-size:15px;line-height:1.5}.entry em{position:absolute;right:24px;top:50%;transform:translateY(-50%);font-style:normal;font-size:32px;color:#98a2b3}.logout-btn{grid-column:1 / -1;width:100%;margin-top:4px}@media (max-width: 720px){.home-wrap{grid-template-columns:1fr}.entry{min-height:132px}.entry strong{font-size:22px}}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 14px 10px;margin-bottom:12px;box-shadow:0 8px 24px #1a23320a}.card h2{margin:0 0 12px;font-size:15px;display:flex;align-items:center;gap:8px}.card h2:before{content:"";width:4px;height:14px;border-radius:2px;background:var(--brand)}.menu-item{display:flex;align-items:center;justify-content:space-between;padding:14px 4px;border-top:1px solid var(--line);color:inherit;text-decoration:none;font-size:15px}.menu-item:first-of-type{border-top:none}.menu-item span{color:#98a2b3}label{display:block;font-size:12px;color:var(--muted);margin-bottom:6px}label .req{color:var(--err)}input,select,textarea{width:100%;border:1px solid var(--line);border-radius:10px;padding:11px 12px;font-size:15px;color:var(--text);background:#fbfcfe;outline:none;margin-bottom:12px}textarea{min-height:72px;resize:vertical}input:focus,select:focus,textarea:focus{border-color:#8bb3f5;box-shadow:0 0 0 3px #1f6feb1f;background:#fff}.btn-row{display:flex;gap:8px;margin:4px 0 8px}button{border:none;border-radius:12px;padding:12px 16px;font-size:15px;font-weight:600;cursor:pointer}.btn-primary{width:100%;background:linear-gradient(180deg,#3b82f6,var(--brand));color:#fff}.btn-secondary{background:#eef3fb;color:var(--brand);flex:1}.btn-ghost{background:transparent;color:var(--brand);padding:8px 0}.back-btn{width:32px;height:32px;padding:0;border-radius:8px;background:transparent;color:var(--text);font-size:22px;font-weight:400;line-height:1}.class-card{cursor:pointer}.btn-danger{background:#fdecea;color:var(--err)}.btn-ok{background:#e8f7ef;color:var(--ok)}.meta{color:var(--muted);font-size:13px;line-height:1.6}.tag{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px;background:#eef3fb;color:var(--brand)}.tag.warn{background:#fff6e8;color:#b45309}.tag.ok{background:#e8f7ef;color:var(--ok)}.row-between{display:flex;justify-content:space-between;align-items:center;gap:8px}.empty,.error,.loading{text-align:center;color:var(--muted);padding:28px 8px}.error{color:var(--err)}.pager{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:13px}.toast{position:fixed;left:16px;right:16px;bottom:24px;background:#1a2332;color:#fff;border-radius:12px;padding:12px 14px;text-align:center;z-index:20}.chips{display:flex;gap:8px;overflow-x:auto;padding-bottom:8px}.chip{flex:0 0 auto;border-radius:999px;padding:8px 12px;background:#fff;border:1px solid var(--line);color:var(--muted);font-size:13px;font-weight:600}.chip.on{background:#eef3fb;color:var(--brand);border-color:#c9dcff}.check-list{max-height:220px;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:12px;background:#fbfcfe}.check{display:flex;align-items:flex-start;gap:8px;margin:0 0 8px;font-size:14px;color:var(--text)}.check input{width:16px;height:16px;margin:2px 0 0;padding:0;flex:0 0 auto}.subhead{margin:10px 0 6px;font-size:13px;color:var(--text);font-weight:600}.stu-block{padding:14px 0 6px;border-top:1px solid var(--line)}.stu-block:first-of-type{border-top:none;padding-top:2px}.stu-block strong{display:block;margin:0 0 8px;font-size:15px;font-weight:600;color:#1c2838}.metrics{display:grid;grid-template-columns:1fr 1fr;column-gap:18px}.metrics div{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;min-height:32px;padding:0;background:transparent;border-radius:0;border-bottom:1px solid #f0f3f7}.metrics div:nth-child(odd){padding-right:2px}.metrics div:last-child:nth-child(odd){grid-column:1 / -1}.metrics span{font-size:12px;font-weight:400;color:#8b97a5;line-height:1.2}.metrics b{font-size:13px;font-weight:600;color:#1c2838;line-height:1.2;white-space:nowrap;font-variant-numeric:tabular-nums}
