@font-face{font-family:Noto;src:url('/assets/NotoSansSC.ttf') format('truetype');font-display:swap}
@font-face{font-family:KuaiLe;src:url('/assets/ZCOOLKuaiLe-Regular.ttf') format('truetype');font-display:swap}
:root{--ink:#242c28;--green:#18704e;--green2:#218258;--mint:#eff8f2;--line:#dce9e0;--blue:#4b86b8;--amber:#e5a52e;--shadow:0 16px 40px rgba(37,83,56,.12)}
*{box-sizing:border-box}body{margin:0;background:#fbfdfb;color:var(--ink);font-family:Noto,'Microsoft YaHei',sans-serif;font-size:15px}button,input{font:inherit}button{cursor:pointer}.hidden{display:none!important}
.app-shell{min-height:100vh;display:flex}.rail{width:220px;flex:0 0 220px;background:#e9f6ec;border-right:1px solid #d8eadc;padding:32px 24px 22px;display:flex;flex-direction:column;gap:20px}.rail-brand{display:flex;align-items:center;gap:11px;color:var(--green);font-family:KuaiLe;font-size:25px;line-height:1.05}.brand-mark{font-family:Georgia;font-size:42px;line-height:1;color:#e2ad35}.rail-divider{height:1px;background:#cfe3d4;margin:4px 0 5px}.rail-stat{display:flex;align-items:center;gap:12px}.stat-icon{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;color:white;font-size:21px;font-weight:bold}.stat-icon.blue{background:#6b9dca}.stat-icon.amber{background:#e4ad3d}.stat-icon.green{background:#5caa7b}.rail-stat strong{display:block;font-size:24px;line-height:1.1}.rail-stat span{display:block;color:#6b8072;font-size:12px;margin-top:3px}.rail-tip{margin-top:auto;border-top:1px dashed #b7d4be;border-bottom:1px dashed #b7d4be;padding:17px 0;display:flex;gap:9px;color:#5b7766}.rail-tip span{font-size:22px}.rail-tip p{margin:0;font-size:13px;line-height:1.6}.rail-footer{color:#85a090;font-size:12px}
.content{min-width:0;flex:1;padding:42px clamp(24px,4vw,62px) 22px}.topbar{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;margin-bottom:25px}.eyebrow{font-size:11px;letter-spacing:.18em;color:#77a187;font-weight:bold}.topbar h1{margin:4px 0 4px;font-family:KuaiLe;color:#2d3a32;font-size:clamp(34px,4vw,56px);font-weight:400;line-height:1.05}.round-label{margin:0;color:#779083;font-size:13px}.round-label b{color:var(--green)}.top-actions{display:flex;gap:10px;align-items:center}.icon-button,.close-button{border:1px solid #c9ded2;background:white;color:var(--green);border-radius:10px;width:44px;height:44px;font-size:25px;display:grid;place-items:center}.icon-button:hover,.close-button:hover{background:var(--mint)}.teacher-button,.primary-button,.secondary-button{border-radius:9px;padding:10px 16px;border:1px solid #bcd8c7;background:#fff;color:var(--green);font-weight:bold}.teacher-button{background:#f4faf5}.teacher-button:hover,.secondary-button:hover{background:var(--mint)}.primary-button{background:var(--green2);color:white;border-color:var(--green2);box-shadow:0 4px 12px rgba(33,130,88,.22)}.primary-button:hover{background:#176a46}.primary-button:disabled{opacity:.5;cursor:not-allowed}
.progress-card{display:grid;grid-template-columns:auto 1fr auto;gap:18px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:14px;padding:15px 18px;margin-bottom:28px;box-shadow:0 4px 15px rgba(52,97,70,.04)}.progress-title{font-weight:bold;color:#466b56;margin-right:10px}.progress-note{color:#99a99e;font-size:13px}.progress-track{height:8px;background:#eef3ef;border-radius:10px;overflow:hidden}.progress-value{height:100%;width:0;background:linear-gradient(90deg,#6eb789,#258658);border-radius:10px;transition:width .25s}.progress-percent{color:var(--green);font-weight:bold;font-variant-numeric:tabular-nums}
.envelope-grid{display:grid;grid-template-columns:repeat(5,minmax(120px,1fr));gap:18px 16px;align-items:start}.envelope{border:0;background:transparent;padding:0;position:relative;aspect-ratio:.82;min-height:145px;transition:transform .15s,filter .15s}.envelope:hover{transform:translateY(-5px)}.envelope img{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 8px 7px rgba(113,62,34,.12))}.envelope.opened img{filter:drop-shadow(0 7px 7px rgba(73,128,91,.15))}.envelope-number{position:absolute;left:0;right:0;bottom:11%;font-size:clamp(19px,2vw,30px);font-weight:900;color:white;text-shadow:0 1px 2px rgba(95,42,19,.3)}.envelope.opened .envelope-number{bottom:10%;color:#fff}.envelope-prize{position:absolute;left:11%;right:11%;top:49%;color:var(--green);font-size:clamp(11px,1.2vw,17px);font-weight:bold;line-height:1.2;overflow-wrap:anywhere}.envelope-check{position:absolute;top:24%;left:0;right:0;color:var(--green);font-size:22px;font-weight:bold}.empty-state{border:1px dashed #b7d4be;border-radius:16px;text-align:center;padding:60px 20px;color:#759180}.page-footer{display:flex;justify-content:space-between;color:#99a99e;font-size:12px;padding:22px 3px 0}.page-footer span:last-child{color:#65a17d}
.modal-backdrop{position:fixed;inset:0;background:rgba(23,49,35,.38);backdrop-filter:blur(4px);z-index:20;display:grid;place-items:center;padding:20px}.modal{width:min(820px,100%);max-height:min(92vh,900px);overflow:auto;background:#fff;border-radius:18px;box-shadow:var(--shadow);padding:27px}.scratch-modal{width:min(680px,100%)}.modal-heading{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;margin-bottom:20px}.modal h2{font-family:KuaiLe;color:var(--green);font-size:32px;font-weight:400;margin:3px 0 0}.close-button{width:36px;height:36px;font-size:27px;line-height:1}.scratch-wrap{position:relative;border:1px solid #d2e5d7;border-radius:12px;background:#edf8ef;overflow:hidden;min-height:360px;touch-action:none}.prize-underlay{position:absolute;inset:0;display:grid;place-items:center;align-content:center;gap:12px;padding:35px;color:var(--green);text-align:center}.gift-mark{font-size:54px;color:#dbaa36}.prize-name{font-weight:bold;font-size:clamp(24px,5vw,48px);line-height:1.15;overflow-wrap:anywhere}.scratch-wrap canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none}.opened-stamp{position:absolute;right:18px;top:15px;border:1px solid #9bc7aa;background:#effaf1;color:var(--green);border-radius:999px;padding:5px 12px;font-size:12px;font-weight:bold}.scratch-footer{display:flex;align-items:center;justify-content:space-between;gap:15px;padding-top:17px}.scratch-status{color:#779083;font-size:13px}.teacher-modal{width:min(900px,100%)}.teacher-tabs{display:flex;gap:8px;border-bottom:1px solid var(--line);margin:0 -27px 24px;padding:0 27px}.tab{border:0;background:transparent;color:#82978a;padding:12px 15px;border-bottom:3px solid transparent;font-weight:bold}.tab.active{color:var(--green);border-bottom-color:var(--green2)}.tab-panel{display:none}.tab-panel.active{display:block}.field-label{display:block;font-size:13px;color:#61806b;margin-bottom:7px;font-weight:bold}.text-input{border:1px solid #cbded0;border-radius:8px;padding:10px 12px;min-width:0;background:#fff;width:100%;color:var(--ink);outline:none}.text-input:focus{border-color:#5aab7b;box-shadow:0 0 0 3px rgba(90,171,123,.12)}#titleInput{margin-bottom:20px}.prize-heading,.prize-row{display:grid;grid-template-columns:1fr 110px 38px;gap:12px;align-items:center}.prize-heading{font-size:12px;color:#82978a;padding:0 9px 7px}.prize-rows{display:grid;gap:9px}.prize-row .remove-prize{border:0;background:#fff;color:#bd625c;font-size:22px}.prize-actions{display:flex;justify-content:space-between;align-items:center;padding-top:13px}.prize-summary{color:#67816f}.hint{color:#8a9c91;font-size:12px;line-height:1.6}.teacher-form-footer{border-top:1px dashed #c8ddcf;margin-top:22px;padding-top:17px;display:flex;justify-content:space-between;align-items:center;gap:15px}.records-toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:13px;color:#718b7a;font-size:13px}.records-table-wrap{max-height:410px;overflow:auto;border:1px solid #e0ebe3;border-radius:10px}table{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:10px 12px;border-bottom:1px solid #edf2ee}th{background:#f2f8f3;color:#5b7966;position:sticky;top:0}td:last-child{color:#8a9c91}.backup-card{border:1px solid #e0ebe3;border-radius:12px;padding:17px;display:flex;justify-content:space-between;gap:18px;align-items:center;margin-bottom:13px}.backup-card h3{font-size:15px;margin:0 0 5px;color:#456b54}.backup-card p{margin:0;color:#87998d;font-size:12px;line-height:1.6}.file-button{position:relative;overflow:hidden;display:inline-block;white-space:nowrap}.file-button input{position:absolute;inset:0;opacity:0;cursor:pointer}.toast{position:fixed;z-index:40;bottom:26px;left:50%;transform:translateX(-50%);background:#214f37;color:#fff;border-radius:999px;padding:10px 18px;box-shadow:0 8px 25px rgba(26,72,47,.25);font-size:13px}
@media (max-width:900px){.rail{width:174px;flex-basis:174px;padding-left:17px;padding-right:17px}.envelope-grid{grid-template-columns:repeat(4,minmax(110px,1fr))}.content{padding-left:25px;padding-right:25px}}
@media (max-width:680px){.app-shell{display:block}.rail{width:auto;display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;padding:14px 16px}.rail-brand{grid-column:1/-1;font-size:22px}.rail-divider,.rail-tip,.rail-footer{display:none}.rail-stat{gap:8px}.stat-icon{width:31px;height:31px;border-radius:9px;font-size:16px}.rail-stat strong{font-size:18px}.rail-stat span{font-size:11px}.content{padding:24px 15px 18px}.topbar{margin-bottom:18px}.topbar h1{font-size:38px}.top-actions{gap:6px}.teacher-button{padding:9px 10px;font-size:13px}.progress-card{grid-template-columns:1fr auto;gap:7px 12px}.progress-card>div:first-child{grid-column:1/-1}.progress-track{grid-column:1}.envelope-grid{grid-template-columns:repeat(3,minmax(86px,1fr));gap:11px}.envelope{min-height:112px}.page-footer{display:block;line-height:1.8}.modal{padding:19px;border-radius:15px}.teacher-tabs{margin:0 -19px 20px;padding:0 19px;overflow:auto}.tab{white-space:nowrap;padding:10px 9px;font-size:13px}.prize-heading,.prize-row{grid-template-columns:1fr 82px 30px;gap:7px}.teacher-form-footer{display:block}.teacher-form-footer .primary-button{margin-top:12px;width:100%}.backup-card{display:block}.backup-card button,.file-button{margin-top:11px}.scratch-wrap{min-height:300px}}
