.login-shell[data-v-e46cb867]{color:#f7f5ef;background:#075d63 url(/login-campus.webp) 50%/cover no-repeat;min-height:100svh;font-family:PingFang SC,Microsoft YaHei,system-ui,sans-serif;position:relative;overflow:hidden}.login-shade[data-v-e46cb867]{background:linear-gradient(90deg,#024449eb 0%,#034c4fbd 45%,#07342e57 100%),linear-gradient(#012c3033,#0125259e);position:absolute;inset:0}.login-shade[data-v-e46cb867]:after{content:"";opacity:.18;background-image:repeating-radial-gradient(at 0 0,#0000 0 18px,#ffffff42 19px 20px,#0000 21px 38px);background-size:92px 46px;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#000,#0000 42%);mask-image:linear-gradient(#000,#0000 42%)}.login-brand[data-v-e46cb867]{z-index:1;border-bottom:1px solid #ffffff38;align-items:center;gap:14px;width:min(1180px,100% - 48px);margin:0 auto;padding:34px 0;display:flex;position:relative}.brand-mark[data-v-e46cb867]{border:1px solid #ffffffb3;border-radius:50%;place-items:center;width:44px;height:44px;font:600 23px/1 Georgia,serif;display:grid}.login-brand strong[data-v-e46cb867],.login-brand span[data-v-e46cb867]{display:block}.login-brand strong[data-v-e46cb867]{font-size:18px;font-weight:600}.login-brand span[data-v-e46cb867]{opacity:.74;margin-top:3px;font-size:10px}.login-content[data-v-e46cb867]{z-index:1;grid-template-columns:minmax(0,1fr) 390px;align-items:center;gap:clamp(48px,9vw,140px);width:min(1180px,100% - 48px);min-height:calc(100svh - 175px);margin:0 auto;padding:52px 0 76px;display:grid;position:relative}.eyebrow[data-v-e46cb867]{opacity:.72;margin-bottom:22px;font-size:11px;font-weight:600}.welcome-copy h1[data-v-e46cb867]{font:500 clamp(36px,5vw,68px)/1.2 Georgia,Songti SC,serif}.welcome-copy>p[data-v-e46cb867]:last-child{opacity:.8;margin-top:26px;font-size:15px}.login-panel[data-v-e46cb867]{color:#26342f;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#faf8f2f5;border:1px solid #ffffffa3;border-radius:8px;width:100%;min-width:0;padding:34px;box-shadow:0 24px 70px #001f1d3d}.panel-icon[data-v-e46cb867]{color:#0a7274;background:#dceceb;border-radius:50%;place-items:center;width:42px;height:42px;display:grid}.panel-label[data-v-e46cb867]{color:#0a7274;margin-top:22px;font-size:11px;font-weight:700}.login-panel h2[data-v-e46cb867]{margin-top:7px;font:500 25px/1.25 Georgia,Songti SC,serif}.panel-note[data-v-e46cb867]{color:#6f7771;margin:9px 0 26px;font-size:13px}.login-panel label[data-v-e46cb867]{margin-bottom:8px;font-size:12px;font-weight:600;display:block}.password-field[data-v-e46cb867]{min-width:0;position:relative}.password-field input[data-v-e46cb867]{color:#24302c;background:#fff;border:1px solid #ccd2cc;border-radius:6px;outline:none;width:100%;min-width:0;height:48px;padding:0 46px 0 14px;font-size:15px}.password-field input[data-v-e46cb867]:focus{border-color:#08797a;box-shadow:0 0 0 3px #08797a1f}.reveal-button[data-v-e46cb867]{color:#6c746f;cursor:pointer;background:0 0;border:0;place-items:center;width:46px;height:48px;display:grid;position:absolute;top:0;right:0}.login-error[data-v-e46cb867]{color:#a63d36;margin-top:10px;font-size:12px}.submit-button[data-v-e46cb867]{color:#fff;cursor:pointer;background:#0a7778;border:0;border-radius:6px;justify-content:center;align-items:center;gap:8px;width:100%;height:48px;margin-top:18px;font-size:14px;font-weight:600;display:flex}.submit-button[data-v-e46cb867]:hover{background:#07696a}.submit-button[data-v-e46cb867]:disabled{opacity:.58;cursor:not-allowed}.privacy-note[data-v-e46cb867]{color:#838a85;text-align:center;margin-top:14px;font-size:11px}.spinner[data-v-e46cb867]{animation:.85s linear infinite spin-e46cb867}footer[data-v-e46cb867]{z-index:1;opacity:.52;font-size:9px;position:absolute;bottom:22px;left:50%;transform:translate(-50%)}@keyframes spin-e46cb867{to{transform:rotate(360deg)}}@media (width<=760px){.login-shell[data-v-e46cb867]{background-position:62%}.login-brand[data-v-e46cb867]{width:calc(100% - 32px);padding:22px 0}.login-content[data-v-e46cb867]{grid-template-columns:1fr;gap:34px;width:calc(100% - 32px);padding:42px 0 68px}.welcome-copy h1[data-v-e46cb867]{font-size:38px}.welcome-copy>p[data-v-e46cb867]:last-child{margin-top:16px}.login-panel[data-v-e46cb867]{padding:26px 22px}footer[data-v-e46cb867]{display:none}}:root{--bg:#f5f3ee;--card:#fff;--primary:#0a7778;--primary-hover:#07696a;--primary-light:#dceceb;--primary-ring:#08797a1f;--border:#d8d5cf;--border-light:#e6e2da;--text:#26342f;--text-muted:#6f7771;--text-subtle:#838a85;--danger:#a63d36;--danger-bg:#fce8e6;--success:#0a7778;--radius:8px;--radius-sm:6px;--font-serif:Georgia, "Songti SC", serif;--font-sans:"PingFang SC", "Microsoft YaHei", system-ui, sans-serif;--shadow-card:0 1px 3px #0014120f, 0 4px 16px #0014120d;--shadow-modal:0 24px 70px #001f1d3d;--shadow-hover:0 2px 8px #00141214, 0 8px 24px #0014120f}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-sans);background:var(--bg);color:var(--text);min-height:100vh}.auth-loading{background:#075d63;place-items:center;min-height:100vh;display:grid}.auth-loading span{border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:26px;height:26px;animation:.8s linear infinite auth-spin}@keyframes auth-spin{to{transform:rotate(360deg)}}.app[data-v-f7ca977e]{max-width:1400px;margin:0 auto;padding:24px 20px 48px}.header[data-v-f7ca977e]{border-bottom:1px solid var(--border-light);align-items:center;gap:14px;margin-bottom:20px;padding-bottom:20px;display:flex}.brand-mark[data-v-f7ca977e]{border:1px solid var(--primary);width:42px;height:42px;color:var(--primary);border-radius:50%;flex-shrink:0;place-items:center;font:600 22px/1 Georgia,serif;display:grid}.header-titles[data-v-f7ca977e]{min-width:0}.header-titles h1[data-v-f7ca977e]{font:500 21px/1.3 var(--font-serif);color:var(--text)}.header-sub[data-v-f7ca977e]{color:var(--text-subtle);margin-top:2px;font-size:10px;display:block}.logout-button[data-v-f7ca977e]{width:34px;height:34px;color:var(--text-muted);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;background:0 0;flex-shrink:0;place-items:center;margin-left:auto;transition:color .15s,border-color .15s,background .15s;display:grid}.logout-button[data-v-f7ca977e]:hover{color:var(--danger);background:var(--danger-bg);border-color:#d9b2b3}.badge[data-v-f7ca977e]{background:var(--primary-light);color:var(--primary);border-radius:12px;flex-shrink:0;padding:3px 12px;font-size:11px;font-weight:600}.badge.muted[data-v-f7ca977e]{color:var(--text-muted);background:#e8e5df}.toolbar[data-v-f7ca977e]{flex-wrap:wrap;gap:8px;margin-bottom:14px;display:flex}.toolbar button[data-v-f7ca977e],.btn-file[data-v-f7ca977e]{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--card);color:var(--text);cursor:pointer;font-size:13px;font-family:var(--font-sans);padding:8px 16px;transition:background .15s,border-color .15s,box-shadow .15s}.toolbar button[data-v-f7ca977e]:hover,.btn-file[data-v-f7ca977e]:hover{background:#faf9f6;border-color:#c4c0b7}.toolbar button[data-v-f7ca977e]:disabled{opacity:.45;cursor:not-allowed}.toolbar .btn-primary[data-v-f7ca977e]{background:var(--primary);color:#fff;border-color:var(--primary);font-weight:600}.toolbar .btn-primary[data-v-f7ca977e]:hover{background:var(--primary-hover);border-color:var(--primary-hover)}.toolbar .btn-primary[data-v-f7ca977e]:disabled{opacity:.5}.btn-file[data-v-f7ca977e]{display:inline-block}.status-bar[data-v-f7ca977e]{background:var(--card);border:1px solid var(--border-light);border-radius:var(--radius);color:var(--text-muted);box-shadow:var(--shadow-card);flex-wrap:wrap;gap:20px;margin-bottom:14px;padding:10px 18px;font-size:13px;display:flex}.status-warn[data-v-f7ca977e]{color:#9a3412;font-weight:600}.unknown-banner[data-v-f7ca977e]{border-radius:var(--radius);box-shadow:var(--shadow-card);background:#fff7ed;border:1px solid #fdba74;margin-bottom:14px;padding:14px 16px}.unknown-banner-head[data-v-f7ca977e]{flex-direction:column;gap:4px;margin-bottom:12px;display:flex}.unknown-banner-head strong[data-v-f7ca977e]{color:#9a3412;font-size:14px}.unknown-banner-head span[data-v-f7ca977e]{color:#9a3412;opacity:.9;font-size:12px;line-height:1.5}.unknown-tags[data-v-f7ca977e]{flex-wrap:wrap;gap:8px;display:flex}.unknown-tag[data-v-f7ca977e]{color:#7c2d12;cursor:pointer;font:600 13px/1.2 var(--font-sans);text-align:left;background:#ffedd5;border:1px solid #fb923c;border-radius:6px;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 10px;display:inline-flex}.unknown-tag small[data-v-f7ca977e]{opacity:.8;font-size:11px;font-weight:500}.unknown-tag[data-v-f7ca977e]:hover{background:#fed7aa}.unknown-actions[data-v-f7ca977e]{flex-wrap:wrap;gap:14px;margin-top:12px;display:flex}.btn-link[data-v-f7ca977e]{color:#c2410c;cursor:pointer;text-underline-offset:2px;background:0 0;border:0;padding:0;font-size:12px;font-weight:600;text-decoration:underline}.btn-link.muted[data-v-f7ca977e]{color:#9a6b4f;font-weight:500}.course-panels[data-v-f7ca977e]{grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:14px;display:grid}.panel[data-v-f7ca977e]{background:var(--card);border-radius:var(--radius);border:1px solid var(--border-light);box-shadow:var(--shadow-card);padding:16px 18px}.panel h3[data-v-f7ca977e]{font:500 13px/1 var(--font-serif);color:var(--primary);margin-bottom:10px}.tags[data-v-f7ca977e]{flex-wrap:wrap;gap:6px;display:flex}.tag[data-v-f7ca977e]{border:1px solid var(--border-light);color:var(--text);background:#f5f3ee;border-radius:4px;padding:3px 10px;font-size:11px}.tag small[data-v-f7ca977e]{color:var(--text-muted)}.table-wrap[data-v-f7ca977e]{background:var(--card);border-radius:var(--radius);border:1px solid var(--border-light);box-shadow:var(--shadow-card);max-height:55vh;overflow:auto}table[data-v-f7ca977e]{border-collapse:collapse;width:100%;font-size:13px}th[data-v-f7ca977e],td[data-v-f7ca977e]{border:1px solid var(--border-light);text-align:center;white-space:nowrap;padding:9px 12px}th[data-v-f7ca977e]{color:var(--text-muted);z-index:1;background:#f8f7f4;font-size:12px;font-weight:600;position:sticky;top:0}tr[data-v-f7ca977e]:nth-child(2n){background:#fcfbf9}tr[data-v-f7ca977e]:hover{background:#f7f6f2}.cell-name[data-v-f7ca977e]{text-align:left;color:var(--text);font-weight:500}.cell-gpa[data-v-f7ca977e]{color:var(--primary);font-weight:700}.cell-score[data-v-f7ca977e]{color:var(--text-muted)}.cell-sub[data-v-f7ca977e]{color:var(--text-subtle);font-size:12px}.empty[data-v-f7ca977e]{text-align:center;color:var(--text-muted);padding:80px 20px}.empty p[data-v-f7ca977e]{margin-bottom:8px;font-size:15px}.hint[data-v-f7ca977e]{color:var(--text-subtle);font-size:13px}.modal-overlay[data-v-f7ca977e]{z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0125256b;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal[data-v-f7ca977e]{border-radius:var(--radius);max-width:90vw;max-height:85vh;box-shadow:var(--shadow-modal);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#faf8f2fa;border:1px solid #ffffffa3;flex-direction:column;min-width:360px;padding:28px 30px;display:flex;overflow:hidden}.modal-sm[data-v-f7ca977e]{width:480px}.modal-lg[data-v-f7ca977e]{width:800px}.modal h2[data-v-f7ca977e]{font:500 22px/1.25 var(--font-serif);color:var(--text);margin-bottom:18px}.modal h3[data-v-f7ca977e]{font:500 14px/1 var(--font-serif);color:var(--primary);margin-bottom:10px}.modal-scroll[data-v-f7ca977e]{max-height:400px;margin-bottom:16px;overflow-y:auto}.modal-actions[data-v-f7ca977e]{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.btn-primary[data-v-f7ca977e]{border-radius:var(--radius-sm);cursor:pointer;font-size:14px;font-weight:600;font-family:var(--font-sans);background:var(--primary);color:#fff;border:none;padding:9px 20px;transition:background .15s}.btn-primary[data-v-f7ca977e]:hover{background:var(--primary-hover)}.btn-cancel[data-v-f7ca977e]{border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;font-size:14px;font-family:var(--font-sans);color:var(--text);background:#fff;padding:9px 20px;transition:background .15s}.btn-cancel[data-v-f7ca977e]:hover{background:#f5f3ee}.btn-sm[data-v-f7ca977e]{border:1px solid var(--primary);cursor:pointer;font-size:12px;font-family:var(--font-sans);background:var(--primary);color:#fff;border-radius:4px;padding:4px 12px;transition:background .15s}.btn-sm[data-v-f7ca977e]:hover{background:var(--primary-hover)}.btn-danger[data-v-f7ca977e]{color:var(--danger);background:#fff;border-color:#d9b2b3}.btn-danger[data-v-f7ca977e]:hover{background:var(--danger-bg)}.ellipsis[data-v-f7ca977e]{text-overflow:ellipsis;white-space:nowrap;max-width:200px;overflow:hidden}.form-row[data-v-f7ca977e]{align-items:center;gap:12px;margin-bottom:12px;display:flex}.form-row label[data-v-f7ca977e]{min-width:140px;color:var(--text);font-size:13px;font-weight:500}.form-row input[data-v-f7ca977e],.form-row select[data-v-f7ca977e]{border:1px solid var(--border);border-radius:var(--radius-sm);font-size:14px;font-family:var(--font-sans);color:var(--text);background:#fff;outline:none;padding:7px 12px;transition:border-color .15s,box-shadow .15s}.form-row input[data-v-f7ca977e]:focus,.form-row select[data-v-f7ca977e]:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-ring)}.radio-group label[data-v-f7ca977e]{cursor:pointer;color:var(--text);margin-bottom:12px;font-size:14px;display:block}.radio-group input[data-v-f7ca977e]{accent-color:var(--primary);margin-right:8px}.history-table[data-v-f7ca977e]{border-collapse:collapse;width:100%;font-size:13px}.history-table th[data-v-f7ca977e],.history-table td[data-v-f7ca977e]{text-align:left;border-bottom:1px solid var(--border-light);padding:9px 12px}.history-table th[data-v-f7ca977e]{color:var(--text-muted);background:0 0;font-size:11px;font-weight:600}.history-table tr[data-v-f7ca977e]:hover{background:#faf9f6}.actions[data-v-f7ca977e]{gap:6px;display:flex}.toast[data-v-f7ca977e]{border-radius:var(--radius);color:#fff;font-size:14px;font-family:var(--font-sans);box-shadow:var(--shadow-modal);z-index:2000;opacity:0;background:#1e4a4a;padding:12px 22px;transition:opacity .25s,transform .25s;position:fixed;bottom:28px;right:28px;transform:translateY(10px)}.toast.show[data-v-f7ca977e]{opacity:1;transform:translateY(0)}.toast.success[data-v-f7ca977e]{background:#1e4a4a}.toast.error[data-v-f7ca977e]{background:var(--danger)}.app-footer[data-v-f7ca977e]{text-align:center;color:var(--text-subtle);letter-spacing:.04em;margin-top:36px;font-size:10px}.modal-desc[data-v-f7ca977e]{color:var(--text-muted);margin-bottom:16px;font-size:13px;line-height:1.5}.course-form[data-v-f7ca977e]{border:1px solid var(--border-light);border-radius:var(--radius-sm);background:#faf9f6;margin-bottom:16px;padding:16px 18px}.course-form .form-row[data-v-f7ca977e]{margin-bottom:10px}.course-form .form-row label[data-v-f7ca977e]{min-width:80px}.course-form input.readonly[data-v-f7ca977e]{color:var(--text-muted);background:#f0ede8}.form-error[data-v-f7ca977e]{color:var(--danger);margin:4px 0 0;font-size:12px}.form-actions[data-v-f7ca977e]{gap:8px;margin-top:8px;display:flex}.course-table-wrap[data-v-f7ca977e]{border:1px solid var(--border-light);border-radius:var(--radius-sm);max-height:320px;margin-bottom:8px;overflow-y:auto}.course-table[data-v-f7ca977e]{border-collapse:collapse;width:100%;font-size:13px}.course-table th[data-v-f7ca977e],.course-table td[data-v-f7ca977e]{text-align:left;border-bottom:1px solid var(--border-light);padding:9px 12px}.course-table th[data-v-f7ca977e]{color:var(--text-muted);z-index:1;background:#f8f7f4;font-size:11px;font-weight:600;position:sticky;top:0}.course-table tbody tr[data-v-f7ca977e]:hover{background:#faf9f6}.course-table .row-editing[data-v-f7ca977e]{background:#f0f7f7}.course-table .td-name[data-v-f7ca977e]{font-weight:500}.course-table .td-actions[data-v-f7ca977e]{gap:6px;display:flex}.cat-badge[data-v-f7ca977e]{border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600}.cat-badge.cat-1[data-v-f7ca977e]{color:#0a7274;background:#dceceb}.cat-badge.cat-2[data-v-f7ca977e]{color:#8b6914;background:#fdf0d5}.cat-badge.cat-3[data-v-f7ca977e]{color:#6b2d8b;background:#f0dff5}.src-badge[data-v-f7ca977e]{border-radius:10px;padding:1px 8px;font-size:11px}.src-badge.builtin[data-v-f7ca977e]{color:var(--text-muted);background:#e8e5df}.src-badge.custom[data-v-f7ca977e]{background:var(--primary-light);color:var(--primary)}@media (width<=768px){.course-form .form-row[data-v-f7ca977e]{flex-direction:column;align-items:flex-start;gap:4px}.course-form .form-row label[data-v-f7ca977e]{min-width:auto}.app[data-v-f7ca977e]{padding:16px 12px 36px}.header[data-v-f7ca977e]{flex-wrap:wrap;gap:10px;margin-bottom:14px;padding-bottom:14px}.header-titles h1[data-v-f7ca977e]{font-size:17px}.course-panels[data-v-f7ca977e]{grid-template-columns:1fr}.toolbar button[data-v-f7ca977e],.btn-file[data-v-f7ca977e]{padding:7px 12px;font-size:12px}.modal[data-v-f7ca977e]{width:calc(100vw - 32px);min-width:auto;padding:22px 18px}.modal-sm[data-v-f7ca977e],.modal-lg[data-v-f7ca977e]{width:calc(100vw - 32px)}}
