:root{--nav:#202734;--nav2:#1c2330;--accent:#8a655d;--accent2:#b58a7b;--sand:#f8f6f3;--ink:#252b35;--muted:#8a929f;--line:#e9e7e4;--white:#fff;--green:#2b8a6d;--amber:#b57f30;--red:#ca665f;--shadow:0 5px 23px rgba(31,42,55,.035)}
*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif;background:#f8f9fa;color:var(--ink);font-size:14px}button,input,select{font:inherit}button{cursor:pointer}a{color:inherit;text-decoration:none}a:hover{color:var(--accent)}.hidden{display:none!important}.muted{color:var(--muted)}
.login-layout{min-height:100vh;display:grid;grid-template-columns:52% 48%;background:#fff}.login-art{background:linear-gradient(145deg,#343748 1%,#292b38 53%,#4b363b 100%);color:white;padding:55px 70px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}.login-art:before{content:"";position:absolute;width:660px;height:660px;right:-290px;top:10%;border:1px solid rgba(255,255,255,.11);border-radius:50%;box-shadow:0 0 0 50px rgba(255,255,255,.025),0 0 0 130px rgba(255,255,255,.018)}.login-brandmark{font-family:Georgia,serif;font-size:32px;font-weight:700;letter-spacing:3px;z-index:1}.login-brandmark span,.mobile-brand span,.brand-symbol span{color:#c79e88}.login-art-content{position:relative;z-index:1}.eyebrow,.section-overline{font-size:11px;letter-spacing:2.2px;font-weight:700}.login-art-content h1{font-size:clamp(27px,3vw,49px);line-height:1.56;letter-spacing:2px;font-weight:500;margin:24px 0}.login-art-content>p:last-child{font-size:16px;opacity:.7}.login-art-footer{position:relative;z-index:1;letter-spacing:2px;font-size:10px;opacity:.55}.login-panel{display:flex;align-items:center;justify-content:center;padding:28px}.login-card{width:min(390px,100%);display:flex;flex-direction:column}.mobile-brand{display:none;font-weight:800;letter-spacing:2px;margin-bottom:30px}.login-label{color:var(--accent);font-size:12px;letter-spacing:1px;font-weight:700}.login-card h2{font-size:28px;letter-spacing:.5px;font-weight:650;margin:14px 0 5px}.login-card>p{margin:5px 0 35px}.login-card label{font-size:13px;font-weight:550;margin-bottom:20px}.login-card input{display:block;margin-top:9px;width:100%;height:48px;background:#fafbfc;border:1px solid #dfe2e7;border-radius:9px;padding:0 15px;outline:0}.login-card input:focus,.input:focus,.modal input:focus{border-color:var(--accent2);box-shadow:0 0 0 3px rgba(181,138,123,.13)}.login-card .btn{margin-top:9px;height:48px;justify-content:space-between;padding:0 20px}.login-footnote{text-align:center;font-size:11px;margin-top:50px;color:#9aa0a9}.inline-error{min-height:24px;color:var(--red);font-size:12px;margin-top:10px}
.shell{min-height:100vh;display:flex}.sidebar{width:245px;min-height:100vh;flex-shrink:0;background:var(--nav);color:#aeb4c1;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;padding:28px 15px}.brand{display:flex;align-items:center;gap:11px;padding:3px 11px 48px}.brand-symbol{width:42px;height:42px;display:grid;place-items:center;border:1px solid #76747c;color:#fff;font-family:Georgia,serif;font-size:17px;font-weight:bold}.brand strong{display:block;color:#fff;letter-spacing:3px;font-size:18px;font-weight:600}.brand small{display:block;letter-spacing:2px;font-size:11px;margin-top:6px;color:#838c9d}.nav-heading{font-size:11px;letter-spacing:1.5px;color:#747d8c;padding:0 13px;margin-bottom:16px}.nav-item{display:flex;width:100%;gap:15px;align-items:center;border:0;border-radius:8px;color:#adb5c2;background:transparent;text-align:left;padding:13px 15px;margin-bottom:6px;font-weight:500}.nav-item:hover{background:#303949;color:#fff}.nav-item.active{background:#394150;color:white;box-shadow:inset 3px 0 var(--accent2)}.nav-ico{font-size:20px;width:22px;text-align:center;font-weight:400;color:#b7adb2}.sidebar-bottom{margin-top:auto;border-top:1px solid rgba(255,255,255,.09);padding:18px 11px 5px}.source-line{display:flex;align-items:center;gap:8px;font-size:12px;color:#b7bfca}.dot{width:7px;height:7px;border-radius:50%;background:#a7a9b0}.dot.connected{background:#73bf95}.sidebar-ver{display:block;font-size:10px;color:#70798a;letter-spacing:1.4px;margin-top:15px}
.main-wrap{flex:1;min-width:0}.topbar{height:76px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 clamp(22px,3.1vw,46px)}.breadcrumbs{font-size:13px;font-weight:650}.breadcrumbs span{color:#9e7b71}.topbar-sub{font-size:11px;color:#9ba1aa;margin-top:5px}.topbar-right{display:flex;align-items:center;gap:16px;font-size:12px;color:#818a96}.sep{height:20px;width:1px;background:#e6e7e9}.user-chip{background:#f1f2f4;padding:8px 11px;border-radius:19px;font-size:12px;color:#545e6d}.link-btn,.subtle-link{background:transparent;border:0;color:#9a7066;font-size:12px;font-weight:650}.icon-button{border:0;background:transparent;font-size:20px}.menu-toggle{display:none}
.content{max-width:1620px;margin:0 auto;padding:37px clamp(22px,3.1vw,46px) 12px}.page{display:block}.page-head{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:23px;flex-wrap:wrap}.section-overline{color:#b28b7d;margin:0 0 10px}.page-head h1{font-size:26px;letter-spacing:.5px;font-weight:650;margin:0}.page-desc{margin:10px 0 0;font-size:13px;color:#9098a3}.head-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 15px;border-radius:8px;font-size:12px;font-weight:650;white-space:nowrap;transition:.16s}.btn.primary{background:#926c60;color:#fff;border:1px solid #926c60}.btn.primary:hover{background:#755246}.btn.secondary{background:#fff;border:1px solid #e4e5e8;color:#56616d}.btn.secondary:hover{border-color:#b99c93;color:#865d52}.btn.subtle{background:#f8f8f8;border:1px solid #eee;color:#6b7280}.btn.full{width:100%}.btn:disabled{opacity:.42;cursor:default}.input{min-height:39px;border:1px solid #e1e4e8;border-radius:8px;background:#fff;padding:0 12px;outline:0;color:#515e69;font-size:12px}.month-input{width:156px}.notice{background:#fcf6ed;color:#896e4c;border:1px solid #f2e6d2;border-radius:9px;padding:13px 17px;font-size:12px;line-height:1.7;margin-bottom:20px}.notice.good{background:#f0f8f3;color:#3f7855;border-color:#dcefe3}.notice a{text-decoration:underline}
.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:17px;margin-bottom:19px}.kpi-card{background:white;border:1px solid #efeeec;border-radius:11px;min-height:136px;padding:23px 23px 16px;box-shadow:var(--shadow)}.kpi-label{font-size:12px;color:#7a838e;display:flex;align-items:center;justify-content:space-between}.kpi-label span{font-size:20px;color:#b8a6a0}.kpi-value{font-size:36px;font-weight:650;letter-spacing:-1.3px;margin:16px 0 9px;color:#303541;line-height:1}.kpi-help{font-size:11px;color:#a1a7ae}.overview-grid{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(290px,1fr);gap:18px;margin-bottom:18px}.panel{background:#fff;border:1px solid #efeeec;border-radius:11px;padding:21px 23px;margin-bottom:18px;box-shadow:var(--shadow);min-width:0}.overview-grid .panel{margin:0}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}.panel-head h2{margin:0 0 6px;font-size:15px;font-weight:680}.panel-head p{margin:0;color:#a1a5ad;font-size:11px}.mini-pill{border:1px solid #eee9e4;border-radius:20px;padding:6px 10px;color:#997a6d;font-size:11px;background:#fdfbf9;white-space:nowrap}.chart-wrap{height:268px}.chart-wrap canvas{width:100%;height:100%;display:block}.chart-foot{display:flex;justify-content:space-between;margin-top:10px;font-size:11px;color:#9199a2}.legend-dot{display:inline-block;width:8px;height:8px;background:#a38176;border-radius:2px;margin-right:6px}.status-summary{display:flex;flex-direction:column;gap:16px;margin-top:27px}.status-row{display:flex;align-items:center;gap:13px}.status-ring{width:11px;height:11px;border-radius:50%;flex-shrink:0}.status-text{flex:1}.status-title{font-weight:600;font-size:13px}.status-desc{font-size:11px;color:#9da4ae;margin-top:3px}.status-value{font-size:19px;font-weight:700}.soft-tip{background:#f8f8f8;border-radius:8px;padding:12px;margin-top:25px;color:#9ca2aa;font-size:11px;line-height:1.6}
.table-scroll{overflow-x:auto}.data-table{width:100%;border-collapse:collapse;text-align:left;min-width:820px}.data-table th{background:#fbfbfb;font-size:11px;color:#939aa3;font-weight:600;padding:14px 12px;white-space:nowrap;border-bottom:1px solid #f0f0f0}.data-table td{padding:17px 12px;font-size:12px;border-bottom:1px solid #f2f3f4;vertical-align:middle}.data-table tr:last-child td{border-bottom:0}.data-table tbody tr:hover{background:#fcfaf9}.rank{font-size:13px;font-weight:700;color:#8b939e}.rank.top{background:#f1e9e6;color:#936f63;display:inline-grid;place-items:center;width:26px;height:26px;border-radius:7px}.campus-main{font-weight:700;color:#343b46;margin-bottom:4px;font-size:13px}.campus-sub{color:#9ca3ab;font-size:11px}.numeric{font-weight:700;color:#3f4550;font-size:14px}.progress-wrap{display:flex;align-items:center;gap:11px}.progress-track{width:92px;height:6px;border-radius:4px;overflow:hidden;background:#f0efee}.progress-bar{height:100%;border-radius:4px;background:#a88476}.progress-text{white-space:nowrap;color:#8d949b;font-size:11px}.state-pill{display:inline-flex;align-items:center;gap:5px;border-radius:13px;font-size:11px;padding:6px 9px;white-space:nowrap;background:#f3f4f6;color:#717c87}.state-pill.good{background:#eaf7f0;color:#358263}.state-pill.warn{background:#fbf0df;color:#af7f38}.state-pill.bad{background:#fbecea;color:#b15b55}.state-dot{width:6px;height:6px;border-radius:50%;background:currentColor}.empty-cell{text-align:center;color:#a8adb5;padding:30px!important}.small-action{border:0;background:none;color:#997466;font-size:11px;font-weight:600;cursor:pointer}.small-action:hover{text-decoration:underline}
.note-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:15px}.note-card{border:1px solid #eeeef0;border-radius:9px;overflow:hidden;min-width:0}.note-cover{height:140px;background:linear-gradient(140deg,#eee5e3,#e7e7ec);position:relative;overflow:hidden;display:flex;justify-content:center;align-items:center}.note-cover img{object-fit:cover;width:100%;height:100%;display:block}.note-cover.placeholder:after{content:'SUFEI';font-family:Georgia,serif;font-size:23px;letter-spacing:5px;color:#b7a7a5}.note-kind{position:absolute;top:9px;right:9px;background:rgba(255,255,255,.92);font-size:10px;padding:3px 6px;border-radius:5px;color:#6f767e}.note-info{padding:14px}.note-title{font-size:12px;font-weight:650;height:38px;line-height:1.6;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.note-meta{margin-top:11px;display:flex;justify-content:space-between;gap:6px;font-size:10px;color:#9ba0a7}.note-stats{display:flex;gap:10px;flex-wrap:wrap;font-size:10px;color:#9a9da4;margin-top:10px}.empty-state{grid-column:1/-1;text-align:center;background:#fafafa;border:1px dashed #e3e3e4;border-radius:9px;padding:50px 15px;color:#9ba2aa;font-size:13px;line-height:2}.empty-symbol{font-size:32px;color:#c5b9b6;display:block;margin-bottom:10px}.filters{display:flex;gap:9px;margin-bottom:15px;flex-wrap:wrap}.filters select{min-width:155px}.result-count{font-size:11px;color:#9da3a9;margin:9px 0 20px}.note-grid-page{grid-template-columns:repeat(4,minmax(0,1fr))}.note-grid-page .note-cover{height:172px}.pagination{display:flex;justify-content:flex-end;align-items:center;gap:14px;font-size:11px;color:#9198a1;margin-top:20px}.link-ellipsis{max-width:185px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.footer{text-align:center;color:#afb4bd;letter-spacing:1px;font-size:10px;padding:28px 10px 20px}.footer span{padding:0 8px}
.modal-overlay{position:fixed;inset:0;background:rgba(25,31,43,.53);z-index:80;display:flex;align-items:center;justify-content:center;padding:18px}.modal{width:min(525px,100%);max-height:90vh;overflow-y:auto;background:#fff;border-radius:14px;box-shadow:0 25px 100px rgba(0,0,0,.15)}.modal-head{padding:23px 25px 12px;display:flex;align-items:center;justify-content:space-between}.modal-head h2{font-size:17px;margin:0}.modal-close{border:0;background:transparent;color:#7b8390;font-size:27px;font-weight:300;line-height:1}.modal-content{padding:12px 25px 28px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}.field{display:flex;flex-direction:column;gap:7px;font-size:12px;font-weight:600;color:#545e69}.field.wide{grid-column:1/-1}.field input,.field select{height:43px;padding:0 11px;border:1px solid #e1e4e8;border-radius:8px;outline:0;min-width:0;font-size:12px;color:#333}.form-hint{font-size:11px;color:#9ba2aa;line-height:1.6}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.toast{position:fixed;bottom:25px;right:25px;z-index:100;border-radius:9px;background:#293340;color:#fff;box-shadow:0 10px 30px #0002;padding:12px 17px;max-width:360px;line-height:1.6;font-size:12px}.toast.bad{background:#a85e54}.sync-instructions{margin:10px 0 0;padding-left:18px;font-size:12px;line-height:2;color:#7b8490}.inline-code{background:#f5f5f6;border-radius:4px;padding:2px 5px;font-family:monospace;font-size:11px}.upload-input{border:1px dashed #d6c5be;padding:26px;border-radius:8px;background:#fbf9f7;width:100%}
@media(max-width:1220px){.note-grid,.note-grid-page{grid-template-columns:repeat(3,minmax(0,1fr))}.sidebar{width:218px}.overview-grid{grid-template-columns:minmax(0,1.4fr) minmax(290px,1fr)}}
@media(max-width:960px){.sidebar{position:fixed;z-index:40;left:-245px;transition:left .2s;height:100vh;width:245px;box-shadow:15px 0 30px #0001}.sidebar.open{left:0}.menu-toggle{display:block;margin-right:14px}.topbar{padding:0 22px}.content{padding:25px 20px}.overview-grid{grid-template-columns:1fr}.kpi-grid{grid-template-columns:repeat(2,1fr)}.today-label{display:none}}
@media(max-width:650px){.login-layout{grid-template-columns:1fr}.login-art{display:none}.mobile-brand{display:block}.login-panel{min-height:100vh}.topbar-sub,.sep{display:none}.topbar-right{gap:8px}.content{padding:24px 14px}.page-head h1{font-size:23px}.kpi-grid{gap:10px}.kpi-card{padding:15px;min-height:110px}.kpi-value{font-size:29px;margin:11px 0 8px}.kpi-help{font-size:10px}.panel{padding:17px 14px}.note-grid,.note-grid-page{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.note-cover,.note-grid-page .note-cover{height:130px}.note-info{padding:10px}.status-summary{margin-top:18px}.form-grid{grid-template-columns:1fr}.topbar{height:67px}.footer{line-height:1.8}.month-input{width:145px}.login-card h2{font-size:24px}}
