:root{
  --primary:#2563eb; --primary-d:#1d4ed8; --bg:#eef2f7; --card:#ffffff;
  --text:#1f2937; --muted:#6b7280; --ok:#16a34a; --warn:#f59e0b; --danger:#dc2626;
  --shadow:0 6px 20px rgba(0,0,0,.08); --radius:14px;
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--text);line-height:1.5}
button{cursor:pointer;font-family:inherit}
.btn{background:var(--primary);color:#fff;border:none;padding:10px 18px;border-radius:10px;font-size:15px;transition:.15s}
.btn:hover{background:var(--primary-d)}
.btn.ghost{background:#e5edff;color:var(--primary-d)}
.btn.danger{background:var(--danger)}
.btn.sm{padding:6px 12px;font-size:13px}
input,select,textarea{font-family:inherit;font-size:15px;padding:10px 12px;border:1px solid #d1d5db;border-radius:10px;width:100%;background:#fff;color:var(--text)}
label{font-size:14px;color:var(--muted);display:block;margin:10px 0 4px}
.hidden{display:none!important}
.center-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:28px;width:100%;max-width:420px}
.card h1{font-size:22px;margin-bottom:6px}
.card .sub{color:var(--muted);font-size:14px;margin-bottom:18px}
.link{color:var(--primary);cursor:pointer;font-size:14px}
.err{color:var(--danger);font-size:13px;margin-top:8px;min-height:18px}
.row{display:flex;gap:10px}.row>*{flex:1}
.topbar{display:flex;align-items:center;gap:12px;padding:14px 22px;background:#fff;box-shadow:var(--shadow);position:sticky;top:0;z-index:10}
.topbar .logo{font-weight:700;font-size:18px;color:var(--primary-d)}
.topbar .cls{font-size:15px;color:var(--muted)}
.topbar .spacer{flex:1}
.chip{background:#e5edff;color:var(--primary-d);padding:4px 12px;border-radius:20px;font-size:14px}
.main{padding:22px;max-width:1200px;margin:0 auto}
.grid{display:grid;gap:18px}
@media(min-width:900px){.grid.cols-2{grid-template-columns:1.4fr 1fr}.grid.cols-3{grid-template-columns:repeat(3,1fr)}}
.panel{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}
.panel h2{font-size:17px;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.panel h2 .tag{font-size:12px;background:#f1f5f9;color:var(--muted);padding:2px 8px;border-radius:8px}
table.sched{width:100%;border-collapse:collapse;font-size:14px}
table.sched th,table.sched td{border:1px solid #e5e7eb;padding:8px;text-align:center}
table.sched th{background:#f8fafc;color:var(--muted);font-weight:600}
table.sched td .subj{font-weight:600}.table.sched td .tea{color:var(--muted);font-size:12px}
.hw-subj{display:inline-block;background:#e0f2fe;color:#0369a1;padding:2px 10px;border-radius:8px;font-size:13px;margin-right:6px}
.notice-item{border-left:4px solid var(--primary);padding:8px 12px;margin-bottom:10px;background:#f8fafc;border-radius:0 8px 8px 0}
.notice-item .t{font-weight:600}.notice-item .c{color:var(--muted);font-size:14px;margin-top:2px}
.call-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:100}
.call-box{background:linear-gradient(135deg,#dc2626,#ef4444);color:#fff;padding:34px 44px;border-radius:18px;box-shadow:0 20px 60px rgba(220,38,38,.5);max-width:80%;text-align:center;animation:pop .3s ease}
.call-box .label{font-size:16px;opacity:.9;letter-spacing:2px}
.call-box .content{font-size:40px;font-weight:800;margin:14px 0 22px;word-break:break-word}
.call-box .timer{font-size:14px;opacity:.85;margin-bottom:14px}
@keyframes pop{from{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}
.fullbtn{position:fixed;right:22px;bottom:22px;z-index:50}
.kv{font-size:14px;color:var(--muted);margin-bottom:4px}
.teacher-cls{display:flex;flex-wrap:wrap;gap:10px;margin:10px 0}
.teacher-cls .tc{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:12px 16px;cursor:pointer}
.teacher-cls .tc.active{border-color:var(--primary);box-shadow:0 0 0 2px #bfdbfe}
textarea{resize:vertical;min-height:70px}
.admin-table{width:100%;border-collapse:collapse;font-size:14px}
.admin-table th,.admin-table td{border:1px solid #e5e7eb;padding:8px}
.admin-table th{background:#f8fafc}
.muted{color:var(--muted)}
.small{font-size:13px}
.pill{display:inline-block;padding:2px 8px;border-radius:10px;font-size:12px;background:#f1f5f9;color:var(--muted);margin:2px}
.warn-box{background:#fffbeb;border:1px solid #fde68a;color:#92400e;padding:12px 16px;border-radius:10px;font-size:14px;margin-bottom:16px}
