:root{--gm:#5a0a0a;--gmd:#3d0606;--gml:#7a1515;--go:#d4a017;--gol:#f0c040;--gop:#fdf3d0;--got:#f5e6b0;--r:10px;--rs:6px;--bd:1px solid #e5e5e5}
*,::before,::after{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:14px;color:#111}
.hidden{display:none!important}
input,select,textarea,button{font-family:inherit;font-size:14px}
.pg-login{min-height:100vh;background:var(--gmd);display:flex;align-items:center;justify-content:center;padding:20px}
.login-card{background:#fff;border-radius:var(--r);padding:28px 24px;width:100%;max-width:390px;box-shadow:0 8px 40px rgba(0,0,0,.35)}
.login-logo{background:var(--gm);border-radius:var(--rs);padding:14px 16px;margin-bottom:20px}
.login-name{font-size:17px;font-weight:700;color:var(--gol)}.login-sub{font-size:11px;color:var(--got);margin-top:2px}
.host-box{background:var(--gop);border:1px solid rgba(212,160,23,.45);border-radius:var(--rs);padding:14px;margin-bottom:8px}
.hbl{font-size:12px;font-weight:700;color:var(--gm);margin-bottom:10px}
.host-box input{width:100%;padding:10px 12px;border:1px solid #d1d5db;border-radius:var(--rs);margin-bottom:10px;outline:none}
.host-box input:focus{border-color:var(--gm)}
.btn-host{width:100%;padding:10px;background:var(--gm);color:var(--gol);border:none;border-radius:var(--rs);font-weight:700;cursor:pointer}
.or-line{display:flex;align-items:center;gap:10px;margin:14px 0;color:#ccc;font-size:12px}
.or-line::before,.or-line::after{content:'';flex:1;height:1px;background:#e5e5e5}
.tinput{display:block;width:100%;padding:10px 12px;border:1px solid #d1d5db;border-radius:var(--rs);outline:none;margin-bottom:10px}
.tinput:focus{border-color:var(--gm)}
.errmsg{background:#fef2f2;border:1px solid #fca5a5;border-radius:var(--rs);padding:9px 12px;color:#991b1b;font-size:13px;margin-bottom:10px}
.btn-login{width:100%;padding:11px;background:var(--gm);color:var(--gol);border:none;border-radius:var(--rs);font-weight:700;font-size:15px;cursor:pointer;margin-top:4px}
.lhint{margin-top:12px;font-size:11px;color:#999;text-align:center}
.pg-app{display:flex;height:100vh;overflow:hidden}
.sidebar{width:210px;background:var(--gmd);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;z-index:100;transition:transform .25s}
.sbtop{padding:14px 12px 10px;border-bottom:1px solid rgba(212,160,23,.2)}
.sbsn{font-size:13px;font-weight:700;color:var(--gol)}.sbss{font-size:10px;color:var(--got);opacity:.8}
.sbuser{display:flex;align-items:center;gap:8px;margin-top:8px}
.sbbadge{font-size:10px;background:rgba(212,160,23,.2);color:var(--gol);padding:2px 9px;border-radius:999px;border:1px solid rgba(212,160,23,.35)}
.sbname{font-size:12px;color:var(--got);opacity:.85;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sblabel{font-size:9px;color:rgba(212,160,23,.4);text-transform:uppercase;letter-spacing:.08em;padding:10px 12px 4px}
#sbclasses{flex:1;padding:0 8px 8px}
.sbcls{display:block;width:100%;text-align:left;padding:8px 10px;border-radius:var(--rs);font-size:12px;color:rgba(245,230,176,.7);cursor:pointer;margin-bottom:2px;background:none;border:none}
.sbcls:hover{background:rgba(212,160,23,.12);color:var(--gol)}
.sbcls.active{background:rgba(212,160,23,.2);color:var(--gol);font-weight:700}
.sbfoot{padding:12px;border-top:1px solid rgba(212,160,23,.15)}
.sbout{width:100%;padding:7px;background:transparent;border:1px solid rgba(212,160,23,.3);color:var(--got);border-radius:var(--rs);cursor:pointer;font-size:12px}
.main{flex:1;display:flex;flex-direction:column;min-width:0;background:#f4f4f2;overflow:hidden}
.topbar{height:52px;background:#fff;border-bottom:var(--bd);display:flex;align-items:center;gap:12px;padding:0 16px;flex-shrink:0}
.mbtn{display:none;background:none;border:none;font-size:20px;cursor:pointer;color:var(--gm)}
.tbcls{font-size:15px;font-weight:700;flex:1}.tbemail{font-size:12px;color:#888}
.tabbar{display:flex;background:#fff;border-bottom:var(--bd);padding:0 8px;overflow-x:auto;flex-shrink:0;height:46px;gap:2px}
.tab{padding:0 12px;font-size:13px;color:#888;cursor:pointer;border:none;border-bottom:2px solid transparent;background:none;display:flex;align-items:center;white-space:nowrap}
.tab:hover{color:#333}.tab.active{color:var(--gm);border-bottom-color:var(--gm);font-weight:700}
.tab-admin{color:#b91c1c!important}.tab-admin.active{border-bottom-color:#b91c1c}
.panel{flex:1;overflow-y:auto;padding:16px;display:none;flex-direction:column;gap:14px}
.panel.active{display:flex}
.banner{background:var(--gm);border-radius:var(--r);padding:16px 18px;flex-shrink:0}
.bname{font-size:16px;font-weight:700;color:var(--gol)}.bsub{font-size:12px;color:var(--got);opacity:.85;margin-top:3px}.btag{font-size:10px;color:var(--go);margin-top:4px}
.pcard{background:#fff;border:var(--bd);border-radius:var(--r);overflow:hidden;flex-shrink:0}
.pstrip{height:56px}.pbody{padding:0 16px 16px}
.pavwrap{margin-top:-27px}
.pav{width:54px;height:54px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;border:3px solid #fff;background:var(--gm);color:var(--gol)}
.pav.stu{background:#dbeafe;color:#1d4ed8}
.ptop{display:flex;align-items:flex-start;justify-content:space-between;padding-top:6px;margin-bottom:10px}
.pname{font-size:17px;font-weight:700}.prole{font-size:13px;color:#777;margin-top:2px}
.editbtn{font-size:12px;padding:5px 14px;border-radius:999px;border:1px solid var(--gm);background:transparent;color:var(--gm);cursor:pointer}
.pgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.ppill{background:#f7f7f5;border-radius:var(--rs);padding:9px 12px}
.ppill-l{font-size:10px;color:#aaa;margin-bottom:2px}.ppill-v{font-size:13px;font-weight:600;color:#222}
.statrow{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;flex-shrink:0}
.sbox{background:var(--gop);border:1px solid rgba(212,160,23,.3);border-radius:var(--rs);padding:14px;text-align:center}
.sbox-n{font-size:22px;font-weight:700;color:var(--gm)}.sbox-l{font-size:11px;color:var(--gml);margin-top:3px}
.bar{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
.bartitle{font-size:14px;font-weight:700}
.btn-gold{background:var(--gm);color:var(--gol);border:none;border-radius:var(--rs);padding:8px 16px;font-size:13px;font-weight:700;cursor:pointer}
.btn-gold.full{width:100%;padding:12px;font-size:14px;margin-top:14px}
.acard{background:#fff;border:var(--bd);border-radius:var(--r);padding:14px}
.acard-top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.acard-title{font-size:14px;font-weight:700}.acard-meta{font-size:12px;color:#888;margin-top:5px;display:flex;gap:10px;flex-wrap:wrap}
.acard-desc{font-size:13px;color:#555;margin-top:8px;line-height:1.5}
.abadge{font-size:10px;padding:3px 10px;border-radius:999px;font-weight:700;flex-shrink:0}
.ab-today{background:#fef3c7;color:#92400e}.ab-up{background:#fee2e2;color:#991b1b}.ab-past{background:#d1fae5;color:#065f46}
.delbtn{background:none;border:none;color:#ddd;cursor:pointer;font-size:16px}
.mtabs{display:flex;gap:8px}
.mtab{padding:7px 16px;border-radius:999px;border:var(--bd);background:#fff;font-size:13px;cursor:pointer;color:#666}
.mtab.active{background:var(--gm);color:var(--gol);border-color:var(--gm);font-weight:700}
.tcard{background:#fff;border:var(--bd);border-radius:var(--r);overflow:hidden;margin-bottom:14px}
.tcard-hdr{padding:12px 16px;background:#fafafa;border-bottom:var(--bd)}
.tcard-name{font-size:14px;font-weight:700}.tcard-meta{font-size:12px;color:#888;margin-top:2px}
.mtbl{width:100%;border-collapse:collapse;font-size:13px}
.mtbl th{text-align:left;padding:9px 14px;font-size:11px;font-weight:700;color:#888;border-bottom:var(--bd);background:#fafafa}
.mtbl td{padding:10px 14px;border-bottom:1px solid #f0f0f0}
.mtbl tr.r1{background:rgba(212,160,23,.1)}.mtbl tr.r2{background:rgba(180,180,180,.07)}.mtbl tr.r3{background:rgba(139,69,19,.07)}
.rlbl{font-weight:700}
tr.r1 .rlbl{color:#b8860b}tr.r2 .rlbl{color:#707070}tr.r3 .rlbl{color:#8b4513}
.fcard{background:#fff;border:var(--bd);border-radius:var(--r);padding:16px}
.twocol{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.fg{margin-bottom:12px}.fg label{display:block;font-size:12px;font-weight:700;color:#666;margin-bottom:5px}
.fg input,.fg select,.fg textarea{width:100%;padding:10px 12px;border:var(--bd);border-radius:var(--rs);outline:none;font-family:inherit;font-size:14px}
.fg input:focus,.fg select:focus,.fg textarea:focus{border-color:var(--gm)}.fg textarea{resize:vertical}
.acwrap{position:relative}
.acdrop{position:absolute;top:100%;left:0;right:0;background:#fff;border:var(--bd);border-radius:var(--rs);z-index:50;max-height:150px;overflow-y:auto;box-shadow:0 4px 16px rgba(0,0,0,.1)}
.acitem{padding:9px 12px;cursor:pointer;font-size:13px}.acitem:hover{background:var(--gop)}
.strow{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid #f5f5f5}
.stname{flex:1;font-size:13px;font-weight:600}
.strow input{width:90px;padding:7px 10px;border:var(--bd);border-radius:var(--rs);outline:none}
.stdel{background:none;border:none;color:#ccc;cursor:pointer;font-size:18px}
.adhdr{background:var(--gm);border-radius:var(--r);padding:16px 18px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
.adtitle{font-size:16px;font-weight:700;color:var(--gol)}.adsub{font-size:12px;color:var(--got);opacity:.8;margin-top:3px}
.toglbl{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--got);cursor:pointer}
.togtrack{position:relative;width:38px;height:20px;background:rgba(255,255,255,.2);border-radius:10px}
.togtrack input{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer;margin:0}
.togthumb{position:absolute;top:3px;left:3px;width:14px;height:14px;background:#fff;border-radius:50%;transition:transform .2s;pointer-events:none}
.togtrack:has(input:checked){background:var(--go)}.togtrack:has(input:checked) .togthumb{transform:translateX(18px)}
.adstats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;flex-shrink:0;margin-bottom:16px}
.astat{background:var(--gop);border:1px solid rgba(212,160,23,.3);border-radius:var(--rs);padding:12px;text-align:center}
.astat-n{font-size:22px;font-weight:700;color:var(--gm)}.astat-l{font-size:11px;color:var(--gml);margin-top:2px}
.sechdr{display:flex;align-items:center;justify-content:space-between;flex-shrink:0;margin-bottom:10px}
.sectitle{font-size:13px;font-weight:700;color:#333}
.clsgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:10px}
.clsblock{background:#fff;border:var(--bd);border-radius:var(--r);padding:14px;cursor:pointer;display:flex;align-items:center;justify-content:space-between}
.clsblock:hover{border-color:var(--go)}.clsblock.sel{border:2px solid var(--gm);background:var(--gop)}
.clsname{font-size:14px;font-weight:700}.clsmeta{font-size:12px;color:#888;margin-top:3px}
.clsdel{background:none;border:none;color:#ddd;cursor:pointer;font-size:18px;padding:4px}
.utbl{width:100%;border-collapse:collapse;font-size:13px;background:#fff;border-radius:var(--r);border:var(--bd);overflow:hidden}
.utbl th{text-align:left;padding:9px 14px;font-size:11px;font-weight:700;color:#888;border-bottom:var(--bd);background:#fafafa}
.utbl td{padding:9px 14px;border-bottom:1px solid #f5f5f5}
.rpill{font-size:10px;padding:2px 8px;border-radius:999px;font-weight:700}
.rpt{background:var(--gop);color:var(--gm)}.rps{background:#dbeafe;color:#1d4ed8}
.tbtn{font-size:11px;padding:3px 9px;border-radius:var(--rs);border:var(--bd);background:#fff;cursor:pointer;color:#555;margin-right:4px}
.tbtn.danger{color:#dc2626;border-color:#fca5a5}
.empty{text-align:center;padding:40px 20px;color:#ccc;font-size:14px}
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:200}
.modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;border-radius:var(--r);padding:24px;width:90%;max-width:440px;z-index:201;max-height:90vh;overflow-y:auto}
.mtitle{font-size:16px;font-weight:700;margin-bottom:16px}
.passsep{font-size:12px;font-weight:700;color:#555;border-top:1px solid #eee;padding-top:14px;margin:6px 0 12px}
.mbtns{display:flex;gap:10px;justify-content:flex-end;margin-top:16px}
.btn-cancel{padding:9px 18px;border:var(--bd);border-radius:var(--rs);background:#fff;cursor:pointer;color:#555}
.btn-confirm{padding:9px 18px;background:var(--gm);color:var(--gol);border:none;border-radius:var(--rs);cursor:pointer;font-weight:700}
#ptr-spinner{position:fixed;top:-60px;left:50%;transform:translateX(-50%);width:36px;height:36px;border:3px solid #e5e5e5;border-top-color:#5a0a0a;border-radius:50%;transition:top .3s;z-index:9999;background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.15)}
#ptr-spinner.visible{top:16px}
#ptr-spinner.spinning{animation:spin 0.7s linear infinite}
.perf-stu{padding:8px 10px;border-radius:6px;cursor:pointer;margin-bottom:2px;border:1px solid transparent}
.perf-stu:hover{background:#fdf9ee;border-color:#d4a017}
.perf-stu.active{background:#fdf3d0;border-color:#5a0a0a}
.sw-card{background:#fff;border:2px solid #5a0a0a;border-radius:12px;padding:14px 16px;display:flex;align-items:center;gap:14px;cursor:pointer}
.sw-card:hover{border-color:#d4a017;background:#fdf9ee}
.sw-avatar{width:46px;height:46px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:700;flex-shrink:0}
.sw-name{font-size:15px;font-weight:600;color:#111}.sw-role{font-size:12px;color:#888;margin-top:2px}
.sw-edit{font-size:11px;padding:4px 10px;border-radius:6px;border:1px solid #e5e5e5;background:#fff;color:#555;cursor:pointer;flex-shrink:0}
@media(max-width:680px){.sidebar{position:fixed;top:0;left:0;bottom:0;transform:translateX(-100%)}.sidebar.open{transform:translateX(0);box-shadow:4px 0 20px rgba(0,0,0,.3)}.mbtn{display:block}.tbemail{display:none}.adstats,.statrow{grid-template-columns:1fr 1fr}.twocol,.clsgrid,.pgrid{grid-template-columns:1fr}}

