*{box-sizing:border-box}
:root{font-family:Arial,"Microsoft YaHei","Noto Sans CJK SC",sans-serif;color:#080808;font-size:12px;font-synthesis:none;background:#f8f8fb}
body{margin:0;min-height:100vh;background:#f8f8fb}
button,input{font:inherit}
button,a,input{touch-action:manipulation}
button{cursor:pointer}
[hidden]{display:none!important}
.site-header{height:34px;background:#fff;border-bottom:1px solid #ebebee;box-shadow:0 1px 3px #00000003}
.header-inner{max-width:1000px;margin:0 auto;height:100%;display:flex;align-items:center;justify-content:space-between}
.brand{font-size:14px;font-weight:700;color:#00284f;text-decoration:none;line-height:1.3}
.account{position:relative}
.account-button{display:flex;align-items:center;gap:5px;border:0;background:none;padding:5px 0;font-size:11px;color:#080808}
.account-button svg{height:11px;width:11px;fill:currentColor}
.account-menu{position:absolute;z-index:5;top:28px;right:0;min-width:120px;background:white;border:1px solid #ddd;border-radius:3px;box-shadow:0 3px 8px #0002;padding:4px 0}
.account-menu button{display:block;border:0;background:white;text-align:left;width:100%;padding:8px 14px}
.account-menu button:hover,.account-menu button:focus-visible{background:#eef4ff}
.panel{background:#fff;border:1px solid #dedee2;border-radius:5px;box-shadow:0 2px 3px #00000020}
.login-page{padding:43px 16px 64px}
.login-card{width:300px;margin:0 auto;padding:16px}
.login-card h1{font-size:18px;line-height:25px;text-align:center;margin:0 0 16px;font-weight:700}
.form-field label{display:block;font-size:12px;line-height:17px;margin-bottom:4px}
.form-field input{display:block;width:100%;height:29px;border:1px solid #ccc;border-radius:4px;background:#fff;padding:4px 9px;color:#111;box-shadow:inset 0 1px 2px #00000006;outline:0}
.form-field input:focus{border-color:#244d7a;box-shadow:0 0 0 1px #244d7a55}
.field-hint{font-size:10px;line-height:15px;color:#333;margin-top:2px}
.password-field{margin-top:9px}
.primary{border:1px solid #0033a7;border-radius:3px;background:#1a57f7;color:#fff;height:27px;padding:4px 12px;box-shadow:inset 0 1px 1px #ffffff25;text-shadow:0 1px 1px #0003}
.primary:hover{background:#104ce5}
.primary:active{background:#0d3fcb}
.primary:disabled{cursor:wait;opacity:.7}
.login-button{display:block;width:100%;margin-top:14px}
.form-error{font-size:11px;line-height:1.5;color:#b3261e;margin:7px 0 0}
.exam-page{max-width:768px;margin:16px auto 70px}
.exam-info{position:relative;padding:12px 13px 8px;min-height:162px}
.exam-info>h1{font-size:14px;color:#001529;font-weight:700;line-height:20px;margin:0 0 10px}
.exam-badge{position:absolute;right:13px;top:14px;font-size:10px;line-height:19px;padding:0 8px;background:#e5f8ed;color:#003d23;border-radius:12px}
.info-columns{display:grid;grid-template-columns:252px 1fr}
.student-info h2{font-size:12px;line-height:18px;font-weight:700;margin:0 0 4px}
.instructions h2{font-size:11px;font-weight:700;line-height:18px;margin:0 0 6px}
.info-columns ul{list-style:none;margin:0;padding:0}
.info-columns li{font-size:10px;line-height:19px}
.info-columns li::before{content:"·";font-weight:700;margin-right:5px}
.instructions li{line-height:20px}
.instructions li:first-child{margin-bottom:3px}
.instructions a{font-size:12px;line-height:15px;color:#002954;font-weight:700;text-decoration:none;margin-left:7px}
.instructions a:hover{text-decoration:underline}
.paper-password{font-size:12px;color:#6c0808}
.problem-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-top:16px}
.problem-card{border-radius:5px;overflow:hidden;background:#fff;border:1px solid #e0e1e6;box-shadow:0 2px 3px #0000001f;align-self:stretch}
.problem-title{font-size:12px;line-height:17px;font-weight:400;margin:0;padding:6px 8px;background:#eef3fe;border-bottom:1px solid #e5e9f0;height:30px}
.problem-body{padding:7px 8px 8px}
.submission-state{display:flex;align-items:center;gap:5px;font-size:10px;line-height:15px;color:#444;margin:0 0 6px;min-height:15px}
.status-dot{width:5px;height:5px;background:#c5c6cb;border-radius:50%;flex:none}
.submission-state.submitted{color:#182c24;gap:5px}
.submitted .status-dot{background:#29945b}
.file-details{font-size:9px;line-height:13px;margin:0 0 5px}
.file-details>div{display:flex;align-items:center;gap:3px}
.file-details span,.file-details svg{width:9px;height:10px;flex:none;font-size:10px;color:#777}
.file-details svg{fill:none;stroke:#777;stroke-width:1}
.file-details .submission-filename{display:block;min-width:0;width:auto;height:auto;flex:1;font-size:9px;color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-picker{display:flex;align-items:center;position:relative;height:29px;width:100%;border:1px solid #aeb8c5;border-radius:2px;background:linear-gradient(#fff,#f7faff);box-shadow:inset 0 0 0 2px #fff;color:#050505;padding:0 8px;gap:4px;font-size:10px;cursor:pointer;overflow:hidden}
.file-picker:hover{background:#edf4ff;border-color:#6a89ba}
.file-picker svg{width:11px;height:12px;flex:none;stroke:#24374c;fill:none;stroke-width:1.3}
.file-picker .picker-title{white-space:nowrap;flex:none;font-weight:500}
.file-name{font-size:9px;margin-left:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46px}
.file-picker .chevron{font-size:20px;font-family:Arial;font-weight:400;line-height:15px;margin-left:1px}
.file-input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
.file-picker:focus-within{outline:2px solid #315a92;outline-offset:2px}
.submission-actions{display:flex;gap:5px;align-items:center;margin-top:5px;flex-wrap:wrap}
.submit-button{display:flex;align-items:center;justify-content:center;gap:4px;width:94px;height:27px;font-size:11px;padding:4px 8px}
.submit-button svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.has-submission .submit-button{width:auto;flex:1;min-width:0}
.view-code{display:flex;align-items:center;justify-content:center;gap:4px;flex:1;min-width:0;height:27px;font-size:10px;border:1px solid #087332;border-radius:3px;background:#13a14d;color:white;padding:4px 6px;white-space:nowrap;box-shadow:inset 0 1px 1px #ffffff25;text-shadow:0 1px 1px #0003}
.view-code svg{width:11px;height:11px;fill:none;stroke:currentColor;stroke-width:1.1}
.view-code:hover{background:#0e8b42}
.site-footer{position:fixed;bottom:0;width:100%;height:36px;border-top:1px solid #e5e5e9;background:#fff;display:flex;align-items:center;justify-content:center;color:#555;font-size:10px;z-index:1}
dialog{padding:0;border:1px solid #999;border-radius:1px;color:#080808;background:#fff;box-shadow:0 4px 15px #0003;max-width:calc(100vw - 32px)}
dialog::backdrop{background:#0007}
.message-dialog{width:216px}
.message-body{font-size:11px;line-height:19px;padding:29px 14px 27px;min-height:76px;overflow-wrap:anywhere}
.dialog-actions{display:flex;justify-content:flex-end;border-top:1px solid #ddd;background:#f2f2f2;padding:8px 17px 10px}
.plain-button{min-width:60px;height:23px;border:1px solid #bbb;box-shadow:inset 0 0 0 2px #fff;background:#fafafa;border-radius:3px;padding:2px 10px;font-size:11px;color:#111}
.plain-button:hover{background:#e9eef7}
button:focus-visible,a:focus-visible{outline:2px solid #27599c;outline-offset:2px}
.code-dialog{width:468px;height:302px;margin:46px auto 0;border:1px solid #aaa;border-radius:5px;max-height:calc(100vh - 80px)}
.code-dialog[open]{display:flex;flex-direction:column}
.modal-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #e3e3e8}
.modal-header h2{font-size:14px;line-height:20px;margin:0;font-weight:600}
.close-button{background:none;border:0;font-size:24px;line-height:20px;color:#555;padding:0 2px}
.code-dialog .modal-header{padding:3px 7px;min-height:24px;border-bottom:1px solid #eee}
.code-dialog .modal-header h2{font-size:10px;line-height:17px;font-weight:400}
.code-dialog .close-button{font-size:17px;line-height:17px}
.code-meta{display:flex;flex-wrap:wrap;gap:2px 10px;margin:6px 8px 0;font-size:10px;line-height:15px;color:#555;overflow-wrap:anywhere}
.code-dialog pre{margin:7px;padding:8px;background:#292928;color:white;border:1px solid #050505;border-radius:0;font-family:Consolas,"Courier New",monospace;font-size:11px;line-height:18px;flex:1;min-width:0;min-height:0;overflow:auto;tab-size:4;text-align:left;white-space:pre}
.code-dialog pre.loading{color:#c8c8c2;font-style:italic}
.code-dialog .modal-footer{margin-top:auto;padding:5px 8px;min-height:31px;gap:6px}
.code-dialog .modal-footer button,.code-dialog .modal-footer .code-download{display:inline-flex;align-items:center;background:#1a57f7;color:white;min-width:28px;height:17px;font-size:10px;line-height:13px;padding:0 4px;border:1px solid #0033a7;border-radius:2px;box-shadow:none;text-decoration:none}
.code-dialog .modal-footer .code-download:hover{background:#104ce5}
.code-dialog .modal-footer button:hover{background:#104ce5}
.modal-footer{padding:10px 16px;border-top:1px solid #e3e3e8;display:flex;justify-content:flex-end}
.password-dialog{width:340px;border:1px solid #d4d4d8;border-radius:5px}
.password-form{padding:16px}
.password-form .form-field+.form-field{margin-top:10px}
.password-actions{display:flex;justify-content:flex-end;align-items:center;gap:7px;margin-top:16px}
.exam-notice{padding:8px 10px;margin-top:12px;border:1px solid #dfe7f3;border-radius:3px;background:#f1f5fc;color:#42536d;font-size:11px;line-height:1.6;overflow-wrap:anywhere}
.exam-notice.failed{background:#fff3f2;border-color:#f0d1ce;color:#a52b25}
.empty-problems{grid-column:1/-1;padding:20px;text-align:center;color:#555;font-size:12px}
.empty-problems button{margin-left:8px}
.password-change-hint{padding:8px 10px;margin:0 0 12px;background:#edf4ff;border:1px solid #d7e4fb;border-radius:3px;color:#355078;font-size:11px;line-height:1.6}
.instructions a[aria-disabled="true"]{color:#888;cursor:default;font-size:10px;font-weight:400}
.exam-badge[data-status="upcoming"]{color:#70520d;background:#fff4d6}
.exam-badge[data-status="ended"]{color:#626674;background:#eef0f4}
.file-picker.disabled{opacity:.6;cursor:default;background:#f6f7f9}
.file-picker.disabled .file-input{cursor:default}
.submit-button:disabled,.view-code:disabled{opacity:.55;cursor:default}
.problem-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.account-menu button:disabled{opacity:.6;cursor:wait}
.instructions li{overflow-wrap:anywhere}
@media(min-width:1280px){.header-inner{max-width:1000px}}
@media(max-width:1050px){.header-inner{margin-left:24px;margin-right:24px}}
@media(max-width:820px){.exam-page{margin-left:20px;margin-right:20px}.info-columns{grid-template-columns:34% 1fr}.problem-grid{gap:12px}.file-picker{padding:0 5px}.file-name{max-width:35px}}
@media(max-width:600px){.site-header{height:42px}.header-inner{margin-left:16px;margin-right:16px}.brand{font-size:13px}.login-page{padding-top:43px}.exam-page{margin:16px 16px 64px}.exam-info{padding:14px}.info-columns{grid-template-columns:1fr;gap:14px}.exam-info>h1{margin-bottom:10px}.info-columns li{font-size:11px;line-height:21px}.problem-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.file-name{max-width:50px}.instructions li{line-height:22px}.exam-badge{right:10px}.site-footer{height:34px}}
@media(max-width:340px){.login-card{width:100%}.problem-grid{grid-template-columns:1fr}.file-name{max-width:110px}}
