:root{--green:#12796d;--deep:#133b38;--bg:#f3f6f5;--line:#dce6e3;--muted:#637b76;--red:#b44a40;--amber:#bd7b22;--soft:#ebf5f2}*{box-sizing:border-box}body{margin:0;font:15px/1.5 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft Yahei",sans-serif;background:var(--bg);color:#1f3733}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{opacity:.45;cursor:not-allowed}input,select,textarea{width:100%;background:#fff;border:1px solid #d6e2de;border-radius:12px;padding:11px 12px;outline:0;min-height:44px;color:#1d3833}input:focus,select:focus,textarea:focus{border-color:#12796d;box-shadow:0 0 0 3px #daf1ea}label{display:block;font-size:13px;color:#526f68;font-weight:600;margin-bottom:12px}label input,label select,label textarea{margin-top:5px}button.primary{background:var(--green);color:#fff;border:0;border-radius:12px;padding:12px 14px;font-weight:700;min-height:46px;width:100%}button.secondary{background:#fff;color:var(--deep);border:1px solid #cddfd9;border-radius:12px;padding:11px 14px;font-weight:600}button.danger{color:#a6413a;border-color:#f0d8d2}button.small{font-size:12px;padding:7px 11px;min-height:34px;border-radius:9px}a{color:var(--green)}header{background:var(--deep);color:white;padding:22px 17px 22px;display:flex;align-items:center;justify-content:space-between;gap:10px;position:sticky;top:0;z-index:5}header h1{font-size:19px;margin:2px 0 0;letter-spacing:.3px}header small{color:#b7d5cd;font-size:11px}header .user{text-align:right;font-size:12px;white-space:nowrap}header .user button{display:block;background:transparent;border:0;color:#cfe9df;margin-left:auto;padding:4px}main{max-width:720px;margin:auto;padding:17px 14px 100px}nav{position:fixed;bottom:0;left:0;right:0;background:#fff;display:flex;align-items:center;justify-content:space-around;box-shadow:0 -3px 20px #1e373219;padding-bottom:env(safe-area-inset-bottom);z-index:8}nav button{border:0;background:transparent;color:#788b85;padding:10px 5px;min-height:60px;min-width:21%;display:flex;align-items:center;flex-direction:column;gap:1px}nav button b{font-size:22px;font-weight:400}nav button span{font-size:11px}nav button.on{color:var(--green);font-weight:700}.card{border:1px solid var(--line);border-radius:16px;background:#fff;padding:16px;margin-bottom:13px;box-shadow:0 3px 18px #25463d08}.card h2{font-size:17px;margin:0 0 8px}.card h3{font-size:15px;margin:0 0 9px}p{margin:5px 0 10px}.muted,.help{font-size:12px;color:var(--muted)}.eyebrow{font-size:11px;letter-spacing:1px;color:var(--green);font-weight:700}.title{display:flex;align-items:center;justify-content:space-between;margin:3px 2px 13px;gap:8px}.title h2{font-size:19px;margin:0}.pill{font-size:11px;border-radius:99px;padding:4px 8px;background:#e4f2e9;color:var(--green);white-space:nowrap}.pill.warn{background:#fff3e3;color:#a57223}.pill.red{background:#fdf0eb;color:#ad5141}.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px}.stat{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 8px;text-align:center}.stat strong{font-size:25px;display:block;line-height:1.2}.stat span{font-size:11px;color:var(--muted)}.toolbar{display:flex;gap:8px;align-items:center;margin-bottom:12px}.toolbar>*,.two>*{flex:1;min-width:0}.two{display:grid;grid-template-columns:1fr 1fr;gap:11px}.divider{border:0;border-top:1px solid var(--line);margin:14px 0}.row{display:flex;align-items:center;justify-content:space-between;gap:10px}.row>*{min-width:0}.roomtitle{font-size:19px;font-weight:800}.tags{display:flex;gap:7px;flex-wrap:wrap}.tag{display:inline-block;padding:5px 8px;background:#eef4f2;border-radius:8px;font-size:12px;color:#3c645b}.person{border:1px solid #deebe7;background:#fbfdfc;border-radius:11px;padding:10px;margin-top:8px}.person h4{font-size:14px;margin:0 0 4px}.person p{font-size:12px;color:#58716a;margin:0}.clicks{display:grid;grid-template-columns:1fr 1fr;gap:8px}.clicks button{border:1px solid #d9e4e0;background:#fafdfc;border-radius:10px;min-height:42px;padding:9px 5px;font-size:13px}.clicks button.selected{border:1px solid #12796d;color:#096e5d;background:#e4f3ed;font-weight:700}.results{padding:9px 12px;background:#edf8f4;border-radius:10px;font-size:12px;margin:10px 0;color:#315e51}.photo-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.photo-actions label{border:1px dashed #74aa9c;border-radius:12px;padding:12px;text-align:center;color:#176a60;margin:0;background:#f6fbf8}.photo-actions input{display:none}.photo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:11px 0}.photo-grid img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:9px}.record{padding:13px 14px;background:white;border:1px solid var(--line);border-radius:13px;margin:9px 0}.record-head{display:flex;justify-content:space-between;gap:10px}.record-head b{font-size:15px}.record p{font-size:12px;color:#627c72;margin:5px 0}.record .photos{display:flex;gap:8px;flex-wrap:wrap}.record .photos img{width:68px;height:68px;border-radius:9px;object-fit:cover}.hint-warning{border:1px solid #f1dcb6;background:#fff9ef;color:#936522;padding:9px;border-radius:10px;font-size:12px;margin:10px 0}.auth{min-height:100dvh;display:grid;place-items:center;padding:18px;background:linear-gradient(135deg,#e3f3eb,#f7faf8)}.login-card{width:min(410px,100%);background:#fff;padding:27px;border-radius:22px;box-shadow:0 16px 45px #25463d12}.login-card .logo{width:52px;height:52px;border-radius:14px;background:var(--green);color:white;display:grid;place-items:center;font-size:30px}.login-card h1{font-size:24px;margin:15px 0 5px}.login-card p{font-size:12px;color:var(--muted);margin-bottom:22px}.error{color:var(--red);font-size:13px}.bar{height:7px;background:#e7f1eb;border-radius:10px;overflow:hidden;margin-top:5px}.bar div{height:100%;background:#45a38b}.list-row{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);padding:9px 0;gap:10px;font-size:13px}.list-row:last-child{border-bottom:0}.empty{text-align:center;color:#82938d;padding:30px 10px}.stack{display:grid;gap:10px}#flash{position:fixed;top:84px;left:50%;transform:translateX(-50%);max-width:90%;background:#244841;color:#fff;padding:11px;border-radius:10px;z-index:90;font-size:13px;display:none;box-shadow:0 5px 20px #2349}#flash.visible{display:block}.file-line{word-break:break-all;font-size:12px;color:var(--muted)}@media(min-width:720px){body{background:#edf3ef}header{padding-left:calc((100vw - 720px)/2 + 12px);padding-right:calc((100vw - 720px)/2 + 12px)}nav{max-width:720px;left:50%;transform:translateX(-50%)}main{padding:22px 18px 100px}}
[hidden]{display:none!important}

/* ===== V3.1 手机/电脑双端管理工作台 ===== */
:root{--shadow-2:0 10px 32px rgba(13,54,45,.045);--ink:#213c35;--nav:#f6faf8}
#app{min-height:100dvh}
.site-head .brand-head{display:flex;align-items:center;gap:10px}
.site-head .header-mark{height:36px;width:36px;display:grid;place-items:center;border-radius:10px;background:#ffffff17;color:white;font-size:25px}
.site-head .user{display:flex;gap:12px;align-items:center;text-align:right}
.site-head .user strong{display:block;font-size:13px}
.site-head .user span{display:block;color:#c1dcd2;font-size:11px}
.site-head .user button{margin:0;background:#ffffff1e;border:1px solid #ffffff33;border-radius:8px;padding:7px 10px;color:white}
.site-head .desktop-edition{font-size:12px;font-weight:500;color:#b6dacd}
nav .nav-caption, nav .nav-foot{display:none}
#nav [hidden]{display:none!important}
.admin-workspace{width:100%}
.admin-page-head{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:17px}
.admin-page-head h2{font-size:23px;letter-spacing:-.35px;margin:3px 0 0;color:var(--ink)}
.admin-page-head .eyebrow{margin:0}
.page-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.admin-banner{border-radius:17px;background:linear-gradient(116deg,#123f3a,#166e60 78%,#288b73);color:white;padding:22px 25px;display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:16px;box-shadow:0 8px 22px #14564a21}
.admin-banner h3{margin:4px 0;font-size:22px;letter-spacing:.1px}
.admin-banner p{margin:3px 0;color:#d4eae2;font-size:12px}
.banner-kicker{color:#a9d9c5;font-size:11px;letter-spacing:1px}
.banner-actions{display:flex;align-items:flex-end;flex-direction:column;gap:9px;min-width:185px}
.banner-actions select{min-height:35px;max-width:265px;font-size:12px;padding:7px;color:#16483e}
.light-button{color:#0b6153;background:#eaf9f2;border:0;padding:10px 15px;border-radius:10px;font-weight:700;font-size:12px;min-height:38px}
.admin-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
.metric{background:white;border:1px solid var(--line);border-radius:14px;padding:19px 19px 14px;min-width:0;box-shadow:var(--shadow-2);border-top:3px solid #238577}
.metric span{display:block;font-size:12px;color:var(--muted);font-weight:600}
.metric strong{display:block;font-size:32px;font-weight:800;color:#1a4941;margin:6px 0 1px;line-height:1.18;font-variant-numeric:tabular-nums}
.metric small{color:#839990;font-size:11px}
.green-ink{color:#16816f!important}.red-ink{color:#c0534f!important}.amber-ink{color:#b57524!important}
.admin-columns{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:15px;margin-bottom:2px}
.admin-columns.uneven{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr)}
.admin-panel{min-width:0;padding:19px 21px;box-shadow:var(--shadow-2);border-radius:15px;margin-bottom:15px}
.admin-panel h3{font-size:15px;margin:0}.admin-panel h2{font-size:17px}
.panel-hd{display:flex;align-items:start;justify-content:space-between;gap:10px;margin-bottom:15px}
.panel-hd p{margin:3px 0}
.text-link{border:0;background:transparent;color:#137c6b;font-weight:700;padding:6px 2px;font-size:12px;white-space:nowrap}
.building-board{display:grid;gap:10px}
.building-line{display:grid;grid-template-columns:65px minmax(55px,1fr) 30px 56px;align-items:center;gap:10px;font-size:12px;color:#425b54}
.building-line b{text-align:right;font-variant-numeric:tabular-nums}
.building-line small{font-size:11px;text-align:right}
.bar-bg{height:8px;background:#e8f2ed;border-radius:99px;overflow:hidden}
.bar-progress{height:100%;background:#38a58d;border-radius:99px;min-width:0}
.table-scroll{width:100%;overflow-x:auto;border:1px solid #e6eeea;border-radius:10px}
.admin-table{width:100%;border-collapse:collapse;min-width:760px;text-align:left;font-size:12px}
.admin-table th{padding:12px 12px;background:#f5f9f7;color:#5b766b;font-weight:700;white-space:nowrap}
.admin-table td{padding:12px 12px;border-top:1px solid #edf1ee;color:#3c5a4f;vertical-align:top}
.admin-table td b{font-weight:700;color:#29483c}
.admin-table td small{display:block;margin-top:3px;color:#789083;font-size:11px}
.admin-table tr:hover td{background:#fbfdfc}
.compact-table{min-width:0}
.compact-table th,.compact-table td{padding:9px 11px}
.issue-row,.recent-row,.system-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 0;border-top:1px solid #ebf0ec;font-size:12px}
.issue-row:first-child,.recent-row:first-child,.system-item:first-of-type{border-top:0}
.recent-row small{display:block;color:var(--muted);margin-top:2px}
.quick-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
.quick-action{background:#f6faf8;border:1px solid #dce9e3;border-radius:10px;padding:12px 10px;text-align:left;color:#2d6457;font-size:12px;font-weight:700;display:flex;justify-content:space-between;align-items:center;gap:8px}
.quick-action span{font-size:18px}
.quick-action:hover{border-color:#1b9b80;background:#edf8f2}
.admin-panel .muted{color:var(--muted)}
.button-outline{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;border:1px solid #a7d4c7;background:#eff8f3;color:#0e7160;border-radius:9px;padding:9px 12px;font-weight:700;font-size:12px;min-height:36px;white-space:nowrap}
.task-list{max-height:370px;overflow:auto}
.task-entry{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;border:1px solid #e4eee8;background:white;border-radius:10px;padding:13px;margin:7px 0;text-align:left}
.task-entry.selected{border-color:#32a08a;background:#f2faf5}
.task-entry b{display:block;font-size:13px;color:#2d584c}.task-entry small{display:block;font-size:11px;color:#7e9389;margin-top:4px}
.records-top{display:flex;align-items:center;justify-content:space-between;gap:13px;margin-bottom:12px}
.records-top label{max-width:410px;width:100%;margin-bottom:0}
.filter-grid-admin{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));column-gap:13px;row-gap:1px}
.filter-grid-admin label{font-size:11px}
.filter-grid-admin input,.filter-grid-admin select{min-height:38px;padding:8px 10px;font-size:12px;margin-top:4px}
.filter-footer{display:flex;align-items:center;justify-content:space-between;gap:10px}
.table-panel{padding:19px 18px}
.cell-counselor{max-width:150px}.cell-clamp{max-width:220px;display:-webkit-box!important;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;white-space:normal;word-break:break-all}
.mobile-records{display:none}
.compact-empty{padding:20px 10px;font-size:12px}
.roster-number{font-size:35px;color:#17796b;font-weight:800;padding:6px 0}
.roster-number span{font-size:12px;color:#81978f;font-weight:500;margin-left:9px}
.detail-backdrop{position:fixed;inset:0;background:#0e2c27aa;display:flex;justify-content:flex-end;z-index:100;animation:fade-in .16s ease}
.detail-dialog{background:white;width:min(590px,100%);height:100dvh;overflow-y:auto;box-shadow:-12px 0 38px #142b2824}
.modal-headline{display:flex;align-items:center;justify-content:space-between;padding:20px 22px;border-bottom:1px solid #e3ede8;position:sticky;top:0;background:white;z-index:1}
.modal-headline h2{font-size:21px;margin:0}
.detail-content{padding:18px 22px 35px}
.detail-content h3{font-size:15px;margin:20px 0 8px}
.detail-photos{display:flex;flex-wrap:wrap;gap:9px}
.detail-photos a{display:block;text-decoration:none}
.detail-photos img{width:92px;height:92px;object-fit:cover;border-radius:10px}
.detail-photos small{display:block;font-size:11px;color:#82938d}
#app.admin-mode #screen{max-width:none}
@media(min-width:960px){
 body:has(#app.admin-mode:not([hidden])){background:#f3f7f4}
 #app.admin-mode .site-head{height:74px;position:fixed;left:0;right:0;top:0;z-index:20;background:#123e36;padding:10px 28px}
 #app.admin-mode .site-head h1{font-size:19px}
 #app.admin-mode .site-head small{font-size:11px}
 #app.admin-mode .app-layout{display:grid;grid-template-columns:232px minmax(0,1fr);padding-top:74px;min-height:100dvh}
 #app.admin-mode #nav{position:sticky;top:74px;left:0;transform:none;max-width:none;width:auto;height:calc(100dvh - 74px);display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;background:white;border-right:1px solid #e0ebe5;box-shadow:none;padding:18px 12px 14px;overflow-y:auto;gap:4px;z-index:1}
 #app.admin-mode #nav .nav-caption{display:block;font-size:10px;color:#8ba198;letter-spacing:1px;font-weight:800;padding:15px 15px 6px}
 #app.admin-mode #nav .nav-foot{display:block;margin-top:auto;padding:17px 12px;font-size:11px;color:#9aac9e;border-top:1px solid #ecf3ee}
 #app.admin-mode #nav button{width:100%;min-width:0;min-height:43px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:12px;color:#537268;border:0;background:transparent;border-radius:10px;padding:10px 13px;text-align:left}
 #app.admin-mode #nav button b{font-size:18px;width:22px;text-align:center}
 #app.admin-mode #nav button span{font-size:13px}
 #app.admin-mode #nav button.on{background:#e8f5ee;color:#0e7967;font-weight:800}
 #app.admin-mode #nav button:hover{background:#f1f8f4}
 #app.admin-mode main{max-width:none;width:100%;padding:26px clamp(20px,3vw,42px) 50px;min-width:0;margin:0}
 #app.admin-mode #flash{top:85px}
}
@media(min-width:1400px){#app.admin-mode .app-layout{grid-template-columns:248px minmax(0,1fr)}#app.admin-mode main{padding:30px max(30px,calc((100vw - 1520px)/2)) 60px}}
@media(max-width:959px){
 #app.admin-mode .site-head{padding:15px 15px}
 #app.admin-mode main{padding:17px 13px 115px;max-width:790px}
 #app.admin-mode #nav{max-width:none;left:0;transform:none;justify-content:space-around}
 #app.admin-mode #nav [data-page="form"],#app.admin-mode #nav [data-page="team"],#app.admin-mode #nav [data-page="storage"]{display:none}
 #app.admin-mode #nav button{min-width:19%;max-width:24%}
 #app.admin-mode #nav button b{font-size:20px}
 #app.admin-mode #nav button span{font-size:11px}
 #app.admin-mode .admin-columns{grid-template-columns:1fr}
 .admin-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
 .admin-banner{align-items:start;flex-direction:column;padding:17px 18px}
 .banner-actions{flex-direction:row;align-items:center;width:100%}
 .banner-actions select{max-width:200px;flex:1}
 .filter-grid-admin{grid-template-columns:repeat(2,minmax(0,1fr))}
 .desktop-records{display:none}
 .mobile-records{display:block}
 .admin-mobile-record{margin-bottom:9px}
 .site-head .desktop-edition{display:none}
}
@media(max-width:480px){
 .admin-page-head h2{font-size:21px}
 .admin-page-head{align-items:flex-start}
 .admin-page-head .page-actions{justify-content:flex-end}
 .admin-panel{padding:14px}
 .metric{padding:13px}
 .metric strong{font-size:26px}
 .filter-grid-admin{gap:6px}
 .filter-footer{flex-direction:column;align-items:flex-start}
 .quick-actions{grid-template-columns:1fr 1fr}
 .building-line{grid-template-columns:62px minmax(40px,1fr) 22px 48px;gap:6px}
 .site-head .header-mark{display:none}
 .site-head .user{gap:5px}.site-head .user button{padding:5px 7px}
 .detail-dialog{width:100%}
 .admin-banner h3{font-size:19px}
}
.student-edit-shell{max-width:880px}
.student-edit-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px 18px;margin-top:15px;margin-bottom:12px}
.student-edit-grid label{min-width:0}
@media(max-width:620px){.student-edit-grid{grid-template-columns:1fr;gap:0}}
/* ===== 公开演示版标记（仅演示副本）===== */
.demo-banner{background:#b45309;color:#fff;text-align:center;padding:9px 14px;font-size:13px;font-weight:700;letter-spacing:.3px;line-height:1.45}
#logout{display:none!important}
