@font-face{font-family:Reverier Mono;font-display:swap;font-weight:400;font-stretch:100%;font-style:normal;src:url(/static/fonts/reverier-mono.woff2)format("woff2")}@font-face{font-family:Reverier Mono;font-display:swap;font-weight:400;font-stretch:100%;font-style:italic;src:url(/static/fonts/reverier-mono-italic.woff2)format("woff2")}@font-face{font-family:Reverier Mono;font-display:swap;font-weight:700;font-stretch:100%;font-style:normal;src:url(/static/fonts/reverier-mono-bold.woff2)format("woff2")}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;font-family:Reverier Mono,Menlo,-apple-system,Noto Sans,Helvetica Neue,Helvetica,Nimbus Sans L,Arial,Liberation Sans,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,Source Han Sans SC,Source Han Sans CN,Microsoft YaHei,Consolas,Courier,"monospace"}:root{--color-bg: #eaf3fc;--color-text: #000;--color-primary: #0091ed;--color-primary-hover: color-mix(in oklab, var(--color-primary) 80%, transparent);--color-border: color-mix(in oklab, black 15%, transparent);--color-card-bg: color-mix(in oklab, black 5%, transparent);--color-primary-content: black;--color-error: #e15957;--color-warning: #db640e;--color-success: #17a750;--color-info: #0991ed;--nav-height: 64px;font-family:Reverier Mono,Menlo,-apple-system,Noto Sans,Helvetica Neue,Helvetica,Nimbus Sans L,Arial,Liberation Sans,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,Source Han Sans SC,Source Han Sans CN,Microsoft YaHei,Consolas,Courier,"monospace"}body{background:var(--color-bg);color:var(--color-text);min-height:100vh}#app{max-width:960px;margin:0 auto;padding:0 16px}#top-nav{height:var(--nav-height);display:flex;align-items:center;z-index:1000;width:100%;padding-left:8px;padding-right:8px;justify-content:space-between;position:sticky;top:0;background:var(--color-card-bg);border-bottom:1px solid var(--color-border);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);left:0}#top-nav a{text-decoration:none;color:#000;font-weight:500;min-height:48px;border-radius:.5rem;padding-inline:16px;text-align:center;transition:background ease-out .2s;display:inline-flex;align-items:center}#top-nav a:hover{background-color:color-mix(in oklab,#000 20%,transparent);border-color:#0000}#main-content{padding:24px 0;min-height:calc(100vh - var(--nav-height) - 48px)}.page-loading{text-align:center;padding:48px;color:#999}.error-page{text-align:center;padding:48px;color:#c00}.btn{display:inline-block;padding:8px 20px;border-radius:6px;border:none;cursor:pointer;font-size:14px}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover{background:var(--color-primary-hover)}.btn-danger{background:var(--color-error);color:#fff}.btn-sm{padding:4px 12px;font-size:12px}.input{width:100%;padding:10px 12px;border:none;border-radius:.5rem;font-size:14px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);outline-color:color-mix(in oklab,black 60%,transparent);background:color-mix(in oklab,black 5%,transparent)!important;font-family:Reverier Mono,Menlo,-apple-system,Noto Sans,Helvetica Neue,Helvetica,Nimbus Sans L,Arial,Liberation Sans,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,Source Han Sans SC,Source Han Sans CN,Microsoft YaHei,Consolas,Courier,"monospace"}.card{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:.5rem;padding:20px;margin-bottom:16px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.xytext{font-size:.6em;color:var(--color-border)}.animate_ping{color:var(--color-primary);animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}.btnsp:hover{text-decoration:underline}.modal-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:#00000059;z-index:2000;align-items:center;justify-content:center}.modal-overlay.show{display:flex}.modal-content{background:#ffffff80;border-radius:12px;padding:28px;width:90%;max-width:520px;box-shadow:0 8px 30px #0000002e;position:relative;max-height:90vh;overflow-y:auto;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.modal-content h3{margin-bottom:20px;font-size:18px}.modal-footer{display:flex;gap:10px;margin-top:20px;justify-content:flex-end}.popup-box{max-width:420px;text-align:center}.popup-title{font-size:18px;font-weight:600;margin-bottom:16px}.popup-message{font-size:14px;color:#444;margin-bottom:8px;line-height:1.6;word-break:break-word}.popup-input-area{margin-top:12px}.popup-input-area .input{width:100%}.popup-box .modal-footer{margin-top:20px;justify-content:center}.admin-layout{display:flex;gap:0;min-height:calc(100vh - var(--nav-height) - 48px)}.admin-dashboard-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;margin-top:20px}.admin-dashboard-card{display:block;text-decoration:none;color:inherit;cursor:pointer;background:var(--color-card-bg);border-radius:10px;padding:24px 20px;border:1px solid var(--color-border);transition:transform .15s,box-shadow .15s}.admin-dashboard-card:hover{transform:translateY(-3px);box-shadow:0 4px 12px #0000001f}.admin-dashboard-card h3{font-size:16px;margin-bottom:6px;color:var(--color-primary)}.admin-dashboard-card p{color:#888;font-size:13px;margin:0}.admin-table{width:100%;border-collapse:separate;border-spacing:0;font-size:14px}.admin-table thead th{padding:12px 14px;text-align:left;font-weight:600;font-size:13px;color:#555;border-bottom:2px solid #e2e5ea;position:sticky;top:0}.admin-table tbody td{padding:11px 14px;border-bottom:1px solid #edf0f5;vertical-align:middle}.admin-table tbody tr:hover td{background:#00000010}.admin-table .cell-mono{font-family:Cascadia Code,Fira Code,monospace;font-size:12px}.admin-table .cell-small{font-size:12px;color:#777}.admin-table .cell-ellipsis{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-actions{display:flex;gap:6px;flex-wrap:wrap}.admin-actions .btn{white-space:nowrap}.badge{display:inline-block;padding:2px 10px;border-radius:10px;font-size:12px;font-weight:500}.badge-success{background:#e6f7e6;color:var(--color-success)}.badge-warning{background:#fff3e0;color:var(--color-warning)}.badge-danger{background:#fde8e8;color:var(--color-error)}.badge-info{background:#e3f2fd;color:var(--color-info)}.badge-default{background:#f0f0f0;color:#666}.admin-form .form-group{margin-bottom:16px}.admin-form label{display:block;margin-bottom:6px;font-weight:500;font-size:14px;color:#444}.admin-form .form-row{display:flex;gap:14px}.admin-form .form-row .form-group{flex:1}.admin-toolbar{display:flex;gap:10px;align-items:center;margin-bottom:16px;flex-wrap:wrap}.admin-section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.admin-section-header h2{font-size:20px;margin:0}.pagination{display:flex;justify-content:center;align-items:center;gap:8px;margin-top:20px}.pagination .page-info{padding:4px 10px;font-size:14px;color:#666}.pagination .btn:disabled{opacity:.4;cursor:not-allowed}.admin-photo-preview{max-width:300px;margin-bottom:12px}.admin-photo-preview img{max-width:100%;border-radius:6px;border:1px solid var(--color-border)}.admin-empty{text-align:center;padding:40px 20px;color:#999;font-size:14px}#photo-editor-container{position:relative;display:inline-block;max-width:100%;border:2px dashed #ccc;border-radius:8px;overflow:hidden;cursor:crosshair}#photo-editor-container img{display:block;max-width:100%;height:auto;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.photo-rect{display:flex;align-items:flex-end;justify-content:center;border-radius:3px;font-size:11px;color:#fff;font-weight:500;text-shadow:0 1px 2px rgba(0,0,0,.6);padding-bottom:2px;transition:border-color .15s;pointer-events:auto;overflow:hidden}.photo-rect:hover{border-color:#f39c12!important;background:#f39c1240!important}.photo-rect.dragging{opacity:.6}#photo-drawing-rect{position:absolute;display:none;border:2px dashed #e74c3c;background:#e74c3c1f;pointer-events:none;z-index:50;border-radius:2px}.photo-container{position:relative;display:inline-block;max-width:100%}.photo-container img{display:block;max-width:100%;height:auto;border-radius:8px}.photo-overlay{position:absolute;cursor:pointer}.photo-overlay .tooltip{position:absolute;bottom:calc(100% + 4px);left:50%;transform:translate(-50%);background:#000c;color:#fff;padding:4px 10px;border-radius:4px;font-size:12px;white-space:nowrap;display:none}.photo-overlay:hover .tooltip{display:block}.login-container{max-width:400px;margin:48px auto}.login-container h1{text-align:center;margin-bottom:24px}.login-form .form-group{margin-bottom:16px}.login-form label{display:block;margin-bottom:6px;font-weight:500}.login-form .btn{width:100%;margin-top:8px}.login-tabs{display:flex;margin-bottom:20px;border-bottom:2px solid var(--color-border)}.login-tab{flex:1;padding:10px;text-align:center;cursor:pointer;border:none;background:none;font-size:14px;color:#666}.login-tab.active{color:var(--color-primary);border-bottom:2px solid var(--color-primary);margin-bottom:-2px}.register-container{max-width:520px;margin:48px auto}.register-container h1{text-align:center;margin-bottom:24px}.register-steps{display:flex;justify-content:center;gap:0;margin-bottom:28px}.step-item{display:flex;align-items:center;gap:6px;font-size:13px;color:#bbb;padding:0 16px;position:relative}.step-item+.step-item:before{content:"";position:absolute;left:-2px;top:50%;width:4px;height:4px;background:#ddd;border-radius:50%;transform:translateY(-50%)}.step-item.active{color:var(--color-primary);font-weight:600}.step-item.done{color:#27ae60}.step-num{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;font-size:12px;font-weight:600;background:#f0f0f0;color:#999}.step-item.active .step-num{background:var(--color-primary);color:#fff}.step-item.done .step-num{background:#27ae60;color:#fff}.step-content{min-height:200px}.step-panel h3{margin-bottom:12px;font-size:16px}.step-panel .form-group{margin-bottom:16px}.step-panel label{display:block;margin-bottom:6px;font-weight:500}.step-error{padding:10px 14px;background:#fde8e8;border-radius:6px;margin-bottom:12px;font-size:13px;color:#b91c1c}.student-header{margin-bottom:24px}.student-header h1{font-size:28px;margin-bottom:8px}.student-info{display:grid;grid-template-columns:1fr 1fr;gap:8px}.student-info .label{color:#666;font-size:13px}.student-info .value{font-weight:500}.custom-fields{margin-bottom:24px}.custom-fields h3,.comment-section h3{margin-bottom:12px}.comment-form{display:flex;gap:8px;margin-bottom:16px}.comment-form .input{flex:1}.comment-list .comment{padding:12px 0;border-bottom:1px solid var(--color-border)}.comment-list .comment-header{display:flex;justify-content:space-between;font-size:12px;color:#999;margin-bottom:4px}.comment-list .comment-content{margin-bottom:8px}.comment-list .reply{margin-left:24px;padding:8px 0}.comment-list .reply-form{display:flex;gap:8px;margin-top:8px}.comment-list .reply-form .input{flex:1}.comment-list .sub-reply-form{display:flex;gap:8px;margin-top:8px}.comment-list .sub-reply-form .input{flex:1}.tbase{display:table}.zd{display:table-row}.zd span{display:table-cell}.zd .label{color:var(--color-primary);font-weight:700;text-align:end;padding-right:1.5rem}.zd .value{color:#000;font-weight:700;text-align:starts}.profile-header{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:.5rem;padding:20px;margin-bottom:16px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.profile-header h2{margin:0 0 4px;font-size:22px;font-weight:600}.profile-header .username{opacity:.85;font-size:14px;display:flex;align-items:center;gap:6px}.fields-card{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:.5rem;padding:20px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);margin-bottom:24px;overflow:hidden}.fields-card h3{margin:0;padding:18px 24px;font-size:16px;font-weight:600;color:#333;border-bottom:1px solid #f0f0f0;display:flex;align-items:center;gap:8px}.fields-card .card-desc{padding:0 24px 12px;font-size:13px;color:#888;border-bottom:1px solid #f0f0f0}.field-row{display:flex;align-items:center;gap:12px;padding:14px 24px;border-bottom:1px solid #f5f5f5;transition:background .15s}.field-row:last-child{border-bottom:none}.field-row:hover{background:#00000010}.field-row .field-badge{flex-shrink:0;font-size:10px;font-weight:600;padding:2px 8px;border-radius:10px;letter-spacing:.3px;text-transform:uppercase;min-width:36px;text-align:center}.field-badge.basic{background:#e8edf3;color:#5a6a7a}.field-badge.admin{background:#e3f2fd;color:var(--color-info)}.field-badge.approved{background:#e6f7e6;color:var(--color-success)}.field-badge.pending{background:#fff3e0;color:var(--color-warning)}.field-badge.rejected{background:#fde8e8;color:var(--color-error)}.field-row .field-key{flex-shrink:0;font-size:14px;font-weight:500;color:#333;min-width:70px}.field-row .field-value{flex:1;font-size:14px;color:#555;word-break:break-all}.field-row .field-note{display:block;font-size:11px;color:#aaa;margin-top:2px}.field-row .field-actions{flex-shrink:0;display:flex;align-items:center;gap:4px;opacity:.4;transition:opacity .15s}.field-row:hover .field-actions{opacity:1}.field-actions .sort-btn{background:none;border:1px solid #e0e0e0;border-radius:4px;padding:2px 6px;font-size:11px;cursor:pointer;color:#888;line-height:1.2;transition:all .12s}.field-actions .sort-btn:hover:not(:disabled){background:#f0f0f0;color:#333;border-color:#ccc}.field-actions .sort-btn:disabled{opacity:.25;cursor:not-allowed}.field-actions .del-btn{background:none;border:1px solid #f5c6c6;border-radius:4px;padding:2px 8px;font-size:11px;cursor:pointer;color:#c0392b;transition:all .12s}.field-actions .del-btn:hover{background:#fde8e8;border-color:#e74c3c}.field-section-label{display:flex;align-items:center;gap:8px;padding:10px 24px 6px;font-size:11px;font-weight:600;color:#aaa;text-transform:uppercase;letter-spacing:.5px;background:#fafafa;border-bottom:1px solid #f0f0f0}.field-section-label:after{content:"";flex:1;height:1px;background:#eee}.add-field-card{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:.5rem;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:20px 24px;margin-bottom:24px}.add-field-card h3{margin:0 0 12px;font-size:15px;font-weight:600;color:#333;display:flex;align-items:center;gap:8px}.signature-card{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:.5rem;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:20px 24px;margin-bottom:24px}.signature-card h3{margin:0 0 12px;font-size:15px;font-weight:600;color:#333}.signature-card .card-desc{font-size:13px;color:#888;margin-bottom:12px}.add-field-form{display:flex;gap:10px;flex-wrap:wrap}.add-field-form .input{flex:1;min-width:120px}.add-field-form .btn{white-space:nowrap}.no-student-card{background:var(--color-card-bg);border:1px solid var(--color-border);border-radius:.5rem;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:40px 24px;text-align:center;color:#aaa;font-size:14px;display:flex;flex-direction:column;justify-content:center;align-items:center}.no-student-card:before{content:"";display:block;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQ0IDI0QzQ0IDM1LjA0NTcgMzUuMDQ1NyA0NCAyNCA0NEMxMi45NTQzIDQ0IDQgMzUuMDQ1NyA0IDI0QzQgMTIuOTU0MyAxMi45NTQzIDQgMjQgNEMzNS4wNDU3IDQgNDQgMTIuOTU0MyA0NCAyNFpNMjQgMjBDMjMuMzA5NiAyMCAyMi43NSAyMC41NTk2IDIyLjc1IDIxLjI1VjMzLjc1QzIyLjc1IDM0LjQ0MDQgMjMuMzA5NiAzNSAyNCAzNUMyNC42OTA0IDM1IDI1LjI1IDM0LjQ0MDQgMjUuMjUgMzMuNzVWMjEuMjVDMjUuMjUgMjAuNTU5NiAyNC42OTA0IDIwIDI0IDIwWk0yNCAxN0MyNS4xMDQ2IDE3IDI2IDE2LjEwNDYgMjYgMTVDMjYgMTMuODk1NCAyNS4xMDQ2IDEzIDI0IDEzQzIyLjg5NTQgMTMgMjIgMTMuODk1NCAyMiAxNUMyMiAxNi4xMDQ2IDIyLjg5NTQgMTcgMjQgMTdaIiBmaWxsPSIjMDk5MWVkIi8+Cjwvc3ZnPg==);margin-bottom:8px;background-repeat:no-repeat;width:32px;height:32px}.field-actions .req-btn{background:none;border:1px solid #d0d0d0;border-radius:4px;padding:2px 8px;font-size:11px;cursor:pointer;color:#555;transition:all .12s;margin-left:2px}.field-actions .req-btn:hover{background:#e8f0fe;border-color:var(--color-primary);color:var(--color-primary)}.field-actions .reqbtn{background:none;border:1px solid #d0d0d0;border-radius:4px;padding:2px 8px;font-size:11px;cursor:pointer;color:#555;transition:all .12s;margin-left:2px}.field-actions .reqbtn:hover{background:#e8f0fe;border-color:var(--color-primary);color:var(--color-primary)}.field-badge.hidden-field{background:#f0f0f0;color:#999}
